Commit 8fcf167e257f3f858ece91523697ee609600b31e

Authored by David RENÉ
1 parent 8dc27220

[*] BIG CHANGE. Maybe that xlib will become 2.0

Removed all HTML_In_Form, HTML_Off_Form, HTML_Partial_Content  type and replaced it by the new type HTML.

Update all library according to that change.

[-] removed the generic_form.anubis and generic_table.anubis which was obsolete.
generic/types/stepper.anubis
@@ -27,7 +27,7 @@ public type Step: @@ -27,7 +27,7 @@ public type Step:
27 String name, //step name 27 String name, //step name
28 Int index, //step number 28 Int index, //step number
29 (Step_Session stp_session) -> Step_Session process, 29 (Step_Session stp_session) -> Step_Session process,
30 - (Step_Session stp_session) -> HTML_Partial_Content view 30 + (Step_Session stp_session) -> HTML view
31 ) 31 )
32 . 32 .
33 33
minimal_web_site.ide 0 → 100644
  1 +
  2 +Microsoft Visual Studio Solution File, Format Version 9.00
  3 +# Visual Studio 2005
  4 +# SharpDevelop 1.0.12.108
  5 +Project("{B6712916-30DE-4a3e-A54C-2A79AC984AEE}") = "minimal_web_site", "minimal_web_site.aproj", "{F2C65267-0D20-4964-A5D8-602BD42C01A4}"
  6 +EndProject
  7 +Global
  8 + GlobalSection(SolutionConfigurationPlatforms) = preSolution
  9 + Debug|Any CPU = Debug|Any CPU
  10 + Release|Any CPU = Release|Any CPU
  11 + EndGlobalSection
  12 + GlobalSection(ProjectConfigurationPlatforms) = postSolution
  13 + {F2C65267-0D20-4964-A5D8-602BD42C01A4}.Debug|Any CPU.Build.0 = Debug|Any CPU
  14 + {F2C65267-0D20-4964-A5D8-602BD42C01A4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
  15 + {F2C65267-0D20-4964-A5D8-602BD42C01A4}.Release|Any CPU.Build.0 = Release|Any CPU
  16 + {F2C65267-0D20-4964-A5D8-602BD42C01A4}.Release|Any CPU.ActiveCfg = Release|Any CPU
  17 + EndGlobalSection
  18 +EndGlobal
web/controllers_web_site.anubis
@@ -127,7 +127,7 @@ public type WEB_Page_Renderer: @@ -127,7 +127,7 @@ public type WEB_Page_Renderer:
127 web_page_renderer( 127 web_page_renderer(
128 String app, //application 128 String app, //application
129 String name, //renderer name 129 String name, //renderer name
130 - (WEB_Session _session, List(WEB_Plugin), HTML_Partial_Content _content) -> HTTP_Answer page_layout //call back for rendering page 130 + (WEB_Session _session, List(WEB_Plugin), HTML _content) -> HTTP_Answer page_layout //call back for rendering page
131 ) 131 )
132 . 132 .
133 133
@@ -156,7 +156,7 @@ define HTTP_Answer @@ -156,7 +156,7 @@ define HTTP_Answer
156 pre("Error "+to_String(http_status)), 156 pre("Error "+to_String(http_status)),
157 pre("Internal message :"+message), 157 pre("Internal message :"+message),
158 br, 158 br,
159 - in_form(html_Id(""),text_area(wan(""), init(dump(_session)), 120, 60)) 159 + textarea(120, 60, text(dump(_session)))
160 ]) 160 ])
161 ) 161 )
162 ) 162 )
@@ -183,14 +183,14 @@ public define WEB_Controller_Result @@ -183,14 +183,14 @@ public define WEB_Controller_Result
183 public define WEB_Controller_Result 183 public define WEB_Controller_Result
184 ajax 184 ajax
185 ( 185 (
186 - HTML_Partial_Content content 186 + HTML content
187 )= 187 )=
188 ajax(failure, content, ""). 188 ajax(failure, content, "").
189 189
190 public define WEB_Controller_Result 190 public define WEB_Controller_Result
191 ajax 191 ajax
192 ( 192 (
193 - HTML_Partial_Content content, 193 + HTML content,
194 String additional_script 194 String additional_script
195 )= 195 )=
196 ajax(failure, content, additional_script). 196 ajax(failure, content, additional_script).
@@ -199,7 +199,7 @@ public define WEB_Controller_Result @@ -199,7 +199,7 @@ public define WEB_Controller_Result
199 ajax 199 ajax
200 ( 200 (
201 WEB_Session session, //modified session 201 WEB_Session session, //modified session
202 - HTML_Partial_Content content 202 + HTML content
203 )= 203 )=
204 ajax(success(session), content, ""). 204 ajax(success(session), content, "").
205 205
@@ -207,7 +207,7 @@ public define WEB_Controller_Result @@ -207,7 +207,7 @@ public define WEB_Controller_Result
207 ajax 207 ajax
208 ( 208 (
209 WEB_Session session, //modified session 209 WEB_Session session, //modified session
210 - HTML_Partial_Content content, 210 + HTML content,
211 String additional_script 211 String additional_script
212 )= 212 )=
213 ajax(success(session), content, additional_script). 213 ajax(success(session), content, additional_script).
@@ -246,7 +246,7 @@ public define WEB_Controller_Result @@ -246,7 +246,7 @@ public define WEB_Controller_Result
246 246
247 public define WEB_Controller_Result 247 public define WEB_Controller_Result
248 renderer_content( 248 renderer_content(
249 - HTML_Partial_Content content, 249 + HTML content,
250 )= 250 )=
251 renderer_content(failure, content) 251 renderer_content(failure, content)
252 . 252 .
@@ -254,7 +254,7 @@ public define WEB_Controller_Result @@ -254,7 +254,7 @@ public define WEB_Controller_Result
254 public define WEB_Controller_Result 254 public define WEB_Controller_Result
255 renderer_content( 255 renderer_content(
256 WEB_Session session, //modified session if success else failure 256 WEB_Session session, //modified session if success else failure
257 - HTML_Partial_Content content, 257 + HTML content,
258 )= 258 )=
259 renderer_content(success(session), content) 259 renderer_content(success(session), content)
260 . 260 .
@@ -262,7 +262,7 @@ public define WEB_Controller_Result @@ -262,7 +262,7 @@ public define WEB_Controller_Result
262 public define WEB_Controller_Result 262 public define WEB_Controller_Result
263 partial_content 263 partial_content
264 ( 264 (
265 - HTML_Partial_Content content, 265 + HTML content,
266 )= 266 )=
267 http_answer(html_page( 267 http_answer(html_page(
268 "", // title of web site 268 "", // title of web site
@@ -273,7 +273,7 @@ public define WEB_Controller_Result @@ -273,7 +273,7 @@ public define WEB_Controller_Result
273 [], 273 [],
274 274
275 // content of page 275 // content of page
276 - partial(content) 276 + content
277 )) 277 ))
278 ) 278 )
279 . 279 .
@@ -285,7 +285,7 @@ define WEB_Page_Renderer @@ -285,7 +285,7 @@ define WEB_Page_Renderer
285 web_page_renderer("AWS", "AWS_DEFAULT_PAGE", 285 web_page_renderer("AWS", "AWS_DEFAULT_PAGE",
286 ( WEB_Session _session, 286 ( WEB_Session _session,
287 List(WEB_Plugin) _plugins, 287 List(WEB_Plugin) _plugins,
288 - HTML_Partial_Content _content 288 + HTML _content
289 ) |-> 289 ) |->
290 with _title = get_page_title(_session), 290 with _title = get_page_title(_session),
291 html_page 291 html_page
@@ -296,7 +296,7 @@ define WEB_Page_Renderer @@ -296,7 +296,7 @@ define WEB_Page_Renderer
296 body // body of page 296 body // body of page
297 ( 297 (
298 [], //body options empty 298 [], //body options empty
299 - (HTML_Off_Form)partial(_content) 299 + _content
300 ) 300 )
301 ) 301 )
302 ) 302 )
@@ -430,8 +430,8 @@ define WEB_Page_Renderer @@ -430,8 +430,8 @@ define WEB_Page_Renderer
430 } 430 }
431 . 431 .
432 432
433 -public define JsonValue to_html_ajax_content(Printable_tree content_HTML, String additional_script).  
434 -public define JsonValue to_html_ajax_content(HTML_Partial_Content content_HTML, CommonInfo cinfo, String additional_script). 433 +public define JsonValue to_html_ajax_content(Printable_tree content_HTML, String additional_script).
  434 +public define JsonValue to_html_ajax_content(HTML content_HTML, CommonInfo cinfo, String additional_script).
435 435
436 define String 436 define String
437 get_controller_from_web_arg 437 get_controller_from_web_arg
web/counter.anubis
@@ -17,7 +17,7 @@ read web/making_a_web_site.anubis @@ -17,7 +17,7 @@ read web/making_a_web_site.anubis
17 17
18 This is the counter to be inserted into a web page: 18 This is the counter to be inserted into a web page:
19 19
20 -public define HTML_Off_Form 20 +public define HTML
21 web_counter 21 web_counter
22 ( 22 (
23 String directory, // where the counter file will be located 23 String directory, // where the counter file will be located
@@ -57,7 +57,7 @@ define List(Word8) @@ -57,7 +57,7 @@ define List(Word8)
57 else l. 57 else l.
58 58
59 59
60 -define HTML_Off_Form 60 +define HTML
61 web_counter 61 web_counter
62 ( 62 (
63 Int n, // value of counter 63 Int n, // value of counter
@@ -76,7 +76,7 @@ define HTML_Off_Form @@ -76,7 +76,7 @@ define HTML_Off_Form
76 76
77 77
78 78
79 -public define HTML_Off_Form 79 +public define HTML
80 web_counter 80 web_counter
81 ( 81 (
82 String directory, // where the counter file will be located 82 String directory, // where the counter file will be located
@@ -110,4 +110,4 @@ public define One @@ -110,4 +110,4 @@ public define One
110 }. 110 }.
111 111
112 112
113 -  
114 \ No newline at end of file 113 \ No newline at end of file
  114 +
@@ -49,7 +49,7 @@ define String @@ -49,7 +49,7 @@ define String
49 49
50 50
51 51
52 -public define HTML_Off_Form 52 +public define HTML
53 dojo_button 53 dojo_button
54 ( 54 (
55 String name, 55 String name,
@@ -74,11 +74,11 @@ public type InputDial: @@ -74,11 +74,11 @@ public type InputDial:
74 input_hidden(HTML_Id id, WebArgValue value). 74 input_hidden(HTML_Id id, WebArgValue value).
75 75
76 76
77 -define List(HTML_Off_Form) 77 +define List(HTML)
78 format_list_data 78 format_list_data
79 ( 79 (
80 List((List(CoreAttrs), WebArgValue, String)) list_data, 80 List((List(CoreAttrs), WebArgValue, String)) list_data,
81 - List(HTML_Off_Form) result_list 81 + List(HTML) result_list
82 )= 82 )=
83 if list_data is 83 if list_data is
84 { 84 {
@@ -88,7 +88,7 @@ define List(HTML_Off_Form) @@ -88,7 +88,7 @@ define List(HTML_Off_Form)
88 format_list_data(t, [literal("<option value=\"" + wa.value + "\">" + label + "</option>") . result_list]) 88 format_list_data(t, [literal("<option value=\"" + wa.value + "\">" + label + "</option>") . result_list])
89 }. 89 }.
90 90
91 -public define HTML_Off_Form 91 +public define HTML
92 dojo_combobox 92 dojo_combobox
93 ( 93 (
94 WebArgName the_name, 94 WebArgName the_name,
@@ -106,7 +106,7 @@ public define HTML_Off_Form @@ -106,7 +106,7 @@ public define HTML_Off_Form
106 literal("</select>") 106 literal("</select>")
107 ]). 107 ]).
108 108
109 -define HTML_Off_Form 109 +define HTML
110 _maybe_label 110 _maybe_label
111 ( 111 (
112 String label_text, 112 String label_text,
@@ -115,7 +115,7 @@ define HTML_Off_Form @@ -115,7 +115,7 @@ define HTML_Off_Form
115 if length(label_text) > 0 then literal("<label for=\"" + html_id.id + "\">" + label_text + "</label>") 115 if length(label_text) > 0 then literal("<label for=\"" + html_id.id + "\">" + label_text + "</label>")
116 else literal(""). 116 else literal("").
117 117
118 -public define HTML_Off_Form 118 +public define HTML
119 dojo_checkbox 119 dojo_checkbox
120 ( 120 (
121 WebArgName the_name, 121 WebArgName the_name,
@@ -131,7 +131,7 @@ public define HTML_Off_Form @@ -131,7 +131,7 @@ public define HTML_Off_Form
131 ]). 131 ]).
132 132
133 133
134 -define HTML_Off_Form 134 +define HTML
135 input_in_dialog 135 input_in_dialog
136 ( 136 (
137 InputDial input_data 137 InputDial input_data
@@ -189,7 +189,7 @@ define HTML_Off_Form @@ -189,7 +189,7 @@ define HTML_Off_Form
189 } 189 }
190 . 190 .
191 191
192 -define List(HTML_Off_Form) 192 +define List(HTML)
193 inputs_in_dialog 193 inputs_in_dialog
194 ( 194 (
195 List(InputDial) inputs_data 195 List(InputDial) inputs_data
@@ -200,7 +200,7 @@ define List(HTML_Off_Form) @@ -200,7 +200,7 @@ define List(HTML_Off_Form)
200 [h . t] then [input_in_dialog(h) . inputs_in_dialog(t)] 200 [h . t] then [input_in_dialog(h) . inputs_in_dialog(t)]
201 }. 201 }.
202 202
203 -public define HTML_Off_Form 203 +public define HTML
204 dijit_dialog 204 dijit_dialog
205 ( 205 (
206 String name, 206 String name,
@@ -233,7 +233,7 @@ public define HTML_Off_Form @@ -233,7 +233,7 @@ public define HTML_Off_Form
233 ]) 233 ])
234 . 234 .
235 235
236 -public define HTML_Off_Form 236 +public define HTML
237 dojo_dialog 237 dojo_dialog
238 ( 238 (
239 String name, 239 String name,
@@ -330,7 +330,7 @@ public define String @@ -330,7 +330,7 @@ public define String
330 + "]; 330 + "];
331 </script>". 331 </script>".
332 332
333 -public define HTML_Off_Form 333 +public define HTML
334 dojo_make_grid_script 334 dojo_make_grid_script
335 ( 335 (
336 HTML_Id html_id, 336 HTML_Id html_id,
@@ -346,7 +346,7 @@ public define HTML_Off_Form @@ -346,7 +346,7 @@ public define HTML_Off_Form
346 }); 346 });
347 </script>"). 347 </script>").
348 348
349 -public define HTML_Off_Form 349 +public define HTML
350 dojo_grid 350 dojo_grid
351 ( 351 (
352 HTML_Id html_id, 352 HTML_Id html_id,
@@ -358,7 +358,7 @@ public define HTML_Off_Form @@ -358,7 +358,7 @@ public define HTML_Off_Form
358 empty, [], empty). 358 empty, [], empty).
359 359
360 360
361 -public define HTML_Off_Form 361 +public define HTML
362 dojo_grid 362 dojo_grid
363 ( 363 (
364 HTML_Id html_id, 364 HTML_Id html_id,
@@ -384,11 +384,11 @@ public define HTML_Off_Form @@ -384,11 +384,11 @@ public define HTML_Off_Form
384 //<div id=\"gridContainer\"></div>"). 384 //<div id=\"gridContainer\"></div>").
385 385
386 386
387 -public define HTML_Off_Form 387 +public define HTML
388 dojo_message_box 388 dojo_message_box
389 ( 389 (
390 - HTML_Off_Form name1,  
391 - HTML_Off_Form name2, 390 + HTML name1,
  391 + HTML name2,
392 )= 392 )=
393 sequence([ 393 sequence([
394 br, 394 br,
@@ -401,7 +401,7 @@ public define HTML_Off_Form @@ -401,7 +401,7 @@ public define HTML_Off_Form
401 401
402 402
403 403
404 -public define HTML_Off_Form 404 +public define HTML
405 dojo_tooltip 405 dojo_tooltip
406 ( 406 (
407 String title, 407 String title,
@@ -452,13 +452,13 @@ define String @@ -452,13 +452,13 @@ define String
452 }. 452 }.
453 453
454 454
455 -public define HTML_Off_Form 455 +public define HTML
456 dojo_ContentPane 456 dojo_ContentPane
457 ( 457 (
458 List(CoreAttrs) attributes, 458 List(CoreAttrs) attributes,
459 BorderContainerRegion region, 459 BorderContainerRegion region,
460 Bool splitter, 460 Bool splitter,
461 - HTML_Off_Form content 461 + HTML content
462 ) = 462 ) =
463 div([ attr("dojoType", "dijit.layout.ContentPane"), 463 div([ attr("dojoType", "dijit.layout.ContentPane"),
464 attr("region", to_String(region)), 464 attr("region", to_String(region)),
@@ -478,17 +478,17 @@ public define HTML_In_Form @@ -478,17 +478,17 @@ public define HTML_In_Form
478 attr("splitter", if splitter then "true" else "false") . attributes ], 478 attr("splitter", if splitter then "true" else "false") . attributes ],
479 content). 479 content).
480 480
481 -public define HTML_Off_Form 481 +public define HTML
482 dojo_TabContainer 482 dojo_TabContainer
483 ( 483 (
484 List(CoreAttrs) attributes, 484 List(CoreAttrs) attributes,
485 - HTML_Off_Form content 485 + HTML content
486 ) = 486 ) =
487 div([attr("dojoType", "dijit.layout.TabContainer") . attributes ], 487 div([attr("dojoType", "dijit.layout.TabContainer") . attributes ],
488 content). 488 content).
489 489
490 490
491 -public define HTML_Off_Form 491 +public define HTML
492 dojo_BorderContainer 492 dojo_BorderContainer
493 ( 493 (
494 List(CoreAttrs) attributes, 494 List(CoreAttrs) attributes,
@@ -498,7 +498,7 @@ public define HTML_Off_Form @@ -498,7 +498,7 @@ public define HTML_Off_Form
498 Bool persist, 498 Bool persist,
499 Bool closable, 499 Bool closable,
500 String container, 500 String container,
501 - HTML_Off_Form content 501 + HTML content
502 ) = 502 ) =
503 with the_attributes = (List(CoreAttrs)) [attr("dojoType", "dijit.layout.BorderContainer"), attr("dojoAttachPoint", container), 503 with the_attributes = (List(CoreAttrs)) [attr("dojoType", "dijit.layout.BorderContainer"), attr("dojoAttachPoint", container),
504 attr("design", to_String(design)), attr("liveSplitters", live_splitter), attr("persist", persist), 504 attr("design", to_String(design)), attr("liveSplitters", live_splitter), attr("persist", persist),
@@ -532,7 +532,7 @@ public define HTML_In_Form @@ -532,7 +532,7 @@ public define HTML_In_Form
532 }, 532 },
533 div(total_attributes, content). 533 div(total_attributes, content).
534 534
535 -public define HTML_Off_Form 535 +public define HTML
536 dojo_tree 536 dojo_tree
537 ( 537 (
538 List(CoreAttrs) attributes, 538 List(CoreAttrs) attributes,
@@ -541,24 +541,24 @@ public define HTML_Off_Form @@ -541,24 +541,24 @@ public define HTML_Off_Form
541 541
542 542
543 543
544 -public define HTML_Off_Form 544 +public define HTML
545 dojo_Toolbar 545 dojo_Toolbar
546 ( 546 (
547 List(CoreAttrs) attributes, 547 List(CoreAttrs) attributes,
548 - HTML_Off_Form content 548 + HTML content
549 )= 549 )=
550 div([attr("dojoType", "dijit.Toolbar") . attributes ], 550 div([attr("dojoType", "dijit.Toolbar") . attributes ],
551 content). 551 content).
552 552
553 553
554 -public define HTML_Off_Form 554 +public define HTML
555 dojo_tooltip 555 dojo_tooltip
556 ( 556 (
557 List(CoreAttrs) attributes, 557 List(CoreAttrs) attributes,
558 // List(Text_Option) txt_attr, 558 // List(Text_Option) txt_attr,
559 HTML_Id html_id, 559 HTML_Id html_id,
560 String label, 560 String label,
561 - HTML_Off_Form tooltip_content, 561 + HTML tooltip_content,
562 )= 562 )=
563 sequence([ 563 sequence([
564 text([id(html_id.id)], label), 564 text([id(html_id.id)], label),
@@ -566,7 +566,7 @@ public define HTML_Off_Form @@ -566,7 +566,7 @@ public define HTML_Off_Form
566 ]). 566 ]).
567 567
568 568
569 -public define HTML_Off_Form 569 +public define HTML
570 dojo_button 570 dojo_button
571 ( 571 (
572 HTML_Id html_id, 572 HTML_Id html_id,
@@ -615,12 +615,12 @@ public define HTML_In_Form @@ -615,12 +615,12 @@ public define HTML_In_Form
615 }). 615 }).
616 616
617 617
618 -public define HTML_Off_Form 618 +public define HTML
619 dojo_declaration 619 dojo_declaration
620 ( 620 (
621 String name, 621 String name,
622 List(CoreAttrs) attributes, 622 List(CoreAttrs) attributes,
623 - HTML_Off_Form content 623 + HTML content
624 )= 624 )=
625 div([attr("dojoType", "dijit.Declaration"), attr("widgetClass", name) . attributes ], 625 div([attr("dojoType", "dijit.Declaration"), attr("widgetClass", name) . attributes ],
626 content). 626 content).
@@ -636,13 +636,13 @@ public define HTML_In_Form @@ -636,13 +636,13 @@ public define HTML_In_Form
636 div([attr("dojoType", "dijit.Declaration"), attr("widgetClass", name) . attributes ], 636 div([attr("dojoType", "dijit.Declaration"), attr("widgetClass", name) . attributes ],
637 content). 637 content).
638 638
639 -public define HTML_Off_Form 639 +public define HTML
640 dojo_editor 640 dojo_editor
641 ( 641 (
642 List(CoreAttrs) attributes, 642 List(CoreAttrs) attributes,
643 HTML_Id html_id, 643 HTML_Id html_id,
644 WebArgName input_name, 644 WebArgName input_name,
645 - HTML_Off_Form text, 645 + HTML text,
646 )= 646 )=
647 div([id(html_id.id), attr("name", input_name.name), attr("dojoType", "dijit.Editor") 647 div([id(html_id.id), attr("name", input_name.name), attr("dojoType", "dijit.Editor")
648 ,attr("extraPlugins", "['|', 'foreColor','hiliteColor',{name:'dojox.editor.plugins.FontChoice', command:'fontName', generic:true},'fontSize','formatBlock','|','createLink','insertImage']") 648 ,attr("extraPlugins", "['|', 'foreColor','hiliteColor',{name:'dojox.editor.plugins.FontChoice', command:'fontName', generic:true},'fontSize','formatBlock','|','createLink','insertImage']")
@@ -690,7 +690,7 @@ public define HTML_In_Form @@ -690,7 +690,7 @@ public define HTML_In_Form
690 // selector_c([attr("dojoType", "dijit.form.ComboBox") . attributes], label, id, name, 1, list_data, selected, non_mandatory). 690 // selector_c([attr("dojoType", "dijit.form.ComboBox") . attributes], label, id, name, 1, list_data, selected, non_mandatory).
691 selector_c([attr("dojoType", "dijit.form.ComboBox") . attributes], label(label_str, no_help), id, name, 1, list_data, selected). 691 selector_c([attr("dojoType", "dijit.form.ComboBox") . attributes], label(label_str, no_help), id, name, 1, list_data, selected).
692 692
693 -public define HTML_Off_Form 693 +public define HTML
694 dojo_toaster 694 dojo_toaster
695 ( 695 (
696 List(CoreAttrs) attributes, 696 List(CoreAttrs) attributes,
@@ -712,7 +712,7 @@ public define HTML_Off_Form @@ -712,7 +712,7 @@ public define HTML_Off_Form
712 . attributes ]), 712 . attributes ]),
713 literal("")). 713 literal("")).
714 714
715 -public define HTML_Off_Form 715 +public define HTML
716 dojo_progressBar 716 dojo_progressBar
717 ( 717 (
718 List(CoreAttrs) attributes, 718 List(CoreAttrs) attributes,
@@ -725,7 +725,7 @@ public define HTML_Off_Form @@ -725,7 +725,7 @@ public define HTML_Off_Form
725 div([id(html_id.id), class("progress_bar"), attr("indeterminate", "true"), attr("dojoType", "dijit.ProgressBar") . attributes], literal("")) 725 div([id(html_id.id), class("progress_bar"), attr("indeterminate", "true"), attr("dojoType", "dijit.ProgressBar") . attributes], literal(""))
726 ]). 726 ]).
727 727
728 -public define HTML_Off_Form 728 +public define HTML
729 dojo_progressBar 729 dojo_progressBar
730 ( 730 (
731 List(CoreAttrs) attributes, 731 List(CoreAttrs) attributes,
web/dropzone.anubis
@@ -11,7 +11,7 @@ read system/string.anubis @@ -11,7 +11,7 @@ read system/string.anubis
11 read xlib/web/making_a_web_site.anubis 11 read xlib/web/making_a_web_site.anubis
12 read xlib/web/jquery.anubis 12 read xlib/web/jquery.anubis
13 13
14 -public define HTML_Partial_Content 14 +public define HTML
15 dropzone 15 dropzone
16 ( 16 (
17 String dropzone_form_name, 17 String dropzone_form_name,
@@ -23,7 +23,7 @@ public define HTML_Partial_Content @@ -23,7 +23,7 @@ public define HTML_Partial_Content
23 List((String,String)) extra_ops, 23 List((String,String)) extra_ops,
24 ) = 24 ) =
25 with dropzone_form_id = to_lower(dropzone_form_name+"_"+generate_random_string(15)), 25 with dropzone_form_id = to_lower(dropzone_form_name+"_"+generate_random_string(15)),
26 - partial_content( 26 + head_tags(
27 [ js(js_file("xlib/js/dropzone.js")), 27 [ js(js_file("xlib/js/dropzone.js")),
28 css(css_file("xlib/css/dropzone.css")), 28 css(css_file("xlib/css/dropzone.css")),
29 js_script(" 29 js_script("
@@ -42,11 +42,11 @@ public define HTML_Partial_Content @@ -42,11 +42,11 @@ public define HTML_Partial_Content
42 $('#"+dropzone_form_id+"').dropzone(); " 42 $('#"+dropzone_form_id+"').dropzone(); "
43 ) 43 )
44 ], 44 ],
45 - form(dropzone_form_id, [class("dropzone")], submit_action, extra_ops, empty) 45 + form([id(dropzone_form_id), class("dropzone"), action(submit_action, extra_ops)])
46 ) 46 )
47 . 47 .
48 48
49 -public define HTML_Partial_Content 49 +public define HTML
50 dropzone 50 dropzone
51 ( 51 (
52 String dropzone_form_name, 52 String dropzone_form_name,
web/fonts/awesome.anubis
@@ -14,7 +14,7 @@ public type Font_Awesome: @@ -14,7 +14,7 @@ public type Font_Awesome:
14 ) 14 )
15 . 15 .
16 16
17 -public define HTML_Off_Form 17 +public define HTML
18 to_HTML 18 to_HTML
19 ( 19 (
20 Font_Awesome fa, 20 Font_Awesome fa,
@@ -27,7 +27,7 @@ public define HTML_Off_Form @@ -27,7 +27,7 @@ public define HTML_Off_Form
27 27
28 28
29 29
30 -public define HTML_Off_Form 30 +public define HTML
31 to_HTML 31 to_HTML
32 ( 32 (
33 Font_Awesome fa, 33 Font_Awesome fa,
@@ -36,7 +36,7 @@ public define HTML_Off_Form @@ -36,7 +36,7 @@ public define HTML_Off_Form
36 to_HTML(fa, attrs, "") 36 to_HTML(fa, attrs, "")
37 . 37 .
38 38
39 -public define HTML_Off_Form 39 +public define HTML
40 to_HTML 40 to_HTML
41 ( 41 (
42 Font_Awesome fa, 42 Font_Awesome fa,
@@ -46,7 +46,7 @@ public define HTML_Off_Form @@ -46,7 +46,7 @@ public define HTML_Off_Form
46 . 46 .
47 47
48 48
49 -public define HTML_Off_Form 49 +public define HTML
50 to_HTML 50 to_HTML
51 ( 51 (
52 Font_Awesome fa, 52 Font_Awesome fa,
@@ -55,7 +55,7 @@ public define HTML_Off_Form @@ -55,7 +55,7 @@ public define HTML_Off_Form
55 to_HTML(fa, [], text) 55 to_HTML(fa, [], text)
56 . 56 .
57 57
58 -public define HTML_Off_Form 58 +public define HTML
59 to_HTML 59 to_HTML
60 ( 60 (
61 Font_Awesome fa 61 Font_Awesome fa
@@ -63,49 +63,49 @@ public define HTML_Off_Form @@ -63,49 +63,49 @@ public define HTML_Off_Form
63 to_HTML(fa, [], "") 63 to_HTML(fa, [], "")
64 . 64 .
65 65
66 -public define HTML_In_Form  
67 - to_HTML  
68 - (  
69 - Font_Awesome fa,  
70 - List(CoreAttrs) attrs,  
71 - String text  
72 - )=  
73 - since fa is awesome(code),  
74 - i([class("fa fa-"+code), attr("aria-hidden", "true")]+attrs, text)  
75 -.  
76 -  
77 -public define HTML_In_Form  
78 - to_HTML  
79 - (  
80 - Font_Awesome fa,  
81 - List(CoreAttrs) attrs  
82 - )=  
83 - to_HTML(fa, attrs, "")  
84 -.  
85 -  
86 -public define HTML_In_Form  
87 - to_HTML  
88 - (  
89 - Font_Awesome fa,  
90 - CoreAttrs attr  
91 - )=  
92 - to_HTML(fa, [attr], "")  
93 -.  
94 -  
95 -  
96 -public define HTML_In_Form  
97 - to_HTML  
98 - (  
99 - Font_Awesome fa,  
100 - String text  
101 - )=  
102 - to_HTML(fa, [], text)  
103 -.  
104 -  
105 -public define HTML_In_Form  
106 - to_HTML  
107 - (  
108 - Font_Awesome fa  
109 - )=  
110 - to_HTML(fa, [], "")  
111 -. 66 +//public define HTML_In_Form
  67 +// to_HTML
  68 +// (
  69 +// Font_Awesome fa,
  70 +// List(CoreAttrs) attrs,
  71 +// String text
  72 +// )=
  73 +// since fa is awesome(code),
  74 +// i([class("fa fa-"+code), attr("aria-hidden", "true")]+attrs, text)
  75 +//.
  76 +
  77 +//public define HTML_In_Form
  78 +// to_HTML
  79 +// (
  80 +// Font_Awesome fa,
  81 +// List(CoreAttrs) attrs
  82 +// )=
  83 +// to_HTML(fa, attrs, "")
  84 +//.
  85 +//
  86 +//public define HTML_In_Form
  87 +// to_HTML
  88 +// (
  89 +// Font_Awesome fa,
  90 +// CoreAttrs attr
  91 +// )=
  92 +// to_HTML(fa, [attr], "")
  93 +//.
  94 +//
  95 +//
  96 +//public define HTML_In_Form
  97 +// to_HTML
  98 +// (
  99 +// Font_Awesome fa,
  100 +// String text
  101 +// )=
  102 +// to_HTML(fa, [], text)
  103 +//.
  104 +//
  105 +//public define HTML_In_Form
  106 +// to_HTML
  107 +// (
  108 +// Font_Awesome fa
  109 +// )=
  110 +// to_HTML(fa, [], "")
  111 +//.
@@ -49,44 +49,44 @@ public type CXM_Form_Field: @@ -49,44 +49,44 @@ public type CXM_Form_Field:
49 //--- text input field ---------------------------------------------------------------- 49 //--- text input field ----------------------------------------------------------------
50 input( 50 input(
51 List(CoreAttrs) options, 51 List(CoreAttrs) options,
52 - HTML_Label label,  
53 - HTML_Id id,  
54 - WebArgName web_arg_name,  
55 - InitialValue init_value,  
56 - Width width,  
57 - Mandatory mandatory 52 + HTML_Label label,
  53 + HTML_Id id,
  54 + WebArgName web_arg_name,
  55 + InitialValue init_value,
  56 + Width width,
  57 + Mandatory mandatory
58 ), 58 ),
59 59
60 input_readonly( 60 input_readonly(
61 List(CoreAttrs) options, 61 List(CoreAttrs) options,
62 - HTML_Label label, 62 + HTML_Label label,
63 HTML_Id id, 63 HTML_Id id,
64 - WebArgName web_arg_name,  
65 - InitialValue init_value,  
66 - Width width 64 + WebArgName web_arg_name,
  65 + InitialValue init_value,
  66 + Width width
67 ), 67 ),
68 68
69 //--- text area field ----------------------------------------------------------------- 69 //--- text area field -----------------------------------------------------------------
70 text_area( 70 text_area(
71 - List(TextAreaOption) options,  
72 - HTML_Label label,  
73 - HTML_Id id,  
74 - WebArgName web_arg_name,  
75 - InitialValue init_value,  
76 - Width width,  
77 - Int height,  
78 - Mandatory mandatory 71 + List(CoreAttrs) options,
  72 + HTML_Label label,
  73 + HTML_Id id,
  74 + WebArgName web_arg_name,
  75 + InitialValue init_value,
  76 + Width width,
  77 + Int height,
  78 + Mandatory mandatory
79 ), 79 ),
80 80
81 //--- password input field ------------------------------------------------------------ 81 //--- password input field ------------------------------------------------------------
82 password_input( 82 password_input(
83 List(CoreAttrs) options, 83 List(CoreAttrs) options,
84 - HTML_Label label, 84 + HTML_Label label,
85 HTML_Id id, 85 HTML_Id id,
86 WebArgName web_arg_name, 86 WebArgName web_arg_name,
87 InitialValue init_value, 87 InitialValue init_value,
88 - Width width,  
89 - Mandatory mandatory), 88 + Width width,
  89 + Mandatory mandatory),
90 90
91 //--- phone field ------------------------------------------------------------ 91 //--- phone field ------------------------------------------------------------
92 phone_input( 92 phone_input(
@@ -162,7 +162,7 @@ public type CXM_Form_Field: @@ -162,7 +162,7 @@ public type CXM_Form_Field:
162 HTML_Id id, 162 HTML_Id id,
163 WebArgName web_arg_name, 163 WebArgName web_arg_name,
164 Int size, 164 Int size,
165 - List((List(CoreAttrs), WebArgValue, String, HTML_Partial_Content)) items, 165 + List((List(CoreAttrs), WebArgValue, String, HTML)) items,
166 Maybe(InitialValue) selected, 166 Maybe(InitialValue) selected,
167 Mandatory mandatory), 167 Mandatory mandatory),
168 168
@@ -252,13 +252,13 @@ public type CXM_Form_Field: @@ -252,13 +252,13 @@ public type CXM_Form_Field:
252 Width width, 252 Width width,
253 Mandatory mandatory), 253 Mandatory mandatory),
254 254
255 - raw_in_form (HTML_In_Form html), 255 + raw_in_form (HTML html),
256 label_for ( String label, 256 label_for ( String label,
257 HTML_Id id, 257 HTML_Id id,
258 - HTML_In_Form input),  
259 - div (List(CoreAttrs), List(HTML_In_Form) contents), 258 + HTML input),
  259 + div (List(CoreAttrs), List(HTML) contents),
260 div (List(CoreAttrs), List(CXM_Form_Field) fields), 260 div (List(CoreAttrs), List(CXM_Form_Field) fields),
261 - partial (HTML_Partial_Content p_content), 261 + html (HTML p_content),
262 br, 262 br,
263 hr (List(CoreAttrs) options), 263 hr (List(CoreAttrs) options),
264 // input_with_help (CXM_Form_Field field, 264 // input_with_help (CXM_Form_Field field,
@@ -376,14 +376,6 @@ public define CXM_Form_Field @@ -376,14 +376,6 @@ public define CXM_Form_Field
376 public define CXM_Form_Field 376 public define CXM_Form_Field
377 upload(HTML_Label label, HTML_Id id, WebArgName name, Width width, Mandatory mand) 377 upload(HTML_Label label, HTML_Id id, WebArgName name, Width width, Mandatory mand)
378 = upload([], label, id, name, width, mand). 378 = upload([], label, id, name, width, mand).
379 -  
380 - public define CXM_Form_Field  
381 - input_with_help (CXM_Form_Field field, String help_text)  
382 - = input_with_help (field, failure, help_text, 250).  
383 -  
384 - public define CXM_Form_Field  
385 - input_with_help (CXM_Form_Field field, String help_text, Int width)  
386 - = input_with_help (field, failure, help_text, width).  
387 379
388 public define CXM_Form_Field 380 public define CXM_Form_Field
389 ip_input 381 ip_input
@@ -433,7 +425,7 @@ public define CXM_Form_Field @@ -433,7 +425,7 @@ public define CXM_Form_Field
433 div 425 div
434 ( 426 (
435 List(CoreAttrs) attrs, 427 List(CoreAttrs) attrs,
436 - HTML_In_Form content 428 + HTML content
437 )= 429 )=
438 div(attrs, [content]) 430 div(attrs, [content])
439 . 431 .
@@ -441,7 +433,7 @@ public define CXM_Form_Field @@ -441,7 +433,7 @@ public define CXM_Form_Field
441 public define CXM_Form_Field 433 public define CXM_Form_Field
442 div 434 div
443 ( 435 (
444 - HTML_In_Form content 436 + HTML content
445 )= 437 )=
446 div([], [content]) 438 div([], [content])
447 . 439 .
@@ -449,13 +441,13 @@ public define CXM_Form_Field @@ -449,13 +441,13 @@ public define CXM_Form_Field
449 441
450 // ////////////////////////////////////////////////////////// 442 // //////////////////////////////////////////////////////////
451 443
452 -define (List((List(CoreAttrs), WebArgValue, String)), List(HTML_Partial_Content)) 444 +define (List((List(CoreAttrs), WebArgValue, String)), List(HTML))
453 construct_selector_hide_show 445 construct_selector_hide_show
454 ( 446 (
455 String div_id, 447 String div_id,
456 - List((List(CoreAttrs), WebArgValue, String, HTML_Partial_Content)) items, 448 + List((List(CoreAttrs), WebArgValue, String, HTML)) items,
457 List((List(CoreAttrs), WebArgValue, String)) so_far_1, 449 List((List(CoreAttrs), WebArgValue, String)) so_far_1,
458 - List(HTML_Partial_Content) so_far_2, 450 + List(HTML) so_far_2,
459 Int n 451 Int n
460 ) = 452 ) =
461 if items is 453 if items is
@@ -464,17 +456,17 @@ define (List((List(CoreAttrs), WebArgValue, String)), List(HTML_Partial_Content) @@ -464,17 +456,17 @@ define (List((List(CoreAttrs), WebArgValue, String)), List(HTML_Partial_Content)
464 [h . t] then 456 [h . t] then
465 since h is (cores, wav, label, content), 457 since h is (cores, wav, label, content),
466 with linked_element = div_id + n, 458 with linked_element = div_id + n,
467 - construct_selector_hide_show(div_id, t, [([data("linked_element", linked_element) . cores], wav, label) . so_far_1], [ partial_content([], div([id(linked_element), style("display: none")], content)) . so_far_2 ], n + 1) 459 + construct_selector_hide_show(div_id, t, [([data("linked_element", linked_element) . cores], wav, label) . so_far_1], [ div([id(linked_element), style("display: none")], content) . so_far_2 ], n + 1)
468 }. 460 }.
469 461
470 -define (List((List(CoreAttrs), WebArgValue, String)), List(HTML_Partial_Content)) 462 +define (List((List(CoreAttrs), WebArgValue, String)), List(HTML))
471 construct_selector_hide_show 463 construct_selector_hide_show
472 ( 464 (
473 String div_id, 465 String div_id,
474 - List((List(CoreAttrs), WebArgValue, String, HTML_Partial_Content)) items 466 + List((List(CoreAttrs), WebArgValue, String, HTML)) items
475 ) = construct_selector_hide_show(div_id, items, [], [], 0). 467 ) = construct_selector_hide_show(div_id, items, [], [], 0).
476 468
477 -public define HTML_In_Form 469 +public define HTML
478 format_div_CXM_Form_Field 470 format_div_CXM_Form_Field
479 ( 471 (
480 List(CXM_Form_Field) field, 472 List(CXM_Form_Field) field,
@@ -484,7 +476,7 @@ public define HTML_In_Form @@ -484,7 +476,7 @@ public define HTML_In_Form
484 ). 476 ).
485 477
486 478
487 -public define HTML_In_Form 479 +public define HTML
488 format_CXM_Form_Field 480 format_CXM_Form_Field
489 ( 481 (
490 CXM_Form_Field ff, //CXM_Form_Field to format 482 CXM_Form_Field ff, //CXM_Form_Field to format
@@ -523,14 +515,11 @@ public define HTML_In_Form @@ -523,14 +515,11 @@ public define HTML_In_Form
523 515
524 if ff is 516 if ff is
525 { 517 {
526 - no_field then  
527 - empty, 518 + no_field then empty,
528 519
529 - title(t) then  
530 - literal("<h3>"+t+"</h3>"), 520 + title(t) then h3(t),
531 521
532 - message(t) then  
533 - literal(t), 522 + message(t) then literal(t),
534 523
535 input(options, _label, id, wan, default, w, mand) then 524 input(options, _label, id, wan, default, w, mand) then
536 text_input([class("in") . options], star(_label, mand), id, wan, init(get_String(lwa, wan.name, default.value)), pixels(w)), 525 text_input([class("in") . options], star(_label, mand), id, wan, init(get_String(lwa, wan.name, default.value)), pixels(w)),
@@ -539,39 +528,38 @@ public define HTML_In_Form @@ -539,39 +528,38 @@ public define HTML_In_Form
539 text_input_ro([class("in") . options], _label, id, name, init, pixels(w)), 528 text_input_ro([class("in") . options], _label, id, name, init, pixels(w)),
540 529
541 text_area(options, _label, id, wan, default, w, height, mand) then 530 text_area(options, _label, id, wan, default, w, height, mand) then
542 - text_area([input_attrs([class("in")]) . options], star(_label, mand), id, wan, init(get_String(lwa, wan.name, default.value)), pixels(w), height), 531 + text_area([class("in") . options], star(_label, mand), id, wan, init(get_String(lwa, wan.name, default.value)), pixels(w), height),
543 532
544 password_input(options, _label, id, name, init, w, mand) then 533 password_input(options, _label, id, name, init, w, mand) then
545 password_input([class("in") . options], star(_label, mand), id, name, init, pixels(w)), 534 password_input([class("in") . options], star(_label, mand), id, name, init, pixels(w)),
546 535
547 - phone_input(mb_sms_options, icon_options, options, _label, id, wan, default, phone_type, w, mand) then 536 + phone_input(mb_sms_options, icon_options, options, _label, _id, wan, default, phone_type, w, mand) then
548 sequence([ 537 sequence([
549 if mb_sms_options is 538 if mb_sms_options is
550 { 539 {
551 failure then empty, 540 failure then empty,
552 - success(sms_options) then image([event(onmouseover, "/icons/16x16/send_sms.png")]+sms_options, "/icons/16x16/sms.png", "") 541 + success(sms_options) then img([event(onmouseover, "/icons/16x16/send_sms.png")]+sms_options, "/icons/16x16/sms.png")
553 }, 542 },
554 - image(icon_options, "/icons/16x16/"+to_Icon(phone_type), ""),  
555 - text_input([class("in") . options], star(_label, mand), id, wan, init(get_String(lwa, wan.name, default.value)), pixels(w)), 543 + img(icon_options, "/icons/16x16/"+to_Icon(phone_type)),
  544 + input([class("in"), id(_id.id), name(wan.name), init(get_String(lwa, wan.name, default.value)), size(pixels(w)). options]),
556 ]), 545 ]),
557 546
558 email_input(icon_options, options, _label, id, wan, default, w, mand) then 547 email_input(icon_options, options, _label, id, wan, default, w, mand) then
559 sequence([ 548 sequence([
560 - image(icon_options, "/icons/16x16/email_edit.png", ""), 549 + img(icon_options, "/icons/16x16/email_edit.png"),
561 text_input([class("in") . options], star(_label, mand), id, wan, init(get_String(lwa, wan.name, default.value)), pixels(w)), 550 text_input([class("in") . options], star(_label, mand), id, wan, init(get_String(lwa, wan.name, default.value)), pixels(w)),
562 ]), 551 ]),
563 552
564 url_input(icon_options, options, _label, id, wan, default, w, mand) then 553 url_input(icon_options, options, _label, id, wan, default, w, mand) then
565 sequence([ 554 sequence([
566 - image(icon_options, "/icons/16x16/url.png", ""), 555 + img(icon_options, "/icons/16x16/url.png"),
567 text_input([class("in") . options], star(_label, mand), id, wan, init(get_String(lwa, wan.name, default.value)), pixels(w)), 556 text_input([class("in") . options], star(_label, mand), id, wan, init(get_String(lwa, wan.name, default.value)), pixels(w)),
568 ]), 557 ]),
569 558
570 - hidden(id, name, init) then  
571 - hidden(id, name, init), 559 + hidden(h_id, wan, wav) then hidden(wan.name, wav.value),
572 560
573 explain(t) then 561 explain(t) then
574 - div([class("sub")], literal(t)), 562 + div(class("sub"), literal(t)),
575 563
576 selector(options, _label, id, wan, size, items, selected, mand) then 564 selector(options, _label, id, wan, size, items, selected, mand) then
577 if selected is 565 if selected is
@@ -591,8 +579,8 @@ public define HTML_In_Form @@ -591,8 +579,8 @@ public define HTML_In_Form
591 with div_id = generate_random_string(15), 579 with div_id = generate_random_string(15),
592 since construct_selector_hide_show(div_id, items_with_partial) is (items, partial_content_list), 580 since construct_selector_hide_show(div_id, items_with_partial) is (items, partial_content_list),
593 sequence([ 581 sequence([
594 - selector_c([class("in"), class("cxm_selector_hide_show"), event(onchange, "select_hide_show('" + div_id + "', this);")], star(_label, mand), id, wan, size, reverse(items), if selected is { failure then init(""), success(default) then init(get_String(lwa, wan.name, default.value)) } ),  
595 - partial(partial_content(partial_content_list)) 582 + selector_c([class("in cxm_selector_hide_show"), event(onchange, "select_hide_show('" + div_id + "', this);")], star(_label, mand), id, wan, size, reverse(items), if selected is { failure then init(""), success(default) then init(get_String(lwa, wan.name, default.value)) } ),
  583 + sequence(partial_content_list)
596 ]), 584 ]),
597 585
598 checkbox(options, _label, id, wan, checked, mand) then 586 checkbox(options, _label, id, wan, checked, mand) then
@@ -604,7 +592,7 @@ public define HTML_In_Form @@ -604,7 +592,7 @@ public define HTML_In_Form
604 checkbox_hide_show(options, _label, wan, checked, fields) then 592 checkbox_hide_show(options, _label, wan, checked, fields) then
605 with div_id = generate_random_string(15), 593 with div_id = generate_random_string(15),
606 sequence([ 594 sequence([
607 - check_box([data("show_id", div_id), class("in"), class("cxm_checkbox_hide_show"), event(onclick, "checked_hide_show_element('"+div_id+"', this);")], _label, html_Id("checkbox_"+div_id), wan, get_Bool(lwa, wan.name, checked)), 595 + check_box([data("show_id", div_id), class("in cxm_checkbox_hide_show"), event(onclick, "checked_hide_show_element('"+div_id+"', this);")], _label, html_Id("checkbox_"+div_id), wan, get_Bool(lwa, wan.name, checked)),
608 div([id(div_id), style("display:"+if checked then "block" else "none")], format_div_CXM_Form_Field(fields, lwa, _class, b_with_label)) 596 div([id(div_id), style("display:"+if checked then "block" else "none")], format_div_CXM_Form_Field(fields, lwa, _class, b_with_label))
609 ]), 597 ]),
610 598
@@ -644,39 +632,29 @@ public define HTML_In_Form @@ -644,39 +632,29 @@ public define HTML_In_Form
644 ), 632 ),
645 ]), 633 ]),
646 one_line_fields(fields) then 634 one_line_fields(fields) then
647 - table([nude, class("form_one_line")],[row([],  
648 - map((CXM_Form_Field ff2) |-> cell([],format_CXM_Form_Field(ff2, lwa, _class, b_with_label)),fields))]) 635 + table(class("form_one_line nude"),[tr(
  636 + map((CXM_Form_Field ff2) |-> td(format_CXM_Form_Field(ff2, lwa, _class, b_with_label)),fields))])
649 , 637 ,
650 -  
651 upload(options, _label, id, name, w, mand) then 638 upload(options, _label, id, name, w, mand) then
652 file_upload([class("in") . options], star(_label, mand), id, name, pixels(w)), 639 file_upload([class("in") . options], star(_label, mand), id, name, pixels(w)),
653 640
654 - raw_in_form(html) then html,  
655 -// div([class("in")], html),  
656 - label_for(label, id, input) then 641 + raw_in_form(html) then div(class("in"), html),
  642 + label_for(_label, _id, input) then
657 sequence([ 643 sequence([
658 - if id is html_Id(_id) then  
659 - literal("<label for=\"" + _id + "\">" + label + "</label>"), 644 + label(for(_id.id), _label),
660 input 645 input
661 ]), 646 ]),
662 647
663 div(options, e) then div(options, e), 648 div(options, e) then div(options, e),
664 div(options, fields)then div(options, format_div_CXM_Form_Field(fields, lwa, _class, b_with_label)), 649 div(options, fields)then div(options, format_div_CXM_Form_Field(fields, lwa, _class, b_with_label)),
665 - partial(p_content) then partial(p_content), 650 + html(p_content) then p_content,
666 br then br, 651 br then br,
667 hr(opts) then hr(opts), 652 hr(opts) then hr(opts),
668 -// input_with_help(input, help_title, help_text, width) then  
669 -// sequence([  
670 -// format_CXM_Form_Field(input, lwa, html_tooltip(force_String(help_title), help_text, width)),  
671 -// ]),  
672 -  
673 - fieldset(options, legend, fields) then  
674 - sequence([  
675 - literal("<fieldset" + format_attrs(options) + ">"),  
676 - literal(if length(legend) > 0 then "<legend>" + legend + "</legend>" else ""), 653 + fieldset(options, _legend, fields) then
  654 + fieldset(options, [
  655 + if _legend = "" then legend(_legend) else empty,
677 format_div_CXM_Form_Field(fields, lwa, _class, b_with_label), 656 format_div_CXM_Form_Field(fields, lwa, _class, b_with_label),
678 - literal("</fieldset>")  
679 - ]), 657 + ]),
680 658
681 blank_space then 659 blank_space then
682 div([class("blank_space")], literal("&nbsp")), 660 div([class("blank_space")], literal("&nbsp")),
@@ -698,31 +676,8 @@ public define HTML_In_Form @@ -698,31 +676,8 @@ public define HTML_In_Form
698 empty then literal("") 676 empty then literal("")
699 }. 677 }.
700 678
701 - public define HTML_In_Form  
702 - format_div_CXM_Form_Field  
703 - (  
704 - CXM_Form_Field field,  
705 - List(Web_arg) lwa,  
706 - String _class,  
707 - Bool b_with_label  
708 - )=  
709 - if field is empty then  
710 - empty  
711 - else if field is no_field then  
712 - empty  
713 - else if field is hidden(id, name, init) then  
714 - format_CXM_Form_Field(field, lwa, _class, b_with_label)  
715 - else if field is br then  
716 - format_CXM_Form_Field(field, lwa, _class, b_with_label)  
717 - else if field is text_area(options, _label, id, wan, default, w, height, mand) then  
718 - div([], format_CXM_Form_Field(field, lwa, _class, b_with_label))  
719 - else  
720 - div([class(_class)], format_CXM_Form_Field(field, lwa, _class, b_with_label))  
721 -.  
722 -  
723 -  
724 679
725 -public define HTML_In_Form 680 +public define HTML
726 format_div_CXM_Form_Field 681 format_div_CXM_Form_Field
727 ( 682 (
728 List(CXM_Form_Field) fields, 683 List(CXM_Form_Field) fields,
@@ -739,7 +694,7 @@ public define HTML_In_Form @@ -739,7 +694,7 @@ public define HTML_In_Form
739 empty 694 empty
740 else if field is no_field then 695 else if field is no_field then
741 empty 696 empty
742 - else if field is hidden(id, name, init) then 697 + else if field is hidden(_id, name, init) then
743 format_CXM_Form_Field(field, lwa, _class, b_with_label) 698 format_CXM_Form_Field(field, lwa, _class, b_with_label)
744 else if field is br then 699 else if field is br then
745 format_CXM_Form_Field(field, lwa, _class, b_with_label) 700 format_CXM_Form_Field(field, lwa, _class, b_with_label)
@@ -750,8 +705,8 @@ public define HTML_In_Form @@ -750,8 +705,8 @@ public define HTML_In_Form
750 , fields)) 705 , fields))
751 . 706 .
752 707
753 -public define HTML_In_Form  
754 - to_HTML_In_Form 708 +public define HTML
  709 + to_HTML
755 ( 710 (
756 List(CXM_Form_Field) fields, 711 List(CXM_Form_Field) fields,
757 List(Web_arg) lwa, 712 List(Web_arg) lwa,
@@ -761,61 +716,47 @@ public define HTML_In_Form @@ -761,61 +716,47 @@ public define HTML_In_Form
761 format_div_CXM_Form_Field(fields, lwa, _class, b_with_label) 716 format_div_CXM_Form_Field(fields, lwa, _class, b_with_label)
762 . 717 .
763 718
764 - "form_field aligned"  
765 -  
766 - public define HTML_In_Form  
767 - fieldset  
768 - (  
769 - CXM_Form_Field field,  
770 - List(Web_arg) lwa,  
771 - String _class,  
772 - Bool b_with_label  
773 - )=  
774 - fieldset([field], lwa, _class, b_with_label)  
775 -.  
776 -  
777 -  
778 -public define HTML_In_Form  
779 - to_HTML_In_Form 719 +public define HTML
  720 + to_HTML
780 ( 721 (
781 List(CXM_Form_Field) fields, 722 List(CXM_Form_Field) fields,
782 String _class, 723 String _class,
783 Bool b_with_label 724 Bool b_with_label
784 )= 725 )=
785 - to_HTML_In_Form(fields, [], _class, b_with_label). 726 + to_HTML(fields, [], _class, b_with_label).
786 727
787 -public define HTML_In_Form  
788 - to_HTML_In_Form 728 +public define HTML
  729 + to_HTML
789 ( 730 (
790 List(CXM_Form_Field) fields, 731 List(CXM_Form_Field) fields,
791 List(Web_arg) lwa 732 List(Web_arg) lwa
792 )= 733 )=
793 - to_HTML_In_Form(fields, lwa, "form_field aligned", true) 734 + to_HTML(fields, lwa, "form_field aligned", true)
794 . 735 .
795 736
796 -public define HTML_In_Form  
797 - to_HTML_In_Form 737 +public define HTML
  738 + to_HTML
798 ( 739 (
799 CXM_Form_Field field, 740 CXM_Form_Field field,
800 List(Web_arg) lwa 741 List(Web_arg) lwa
801 )= 742 )=
802 - to_HTML_In_Form([field], lwa, "form_field aligned", true) 743 + to_HTML([field], lwa, "form_field aligned", true)
803 . 744 .
804 745
805 -public define HTML_In_Form  
806 - to_HTML_In_Form 746 +public define HTML
  747 + to_HTML
807 ( 748 (
808 List(CXM_Form_Field) fields 749 List(CXM_Form_Field) fields
809 )= 750 )=
810 - to_HTML_In_Form(fields, [], "form_field aligned", true) 751 + to_HTML(fields, [], "form_field aligned", true)
811 . 752 .
812 753
813 -public define HTML_Off_Form 754 +public define HTML
814 cxm_form 755 cxm_form
815 ( 756 (
816 HTML_Id form_Id, 757 HTML_Id form_Id,
817 List(CoreAttrs) options, 758 List(CoreAttrs) options,
818 - WEB_Action_Name action, 759 + WEB_Action_Name _action,
819 List((String,String)) extra_ops, 760 List((String,String)) extra_ops,
820 List(Web_arg) lwa, 761 List(Web_arg) lwa,
821 List(CXM_Form_Field) fields, 762 List(CXM_Form_Field) fields,
@@ -823,39 +764,32 @@ public define HTML_Off_Form @@ -823,39 +764,32 @@ public define HTML_Off_Form
823 Bool b_with_label 764 Bool b_with_label
824 ) = 765 ) =
825 form( 766 form(
826 - form_Id,  
827 - [class("cxm_form") . options],  
828 - action,  
829 - extra_ops, 767 + [id(form_Id.id), class("cxm_form"), action(_action, extra_ops) . options],
830 format_div_CXM_Form_Field(fields, lwa, _class, b_with_label) 768 format_div_CXM_Form_Field(fields, lwa, _class, b_with_label)
831 ). 769 ).
832 770
833 -public define HTML_Off_Form  
834 -/* older manner to call CXM_form with action as String.  
835 - * this function only exists for compatibility with older projects. Please consider  
836 - * to use the above function with WEB_Action_Name instead of String  
837 -*/  
838 - cxm_form  
839 - (  
840 - HTML_Id form_Id,  
841 - List(CoreAttrs) options,  
842 - String action, //older manner to call action with String  
843 - List((String,String)) extra_ops,  
844 - List(Web_arg) lwa,  
845 - List(CXM_Form_Field) fields,  
846 - String _class,  
847 - Bool b_with_label  
848 - ) =  
849 -  
850 - form(  
851 - form_Id,  
852 - [class("cxm_form") . options],  
853 - action_name(action),  
854 - extra_ops,  
855 - format_div_CXM_Form_Field(fields, lwa, _class, b_with_label)  
856 - ). 771 +//public define HTML
  772 +///* older manner to call CXM_form with action as String.
  773 +// * this function only exists for compatibility with older projects. Please consider
  774 +// * to use the above function with WEB_Action_Name instead of String
  775 +//*/
  776 +// cxm_form
  777 +// (
  778 +// HTML_Id form_Id,
  779 +// List(CoreAttrs) options,
  780 +// String _action, //older manner to call action with String
  781 +// List((String,String)) extra_ops,
  782 +// List(Web_arg) lwa,
  783 +// List(CXM_Form_Field) fields,
  784 +// String _class,
  785 +// Bool b_with_label
  786 +// ) =
  787 +// form(
  788 +// [class("cxm_form"), id(form_Id.id), action(_action, extra_ops) . options],
  789 +// format_div_CXM_Form_Field(fields, lwa, _class, b_with_label)
  790 +// ).
857 791
858 -public define HTML_Off_Form 792 +public define HTML
859 cxm_form 793 cxm_form
860 ( 794 (
861 String form_name, 795 String form_name,
@@ -869,7 +803,7 @@ public define HTML_Off_Form @@ -869,7 +803,7 @@ public define HTML_Off_Form
869 )= 803 )=
870 cxm_form(html_Id(form_name), options, action, extra_ops, lwa, form_fields, _class, b_with_label). 804 cxm_form(html_Id(form_name), options, action, extra_ops, lwa, form_fields, _class, b_with_label).
871 805
872 -public define HTML_Off_Form 806 +public define HTML
873 cxm_form 807 cxm_form
874 ( 808 (
875 String form_name, 809 String form_name,
@@ -882,7 +816,7 @@ public define HTML_Off_Form @@ -882,7 +816,7 @@ public define HTML_Off_Form
882 cxm_form(form_name, options, action, extra_ops, lwa, form_fields, "form_field aligned", true) 816 cxm_form(form_name, options, action, extra_ops, lwa, form_fields, "form_field aligned", true)
883 . 817 .
884 818
885 -public define HTML_Off_Form 819 +public define HTML
886 cxm_form 820 cxm_form
887 ( 821 (
888 String form_name, 822 String form_name,
@@ -897,7 +831,7 @@ public define HTML_Off_Form @@ -897,7 +831,7 @@ public define HTML_Off_Form
897 cxm_form(html_Id(form_name), options, action_name(action), extra_ops, lwa, form_fields, "form_field aligned", b_with_label) 831 cxm_form(html_Id(form_name), options, action_name(action), extra_ops, lwa, form_fields, "form_field aligned", b_with_label)
898 . 832 .
899 833
900 -public define HTML_Off_Form 834 +public define HTML
901 cxm_form 835 cxm_form
902 ( 836 (
903 String form_name, 837 String form_name,
@@ -910,28 +844,28 @@ public define HTML_Off_Form @@ -910,28 +844,28 @@ public define HTML_Off_Form
910 cxm_form(html_Id(form_name), options, action_name(action), extra_ops, lwa, form_fields, "form_field aligned", true) 844 cxm_form(html_Id(form_name), options, action_name(action), extra_ops, lwa, form_fields, "form_field aligned", true)
911 . 845 .
912 846
913 -public define HTML_Off_Form 847 +public define HTML
914 cxm_form 848 cxm_form
915 ( 849 (
916 String form_id, 850 String form_id,
917 List(CoreAttrs) options, 851 List(CoreAttrs) options,
918 - List(HTML_In_Form) fields, 852 + List(HTML) fields,
919 String _class 853 String _class
920 ) = 854 ) =
921 - cxm_form(html_Id(form_id), options, action_name(""), [], [], map((HTML_In_Form field) |-> raw_in_form(field), fields), _class, true ) 855 + cxm_form(html_Id(form_id), options, action_name(""), [], [], map((HTML field) |-> raw_in_form(field), fields), _class, true )
922 . 856 .
923 857
924 -public define HTML_Off_Form 858 +public define HTML
925 cxm_form 859 cxm_form
926 ( 860 (
927 String form_id, 861 String form_id,
928 - List(CoreAttrs) options,  
929 - List(HTML_In_Form) fields 862 + List(CoreAttrs) options,
  863 + List(HTML) fields
930 ) = 864 ) =
931 - cxm_form(html_Id(form_id), options, action_name(""), [], [], map((HTML_In_Form field) |-> raw_in_form(field), fields), "form_field aligned", true ) 865 + cxm_form(html_Id(form_id), options, action_name(""), [], [], map((HTML field) |-> raw_in_form(field), fields), "form_field aligned", true )
932 . 866 .
933 867
934 -public define HTML_Off_Form 868 +public define HTML
935 cxm_form 869 cxm_form
936 ( 870 (
937 String form_id, 871 String form_id,
@@ -943,16 +877,16 @@ public define HTML_Off_Form @@ -943,16 +877,16 @@ public define HTML_Off_Form
943 ) = 877 ) =
944 cxm_form(html_Id(form_id), options, action_name(""), [], lwa, fields, _class, b_with_label). 878 cxm_form(html_Id(form_id), options, action_name(""), [], lwa, fields, _class, b_with_label).
945 879
946 -public define HTML_Off_Form 880 +public define HTML
947 cxm_form 881 cxm_form
948 ( 882 (
949 String form_id, 883 String form_id,
950 - List(HTML_In_Form) fields, 884 + List(HTML) fields,
951 String _class 885 String _class
952 ) = 886 ) =
953 - cxm_form(html_Id(form_id), [], action_name(""), [], [], map((HTML_In_Form field) |-> raw_in_form(field), fields), _class, true ). 887 + cxm_form(html_Id(form_id), [], action_name(""), [], [], map((HTML field) |-> raw_in_form(field), fields), _class, true ).
954 888
955 -public define HTML_Off_Form 889 +public define HTML
956 cxm_form 890 cxm_form
957 ( 891 (
958 String form_id, 892 String form_id,
@@ -962,7 +896,7 @@ public define HTML_Off_Form @@ -962,7 +896,7 @@ public define HTML_Off_Form
962 ) = 896 ) =
963 cxm_form(form_id, [], lwa, fields, _class, true). 897 cxm_form(form_id, [], lwa, fields, _class, true).
964 898
965 -public define HTML_Off_Form 899 +public define HTML
966 cxm_form 900 cxm_form
967 ( 901 (
968 String form_id, 902 String form_id,
@@ -971,7 +905,7 @@ public define HTML_Off_Form @@ -971,7 +905,7 @@ public define HTML_Off_Form
971 ) = 905 ) =
972 cxm_form(form_id, [], lwa, fields, "form_field aligned", true). 906 cxm_form(form_id, [], lwa, fields, "form_field aligned", true).
973 907
974 -public define HTML_Off_Form 908 +public define HTML
975 cxm_form 909 cxm_form
976 ( 910 (
977 String form_id, 911 String form_id,
@@ -980,7 +914,7 @@ public define HTML_Off_Form @@ -980,7 +914,7 @@ public define HTML_Off_Form
980 ) = 914 ) =
981 cxm_form(form_id, options, [], fields, "form_field aligned", true). 915 cxm_form(form_id, options, [], fields, "form_field aligned", true).
982 916
983 -public define HTML_Off_Form 917 +public define HTML
984 cxm_form 918 cxm_form
985 ( 919 (
986 String form_id, 920 String form_id,
@@ -989,7 +923,7 @@ public define HTML_Off_Form @@ -989,7 +923,7 @@ public define HTML_Off_Form
989 ) = 923 ) =
990 cxm_form(html_Id(form_id), [], action_name(""), [], [], fields, _class, true). 924 cxm_form(html_Id(form_id), [], action_name(""), [], [], fields, _class, true).
991 925
992 -public define HTML_Off_Form 926 +public define HTML
993 cxm_form 927 cxm_form
994 ( 928 (
995 String form_id, 929 String form_id,
web/form.anubis.bak 0 → 100644
  1 +/*
  2 + * Created by PyramIDE.
  3 + * User: フランスのトトロ
  4 + * Date: 07/12/2014
  5 + * Time: 16:49
  6 + * © David RENÉ
  7 + */
  8 +
  9 +// *************************************************************************************
  10 +// *** Generic form
  11 +// *************************************************************************************
  12 +read tools/basis.anubis
  13 +read system/string.anubis
  14 +read xlib/web/common.anubis
  15 +read xlib/web/web_arg_utils.anubis
  16 +read xlib/web/making_a_web_site.anubis
  17 +read xlib/web/html_tooltip.anubis
  18 +read xlib/web/widgets.anubis
  19 +read xlib/web/widgets/specialized_elements.anubis
  20 +
  21 +public type Mandatory: // used to mark fields as mandatory.
  22 + mandatory,
  23 + non_mandatory.
  24 +
  25 +public type Width:
  26 + small, //10 char
  27 + narrow_small, //20 char
  28 + narrow, //50 char
  29 + wide, //70 char
  30 + custom(Int).
  31 +
  32 +public type FormFieldWidth:
  33 + auto,
  34 + custom(Int).
  35 +
  36 +public type CXM_Form_Field:
  37 + no_field, // empty field
  38 +
  39 + //--- title field ---------------------------------------------------------------------
  40 + title(
  41 + String text
  42 + ),
  43 +
  44 + //--- message field -------------------------------------------------------------------
  45 + message(
  46 + String text
  47 + ),
  48 +
  49 + //--- text input field ----------------------------------------------------------------
  50 + input(
  51 + List(CoreAttrs) options,
  52 + HTML_Label label,
  53 + HTML_Id id,
  54 + WebArgName web_arg_name,
  55 + InitialValue init_value,
  56 + Width width,
  57 + Mandatory mandatory
  58 + ),
  59 +
  60 + input_readonly(
  61 + List(CoreAttrs) options,
  62 + HTML_Label label,
  63 + HTML_Id id,
  64 + WebArgName web_arg_name,
  65 + InitialValue init_value,
  66 + Width width
  67 + ),
  68 +
  69 + //--- text area field -----------------------------------------------------------------
  70 + text_area(
  71 + List(TextAreaOption) options,
  72 + HTML_Label label,
  73 + HTML_Id id,
  74 + WebArgName web_arg_name,
  75 + InitialValue init_value,
  76 + Width width,
  77 + Int height,
  78 + Mandatory mandatory
  79 + ),
  80 +
  81 + //--- password input field ------------------------------------------------------------
  82 + password_input(
  83 + List(CoreAttrs) options,
  84 + HTML_Label label,
  85 + HTML_Id id,
  86 + WebArgName web_arg_name,
  87 + InitialValue init_value,
  88 + Width width,
  89 + Mandatory mandatory),
  90 +
  91 + //--- phone field ------------------------------------------------------------
  92 + phone_input(
  93 + Maybe(List(CoreAttrs)) sms_icon_options, //if there is sms available it's success with the options (generally the js call to edit sms)
  94 + List(CoreAttrs) phone_icon_options,
  95 + List(CoreAttrs) text_options,
  96 + HTML_Label label,
  97 + HTML_Id id,
  98 + WebArgName web_arg_name,
  99 + InitialValue init_value,
  100 + Phone_Type phone_type,
  101 + Width width,
  102 + Mandatory mandatory),
  103 +
  104 + //--- email field ------------------------------------------------------------
  105 + email_input(
  106 + List(CoreAttrs) icon_options,
  107 + List(CoreAttrs) options,
  108 + HTML_Label label,
  109 + HTML_Id id,
  110 + WebArgName web_arg_name,
  111 + InitialValue init_value,
  112 + Width width,
  113 + Mandatory mandatory),
  114 +
  115 + //--- url field ------------------------------------------------------------
  116 + url_input(
  117 + List(CoreAttrs) icon_options,
  118 + List(CoreAttrs) options,
  119 + HTML_Label label,
  120 + HTML_Id id,
  121 + WebArgName web_arg_name,
  122 + InitialValue init_value,
  123 + Width width,
  124 + Mandatory mandatory),
  125 +
  126 + //--- hidden field ------------------------------------------------------------
  127 + hidden(
  128 + HTML_Id id,
  129 + WebArgName web_arg_name,
  130 + WebArgValue init_value
  131 + ),
  132 + //--- explanation field ---------------------------------------------------------------
  133 + explain(
  134 + String text
  135 + ),
  136 +
  137 + //--- selector field ------------------------------------------------------------------
  138 + selector(
  139 + List(CoreAttrs) options,
  140 + HTML_Label label,
  141 + HTML_Id id,
  142 + WebArgName web_arg_name,
  143 + Int size,
  144 + List(String) items,
  145 + Maybe(InitialValue) selected,
  146 + Mandatory mandatory
  147 + ),
  148 +
  149 + selector_c(
  150 + List(CoreAttrs) options,
  151 + HTML_Label label,
  152 + HTML_Id id,
  153 + WebArgName web_arg_name,
  154 + Int size,
  155 + List((List(CoreAttrs), WebArgValue, String)) items,
  156 + Maybe(InitialValue) selected,
  157 + Mandatory mandatory
  158 + ),
  159 +
  160 + selector_hide_show (List(CoreAttrs) options,
  161 + HTML_Label label,
  162 + HTML_Id id,
  163 + WebArgName web_arg_name,
  164 + Int size,
  165 + List((List(CoreAttrs), WebArgValue, String, HTML_Partial_Content)) items,
  166 + Maybe(InitialValue) selected,
  167 + Mandatory mandatory),
  168 +
  169 + //--- checkbox field ------------------------------------------------------------------
  170 + checkbox (List(CoreAttrs) options,
  171 + HTML_Label label,
  172 + HTML_Id id,
  173 + WebArgName web_arg_name,
  174 + Bool checked,
  175 + Mandatory mandatory),
  176 +
  177 + // the same one, but with the tag on the right of the checkbox
  178 + checkboxr(
  179 + List(CoreAttrs) options,
  180 + HTML_Label label,
  181 + HTML_Id id,
  182 + WebArgName web_arg_name,
  183 + Bool checked,
  184 + Mandatory mandatory
  185 + ),
  186 +
  187 + //checkbox_hide_show
  188 + checkbox_hide_show(
  189 + List(CoreAttrs) options,
  190 + HTML_Label label,
  191 + WebArgName web_arg_name,
  192 + Bool checked,
  193 + List(CXM_Form_Field) fields
  194 + ),
  195 +
  196 + //--- radio-button field --------------------------------------------------------------
  197 + radio_button(
  198 + List(CoreAttrs) options,
  199 + HTML_Label label,
  200 + HTML_Id id,
  201 + WebArgName web_arg_name,
  202 + WebArgValue web_arg_value,
  203 + Bool checked,
  204 + Mandatory mandatory
  205 + ),
  206 + //radio_button_hide_show
  207 + radio_button_hide_show(
  208 + List(CoreAttrs) options,
  209 + HTML_Label label,
  210 + WebArgName web_arg_name,
  211 + WebArgValue web_arg_value,
  212 + Bool checked,
  213 + List(CXM_Form_Field) fields
  214 + ),
  215 + // the same one, but with the tag on the right of the radio_button
  216 + radio_buttonr (List(CoreAttrs) options,
  217 + HTML_Label label,
  218 + HTML_Id id,
  219 + WebArgName web_arg_name,
  220 + WebArgValue web_arg_value,
  221 + Bool checked,
  222 + Mandatory mandatory),
  223 +
  224 + radio_button_list(
  225 + List(CoreAttrs) options,
  226 + HTML_Label label,
  227 + HTML_Id id,
  228 + WebArgName web_arg_name,
  229 + List((WebArgValue, String)) web_arg_value,
  230 + Maybe(InitialValue) selected,
  231 + Mandatory mandatory,
  232 + Bool is_wide),
  233 +
  234 +// //--- fields table --------------------------------------------------------------------
  235 +// fields_table (String tag,
  236 +// List(FormField) fields),
  237 +//
  238 +// //--- fields line ---------------------------------------------------------------------
  239 +// fields_line (String tag,
  240 +// List(FormField) fields),
  241 + one_line_fields (List(CXM_Form_Field) fields),
  242 +
  243 +//
  244 +// //--- preview field -------------------------------------------------------------------
  245 +// preview (String html_text),
  246 +
  247 + //--- upload field -------------------------------------------------------------------
  248 + upload (List(CoreAttrs) options,
  249 + HTML_Label label,
  250 + HTML_Id id,
  251 + WebArgName name,
  252 + Width width,
  253 + Mandatory mandatory),
  254 +
  255 + raw_in_form (HTML_Off_Form html),
  256 + label_for ( String label,
  257 + HTML_Id id,
  258 + HTML_Off_Form input),
  259 + div (List(CoreAttrs), List(HTML_Off_Form) contents),
  260 + div (List(CoreAttrs), List(CXM_Form_Field) fields),
  261 + partial (HTML_Partial_Content p_content),
  262 + br,
  263 + hr (List(CoreAttrs) options),
  264 +// input_with_help (CXM_Form_Field field,
  265 +// Maybe(String) help_title,
  266 +// String help_text,
  267 +// Int width),
  268 +
  269 + fieldset (List(CoreAttrs) options,
  270 + String legend,
  271 + List(CXM_Form_Field) fields),
  272 +
  273 + blank_space,
  274 + blank_space (HtmlClass class),
  275 +
  276 + //--- submit button -------------------------------------------------------------------
  277 + submit (List(CoreAttrs) options,
  278 + HtmlClass class,
  279 + WEB_Action_Name action_name,
  280 + Maybe(String) label,
  281 + String button_text,
  282 + List((String,String)) extra_operands),
  283 + empty.
  284 +
  285 +// //////////////////////////////////////////////
  286 +// Alternate constructors:
  287 +
  288 +public define CXM_Form_Field
  289 + fieldset
  290 + (
  291 + HTML_Id fieldSetId,
  292 + List(CXM_Form_Field) fields
  293 + ) =
  294 + fieldset([id(fieldSetId.id)], "", fields).
  295 +
  296 +public define CXM_Form_Field
  297 + fieldset
  298 + (
  299 + List(CXM_Form_Field) fields
  300 + ) =
  301 + fieldset([], "", fields).
  302 +
  303 +public define CXM_Form_Field
  304 + fieldset
  305 + (
  306 + String legend,
  307 + List(CXM_Form_Field) fields
  308 + ) =
  309 + fieldset([], legend, fields).
  310 +
  311 +public define CXM_Form_Field
  312 + input(WebArgName n, InitialValue init_value, Width width)
  313 + = input([], no_label, html_Id(n.name), n, init_value, width, non_mandatory).
  314 +
  315 +public define CXM_Form_Field
  316 + input(HTML_Label label, WebArgName n, InitialValue init_value, Width width)
  317 + = input([], label, html_Id(n.name), n, init_value, width, non_mandatory).
  318 +
  319 +public define CXM_Form_Field
  320 + input(HTML_Label label, WebArgName n, InitialValue init_value, Width width, Mandatory mand)
  321 + = input([], label, html_Id(n.name), n, init_value, width, mand).
  322 +
  323 +public define CXM_Form_Field
  324 + input(HTML_Label label, HTML_Id id, WebArgName n, InitialValue init_value, Width width, Mandatory mand)
  325 + = input([], label, id, n, init_value, width, mand).
  326 +
  327 +public define CXM_Form_Field
  328 + input(List(CoreAttrs) options, HTML_Label label, WebArgName n, InitialValue init_value, Width width, Mandatory mand)
  329 + = input(options, label, html_Id(n.name), n, init_value, width, mand).
  330 +
  331 +public define CXM_Form_Field
  332 + input_readonly(HTML_Label label, WebArgName n, InitialValue init_value, Width width)
  333 + = input_readonly([], label, html_Id(n.name), n, init_value, width).
  334 +
  335 +public define CXM_Form_Field
  336 + password_input(HTML_Label label, WebArgName n, InitialValue init_value, Width width, Mandatory mand)
  337 + = password_input([], label, html_Id(n.name), n, init_value, width, mand).
  338 +
  339 +public define CXM_Form_Field
  340 + checkbox(HTML_Label label, WebArgName n, Bool checked, Mandatory mand)
  341 + = checkbox([], label, html_Id(n.name), n, checked, mand).
  342 +
  343 +public define CXM_Form_Field
  344 + checkboxr(HTML_Label label, WebArgName n, Bool checked, Mandatory mand)
  345 + = checkboxr([], label, html_Id(n.name), n, checked, mand).
  346 +
  347 +public define CXM_Form_Field
  348 + radio_button(HTML_Label label, WebArgName n, WebArgValue value, Bool checked, Mandatory mand)
  349 + = radio_button([], label, html_Id(n.name), n, value, checked, mand).
  350 +
  351 +public define CXM_Form_Field
  352 + radio_buttonr(HTML_Label label, WebArgName n, WebArgValue value, Bool checked, Mandatory mand)
  353 + = radio_buttonr([], label, html_Id(n.name), n, value, checked, mand).
  354 +
  355 +public define CXM_Form_Field
  356 + submit(WEB_Action_Name action_name, HtmlClass class, Maybe(String) label, String button_text, List((String,String)) extra_operands)
  357 + = submit([], class, action_name, label, button_text, extra_operands).
  358 +
  359 +public define CXM_Form_Field
  360 + submit(WEB_Action_Name action_name, Maybe(String) label, String button_text, List((String,String)) extra_operands)
  361 + = submit([], htmlClass(""), action_name, label, button_text, extra_operands).
  362 +
  363 +public define CXM_Form_Field
  364 + submit(WEB_Action_Name action_name, Maybe(String) label, String button_text)
  365 + = submit([], htmlClass(""), action_name, label, button_text, []).
  366 +
  367 +public define CXM_Form_Field //Helper for older project wich use only String as Action name
  368 + submit(String _action_name, Maybe(String) label, String button_text, List((String,String)) extra_operands)
  369 + = submit([], htmlClass(""), action_name(_action_name), label, button_text, extra_operands).
  370 +
  371 +
  372 +public define CXM_Form_Field
  373 + upload(HTML_Label label, HTML_Id id, WebArgName name, Width width)
  374 + = upload([], label, id, name, width, non_mandatory).
  375 +
  376 +public define CXM_Form_Field
  377 + upload(HTML_Label label, HTML_Id id, WebArgName name, Width width, Mandatory mand)
  378 + = upload([], label, id, name, width, mand).
  379 +
  380 +public define CXM_Form_Field
  381 + ip_input
  382 + (
  383 + String label,
  384 + HTML_Id id,
  385 + WebArgName wan_prefix,
  386 + String ip
  387 + )=
  388 + label_for(
  389 + label,
  390 + id,
  391 + ip_input(id, wan_prefix, ip)
  392 + ).
  393 +
  394 +
  395 +public define CXM_Form_Field
  396 + partial_ip_input
  397 + (
  398 + String label,
  399 + HTML_Id id,
  400 + WebArgName wan_prefix,
  401 + List(String) ip_fixed_part,
  402 + String ip
  403 + )=
  404 + label_for(
  405 + label,
  406 + id,
  407 + partial_ip_input(id, wan_prefix, ip_fixed_part, ip)
  408 + ).
  409 +
  410 +public define CXM_Form_Field
  411 + hidden
  412 + (
  413 + WebArgName web_arg_name,
  414 + WebArgValue value
  415 + )=
  416 + hidden(html_Id(""), web_arg_name, value).
  417 +
  418 +public define CXM_Form_Field
  419 + hr
  420 + =
  421 + hr([])
  422 +.
  423 +
  424 +public define CXM_Form_Field
  425 + div
  426 + (
  427 + List(CoreAttrs) attrs,
  428 + HTML_Off_Form content
  429 + )=
  430 + div(attrs, [content])
  431 +.
  432 +
  433 +public define CXM_Form_Field
  434 + div
  435 + (
  436 + HTML_Off_Form content
  437 + )=
  438 + div([], [content])
  439 +.
  440 + //--- explanation field ---------------------
  441 +
  442 +// //////////////////////////////////////////////////////////
  443 +
  444 +define (List((List(CoreAttrs), WebArgValue, String)), List(HTML_Partial_Content))
  445 + construct_selector_hide_show
  446 + (
  447 + String div_id,
  448 + List((List(CoreAttrs), WebArgValue, String, HTML_Partial_Content)) items,
  449 + List((List(CoreAttrs), WebArgValue, String)) so_far_1,
  450 + List(HTML_Partial_Content) so_far_2,
  451 + Int n
  452 + ) =
  453 + if items is
  454 + {
  455 + [] then (so_far_1, so_far_2),
  456 + [h . t] then
  457 + since h is (cores, wav, label, content),
  458 + with linked_element = div_id + n,
  459 + construct_selector_hide_show(div_id, t, [([data("linked_element", linked_element) . cores], wav, label) . so_far_1], [ partial_content([], div([id(linked_element), style("display: none")], content)) . so_far_2 ], n + 1)
  460 + }.
  461 +
  462 +define (List((List(CoreAttrs), WebArgValue, String)), List(HTML_Partial_Content))
  463 + construct_selector_hide_show
  464 + (
  465 + String div_id,
  466 + List((List(CoreAttrs), WebArgValue, String, HTML_Partial_Content)) items
  467 + ) = construct_selector_hide_show(div_id, items, [], [], 0).
  468 +
  469 +public define HTML_Off_Form
  470 + format_div_CXM_Form_Field
  471 + (
  472 + List(CXM_Form_Field) field,
  473 + List(Web_arg) lwa,
  474 + String _class,
  475 + Bool b_with_label
  476 + ).
  477 +
  478 +
  479 +public define HTML_Off_Form
  480 + format_CXM_Form_Field
  481 + (
  482 + CXM_Form_Field ff, //CXM_Form_Field to format
  483 + List(Web_arg) lwa, //web arguments of the session, can be useful for the current drawing
  484 + String _class,
  485 + Bool b_with_label //if false, no need to show/generate label
  486 + ) =
  487 + with star = (HTML_Label l, Mandatory m)
  488 + |->
  489 + (HTML_Label)
  490 + if b_with_label then
  491 + if m is
  492 + {
  493 + mandatory then
  494 + if l is
  495 + {
  496 + no_label then l,
  497 + label(str, help) then label(str + "<span>*</span>", help),
  498 + }
  499 + non_mandatory then l
  500 + }
  501 + else
  502 + no_label
  503 + ,
  504 + pixels = (Width width)
  505 + |->
  506 + if width is
  507 + {
  508 + small then 10,
  509 + narrow_small then 20,
  510 + narrow then 50,
  511 + wide then 70,
  512 + custom(n) then n
  513 + },
  514 +
  515 +
  516 + if ff is
  517 + {
  518 + no_field then empty,
  519 +
  520 + title(t) then h3(t),
  521 +
  522 + message(t) then literal(t),
  523 +
  524 + input(options, _label, id, wan, default, w, mand) then
  525 + text_input([class("in") . options], star(_label, mand), id, wan, init(get_String(lwa, wan.name, default.value)), pixels(w)),
  526 +
  527 + input_readonly(options, _label, id, name, init, w) then
  528 + text_input_ro([class("in") . options], _label, id, name, init, pixels(w)),
  529 +
  530 + text_area(options, _label, id, wan, default, w, height, mand) then
  531 + text_area([input_attrs([class("in")]) . options], star(_label, mand), id, wan, init(get_String(lwa, wan.name, default.value)), pixels(w), height),
  532 +
  533 + password_input(options, _label, id, name, init, w, mand) then
  534 + password_input([class("in") . options], star(_label, mand), id, name, init, pixels(w)),
  535 +
  536 + phone_input(mb_sms_options, icon_options, options, _label, _id, wan, default, phone_type, w, mand) then
  537 + sequence([
  538 + if mb_sms_options is
  539 + {
  540 + failure then empty,
  541 + success(sms_options) then img([event(onmouseover, "/icons/16x16/send_sms.png")]+sms_options, "/icons/16x16/sms.png")
  542 + },
  543 + img(icon_options, "/icons/16x16/"+to_Icon(phone_type)),
  544 + input([class("in"), id(_id.id), name(wan.name), init(get_String(lwa, wan.name, default.value)), size(pixels(w)). options]),
  545 + ]),
  546 +
  547 + email_input(icon_options, options, _label, id, wan, default, w, mand) then
  548 + sequence([
  549 + img(icon_options, "/icons/16x16/email_edit.png"),
  550 + text_input([class("in") . options], star(_label, mand), id, wan, init(get_String(lwa, wan.name, default.value)), pixels(w)),
  551 + ]),
  552 +
  553 + url_input(icon_options, options, _label, id, wan, default, w, mand) then
  554 + sequence([
  555 + img(icon_options, "/icons/16x16/url.png"),
  556 + text_input([class("in") . options], star(_label, mand), id, wan, init(get_String(lwa, wan.name, default.value)), pixels(w)),
  557 + ]),
  558 +
  559 + hidden(h_id, name, init) then hidden(name, init),
  560 +
  561 + explain(t) then
  562 + div([class("sub")], literal(t)),
  563 +
  564 + selector(options, _label, id, wan, size, items, selected, mand) then
  565 + if selected is
  566 + {
  567 + failure then selector([class("in") . options], star(_label, mand), id, wan, size, items),
  568 + success(default) then selector([class("in") . options], star(_label, mand), id, wan, size, items, init(get_String(lwa, wan.name, default.value))),
  569 + },
  570 +
  571 + selector_c(options, _label, id, wan, size, items, selected, mand) then
  572 + if selected is
  573 + {
  574 + failure then selector_c([class("in") . options], star(_label, mand), id, wan, size, items),
  575 + success(default) then selector_c([class("in") . options], star(_label, mand), id, wan, size, items, init(get_String(lwa, wan.name, default.value))),
  576 + },
  577 +
  578 + selector_hide_show(options, _label, id, wan, size, items_with_partial, selected, mand) then
  579 + with div_id = generate_random_string(15),
  580 + since construct_selector_hide_show(div_id, items_with_partial) is (items, partial_content_list),
  581 + sequence([
  582 + selector_c([class("in"), class("cxm_selector_hide_show"), event(onchange, "select_hide_show('" + div_id + "', this);")], star(_label, mand), id, wan, size, reverse(items), if selected is { failure then init(""), success(default) then init(get_String(lwa, wan.name, default.value)) } ),
  583 + partial(partial_content(partial_content_list))
  584 + ]),
  585 +
  586 + checkbox(options, _label, id, wan, checked, mand) then
  587 + check_box([class("in") . options], star(_label, mand), id, wan, get_Bool(lwa, wan.name, checked)),
  588 +
  589 + checkboxr(options, _label, id, wan, checked, mand) then
  590 + check_box_r([class("in") . options], star(_label, mand), id, wan, get_Bool(lwa, wan.name, checked)),
  591 +
  592 + checkbox_hide_show(options, _label, wan, checked, fields) then
  593 + with div_id = generate_random_string(15),
  594 + sequence([
  595 + check_box([data("show_id", div_id), class("in cxm_checkbox_hide_show"), event(onclick, "checked_hide_show_element('"+div_id+"', this);")], _label, html_Id("checkbox_"+div_id), wan, get_Bool(lwa, wan.name, checked)),
  596 + div([id(div_id), style("display:"+if checked then "block" else "none")], format_div_CXM_Form_Field(fields, lwa, _class, b_with_label))
  597 + ]),
  598 +
  599 + radio_button(options, _label, id, wan, val, checked, mand) then
  600 + radio_button([class("in"), event(onclick, "radio_hide_show_group('"+wan.name+"', this);") . options], star(_label, mand), id, wan, val, get_Bool(lwa, wan.name, checked)),
  601 +
  602 + radio_button_hide_show(options, _label, wan, val, checked, fields) then
  603 + with div_id = generate_random_string(15),
  604 + sequence([
  605 + radio_button([data("show_id", div_id), class("in"), class("cxm_radio_hide_show"), event(onclick, "radio_hide_show_group('"+wan.name+"', this);")], _label, html_Id("radio_button_hide_show_"+div_id), wan, val, get_Bool(lwa, wan.name, checked)),
  606 + div([id(div_id), style("display:"+if checked then "block" else "none")], format_div_CXM_Form_Field(fields, lwa, _class, b_with_label))
  607 + ]),
  608 +
  609 + radio_buttonr(options, _label, id, wan, val, checked, mand) then
  610 + radio_button_r([class("in") . options], star(_label, mand), id, wan, val, get_Bool(lwa, wan.name, checked)),
  611 +
  612 + radio_button_list (options, _label, id, wan, items, selected, mand, wide) then
  613 + with new_selected =
  614 + if get_String(lwa, wan.name) is
  615 + {
  616 + failure then selected,
  617 + success(value) then success(init(value))
  618 + },
  619 +
  620 + sequence([
  621 + //literal("<label for=\"" + wan.name + "\">" + label + star(_label, mand) + "</label>"),
  622 + div( [class("radiolist")], sequence(
  623 + with i = var((Int)-1),
  624 + itemclass = if wide then "radiolistitem_wide" else "radiolistitem",
  625 + map( ((WebArgValue, String) item) |->
  626 + i <- *i + 1;
  627 + if item is (wav, item_label) then
  628 + with _id = if id is html_Id(the_id) then html_Id(the_id + "_radio_" + *i),
  629 + div([class(itemclass)], radio_button_r(options, label(item_label), _id, wan, wav,
  630 + if new_selected is success(v) then wav.value = v.value else false)),
  631 + items))
  632 + ),
  633 + ]),
  634 + one_line_fields(fields) then
  635 + table([nude, class("form_one_line")],[row([],
  636 + map((CXM_Form_Field ff2) |-> cell([],format_CXM_Form_Field(ff2, lwa, _class, b_with_label)),fields))])
  637 + ,
  638 +
  639 + upload(options, _label, id, name, w, mand) then
  640 + file_upload([class("in") . options], star(_label, mand), id, name, pixels(w)),
  641 +
  642 + raw_in_form(html) then html,
  643 +// div([class("in")], html),
  644 + label_for(label, id, input) then
  645 + sequence([
  646 + if id is html_Id(_id) then
  647 + literal("<label for=\"" + _id + "\">" + label + "</label>"),
  648 + input
  649 + ]),
  650 +
  651 + div(options, e) then div(options, e),
  652 + div(options, fields)then div(options, format_div_CXM_Form_Field(fields, lwa, _class, b_with_label)),
  653 + partial(p_content) then partial(p_content),
  654 + br then br,
  655 + hr(opts) then hr(opts),
  656 +// input_with_help(input, help_title, help_text, width) then
  657 +// sequence([
  658 +// format_CXM_Form_Field(input, lwa, html_tooltip(force_String(help_title), help_text, width)),
  659 +// ]),
  660 +
  661 + fieldset(options, legend, fields) then
  662 + sequence([
  663 + literal("<fieldset" + format_attrs(options) + ">"),
  664 + literal(if length(legend) > 0 then "<legend>" + legend + "</legend>" else ""),
  665 + format_div_CXM_Form_Field(fields, lwa, _class, b_with_label),
  666 + literal("</fieldset>")
  667 + ]),
  668 +
  669 + blank_space then
  670 + div([class("blank_space")], literal("&nbsp")),
  671 +
  672 + blank_space(htmlClass) then
  673 + div([class(htmlClass.class)], literal("&nbsp")),
  674 +
  675 + submit(attrs, htmlClass, action_name, Maybe(String) mb_label, button_text, extra_operands) then
  676 + actioner( same, // TODO change this to allow external URL
  677 + if mb_label is
  678 + {
  679 + failure then same,
  680 + success(n) then same(n)
  681 + },
  682 + submit(attrs + [class(htmlClass.class + " cxm_submit")], button_text),
  683 + action_name,
  684 + extra_operands
  685 + ),
  686 + empty then literal("")
  687 + }.
  688 +
  689 +
  690 +public define HTML_Off_Form
  691 + format_div_CXM_Form_Field
  692 + (
  693 + List(CXM_Form_Field) fields,
  694 + List(Web_arg) lwa,
  695 + String _class,
  696 + Bool b_with_label
  697 + )=
  698 + //println("format_div_CXM_Form_Field");
  699 + sequence( map((CXM_Form_Field field)
  700 + |->
  701 + //with css_line = if line = 0 then " odd_line" else " even_line",
  702 + //println("class "+css_line+" line "+line);
  703 + if field is empty then
  704 + empty
  705 + else if field is no_field then
  706 + empty
  707 + else if field is hidden(_id, name, init) then
  708 + format_CXM_Form_Field(field, lwa, _class, b_with_label)
  709 + else if field is br then
  710 + format_CXM_Form_Field(field, lwa, _class, b_with_label)
  711 + else if field is text_area(options, _label, id, wan, default, w, height, mand) then
  712 + div([class(_class)], format_CXM_Form_Field(field, lwa, _class, b_with_label))
  713 + else
  714 + div([class(_class)], format_CXM_Form_Field(field, lwa, _class, b_with_label))
  715 + , fields))
  716 +.
  717 +
  718 +public define HTML_Off_Form
  719 + to_HTML_Off_Form
  720 + (
  721 + List(CXM_Form_Field) fields,
  722 + List(Web_arg) lwa,
  723 + String _class,
  724 + Bool b_with_label
  725 + )=
  726 + format_div_CXM_Form_Field(fields, lwa, _class, b_with_label)
  727 +.
  728 +
  729 +public define HTML_Off_Form
  730 + to_HTML_Off_Form
  731 + (
  732 + List(CXM_Form_Field) fields,
  733 + String _class,
  734 + Bool b_with_label
  735 + )=
  736 + to_HTML_Off_Form(fields, [], _class, b_with_label).
  737 +
  738 +public define HTML_Off_Form
  739 + to_HTML_Off_Form
  740 + (
  741 + List(CXM_Form_Field) fields,
  742 + List(Web_arg) lwa
  743 + )=
  744 + to_HTML_Off_Form(fields, lwa, "form_field aligned", true)
  745 +.
  746 +
  747 +public define HTML_Off_Form
  748 + to_HTML_Off_Form
  749 + (
  750 + CXM_Form_Field field,
  751 + List(Web_arg) lwa
  752 + )=
  753 + to_HTML_Off_Form([field], lwa, "form_field aligned", true)
  754 +.
  755 +
  756 +public define HTML_Off_Form
  757 + to_HTML_Off_Form
  758 + (
  759 + List(CXM_Form_Field) fields
  760 + )=
  761 + to_HTML_Off_Form(fields, [], "form_field aligned", true)
  762 +.
  763 +
  764 +public define HTML_Off_Form
  765 + cxm_form
  766 + (
  767 + HTML_Id form_Id,
  768 + List(CoreAttrs) options,
  769 + WEB_Action_Name action,
  770 + List((String,String)) extra_ops,
  771 + List(Web_arg) lwa,
  772 + List(CXM_Form_Field) fields,
  773 + String _class,
  774 + Bool b_with_label
  775 + ) =
  776 + form(
  777 + //form_Id,
  778 + [class("cxm_form"), id(form_Id.id) . options],
  779 + action,
  780 + extra_ops,
  781 + format_div_CXM_Form_Field(fields, lwa, _class, b_with_label)
  782 + ).
  783 +
  784 +public define HTML_Off_Form
  785 +/* older manner to call CXM_form with action as String.
  786 + * this function only exists for compatibility with older projects. Please consider
  787 + * to use the above function with WEB_Action_Name instead of String
  788 +*/
  789 + cxm_form
  790 + (
  791 + HTML_Id form_Id,
  792 + List(CoreAttrs) options,
  793 + String action, //older manner to call action with String
  794 + List((String,String)) extra_ops,
  795 + List(Web_arg) lwa,
  796 + List(CXM_Form_Field) fields,
  797 + String _class,
  798 + Bool b_with_label
  799 + ) =
  800 +
  801 + form(
  802 + //form_Id,
  803 + [class("cxm_form"), id(form_Id.id) . options],
  804 + action_name(action),
  805 + extra_ops,
  806 + format_div_CXM_Form_Field(fields, lwa, _class, b_with_label)
  807 + ).
  808 +
  809 +public define HTML_Off_Form
  810 + cxm_form
  811 + (
  812 + String form_name,
  813 + List(CoreAttrs) options,
  814 + WEB_Action_Name action,
  815 + List((String,String)) extra_ops,
  816 + List(Web_arg) lwa,
  817 + List(CXM_Form_Field) form_fields,
  818 + String _class,
  819 + Bool b_with_label
  820 + )=
  821 + cxm_form(html_Id(form_name), options, action, extra_ops, lwa, form_fields, _class, b_with_label).
  822 +
  823 +public define HTML_Off_Form
  824 + cxm_form
  825 + (
  826 + String form_name,
  827 + List(CoreAttrs) options,
  828 + WEB_Action_Name action,
  829 + List((String,String)) extra_ops,
  830 + List(Web_arg) lwa,
  831 + List(CXM_Form_Field) form_fields
  832 + )=
  833 + cxm_form(form_name, options, action, extra_ops, lwa, form_fields, "form_field aligned", true)
  834 +.
  835 +
  836 +public define HTML_Off_Form
  837 + cxm_form
  838 + (
  839 + String form_name,
  840 + List(CoreAttrs) options,
  841 + String action,
  842 + List((String,String)) extra_ops,
  843 + List(Web_arg) lwa,
  844 + List(CXM_Form_Field) form_fields,
  845 +
  846 + Bool b_with_label
  847 + )=
  848 + cxm_form(html_Id(form_name), options, action_name(action), extra_ops, lwa, form_fields, "form_field aligned", b_with_label)
  849 +.
  850 +
  851 +public define HTML_Off_Form
  852 + cxm_form
  853 + (
  854 + String form_name,
  855 + List(CoreAttrs) options,
  856 + String action,
  857 + List((String,String)) extra_ops,
  858 + List(Web_arg) lwa,
  859 + List(CXM_Form_Field) form_fields
  860 + )=
  861 + cxm_form(html_Id(form_name), options, action_name(action), extra_ops, lwa, form_fields, "form_field aligned", true)
  862 +.
  863 +
  864 +public define HTML_Off_Form
  865 + cxm_form
  866 + (
  867 + String form_id,
  868 + List(CoreAttrs) options,
  869 + List(HTML_Off_Form) fields,
  870 + String _class
  871 + ) =
  872 + cxm_form(html_Id(form_id), options, action_name(""), [], [], map((HTML_Off_Form field) |-> raw_in_form(field), fields), _class, true )
  873 +.
  874 +
  875 +public define HTML_Off_Form
  876 + cxm_form
  877 + (
  878 + String form_id,
  879 + List(CoreAttrs) options,
  880 + List(HTML_Off_Form) fields
  881 + ) =
  882 + cxm_form(options, action_name(""), [], [], map((HTML_Off_Form field) |-> raw_in_form(field), fields), "form_field aligned", true )
  883 +.
  884 +
  885 +public define HTML_Off_Form
  886 + cxm_form
  887 + (
  888 + String form_id,
  889 + List(CoreAttrs) options,
  890 + List(Web_arg) lwa,
  891 + List(CXM_Form_Field) fields,
  892 + String _class,
  893 + Bool b_with_label
  894 + ) =
  895 + cxm_form(html_Id(form_id), options, action_name(""), [], lwa, fields, _class, b_with_label).
  896 +
  897 +public define HTML_Off_Form
  898 + cxm_form
  899 + (
  900 + String form_id,
  901 + List(HTML_Off_Form) fields,
  902 + String _class
  903 + ) =
  904 + cxm_form(html_Id(form_id), [], action_name(""), [], [], map((HTML_Off_Form field) |-> raw_in_form(field), fields), _class, true ).
  905 +
  906 +public define HTML_Off_Form
  907 + cxm_form
  908 + (
  909 + String form_id,
  910 + List(Web_arg) lwa,
  911 + List(CXM_Form_Field) fields,
  912 + String _class
  913 + ) =
  914 + cxm_form(form_id, [], lwa, fields, _class, true).
  915 +
  916 +public define HTML_Off_Form
  917 + cxm_form
  918 + (
  919 + String form_id,
  920 + List(Web_arg) lwa,
  921 + List(CXM_Form_Field) fields,
  922 + ) =
  923 + cxm_form(form_id, [], lwa, fields, "form_field aligned", true).
  924 +
  925 +public define HTML_Off_Form
  926 + cxm_form
  927 + (
  928 + String form_id,
  929 + List(CoreAttrs) options,
  930 + List(CXM_Form_Field) fields,
  931 + ) =
  932 + cxm_form(form_id, options, [], fields, "form_field aligned", true).
  933 +
  934 +public define HTML_Off_Form
  935 + cxm_form
  936 + (
  937 + String form_id,
  938 + List(CXM_Form_Field) fields,
  939 + String _class
  940 + ) =
  941 + cxm_form(html_Id(form_id), [], action_name(""), [], [], fields, _class, true).
  942 +
  943 +public define HTML_Off_Form
  944 + cxm_form
  945 + (
  946 + String form_id,
  947 + List(CXM_Form_Field) fields
  948 + ) =
  949 + cxm_form(html_Id(form_id), [], action_name(""), [], [], fields, "form_field aligned", true).
web/form.anubis.rej 0 → 100644
  1 +diff a/web/form.anubis b/web/form.anubis (rejected hunks)
  2 +@@ -521,7 +521,6 @@
  3 +
  4 + message(t) then literal(t),
  5 +
  6 +- input(options, _label, id, wan, default, w, mand) then
  7 + input(options, _label, _id, _name, default, w, mand) then
  8 + sequence([
  9 + input([class("in"), options], name(_name.name), value(get_String(lwa, wan.name, default.value)), size(pixels(w)) . options], star(_label, mand)),
web/frameworks/adminlte4/sidebar.anubis 0 → 100644
  1 +/*
  2 + * Created by PyramIDE.
  3 + * User: フランスのトトロ aka (David RENÉ)
  4 + * Date: 01/05/2026
  5 + * Time: 15:11
  6 + * © David RENÉ
  7 + */
  8 +
  9 +
  10 +transmit xlib/web/widgets/left_menu.anubis
  11 +read xlib/web/making_a_web_site.anubis
  12 +read xlib/web/web_action.anubis
  13 +read xlib/web/load_content.anubis
  14 +
  15 +define List(HTML)
  16 + make_sidebar
  17 + (
  18 + (String) -> String _T, //translator function
  19 + List(Left_Menu_Entry) entries,
  20 + String selected,
  21 + List(HTML) so_far
  22 + )=
  23 + if entries is
  24 + {
  25 + [] then reverse(so_far), //reverse to be in the right direction
  26 + [h . t] then
  27 + with entry =
  28 + if h is
  29 + {
  30 + left_menu_entry(_menu_id, subentry, _classes, _action, _text, _extra) then
  31 + with item_class = if subentry then "subitem " else "item ",
  32 + li(class("nav-item"),
  33 + p([class(item_class+_menu_id+"_icon"+(if _menu_id=selected then " selected" else "")+ " "+join(" ", _classes))],actioner(same,same, link(_T(_text)),_action,_extra))),
  34 +
  35 + left_menu_entry_js(_menu_id, subentry, _classes, _js_to_call, _text) then
  36 + with item_class = if subentry then "subitem " else "item ",
  37 + li(class("nav-item"),
  38 + p([class(item_class+"clickable "+_menu_id+"_icon"+(if _menu_id=selected then " active" else "")+ " "+join(" ", _classes)),
  39 + event(onclick, _js_to_call)],text(_T(_text)))),
  40 +
  41 + left_menu_entry_load_content(_menu_id, subentry, _classes, _action, _text, _extra, _target_id, _replace, _overlay) then
  42 + with item_class = if subentry then "subitem " else "item ",
  43 + li(class("nav-item"),
  44 + p([class(item_class+"clickable "+_menu_id+"_icon"+(if _menu_id=selected then " active" else "")+ " "+join(" ", _classes)),
  45 + event(onclick, load_content(_target_id, _action, _extra, _replace, _overlay))],text(_T(_text)))),
  46 +
  47 + title(_title_id, subtitle, _classes, _text) then
  48 + p([class(if subtitle then "menu_subtitle" else "menu_title"), class((if _title_id=selected then " active" else "")+ " "+join(" ", _classes))], text([],_T(_text)))
  49 +// p([class("menu_title"), class("item "+_title_id+"_icon"+if _title_id=selected then " selected" else ""+ " "+join(" ", _classes))], text([],_T(_text)))
  50 + },
  51 + make_sidebar(_T, t, selected, [ entry . so_far])
  52 + }.
  53 +
  54 +public define HTML
  55 + make_sidebar
  56 + (
  57 + (String) -> String _T, //translator function
  58 + Left_Menu l_menu
  59 + )=
  60 + if l_menu is
  61 + {
  62 + no_left_menu then empty,
  63 + left_menu(entries, selected) then
  64 + head_tags([css(css_file("/css/left_menu.css"))],
  65 + make_sidebar(_T, entries, selected, [])
  66 + )
  67 + }
  68 +.
  69 +
  70 +
  71 +
  72 +public define One set_current_left_menu(WEB_Session s, String v) = replace_String(s.fields, "AWS_CURRENT_LEFT_MENU", v).
  73 +public define One set_current_left_menu(Var(List(Session_Field)) fields, String v) = replace_String(fields, "AWS_CURRENT_LEFT_MENU", v).
  74 +public define String get_current_left_menu(WEB_Session s) = get_String (s.fields, "AWS_CURRENT_LEFT_MENU", "").
  75 +
  76 +public define One set_selected_left_menu_entry(WEB_Session s, String v) = replace_String(s.fields, "AWS_SELECTED_LEFT_MENU_ENTRY", v).
  77 +public define One set_selected_left_menu_entry(Var(List(Session_Field)) fields, String v) = replace_String(fields, "AWS_SELECTED_LEFT_MENU_ENTRY", v).
  78 +public define String get_selected_left_menu_entry(WEB_Session s) = get_String (s.fields, "AWS_SELECTED_LEFT_MENU_ENTRY", "").
web/generic_form.anubis deleted
1 -  
2 -  
3 -  
4 - *Project* The Anubis Project  
5 -  
6 - *Title*  
7 -  
8 - *Copyright* Copyright (c) Alain Prouté 2005.  
9 -  
10 -  
11 - *Author* Alain Prouté  
12 -  
13 -  
14 -  
15 - In this file we rationalize the construction of forms.  
16 -  
17 -  
18 -  
19 -read CXM_making_a_web_site.anubis  
20 -read tools/basis.anubis  
21 -  
22 -  
23 -public type Mandatory: // used to mark fields as mandatory.  
24 - mandatory,  
25 - non_mandatory.  
26 -  
27 -public type Width:  
28 - small,  
29 - narrow,  
30 - wide,  
31 - custom(Int).  
32 -  
33 -public type FormFieldWidth:  
34 - auto,  
35 - custom(Int).  
36 -  
37 -  
38 -  
39 - Sorts of fields that you can put in a form:  
40 -  
41 -public type FormField:  
42 -  
43 - //--- title field ---------------------------------------------------------------------  
44 - title (String text),  
45 - title (Int text_size,  
46 - String text),  
47 - title_f (List(Text_Option) -> HTML_In_Form),  
48 -  
49 - //--- message field -------------------------------------------------------------------  
50 - message (Result(String,String) msg),  
51 - message_f (Result(List(Text_Option) -> HTML_In_Form,List(Text_Option) -> HTML_In_Form)),  
52 -  
53 - //--- text input field ----------------------------------------------------------------  
54 - input (WebArgName web_arg_name,  
55 - String tag,  
56 - Width width,  
57 - InitialValue init_value,  
58 - Mandatory mandatory),  
59 - input (WebArgName web_arg_name,  
60 - Width width,  
61 - InitialValue init_value),  
62 - input_f (WebArgName web_arg_name,  
63 - List(Text_Option) -> HTML_In_Form tag,  
64 - Width width,  
65 - InitialValue init_value,  
66 - Mandatory mandatory),  
67 -  
68 - //--- password input field ------------------------------------------------------------  
69 - password_input (WebArgName web_arg_name,  
70 - String tag,  
71 - Mandatory mandatory),  
72 - password_input_f (WebArgName web_arg_name,  
73 - List(Text_Option) -> HTML_In_Form tag,  
74 - Mandatory mandatory),  
75 -  
76 - //--- explanation field ---------------------------------------------------------------  
77 - explain (String text),  
78 - explain (String text,  
79 - FormFieldWidth width),  
80 - explain_f (List(Text_Option) -> HTML_In_Form),  
81 -  
82 - //--- selector field ------------------------------------------------------------------  
83 - selector (WebArgName web_arg_name,  
84 - String tag,  
85 - List(String) items,  
86 - Maybe(InitialValue) selected,  
87 - Mandatory mandatory),  
88 - selector_f (WebArgName web_arg_name,  
89 - List(Text_Option) -> HTML_In_Form,  
90 - List(String) items,  
91 - Maybe(InitialValue) selected,  
92 - Mandatory mandatory),  
93 - selector_c (WebArgName web_arg_name,  
94 - String tag,  
95 - List((List(CoreAttrs), WebArgValue, String)) items,  
96 - Maybe(InitialValue) selected,  
97 - Mandatory mandatory),  
98 -  
99 -  
100 -  
101 - //--- checkbox field ------------------------------------------------------------------  
102 - checkbox (WebArgName web_arg_name,  
103 - String tag,  
104 - Bool checked,  
105 - Mandatory mandatory),  
106 - // the same one, but with the tag on the right of the checkbox  
107 - checkboxr (WebArgName web_arg_name,  
108 - String tag,  
109 - Bool checked,  
110 - Mandatory mandatory),  
111 - checkbox_f (WebArgName web_arg_name,  
112 - List(Text_Option) -> HTML_In_Form,  
113 - Bool checked,  
114 - Mandatory mandatory),  
115 -  
116 - //--- radio-button field --------------------------------------------------------------  
117 - radio_button (WebArgName web_arg_name,  
118 - WebArgValue web_arg_value,  
119 - String tag,  
120 - Bool checked,  
121 - Mandatory mandatory),  
122 - // the same one, but with the tag on the right of the radio_button  
123 - radio_buttonr (WebArgName web_arg_name,  
124 - WebArgValue web_arg_value,  
125 - String tag,  
126 - Bool checked,  
127 - Mandatory mandatory),  
128 -  
129 - //--- text area field -----------------------------------------------------------------  
130 - text_area (WebArgName web_arg_name,  
131 - InitialValue initial_text),  
132 - text_area (WebArgName web_arg_name,  
133 - String tag,  
134 - InitialValue initial_text),  
135 - text_area (WebArgName web_arg_name,  
136 - String tag,  
137 - InitialValue initial_text,  
138 - Int width,  
139 - Int height),  
140 -  
141 - //--- fields table --------------------------------------------------------------------  
142 - fields_table (String tag,  
143 - List(FormField) fields),  
144 -  
145 - //--- fields line ---------------------------------------------------------------------  
146 - fields_line (String tag,  
147 - List(FormField) fields),  
148 - fields_line (List(FormField) fields),  
149 -  
150 - //--- preview field -------------------------------------------------------------------  
151 - preview (String html_text),  
152 -  
153 - //--- submit button -------------------------------------------------------------------  
154 - submit (String action_name,  
155 - Maybe(String) label,  
156 - String button_text,  
157 - List((String,String)) extra_operands).  
158 -  
159 -  
160 - Convenience functions:  
161 -  
162 -public define FormField title(List(Text_Option) -> HTML_In_Form f) = title_f(f).  
163 -public define FormField  
164 - message(Result(List(Text_Option) -> HTML_In_Form,List(Text_Option) -> HTML_In_Form) f) = message_f(f).  
165 -public define FormField input(WebArgName web_arg_name,  
166 - List(Text_Option) -> HTML_In_Form tag,  
167 - Width width,  
168 - InitialValue init_value,  
169 - Mandatory mandatory)  
170 - = input_f(web_arg_name,tag,width,init_value,mandatory).  
171 -public define FormField password_input(WebArgName web_arg_name,  
172 - List(Text_Option) -> HTML_In_Form tag,  
173 - Mandatory mandatory)  
174 - = password_input_f(web_arg_name,tag,mandatory).  
175 -public define FormField explain(List(Text_Option) -> HTML_In_Form f) = explain_f(f).  
176 -public define FormField selector(WebArgName web_arg_name,  
177 - List(Text_Option) -> HTML_In_Form f,  
178 - List(String) items,  
179 - Maybe(InitialValue) selected,  
180 - Mandatory mandatory)  
181 - = selector_f(web_arg_name,f,items,selected,mandatory).  
182 -public define FormField checkbox(WebArgName web_arg_name,  
183 - List(Text_Option) -> HTML_In_Form f,  
184 - Bool checked,  
185 - Mandatory mandatory)  
186 - = checkbox_f(web_arg_name,f,checked,mandatory).  
187 -  
188 - Make the form itself with:  
189 -  
190 -public define HTML_Off_Form  
191 - generic_form  
192 - (  
193 - String form_name,  
194 - RGB background_color,  
195 - Int width,  
196 - List(FormField) fields  
197 - ).  
198 -  
199 -  
200 -  
201 - --- That's all for the public part ! --------------------------------------------------  
202 -  
203 -// TO DO update code of CXM generic form  
204 -define HTML_Row(HTML_In_Form)  
205 - format_form_field  
206 - (  
207 - FormField ff  
208 - ) =  
209 - with star = (Mandatory m) |-> (HTML_In_Form)text([color(rgb(255,0,0)),size(12)],  
210 - if m is  
211 - {  
212 - mandatory then "*",  
213 - non_mandatory then ""  
214 - }),  
215 - row(  
216 - if ff is  
217 - {  
218 - title(t) then (List(HTML_Cell(HTML_In_Form)))  
219 - [  
220 - cell([columns(3),h_center],text([size(16),bold,color(rgb(0,0,0))],t))  
221 - ],  
222 -  
223 - title(s,t) then (List(HTML_Cell(HTML_In_Form)))  
224 - [  
225 - cell([columns(3),h_center],text([size(s),bold,color(rgb(0,0,0))],t))  
226 - ],  
227 -  
228 - title_f(t) then (List(HTML_Cell(HTML_In_Form)))  
229 - [  
230 - cell([columns(3),h_center],t([size(16),bold,color(rgb(0,0,0))]))  
231 - ],  
232 -  
233 - message(r) then (List(HTML_Cell(HTML_In_Form))) if r is  
234 - {  
235 - error(msg) then [cell([columns(3),h_center],  
236 - text([size(10),color(rgb(240,0,0))],msg))]  
237 - ok(msg) then [cell([columns(3),h_center],  
238 - text([size(10),color(rgb(0,150,0))],msg))]  
239 - },  
240 -  
241 - message_f(r) then (List(HTML_Cell(HTML_In_Form))) if r is  
242 - {  
243 - error(msg) then [cell([columns(3),h_center],  
244 - msg([size(10),color(rgb(240,0,0))]))]  
245 - ok(msg) then [cell([columns(3),h_center],  
246 - msg([size(10),color(rgb(0,150,0))]))]  
247 - },  
248 -  
249 - input(wan,tag,w,init,mand) then (List(HTML_Cell(HTML_In_Form)))  
250 - [  
251 - cell([right ], text([size(10)],tag)),  
252 - cell([width(7) ], star(mand)),  
253 - cell([left ], text_input([], "",html_Id(""), wan, init,if w is  
254 - {  
255 - small then 10,  
256 - narrow then 50,  
257 - wide then 70,  
258 - custom(n) then n  
259 - }))  
260 - ],  
261 -  
262 - input(wan,w,init) then (List(HTML_Cell(HTML_In_Form)))  
263 - [  
264 - cell([left,columns(3) ], text_input([], "", html_Id(""), wan,init,if w is  
265 - {  
266 - small then 10,  
267 - narrow then 30,  
268 - wide then 70,  
269 - custom(n) then n  
270 - }))  
271 - ],  
272 -  
273 - input_f(wan,tag,w,init,mand) then (List(HTML_Cell(HTML_In_Form)))  
274 - [  
275 - cell([right ], tag([size(10)])),  
276 - cell([width(7) ], star(mand)),  
277 - cell([left ], text_input([], "", html_Id(""),wan,init,if w is  
278 - {  
279 - small then 15,  
280 - narrow then 30,  
281 - wide then 70,  
282 - custom(n) then n  
283 - }))  
284 - ],  
285 -  
286 - password_input(wan,tag,mand) then (List(HTML_Cell(HTML_In_Form)))  
287 - [  
288 - cell([right ], text([size(10)],tag)),  
289 - cell([width(7) ], star(mand)),  
290 - cell([left ], password_input([], "",html_Id(""), wan, init(""), 30))  
291 - ],  
292 -  
293 - password_input_f(wan,tag,mand) then (List(HTML_Cell(HTML_In_Form)))  
294 - [  
295 - cell([right ], tag([size(10)])),  
296 - cell([width(7) ], star(mand)),  
297 - cell([left ], password_input([], "",html_Id(""), wan, init(""), 30))  
298 - ],  
299 -  
300 - explain(t) then (List(HTML_Cell(HTML_In_Form)))  
301 - [  
302 - cell([columns(3),h_center],  
303 - table([nude],[row(cell([width(500)],  
304 - paragraph([/*justified,*/size(10),color(rgb(0,100,0))],literal(t))))]))  
305 - ],  
306 -  
307 - explain(t,w) then (List(HTML_Cell(HTML_In_Form)))  
308 - [  
309 - cell([columns(3),h_center],  
310 - table([nude],[row(cell(  
311 - if w is  
312 - {  
313 - auto then [],  
314 - custom(i) then [width(i)]  
315 - },  
316 - paragraph([/*justified,*/size(10),color(rgb(0,100,0))], literal(t))))]))  
317 - ],  
318 -  
319 - explain_f(t) then (List(HTML_Cell(HTML_In_Form)))  
320 - [  
321 - cell([columns(3),h_center],  
322 - table([nude],[row(cell([width(500)],  
323 - t([/*justified,*/size(10),color(rgb(0,100,0))])))]))  
324 - ],  
325 -  
326 - selector(wan,tag,items,selected,mand) then (List(HTML_Cell(HTML_In_Form)))  
327 - [  
328 - cell([right ], text([size(10)],tag)),  
329 - cell([width(7)], star(mand)),  
330 - cell([left ], if selected is  
331 - {  
332 - failure then selector([], "", html_Id(""), wan,1,items)  
333 - success(sel) then selector([], "", html_Id(""), wan,1,items, sel)  
334 - })  
335 - ],  
336 -  
337 - selector_f(wan,tag,items,selected,mand) then (List(HTML_Cell(HTML_In_Form)))  
338 - [  
339 - cell([right ], tag([size(10)])),  
340 - cell([width(7)], star(mand)),  
341 - cell([left ], if selected is  
342 - {  
343 - failure then selector([], "", html_Id(""), wan,1,items)  
344 - success(sel) then selector([], "", html_Id(""), wan,1,items, sel)  
345 - })  
346 - ],  
347 -  
348 - selector_c(wan,tag,items,selected,mand) then (List(HTML_Cell(HTML_In_Form)))  
349 - [  
350 - cell([right ], text([size(10)],tag)),  
351 - cell([width(7)], star(mand)),  
352 - cell([left ], if selected is  
353 - {  
354 - failure then selector_c([], "", html_Id(""), wan,1,items)  
355 - success(sel) then selector_c([], "", html_Id(""), wan,1,items,sel)  
356 - })  
357 - ],  
358 -  
359 - checkbox(wan,tag,checked,mand) then (List(HTML_Cell(HTML_In_Form)))  
360 - [  
361 - cell([right ], text([size(10)],tag)),  
362 - cell([width(7)], star(mand)),  
363 - cell([left ], check_box([], "",html_Id(""),wan, wav(wan.name),checked))  
364 - ],  
365 -  
366 - checkboxr(wan,tag,checked,mand) then (List(HTML_Cell(HTML_In_Form)))  
367 - [  
368 - cell([right ], check_box([], "",html_Id(""),wan, wav(wan.name),checked)),  
369 - cell([width(7)], star(mand)),  
370 - cell([left ], text([size(10)],tag))  
371 - ],  
372 -  
373 - checkbox_f(wan,tag,checked,mand) then (List(HTML_Cell(HTML_In_Form)))  
374 - [  
375 - cell([right ], tag([size(10)])),  
376 - cell([width(7)], star(mand)),  
377 - cell([left ], check_box([], "",html_Id(""),wan,wav(wan.name),checked))  
378 - ],  
379 -  
380 - radio_button(wan,wav,tag,checked,mand) then (List(HTML_Cell(HTML_In_Form)))  
381 - [  
382 - cell([right ], text([size(10)],tag)),  
383 - cell([width(7)], star(mand)),  
384 - cell([left ], radio_button([], "", html_Id(""), wan, wav, checked))  
385 - ],  
386 -  
387 - radio_buttonr(wan,wav,tag,checked,mand) then (List(HTML_Cell(HTML_In_Form)))  
388 - [  
389 - cell([right ], radio_button([], "", html_Id(""), wan, wav, checked)),  
390 - cell([width(7)], star(mand)),  
391 - cell([left ], text([size(10)],tag))  
392 - ],  
393 -  
394 - text_area(wan,tx) then (List(HTML_Cell(HTML_In_Form)))  
395 - [  
396 - cell([h_center,columns(3)],text_area([wrap_lines],wan,tx,75,10))  
397 - ],  
398 -  
399 - text_area(wan,tag,tx) then (List(HTML_Cell(HTML_In_Form)))  
400 - [  
401 - cell([right,top], text([size(10)],tag)),  
402 - cell([width(7)], text([],"")),  
403 - cell([h_center],text_area([wrap_lines],wan,tx,75,10))  
404 - ],  
405 -  
406 - text_area(wan,tag,tx,w,h) then (List(HTML_Cell(HTML_In_Form)))  
407 - [  
408 - cell([right,top], text([size(10)],tag)),  
409 - cell([width(7)], text([],"")),  
410 - cell([h_center],text_area([wrap_lines],wan,tx,w,h))  
411 - ],  
412 -  
413 - fields_table(tag,fields) then (List(HTML_Cell(HTML_In_Form)))  
414 - [  
415 - cell([right,top], text([size(10)],tag)),  
416 - cell([width(7)], text([],"")),  
417 - cell([left,top], table([],map((FormField ff2) |-> format_form_field(ff2),fields)))  
418 - ],  
419 -  
420 - fields_line(tag,fields) then (List(HTML_Cell(HTML_In_Form)))  
421 - [  
422 - cell([right,top], text([size(10)],tag)),  
423 - cell([width(7)], text([],"")),  
424 - cell([left,top], table([nude],[row([], //border(0,0,3,rgb(0,0,0))  
425 - map((FormField ff2) |-> cell([top],table([nude],[format_form_field(ff2)])),fields))]))  
426 - ],  
427 -  
428 - fields_line(fields) then (List(HTML_Cell(HTML_In_Form)))  
429 - [  
430 - cell([left,top,columns(3)], table([nude],[row([],  
431 - map((FormField ff2) |-> cell([top],table([nude],[format_form_field(ff2)])),fields))]))  
432 - ],  
433 -  
434 - preview(html_text) then (List(HTML_Cell(HTML_In_Form)))  
435 - [  
436 - cell([top,left,columns(3),background_color(rgb(255,255,255))],  
437 - table([border(0,8,0,rgb(0,0,0))],  
438 - [row(cell([left,top,height(200)],literal(html_text)))]))  
439 - ],  
440 -  
441 - submit(action_name,mb_label,button_text,extra_operands) then (List(HTML_Cell(HTML_In_Form)))  
442 - [  
443 - cell([columns(3),right],actioner(same,  
444 - if mb_label is  
445 - {  
446 - failure then same,  
447 - success(n) then same(n)  
448 - },  
449 - submit([], button_text),  
450 - action_name,  
451 - extra_operands))  
452 - ]  
453 - }).  
454 -  
455 -  
456 -  
457 -// TO DO update code of CXM generic form  
458 -public define HTML_Off_Form  
459 - generic_form  
460 - (  
461 - String form_name,  
462 - RGB bg_color,  
463 - Int w,  
464 - List(FormField) fields  
465 - ) =  
466 - table([border(0,0,5,bg_color),percentage_width(100),  
467 - background_color(bg_color)],[row(cell([h_center],  
468 - form(form_name,[],table([border(0,2,0,bg_color)],  
469 - map(format_form_field, fields)))))]).  
470 -  
471 -  
web/generic_login.anubis
@@ -28,7 +28,7 @@ read CXM_generic_form.anubis @@ -28,7 +28,7 @@ read CXM_generic_form.anubis
28 28
29 29
30 30
31 -public define HTML_Off_Form 31 +public define HTML
32 login_form 32 login_form
33 ( 33 (
34 String wrong_message, 34 String wrong_message,
@@ -62,7 +62,7 @@ public define Maybe($User) @@ -62,7 +62,7 @@ public define Maybe($User)
62 62
63 *** [1] Connection sur site sécurisée 63 *** [1] Connection sur site sécurisée
64 64
65 -public define HTML_Off_Form 65 +public define HTML
66 login_form 66 login_form
67 ( 67 (
68 String wrong_message, 68 String wrong_message,
web/generic_table.anubis deleted
1 -  
2 - *Project* The Anubis Project  
3 -  
4 - *Title* Generic table page.  
5 -  
6 - *Copyright* Copyright (c) Alain Prouté 2004.  
7 -  
8 -  
9 - *Author* Alain Prouté  
10 - *Author* Olivier Duvernois  
11 - *Author* David René (import into xlib)  
12 -  
13 - ----------------------------------------------------------------------------------------  
14 -  
15 -  
16 -  
17 -  
18 -read tools/basis.anubis  
19 -read common.anubis  
20 -read making_a_web_site.anubis  
21 -  
22 -  
23 - The purpose is to print on a html browser a table from a List($Data) using the function  
24 - 'generic_table()' describe below.  
25 -  
26 - Note : the explanations are only given for HTML_Item and its components. But they are  
27 - also available for HTML_Form and HTML_Element and their components.  
28 -  
29 -  
30 - A table may have the following look :  
31 -  
32 - +-----+----------+--------+-----------------------+ ...............  
33 - | | | | name 3 |  
34 - | num | name1 | name2 |-----------+-----------+ columns_name  
35 - | | | | name 31 | name 32 |  
36 - +-----+----------+--------+-----------+-----------+ ...............  
37 - | 1 | data11 | data12 | data131 | data132 | line 1 with background color a  
38 - +-----+----------+--------+-----------+-----------+ ...............  
39 - | 2 | data21 | data22 | data231 | data232 | line 2 with background color b  
40 - +-----+----------+--------+-----------+-----------+ ...............  
41 - | 3 | data31 | data32 | data331 | data332 | line 3 with background color a  
42 - +-----+----------+--------+-----------+-----------+ ...............  
43 -  
44 - | n | datan1 | datan2 | datan31 | datan32 | line n with background color ?  
45 - +-----+----------+--------+-----------+-----------+ ...............  
46 - |total| total1 | | | total32 | total line  
47 - +-----+----------+--------+-----------+-----------+ ...............  
48 -  
49 - For the total-line, assuming that datax1 to dataxn and datax32 to datan32 are numbers  
50 - (Int, Float or Maybe(Float)).  
51 -  
52 -  
53 - The columns name are just a List(Item_Row).  
54 -  
55 - The column 'num' is in the case you want to enumerate your data. The existence of this  
56 - column depends on the line function.  
57 -  
58 - Lines are given by the function : (RGB color,Int num,$Data d) -> Item_Row  
59 -  
60 - where : - (RGB)color is the color of the background of the row (the 'a color' or 'b  
61 - color');  
62 - - (Int)num the number of the data (to enumerate).  
63 -  
64 - So, this function must be written something like :  
65 -  
66 - (RGB color, Int num,$Data d) |->  
67 - row([background_color(color)], // and of course possibly other row-options  
68 - [  
69 - cell([], (Int -> $HTML)(num) )  
70 - . ($Data -> List(Cell))d // how data is printed in cells  
71 - ]).  
72 -  
73 - But, for the above convenient function with no enumeration, you can only write :  
74 -  
75 - (RGB color, $Data d) |->  
76 - row([background_color(color)], // and of course possibly other row-options  
77 - ($Data -> List(Cell))d // how data is printed in cells  
78 - ).  
79 -  
80 -  
81 - If you want to sum by column your data, use the following type :  
82 -  
83 -public type Total_Line($Data,$Upplet,$Row):  
84 - no_total,  
85 - total  
86 - (  
87 - ($Upplet,$Data) -> $Upplet sum_functions,  
88 - $Upplet -> $Row print_total_line,  
89 - $Upplet initial_value  
90 - ).  
91 -  
92 - $Row is for HTML_Row($HTML).  
93 - $Upplet represents the components of $Data that will be sum.  
94 -  
95 - Example :  
96 - with the above sheme table, $Data is something like :  
97 - type $Data  
98 - data  
99 - (  
100 - Data1 d1,  
101 - Data2 d2  
102 - Data3 d3  
103 - ).  
104 - and type Data3:  
105 - data3  
106 - (  
107 - Data31 d31,  
108 - Data32 d32  
109 - ).  
110 -  
111 - So $Upplet will be (Data1,Data32) : sums are wanted for those 2 datum  
112 -  
113 - The function ($Upplet,$Data) -> $Upplet will be written like :  
114 - ($Upplet u,$Data d) -> if u is (u1,u2) then (u1+d1(d), u2+d32(d3(d)))  
115 -  
116 - (if of course (Data1 + Data1) and (Data32 + Data32) are defined).  
117 -  
118 -  
119 -  
120 - - Several columns -  
121 - -------------------  
122 -  
123 - If you want to print your data on sevaral columns (i.e. considering the above table  
124 - scheme as a column), you must specify the number of columns. You will obtain :  
125 -  
126 - Here is a List($Data) : l = [a,b,c,d,e,f,g,h,i,j,k,l,m];  
127 - and f : (RGB,Int,$Data) -> Item_Row  
128 - You want to print this list on 3 columns.  
129 - The result will be :  
130 -  
131 -  
132 - +-----------+-----------+-----------+  
133 - | col.names | col.names | col.names |  
134 - +-----------+-----------+-----------+  
135 - | f(a) | f(f) | f(k) |  
136 - +-----------+-----------+-----------+  
137 - | f(b) | f(g) | f(l) |  
138 - +-----------+-----------+-----------+ Each column is a table as defined  
139 - | f(c) | f(h) | f(m) | above.  
140 - +-----------+-----------+-----------+  
141 - | f(d) | f(i) | |  
142 - +-----------+-----------+-----------+  
143 - | f(e) | f(j) | |  
144 - +-----------+-----------+-----------+  
145 -  
146 -  
147 - If several columns are required, it's also asked for spaces between two colums.  
148 -  
149 - So use the following type :  
150 -  
151 -public type HowManyColumns:  
152 - _1,  
153 - several (Int col_nb,  
154 - Int spacer).  
155 -  
156 -  
157 -  
158 -  
159 - - Now the Generic table definition -  
160 - ------------------------------------  
161 -  
162 - Here is the most customizable generic table. Below, they are some convenience functions.  
163 -  
164 -public define HTML_Off_Form  
165 - generic_table  
166 - (  
167 - List($Data) data,  
168 - List(Table_Option) lto,  
169 - List(HTML_Row(HTML_Off_Form)) columns_name,  
170 - HowManyColumns number_of_columns,  
171 - (RGB,Int,$Data) -> HTML_Row(HTML_Off_Form) line_format,  
172 - RGB a_color,  
173 - RGB b_color,  
174 - Total_Line($Data,$Upplet,HTML_Row(HTML_Off_Form)) total_line  
175 - ).  
176 -  
177 -public define HTML_In_Form  
178 - generic_table  
179 - (  
180 - List($Data) data,  
181 - List(Table_Option) lto,  
182 - List(HTML_Row(HTML_In_Form)) columns_name,  
183 - HowManyColumns number_of_columns,  
184 - (RGB,Int,$Data) -> HTML_Row(HTML_In_Form) line_format,  
185 - RGB a_color,  
186 - RGB b_color,  
187 - Total_Line($Data,$Upplet,HTML_Row(HTML_In_Form)) total_line  
188 - ).  
189 -  
190 -  
191 -  
192 - Note :  
193 - List(Table_Option) : if you choose 'nude' (i.e. border(0,0,0)), don't forget a  
194 - horizontal spacer between the cells contain in the 'line_format' row. If you don't put  
195 - any, each data will be closer to the next one.  
196 -  
197 -  
198 -  
199 - - Convenience functions -  
200 - -------------------------  
201 -  
202 - 1/ Table without multicolumns, enumeration and total-line:  
203 -  
204 -public define HTML_Off_Form  
205 - generic_table  
206 - (  
207 - List($Data) data,  
208 - List(Table_Option) lto,  
209 - List(HTML_Row(HTML_Off_Form)) columns_name,  
210 - (RGB,$Data) -> HTML_Row(HTML_Off_Form) line_format,  
211 - RGB a_color,  
212 - RGB b_color  
213 - ).  
214 -  
215 -public define HTML_In_Form  
216 - generic_table  
217 - (  
218 - List($Data) data,  
219 - List(Table_Option) lto,  
220 - List(HTML_Row(HTML_In_Form)) columns_name,  
221 - (RGB,$Data) -> HTML_Row(HTML_In_Form) line_format,  
222 - RGB a_color,  
223 - RGB b_color  
224 - ).  
225 -  
226 -  
227 -  
228 - 2/ Table with total-line and without multicolumns, enumeration.  
229 -  
230 -  
231 -public define HTML_Off_Form  
232 - generic_table  
233 - (  
234 - List($Data) data,  
235 - List(Table_Option) lto,  
236 - List(HTML_Row(HTML_Off_Form)) columns_name,  
237 - (RGB,$Data) -> HTML_Row(HTML_Off_Form) line_format,  
238 - RGB a_color,  
239 - RGB b_color,  
240 - Total_Line($Data,$Upplet,HTML_Row(HTML_Off_Form)) total_line  
241 - ).  
242 -  
243 -public define HTML_In_Form  
244 - generic_table  
245 - (  
246 - List($Data) data,  
247 - List(Table_Option) lto,  
248 - List(HTML_Row(HTML_In_Form)) columns_name,  
249 - (RGB,$Data) -> HTML_Row(HTML_In_Form) line_format,  
250 - RGB a_color,  
251 - RGB b_color,  
252 - Total_Line($Data,$Upplet,HTML_Row(HTML_In_Form)) total_line  
253 - ).  
254 -  
255 -  
256 - 3/ Table with multicolumns, enumeration, but without total  
257 -  
258 -public define HTML_Off_Form  
259 - generic_table  
260 - (  
261 - List($Data) data,  
262 - List(Table_Option) lto,  
263 - List(HTML_Row(HTML_Off_Form)) columns_name,  
264 - HowManyColumns number_of_columns,  
265 - (RGB,Int,$Data) -> HTML_Row(HTML_Off_Form) line_format,  
266 - RGB a_color,  
267 - RGB b_color  
268 - ).  
269 -  
270 -public define HTML_In_Form  
271 - generic_table  
272 - (  
273 - List($Data) data,  
274 - List(Table_Option) lto,  
275 - List(HTML_Row(HTML_In_Form)) columns_name,  
276 - HowManyColumns number_of_columns,  
277 - (RGB,Int,$Data) -> HTML_Row(HTML_In_Form) line_format,  
278 - RGB a_color,  
279 - RGB b_color  
280 - ).  
281 -  
282 -  
283 -  
284 - 4/ Table with multicolumns and without enumeration & total  
285 -  
286 -public define HTML_Off_Form  
287 - generic_table  
288 - (  
289 - List($Data) data,  
290 - List(Table_Option) lto,  
291 - List(HTML_Row(HTML_Off_Form)) columns_name,  
292 - HowManyColumns number_of_columns,  
293 - (RGB,$Data) -> HTML_Row(HTML_Off_Form) line_format,  
294 - RGB a_color,  
295 - RGB b_color  
296 - ).  
297 -  
298 -public define HTML_In_Form  
299 - generic_table  
300 - (  
301 - List($Data) data,  
302 - List(Table_Option) lto,  
303 - List(HTML_Row(HTML_In_Form)) columns_name,  
304 - HowManyColumns number_of_columns,  
305 - (RGB,$Data) -> HTML_Row(HTML_In_Form) line_format,  
306 - RGB a_color,  
307 - RGB b_color  
308 - ).  
309 -  
310 -  
311 - --- That's all for public part. -------------------------------------------------------------------------  
312 -  
313 -  
314 - When the datum $Data must be presented on several columns, the initial list must be  
315 - re-composed : sot the type Print_Table.  
316 -  
317 -type Print_Table($Data):  
318 - print_table  
319 - (  
320 - $Data data,  
321 - Int num  
322 - ).  
323 -  
324 -  
325 - *** Transform List($Data) into List(Print_Table($Data))  
326 -  
327 -  
328 -define (List(Print_Table($Data)),List($Data))  
329 - get_n_elements  
330 - (  
331 - List($Data) l,  
332 - List(Print_Table($Data)) result,  
333 - Int n,  
334 - Int ct, // counter  
335 - Int num  
336 - ) =  
337 - if l is  
338 - {  
339 - [] then (reverse(result),[]),  
340 - [h . t] then  
341 - if ct = n  
342 - then (reverse([print_table(h,num+1) . result]),t)  
343 - else get_n_elements(t,[print_table(h,num+1) . result],n,ct+1,num+1)  
344 - }.  
345 -  
346 -  
347 -define List(List(Print_Table($Data)))  
348 - short_lists  
349 - (  
350 - List($Data) l,  
351 - Int nb, // number of element of short list  
352 - Int ct // counter for numbering data (initialized at 0)  
353 - ) =  
354 - if get_n_elements(l,[],nb,1,ct) is (result,unused)  
355 - then if unused is  
356 - {  
357 - [] then [result],  
358 - [_ . _] then [result . short_lists(unused,nb,ct+nb)]  
359 - }.  
360 -  
361 -  
362 - - Generic row -  
363 - ---------------  
364 -  
365 -define (List(HTML_Row($HTML)),$Upplet)  
366 - generic_rows  
367 - (  
368 - List(Print_Table($Data)) lpt,  
369 - (RGB,Int,$Data) -> HTML_Row($HTML) line_format,  
370 - RGB a_color,  
371 - RGB b_color,  
372 - ($Upplet,$Data) -> $Upplet do_sum,  
373 - List(HTML_Row($HTML)) rows,  
374 - $Upplet sum  
375 - ) =  
376 - if lpt is  
377 - {  
378 - [] then (reverse(rows),sum),  
379 - [h . t] then  
380 - generic_rows(t,line_format,b_color,a_color,do_sum,  
381 - [line_format(a_color,num(h),data(h)) . rows],do_sum(sum,data(h)))  
382 - }.  
383 -  
384 -  
385 -  
386 - - HTML_In_Form -  
387 - ----------------  
388 -  
389 -define List(HTML_Cell(HTML_In_Form))  
390 - generic_cells  
391 - (  
392 - List(List(Print_Table($Data))) print_data,  
393 - List(Table_Option) lto,  
394 - List(HTML_Row(HTML_In_Form)) names,  
395 - (RGB,Int,$Data) -> HTML_Row(HTML_In_Form) line_format,  
396 - RGB a_color,  
397 - RGB b_color,  
398 - ($Upplet,$Data) -> $Upplet do_sum,  
399 - $Upplet -> HTML_Row(HTML_In_Form) total_line,  
400 - $Upplet value,  
401 - Int spacer  
402 - ) =  
403 - if print_data is  
404 - {  
405 - [] then (List(HTML_Cell(HTML_In_Form))) [],  
406 - [h . t] then  
407 - if generic_rows(h,line_format,a_color,b_color,do_sum,(List(HTML_Row(HTML_In_Form)))[],value) is  
408 - (rows,new_value) then  
409 - if t is []  
410 - then [cell([top],table(lto,names+rows+[total_line(new_value)]))]  
411 - else [  
412 - cell([top],table(lto,append(names,rows)))  
413 - . if spacer = 0  
414 - then generic_cells  
415 - (t,lto,names,line_format,a_color,b_color,do_sum,total_line,new_value,spacer)  
416 - else [cell([width(spacer)],text([],""))  
417 - . generic_cells  
418 - (t,lto,names,line_format,a_color,b_color,do_sum,total_line,new_value,spacer)]  
419 - ]  
420 - }.  
421 -  
422 -//public define Int  
423 -// Int x (mod Int y)  
424 -// =  
425 -// if x / y is  
426 -// {  
427 -// failure then 0,  
428 -// success(result) then  
429 -// if result is (q, r) then r  
430 -// }.  
431 -//  
432 -  
433 -  
434 -public define HTML_In_Form  
435 - generic_table  
436 - (  
437 - List($Data) l,  
438 - List(Table_Option) lto,  
439 - List(HTML_Row(HTML_In_Form)) names,  
440 - HowManyColumns hm_col,  
441 - (RGB,Int,$Data) -> HTML_Row(HTML_In_Form) line_format,  
442 - RGB a_color,  
443 - RGB b_color,  
444 - Total_Line($Data,$Upplet,HTML_Row(HTML_In_Form)) total_line  
445 - ) =  
446 - table([],  
447 - if l is []  
448 - then []  
449 - else  
450 - with nbl = length(l),  
451 - [  
452 - row([],  
453 - if total_line is  
454 - {  
455 - no_total then  
456 - with col_nb = if hm_col is  
457 - {  
458 - _1 then 1,  
459 - several(n,_) then n  
460 - },  
461 - with spacer = if hm_col is  
462 - {  
463 - _1 then 0,  
464 - several(n,sp) then sp  
465 - },  
466 - generic_cells  
467 - (short_lists(l,nbl\col_nb + if (nbl (mod col_nb)) > 0 then 1 else 0,0),  
468 - lto,names,line_format,a_color,b_color,  
469 - (One u,$Data d) |-> unique,(One _) |-> row([],[]),unique,spacer),  
470 - total(sum_fct,total_line,init) then  
471 - with col_nb = if hm_col is  
472 - {  
473 - _1 then 1,  
474 - several(n,_) then n  
475 - },  
476 - with spacer = if hm_col is  
477 - {  
478 - _1 then 0,  
479 - several(n,sp) then sp  
480 - },  
481 - generic_cells  
482 - (  
483 - short_lists(l,nbl\col_nb + if (nbl (mod col_nb)) > 0 then 1 else 0,0),  
484 - lto,names,line_format,a_color,b_color,  
485 - sum_fct,total_line,init,spacer  
486 - )  
487 - })  
488 - ]).  
489 -  
490 -  
491 - - HTML_Off_Form -  
492 - ----------------  
493 -  
494 -define List(HTML_Cell(HTML_Off_Form))  
495 - generic_cells  
496 - (  
497 - List(List(Print_Table($Data))) print_data,  
498 - List(Table_Option) lto,  
499 - List(HTML_Row(HTML_Off_Form)) names,  
500 - (RGB,Int,$Data) -> HTML_Row(HTML_Off_Form) line_format,  
501 - RGB a_color,  
502 - RGB b_color,  
503 - ($Upplet,$Data) -> $Upplet do_sum,  
504 - $Upplet -> HTML_Row(HTML_Off_Form) total_line,  
505 - $Upplet value,  
506 - Int spacer  
507 - ) =  
508 - if print_data is  
509 - {  
510 - [] then (List(HTML_Cell(HTML_Off_Form))) [],  
511 - [h . t] then  
512 - if generic_rows(h,line_format,a_color,b_color,do_sum,(List(HTML_Row(HTML_Off_Form)))[],value) is  
513 - (rows,new_value) then  
514 - if t is []  
515 - then [cell([top],table(lto,(names+rows+[total_line(new_value)])))]  
516 - else [  
517 - cell([top],table(lto,append(names,rows)))  
518 - . if spacer =0  
519 - then generic_cells  
520 - (t,lto,names,line_format,a_color,b_color,do_sum,total_line,new_value,spacer)  
521 - else [cell([width(spacer)],text([],""))  
522 - . generic_cells  
523 - (t,lto,names,line_format,a_color,b_color,do_sum,total_line,new_value,spacer)]  
524 - ]  
525 - }.  
526 -  
527 -public define HTML_Off_Form  
528 - generic_table  
529 - (  
530 - List($Data) l,  
531 - List(Table_Option) lto,  
532 - List(HTML_Row(HTML_Off_Form)) names,  
533 - HowManyColumns hm_col,  
534 - (RGB,Int,$Data) -> HTML_Row(HTML_Off_Form) line_format,  
535 - RGB a_color,  
536 - RGB b_color,  
537 - Total_Line($Data,$Upplet,HTML_Row(HTML_Off_Form)) total_line  
538 - ) =  
539 - table([],  
540 - with nbl = length(l),  
541 - [  
542 - row([],  
543 - if total_line is  
544 - {  
545 - no_total then  
546 - with col_nb = if hm_col is  
547 - {  
548 - _1 then 1,  
549 - several(n,_) then n  
550 - },  
551 - with spacer = if hm_col is  
552 - {  
553 - _1 then 0,  
554 - several(n,sp) then sp  
555 - },  
556 - generic_cells  
557 - (  
558 - short_lists(l,nbl\col_nb + if (nbl (mod col_nb)) > 0 then 1 else 0,0),  
559 - lto,names,line_format,a_color,b_color,  
560 - (One u,$Data d) |-> unique,(One _) |-> row([],[]),unique,spacer  
561 - ),  
562 - total(sum_fct,total_line,init) then  
563 - with col_nb = if hm_col is  
564 - {  
565 - _1 then 1,  
566 - several(n,_) then n  
567 - },  
568 - with spacer = if hm_col is  
569 - {  
570 - _1 then 0,  
571 - several(n,sp) then sp  
572 - },  
573 - generic_cells  
574 - (  
575 - short_lists(l,nbl\col_nb + if (nbl (mod col_nb)) > 0 then 1 else 0,0),  
576 - lto,names,line_format,a_color,b_color,  
577 - sum_fct,total_line,init,spacer  
578 - )  
579 - })  
580 - ]).  
581 -  
582 -  
583 -  
584 - - Convenience functions :  
585 -  
586 -public define HTML_Off_Form  
587 - generic_table  
588 - (  
589 - List($Data) data,  
590 - List(Table_Option) lto,  
591 - List(HTML_Row(HTML_Off_Form)) columns_name,  
592 - (RGB,$Data) -> HTML_Row(HTML_Off_Form) line_format,  
593 - RGB a_color,  
594 - RGB b_color  
595 - ) =  
596 - generic_table  
597 - (  
598 - (List($Data)) data,  
599 - (List(Table_Option)) lto,  
600 - (List(HTML_Row(HTML_Off_Form))) columns_name,  
601 - (HowManyColumns) _1,  
602 - ((RGB,Int,$Data) -> HTML_Row(HTML_Off_Form)) (RGB r,Int n,$Data d) |-> line_format(r,d),  
603 - (RGB) a_color,  
604 - (RGB) b_color,  
605 - (Total_Line($Data,$Data,HTML_Row(HTML_Off_Form))) no_total  
606 - ).  
607 -  
608 -public define HTML_In_Form  
609 - generic_table  
610 - (  
611 - List($Data) data,  
612 - List(Table_Option) lto,  
613 - List(HTML_Row(HTML_In_Form)) columns_name,  
614 - (RGB,$Data) -> HTML_Row(HTML_In_Form) line_format,  
615 - RGB a_color,  
616 - RGB b_color  
617 - ) =  
618 - generic_table  
619 - (  
620 - (List($Data)) data,  
621 - (List(Table_Option)) lto,  
622 - (List(HTML_Row(HTML_In_Form))) columns_name,  
623 - (HowManyColumns) _1,  
624 - ((RGB,Int,$Data) -> HTML_Row(HTML_In_Form)) (RGB r,Int n,$Data d) |-> line_format(r,d),  
625 - (RGB) a_color,  
626 - (RGB) b_color,  
627 - (Total_Line($Data,$Data,HTML_Row(HTML_In_Form))) no_total  
628 - ).  
629 -  
630 -  
631 - 2/ Table with total-line and without multicolumns, enumeration.  
632 -  
633 -  
634 -public define HTML_Off_Form  
635 - generic_table  
636 - (  
637 - List($Data) data,  
638 - List(Table_Option) lto,  
639 - List(HTML_Row(HTML_Off_Form)) columns_name,  
640 - (RGB,$Data) -> HTML_Row(HTML_Off_Form) line_format,  
641 - RGB a_color,  
642 - RGB b_color,  
643 - Total_Line($Data,$Upplet,HTML_Row(HTML_Off_Form)) total_line  
644 - ) =  
645 - generic_table  
646 - (  
647 - (List($Data)) data,  
648 - (List(Table_Option)) lto,  
649 - (List(HTML_Row(HTML_Off_Form))) columns_name,  
650 - (HowManyColumns) _1,  
651 - ((RGB,Int,$Data) -> HTML_Row(HTML_Off_Form)) (RGB r,Int n,$Data d) |-> line_format(r,d),  
652 - (RGB) a_color,  
653 - (RGB) b_color,  
654 - (Total_Line($Data,$Upplet,(HTML_Row(HTML_Off_Form)))) total_line  
655 - ).  
656 -  
657 -public define HTML_In_Form  
658 - generic_table  
659 - (  
660 - List($Data) data,  
661 - List(Table_Option) lto,  
662 - List(HTML_Row(HTML_In_Form)) columns_name,  
663 - (RGB,$Data) -> HTML_Row(HTML_In_Form) line_format,  
664 - RGB a_color,  
665 - RGB b_color,  
666 - Total_Line($Data,$Upplet,HTML_Row(HTML_In_Form)) total_line  
667 - ) =  
668 - generic_table  
669 - (  
670 - (List($Data)) data,  
671 - (List(Table_Option)) lto,  
672 - (List(HTML_Row(HTML_In_Form))) columns_name,  
673 - (HowManyColumns) _1,  
674 - ((RGB,Int,$Data) -> HTML_Row(HTML_In_Form)) (RGB r,Int n,$Data d) |-> line_format(r,d),  
675 - (RGB) a_color,  
676 - (RGB) b_color,  
677 - (Total_Line($Data,$Upplet,(HTML_Row(HTML_In_Form)))) total_line  
678 - ).  
679 -  
680 -  
681 -  
682 -  
683 - 3/ Table with multicolumns, enumeration, but without total  
684 -  
685 -public define HTML_Off_Form  
686 - generic_table  
687 - (  
688 - List($Data) data,  
689 - List(Table_Option) lto,  
690 - List(HTML_Row(HTML_Off_Form)) columns_name,  
691 - HowManyColumns number_of_columns,  
692 - (RGB,Int,$Data) -> HTML_Row(HTML_Off_Form) line_format,  
693 - RGB a_color,  
694 - RGB b_color  
695 - ) =  
696 - generic_table  
697 - (  
698 - (List($Data)) data,  
699 - (List(Table_Option)) lto,  
700 - (List(HTML_Row(HTML_Off_Form))) columns_name,  
701 - (HowManyColumns) number_of_columns,  
702 - ((RGB,Int,$Data) -> HTML_Row(HTML_Off_Form)) (RGB r,Int n,$Data d) |-> line_format(r,n,d),  
703 - (RGB) a_color,  
704 - (RGB) b_color,  
705 - (Total_Line($Data,$Data,(HTML_Row(HTML_Off_Form)))) no_total  
706 - ).  
707 -  
708 -  
709 -public define HTML_In_Form  
710 - generic_table  
711 - (  
712 - List($Data) data,  
713 - List(Table_Option) lto,  
714 - List(HTML_Row(HTML_In_Form)) columns_name,  
715 - HowManyColumns number_of_columns,  
716 - (RGB,Int,$Data) -> HTML_Row(HTML_In_Form) line_format,  
717 - RGB a_color,  
718 - RGB b_color  
719 - ) =  
720 - generic_table  
721 - (  
722 - (List($Data)) data,  
723 - (List(Table_Option)) lto,  
724 - (List(HTML_Row(HTML_In_Form))) columns_name,  
725 - (HowManyColumns) number_of_columns,  
726 - ((RGB,Int,$Data) -> HTML_Row(HTML_In_Form)) (RGB r,Int n,$Data d) |-> line_format(r,n,d),  
727 - (RGB) a_color,  
728 - (RGB) b_color,  
729 - (Total_Line($Data,$Data,(HTML_Row(HTML_In_Form)))) no_total  
730 - ).  
731 -  
732 -  
733 -  
734 - 4/ Table with multicolumns and without enumeration & total  
735 -  
736 -public define HTML_Off_Form  
737 - generic_table  
738 - (  
739 - List($Data) data,  
740 - List(Table_Option) lto,  
741 - List(HTML_Row(HTML_Off_Form)) columns_name,  
742 - HowManyColumns number_of_columns,  
743 - (RGB,$Data) -> HTML_Row(HTML_Off_Form) line_format,  
744 - RGB a_color,  
745 - RGB b_color  
746 - ) =  
747 - generic_table  
748 - (  
749 - (List($Data)) data,  
750 - (List(Table_Option)) lto,  
751 - (List(HTML_Row(HTML_Off_Form))) columns_name,  
752 - (HowManyColumns) number_of_columns,  
753 - ((RGB,Int,$Data) -> HTML_Row(HTML_Off_Form)) (RGB r,Int n,$Data d) |-> line_format(r,d),  
754 - (RGB) a_color,  
755 - (RGB) b_color,  
756 - (Total_Line($Data,$Data,(HTML_Row(HTML_Off_Form)))) no_total  
757 - ).  
758 -  
759 -  
760 -public define HTML_In_Form  
761 - generic_table  
762 - (  
763 - List($Data) data,  
764 - List(Table_Option) lto,  
765 - List(HTML_Row(HTML_In_Form)) columns_name,  
766 - HowManyColumns number_of_columns,  
767 - (RGB,$Data) -> HTML_Row(HTML_In_Form) line_format,  
768 - RGB a_color,  
769 - RGB b_color  
770 - ) =  
771 - generic_table  
772 - (  
773 - (List($Data)) data,  
774 - (List(Table_Option)) lto,  
775 - (List(HTML_Row(HTML_In_Form))) columns_name,  
776 - (HowManyColumns) number_of_columns,  
777 - ((RGB,Int,$Data) -> HTML_Row(HTML_In_Form)) (RGB r,Int n,$Data d) |-> line_format(r,d),  
778 - (RGB) a_color,  
779 - (RGB) b_color,  
780 - (Total_Line($Data,$Data,(HTML_Row(HTML_In_Form)))) no_total  
781 - ).  
782 -  
783 -  
784 -  
785 -  
web/html_tooltip.anubis
@@ -11,9 +11,9 @@ read tools/basis.anubis @@ -11,9 +11,9 @@ read tools/basis.anubis
11 read xlib/web/common.anubis 11 read xlib/web/common.anubis
12 read xlib/web/making_a_web_site.anubis 12 read xlib/web/making_a_web_site.anubis
13 13
14 -//public type HTML_Off_Form:... 14 +//public type HTML:...
15 15
16 - public define HTML_Off_Form 16 + public define HTML
17 html_tooltip 17 html_tooltip
18 ( 18 (
19 String title, 19 String title,
@@ -23,7 +23,7 @@ read xlib/web/making_a_web_site.anubis @@ -23,7 +23,7 @@ read xlib/web/making_a_web_site.anubis
23 23
24 actioner(same,same, link([id("help_" + keyword), class("jTip jTip_help"), attr("target", "_blank")], " ", success(title)), "ajax_show_tooltip", [("tooltip_id", keyword)], []). 24 actioner(same,same, link([id("help_" + keyword), class("jTip jTip_help"), attr("target", "_blank")], " ", success(title)), "ajax_show_tooltip", [("tooltip_id", keyword)], []).
25 25
26 - public define HTML_Off_Form 26 + public define HTML
27 html_tooltip 27 html_tooltip
28 ( 28 (
29 String title, 29 String title,
@@ -55,7 +55,7 @@ read xlib/web/making_a_web_site.anubis @@ -55,7 +55,7 @@ read xlib/web/making_a_web_site.anubis
55 55
56 actioner(same,same, link([id("help_" + keyword), class("jTip jTip_help"), attr("target", "_blank")], " ", success(title)), "ajax_show_tooltip", [("tooltip_id", keyword), ("width", to_decimal(width))], []). 56 actioner(same,same, link([id("help_" + keyword), class("jTip jTip_help"), attr("target", "_blank")], " ", success(title)), "ajax_show_tooltip", [("tooltip_id", keyword), ("width", to_decimal(width))], []).
57 57
58 - public define HTML_Off_Form 58 + public define HTML
59 html_tooltip_ext 59 html_tooltip_ext
60 ( 60 (
61 String title, 61 String title,
@@ -64,7 +64,7 @@ read xlib/web/making_a_web_site.anubis @@ -64,7 +64,7 @@ read xlib/web/making_a_web_site.anubis
64 ) = 64 ) =
65 actioner(same,same, link([id("help_" + keyword), class("jTip jTip_"+class_suffix), attr("target", "_blank")], " ", success(title)), "ajax_show_tooltip", [("tooltip_ext", keyword)], []). 65 actioner(same,same, link([id("help_" + keyword), class("jTip jTip_"+class_suffix), attr("target", "_blank")], " ", success(title)), "ajax_show_tooltip", [("tooltip_ext", keyword)], []).
66 66
67 - public define HTML_Off_Form 67 + public define HTML
68 html_tooltip_ext 68 html_tooltip_ext
69 ( 69 (
70 String title, 70 String title,
web/jQuery/jq_animate.anubis
@@ -378,7 +378,7 @@ public define List(HTML_Head_Tag) @@ -378,7 +378,7 @@ public define List(HTML_Head_Tag)
378 ) = 378 ) =
379 generate_head_tags(jq_selector, anims). 379 generate_head_tags(jq_selector, anims).
380 380
381 -public define HTML_Partial_Content 381 +public define HTML
382 jquery_animate 382 jquery_animate
383 ( 383 (
384 JQuerySelector jq_selector, 384 JQuerySelector jq_selector,
@@ -394,7 +394,7 @@ public define List(HTML_Head_Tag) @@ -394,7 +394,7 @@ public define List(HTML_Head_Tag)
394 ) = 394 ) =
395 generate_head_tags(jq_selector, [ anim_type ]). 395 generate_head_tags(jq_selector, [ anim_type ]).
396 396
397 -public define HTML_Partial_Content 397 +public define HTML
398 jquery_animate 398 jquery_animate
399 ( 399 (
400 JQuerySelector jq_selector, 400 JQuerySelector jq_selector,
web/jQuery/jq_button.anubis
@@ -68,18 +68,18 @@ define HTML_Head_Tag @@ -68,18 +68,18 @@ define HTML_Head_Tag
68 js_inline(jquery_ready("$('#"+button_id+"').click(function(e){" + js_action + "});")) 68 js_inline(jquery_ready("$('#"+button_id+"').click(function(e){" + js_action + "});"))
69 . 69 .
70 70
71 -define HTML_Partial_Content 71 +define HTML
72 _jquery_buttons 72 _jquery_buttons
73 ( 73 (
74 List(JQuery_button) buttons, 74 List(JQuery_button) buttons,
75 List(HTML_Head_Tag) html_tags, 75 List(HTML_Head_Tag) html_tags,
76 - List(HTML_Off_Form) html_buttons 76 + List(HTML) html_buttons
77 ) 77 )
78 = 78 =
79 if buttons is 79 if buttons is
80 { 80 {
81 [ ] then 81 [ ] then
82 - partial_content( 82 + head_tags(
83 reverse(html_tags), 83 reverse(html_tags),
84 sequence(reverse(html_buttons)) 84 sequence(reverse(html_buttons))
85 ), 85 ),
@@ -158,14 +158,14 @@ define HTML_Partial_Content @@ -158,14 +158,14 @@ define HTML_Partial_Content
158 } 158 }
159 . 159 .
160 160
161 -public define HTML_Partial_Content 161 +public define HTML
162 jquery_buttons 162 jquery_buttons
163 ( 163 (
164 String buttons_container_id, 164 String buttons_container_id,
165 List(JQuery_button) buttons 165 List(JQuery_button) buttons
166 ) 166 )
167 = 167 =
168 - partial_content( 168 + head_tags(
169 [ js_inline(jquery_ready("$('#"+buttons_container_id+"').buttonset();")) ], 169 [ js_inline(jquery_ready("$('#"+buttons_container_id+"').buttonset();")) ],
170 div(id(buttons_container_id), _jquery_buttons(buttons, [], [])) 170 div(id(buttons_container_id), _jquery_buttons(buttons, [], []))
171 // sequence([ 171 // sequence([
@@ -176,7 +176,7 @@ public define HTML_Partial_Content @@ -176,7 +176,7 @@ public define HTML_Partial_Content
176 ) 176 )
177 . 177 .
178 178
179 -public define HTML_Partial_Content 179 +public define HTML
180 jquery_button 180 jquery_button
181 ( 181 (
182 JQuery_button button 182 JQuery_button button
@@ -184,11 +184,11 @@ public define HTML_Partial_Content @@ -184,11 +184,11 @@ public define HTML_Partial_Content
184 = 184 =
185 if button is jQuery_button(bt_type, id, name, label, actioner, primary, secondary) then 185 if button is jQuery_button(bt_type, id, name, label, actioner, primary, secondary) then
186 with onclick_action=jquery_button_get_onclick_action(id, actioner), 186 with onclick_action=jquery_button_get_onclick_action(id, actioner),
187 -// btn_seq = (HTML_Off_Form)sequence([literal("<button type=\""+to_String(bt_type)+"\" id=\""+id+"\" name=\""+name+"\">"), table([attr("cellspacing", "5")], [row([cell(text(label))])]), literal("</button>")]),  
188 - btn_seq = (HTML_Off_Form)sequence([literal("<button class=\"cxm_button\" type=\""+to_String(bt_type)+"\" id=\""+id+"\" name=\""+name+"\">"+label+"</button>")]), 187 +// btn_seq = (HTML)sequence([literal("<button type=\""+to_String(bt_type)+"\" id=\""+id+"\" name=\""+name+"\">"), table([attr("cellspacing", "5")], [row([cell(text(label))])]), literal("</button>")]),
  188 + btn_seq = (HTML)sequence([literal("<button class=\"cxm_button\" type=\""+to_String(bt_type)+"\" id=\""+id+"\" name=\""+name+"\">"+label+"</button>")]),
189 if jquery_icon_to_string(primary) = "" then 189 if jquery_icon_to_string(primary) = "" then
190 if jquery_icon_to_string(secondary) = "" then 190 if jquery_icon_to_string(secondary) = "" then
191 - partial_content( 191 + head_tags(
192 [ 192 [
193 js_inline(jquery_ready("$('#"+id+"').button();")), 193 js_inline(jquery_ready("$('#"+id+"').button();")),
194 onclick_action 194 onclick_action
@@ -198,7 +198,7 @@ public define HTML_Partial_Content @@ -198,7 +198,7 @@ public define HTML_Partial_Content
198 //literal("<button type=\""+to_String(bt_type)+"\" id=\""+id+"\" name=\""+name+"\">"+label+"</button>") 198 //literal("<button type=\""+to_String(bt_type)+"\" id=\""+id+"\" name=\""+name+"\">"+label+"</button>")
199 ) 199 )
200 else 200 else
201 - partial_content( 201 + head_tags(
202 [ 202 [
203 js_inline(jquery_ready("$('#"+id+"').button({icons:{secondary:'"+jquery_icon_to_string(secondary)+"'}});")), 203 js_inline(jquery_ready("$('#"+id+"').button({icons:{secondary:'"+jquery_icon_to_string(secondary)+"'}});")),
204 onclick_action 204 onclick_action
@@ -208,7 +208,7 @@ public define HTML_Partial_Content @@ -208,7 +208,7 @@ public define HTML_Partial_Content
208 ) 208 )
209 else 209 else
210 if jquery_icon_to_string(secondary) = "" then 210 if jquery_icon_to_string(secondary) = "" then
211 - partial_content( 211 + head_tags(
212 [ 212 [
213 js_inline(jquery_ready("$('#"+id+"').button({icons:{primary:'"+jquery_icon_to_string(primary)+"'}});")), 213 js_inline(jquery_ready("$('#"+id+"').button({icons:{primary:'"+jquery_icon_to_string(primary)+"'}});")),
214 onclick_action 214 onclick_action
@@ -217,7 +217,7 @@ public define HTML_Partial_Content @@ -217,7 +217,7 @@ public define HTML_Partial_Content
217 //literal("<button type=\""+to_String(bt_type)+"\" id=\""+id+"\">"+label+"</button>") 217 //literal("<button type=\""+to_String(bt_type)+"\" id=\""+id+"\">"+label+"</button>")
218 ) 218 )
219 else 219 else
220 - partial_content( 220 + head_tags(
221 [ 221 [
222 js_inline(jquery_ready("$('#"+id+"').button({icons:{primary:'"+jquery_icon_to_string(primary)+"',secondary:'"+jquery_icon_to_string(secondary)+"'}});")), 222 js_inline(jquery_ready("$('#"+id+"').button({icons:{primary:'"+jquery_icon_to_string(primary)+"',secondary:'"+jquery_icon_to_string(secondary)+"'}});")),
223 onclick_action 223 onclick_action
@@ -236,7 +236,7 @@ public type Icon_orientation: @@ -236,7 +236,7 @@ public type Icon_orientation:
236 public type JQuery_img_button: 236 public type JQuery_img_button:
237 jquery_img_button(String img_url, String label_text, String id, JQuery_Actioner jq_action, Icon_orientation orientation). 237 jquery_img_button(String img_url, String label_text, String id, JQuery_Actioner jq_action, Icon_orientation orientation).
238 238
239 -public define HTML_Off_Form 239 +public define HTML
240 jquery_button_html 240 jquery_button_html
241 ( 241 (
242 JQuery_img_button jq_img_button, 242 JQuery_img_button jq_img_button,
@@ -246,15 +246,15 @@ public define HTML_Off_Form @@ -246,15 +246,15 @@ public define HTML_Off_Form
246 button([id(button_id), class("jq_img_btn")], 246 button([id(button_id), class("jq_img_btn")],
247 if orientation is 247 if orientation is
248 { 248 {
249 - top then table([class("jq_img_btn_table")],[ row( cell(img(img_url))), row( cell(text(label_text))) ]),  
250 - bottom then table([class("jq_img_btn_table")],[ row( cell(text(label_text))), row( cell(img(img_url))) ]),  
251 - left then table([class("jq_img_btn_table")],[ row( [cell(img(img_url)), cell(text(label_text)) ]) ]),  
252 - right then table([class("jq_img_btn_table")],[ row( [cell(text(label_text)), cell(img(img_url)) ]) ]), 249 + top then table(class("jq_img_btn_table"), [ tr( td( img(img_url))), tr( td( text(label_text))) ]),
  250 + bottom then table(class("jq_img_btn_table"), [ tr( td( text(label_text))), tr( td( img(img_url))) ]),
  251 + left then table(class("jq_img_btn_table"), tr( [ td(img(img_url)), td(text(label_text)) ])),
  252 + right then table(class("jq_img_btn_table"), tr( [ td(text(label_text)), td(img(img_url)) ])),
253 }). 253 }).
254 254
255 255
256 256
257 -public define HTML_Partial_Content 257 +public define HTML
258 jquery_button 258 jquery_button
259 ( 259 (
260 JQuery_img_button button 260 JQuery_img_button button
@@ -264,7 +264,7 @@ public define HTML_Partial_Content @@ -264,7 +264,7 @@ public define HTML_Partial_Content
264 generate_random_string(10) 264 generate_random_string(10)
265 else 265 else
266 button_id, 266 button_id,
267 - partial_content( 267 + head_tags(
268 [ 268 [
269 jquery_button_get_onclick_action(button_id_str, actioner), 269 jquery_button_get_onclick_action(button_id_str, actioner),
270 css(css_file("xlib/css/button.css")), 270 css(css_file("xlib/css/button.css")),
@@ -273,7 +273,7 @@ public define HTML_Partial_Content @@ -273,7 +273,7 @@ public define HTML_Partial_Content
273 jquery_button_html(button, button_id_str)) 273 jquery_button_html(button, button_id_str))
274 . 274 .
275 275
276 -public define HTML_Partial_Content 276 +public define HTML
277 jq_button_confirm 277 jq_button_confirm
278 ( 278 (
279 String button_label, 279 String button_label,
@@ -296,18 +296,16 @@ public define HTML_Partial_Content @@ -296,18 +296,16 @@ public define HTML_Partial_Content
296 button_name = uid, 296 button_name = uid,
297 _actioner = jQuery_actioner(same, jqscript("Xlib.make_confirm_dialog(this, " /*+ to_js_string("/?a=" + url + format_extra_operands(extra_ops))+*/ + to_JS_String(jquery_button_get_onclick_action(actioner)) + ");")), 297 _actioner = jQuery_actioner(same, jqscript("Xlib.make_confirm_dialog(this, " /*+ to_js_string("/?a=" + url + format_extra_operands(extra_ops))+*/ + to_JS_String(jquery_button_get_onclick_action(actioner)) + ");")),
298 298
299 - partial_content([ 299 + head_tags([
300 js(js_file("xlib/js/xlib.js")), 300 js(js_file("xlib/js/xlib.js")),
301 css(css_file("xlib/css/button.css")), 301 css(css_file("xlib/css/button.css")),
302 js_inline(jquery_ready(js_data)) 302 js_inline(jquery_ready(js_data))
303 ], 303 ],
304 - sequence([  
305 - partial(jquery_button(jQuery_button(button, uid, button_name, button_label, _actioner, jq_icon_none, jq_icon_none)))  
306 - ]) 304 + jquery_button(jQuery_button(button, uid, button_name, button_label, _actioner, jq_icon_none, jq_icon_none))
307 ) 305 )
308 . 306 .
309 307
310 -public define HTML_Partial_Content 308 +public define HTML
311 jq_button_confirm 309 jq_button_confirm
312 ( 310 (
313 JQuery_img_button button, 311 JQuery_img_button button,
@@ -332,17 +330,16 @@ public define HTML_Partial_Content @@ -332,17 +330,16 @@ public define HTML_Partial_Content
332 _button_name = uid, 330 _button_name = uid,
333 _actioner = jQuery_actioner(same, jqscript("Xlib.make_confirm_dialog(this, " + to_JS_String(jquery_button_get_onclick_action(actioner)) +");")), 331 _actioner = jQuery_actioner(same, jqscript("Xlib.make_confirm_dialog(this, " + to_JS_String(jquery_button_get_onclick_action(actioner)) +");")),
334 332
335 - partial_content([ 333 + head_tags([
336 js(js_file("xlib/js/xlib.js")), 334 js(js_file("xlib/js/xlib.js")),
337 js_inline(jquery_ready(js_data)) 335 js_inline(jquery_ready(js_data))
338 ], 336 ],
339 - sequence([  
340 - partial(jquery_button(jquery_img_button(img_url, button_label, _button_name, _actioner, orientation)))  
341 - ]) 337 + jquery_button(jquery_img_button(img_url, button_label, _button_name, _actioner, orientation))
  338 +
342 ) 339 )
343 . 340 .
344 341
345 -public define HTML_Partial_Content 342 +public define HTML
346 img_submit_button 343 img_submit_button
347 ( 344 (
348 String img, //path to image 345 String img, //path to image
@@ -353,7 +350,7 @@ public define HTML_Partial_Content @@ -353,7 +350,7 @@ public define HTML_Partial_Content
353 )= 350 )=
354 jquery_button(jquery_img_button(img, label, "", jQuery_actioner(same, jqform(form_id, action, extra_ops)), left)). 351 jquery_button(jquery_img_button(img, label, "", jQuery_actioner(same, jqform(form_id, action, extra_ops)), left)).
355 352
356 -public define HTML_Partial_Content 353 +public define HTML
357 img_submit_button 354 img_submit_button
358 ( 355 (
359 String img, //path to image 356 String img, //path to image
@@ -363,7 +360,7 @@ public define HTML_Partial_Content @@ -363,7 +360,7 @@ public define HTML_Partial_Content
363 )= 360 )=
364 jquery_button(jquery_img_button(img, label, "", jQuery_actioner(same, jqform(form_id, action, [])), left)). 361 jquery_button(jquery_img_button(img, label, "", jQuery_actioner(same, jqform(form_id, action, [])), left)).
365 362
366 -public define HTML_Partial_Content 363 +public define HTML
367 img_submit_button 364 img_submit_button
368 ( 365 (
369 String label, //translated label of the button 366 String label, //translated label of the button
@@ -372,7 +369,7 @@ public define HTML_Partial_Content @@ -372,7 +369,7 @@ public define HTML_Partial_Content
372 )= 369 )=
373 jquery_button(jquery_img_button(icn16_check, label, "", jQuery_actioner(same, jqform(form_id, action, [])), left)). 370 jquery_button(jquery_img_button(icn16_check, label, "", jQuery_actioner(same, jqform(form_id, action, [])), left)).
374 371
375 -public define HTML_Partial_Content 372 +public define HTML
376 img_submit_button_load 373 img_submit_button_load
377 ( 374 (
378 String label, //translated label of the button 375 String label, //translated label of the button
@@ -383,7 +380,7 @@ public define HTML_Partial_Content @@ -383,7 +380,7 @@ public define HTML_Partial_Content
383 )= 380 )=
384 jquery_button(jquery_img_button(icn16_check, label, "", jQuery_actioner(same, jqformload(form_id, target_id, action, extra_args)), left)). 381 jquery_button(jquery_img_button(icn16_check, label, "", jQuery_actioner(same, jqformload(form_id, target_id, action, extra_args)), left)).
385 382
386 -public define HTML_Partial_Content 383 +public define HTML
387 img_submit_button_load 384 img_submit_button_load
388 ( 385 (
389 String label, //translated label of the button 386 String label, //translated label of the button
@@ -394,7 +391,7 @@ public define HTML_Partial_Content @@ -394,7 +391,7 @@ public define HTML_Partial_Content
394 jquery_button(jquery_img_button(icn16_check, label, "", jQuery_actioner(same, jqformload(form_id, target_id, action, [])), left)). 391 jquery_button(jquery_img_button(icn16_check, label, "", jQuery_actioner(same, jqformload(form_id, target_id, action, [])), left)).
395 392
396 393
397 -public define HTML_Partial_Content 394 +public define HTML
398 img_submit_button 395 img_submit_button
399 ( 396 (
400 String label, //translated label of the button 397 String label, //translated label of the button
@@ -403,7 +400,7 @@ public define HTML_Partial_Content @@ -403,7 +400,7 @@ public define HTML_Partial_Content
403 jquery_button(jquery_img_button(icn16_check, label, "", jQuery_actioner(same, jqform(form_id, no_action, [])), left)) 400 jquery_button(jquery_img_button(icn16_check, label, "", jQuery_actioner(same, jqform(form_id, no_action, [])), left))
404 . 401 .
405 402
406 -public define HTML_Partial_Content 403 +public define HTML
407 img_button 404 img_button
408 ( 405 (
409 String icon, //URL of 406 String icon, //URL of
@@ -415,7 +412,7 @@ public define HTML_Partial_Content @@ -415,7 +412,7 @@ public define HTML_Partial_Content
415 . 412 .
416 413
417 414
418 -public define HTML_Partial_Content 415 +public define HTML
419 img_button 416 img_button
420 ( 417 (
421 String icon, //URL of 418 String icon, //URL of
@@ -427,7 +424,7 @@ public define HTML_Partial_Content @@ -427,7 +424,7 @@ public define HTML_Partial_Content
427 jquery_button(jquery_img_button(icon, label, "", jQuery_actioner(same, jqload(target, action, extra_ops)), left)) 424 jquery_button(jquery_img_button(icon, label, "", jQuery_actioner(same, jqload(target, action, extra_ops)), left))
428 . 425 .
429 426
430 -public define HTML_Partial_Content 427 +public define HTML
431 img_button 428 img_button
432 ( 429 (
433 String icon, 430 String icon,
web/jQuery/jq_checkbox.anubis
@@ -43,7 +43,7 @@ define String @@ -43,7 +43,7 @@ define String
43 " + off_script + " 43 " + off_script + "
44 }". 44 }".
45 45
46 -public define HTML_Partial_Content 46 +public define HTML
47 jq_img_checkbox 47 jq_img_checkbox
48 ( 48 (
49 String checkbox_id, 49 String checkbox_id,
@@ -61,7 +61,7 @@ public define HTML_Partial_Content @@ -61,7 +61,7 @@ public define HTML_Partial_Content
61 jquery_button(jquery_img_button(image_url, checkbox_label, checkbox_id, jQuery_actioner(same, jqscript(checkbox_onclick_script(checkbox_id, on_script, off_script))), orientation)) 61 jquery_button(jquery_img_button(image_url, checkbox_label, checkbox_id, jQuery_actioner(same, jqscript(checkbox_onclick_script(checkbox_id, on_script, off_script))), orientation))
62 ). 62 ).
63 63
64 -public define HTML_Partial_Content 64 +public define HTML
65 jq_img_checkbox 65 jq_img_checkbox
66 ( 66 (
67 String checkbox_id, 67 String checkbox_id,
web/jQuery/jq_datatable.anubis
@@ -59,29 +59,29 @@ public define List(HTML_Head_Tag) @@ -59,29 +59,29 @@ public define List(HTML_Head_Tag)
59 // js(js_file("jquery/plug-in/DataTables-1.10.7/extensions/responsive/js/dataTables.responsive.js")), 59 // js(js_file("jquery/plug-in/DataTables-1.10.7/extensions/responsive/js/dataTables.responsive.js")),
60 ] 60 ]
61 . 61 .
62 -public define HTML_Partial_Content 62 +public define HTML
63 jquery_datatable 63 jquery_datatable
64 ( 64 (
65 String table_id, 65 String table_id,
66 - HTML_Off_Form table 66 + HTML table
67 ) 67 )
68 = 68 =
69 - partial_content(jquery_datatables_1_10_init + 69 + head_tags(jquery_datatables_1_10_init +
70 [ js_inline(jquery_ready("$('#"+table_id+"').DataTable();")) ], 70 [ js_inline(jquery_ready("$('#"+table_id+"').DataTable();")) ],
71 table 71 table
72 ) 72 )
73 . 73 .
74 74
75 -public define HTML_Partial_Content 75 +public define HTML
76 jquery_datatable 76 jquery_datatable
77 ( 77 (
78 String table_id, 78 String table_id,
79 - HTML_Off_Form table, 79 + HTML table,
80 Bool enable_jqueryui, 80 Bool enable_jqueryui,
81 ) 81 )
82 = 82 =
83 if enable_jqueryui then 83 if enable_jqueryui then
84 - partial_content( jquery_datatables_1_10_init + 84 + head_tags( jquery_datatables_1_10_init +
85 [ js_inline(jquery_ready("$('#"+table_id+"').DataTable({\"jQueryUI\":true});")) ], 85 [ js_inline(jquery_ready("$('#"+table_id+"').DataTable({\"jQueryUI\":true});")) ],
86 table 86 table
87 ) 87 )
@@ -90,11 +90,11 @@ public define HTML_Partial_Content @@ -90,11 +90,11 @@ public define HTML_Partial_Content
90 . 90 .
91 91
92 92
93 -public define HTML_Partial_Content 93 +public define HTML
94 jquery_datatable 94 jquery_datatable
95 ( 95 (
96 String table_id, 96 String table_id,
97 - HTML_Partial_Content table, 97 + HTML table,
98 Bool enable_jqueryui, 98 Bool enable_jqueryui,
99 Bool enable_pagination, 99 Bool enable_pagination,
100 JQuery_datatable_pagination_type pagination_type, 100 JQuery_datatable_pagination_type pagination_type,
@@ -108,7 +108,7 @@ public define HTML_Partial_Content @@ -108,7 +108,7 @@ public define HTML_Partial_Content
108 String web_dir 108 String web_dir
109 ) 109 )
110 = 110 =
111 - partial_content( jquery_datatables_1_10_init + 111 + head_tags( jquery_datatables_1_10_init +
112 [ 112 [
113 js_inline(jquery_ready(" 113 js_inline(jquery_ready("
114 $.fn.dataTable.ext.legacy.ajax = true; 114 $.fn.dataTable.ext.legacy.ajax = true;
@@ -139,27 +139,11 @@ public define HTML_Partial_Content @@ -139,27 +139,11 @@ public define HTML_Partial_Content
139 ) 139 )
140 . 140 .
141 141
142 -public define HTML_Partial_Content 142 +public define HTML
143 jquery_datatable 143 jquery_datatable
144 ( 144 (
145 String table_id, 145 String table_id,
146 - HTML_Off_Form table,  
147 - Bool enable_jqueryui,  
148 - Bool enable_pagination,  
149 - JQuery_datatable_pagination_type pagination_type,  
150 - JQuery_datatable_scrollY_type scrollY,  
151 - Bool enable_change_page_length, // if true, "enable_pagination" must be true too.  
152 - Bool enable_search_field,  
153 - Bool enable_columns_sorting,  
154 - String web_dir  
155 - ) =  
156 - jquery_datatable(table_id, partial_content(table), enable_jqueryui, enable_pagination, pagination_type, false, scrollY, enable_change_page_length, enable_search_field, enable_columns_sorting, "en", no_extra, web_dir).  
157 -  
158 -public define HTML_Partial_Content  
159 - jquery_datatable  
160 - (  
161 - String table_id,  
162 - HTML_Partial_Content table, 146 + HTML table,
163 Bool enable_jqueryui, 147 Bool enable_jqueryui,
164 Bool enable_pagination, 148 Bool enable_pagination,
165 JQuery_datatable_pagination_type pagination_type, 149 JQuery_datatable_pagination_type pagination_type,
web/jQuery/jq_dialog.anubis
@@ -17,8 +17,8 @@ public type JQuery_dialog_id: @@ -17,8 +17,8 @@ public type JQuery_dialog_id:
17 17
18 public type JQuery_dialog: 18 public type JQuery_dialog:
19 empty, 19 empty,
20 - p_content(HTML_Partial_Content content),  
21 - off_form(HTML_Off_Form o_form), 20 + p_content(HTML content),
  21 + off_form(HTML o_form),
22 ajax(WEB_Action_Name url). 22 ajax(WEB_Action_Name url).
23 23
24 public define JQuery_dialog ajax(String url) = ajax(action_name(url)). 24 public define JQuery_dialog ajax(String url) = ajax(action_name(url)).
@@ -52,7 +52,7 @@ public define String @@ -52,7 +52,7 @@ public define String
52 . 52 .
53 53
54 54
55 -public define HTML_Partial_Content 55 +public define HTML
56 jq_dialog_create 56 jq_dialog_create
57 ( 57 (
58 JQuery_dialog_id dial_id, 58 JQuery_dialog_id dial_id,
@@ -88,19 +88,21 @@ $( \&quot;#&quot;+dlg_id+&quot;\&quot; ).dialog({ @@ -88,19 +88,21 @@ $( \&quot;#&quot;+dlg_id+&quot;\&quot; ).dialog({
88 if content is 88 if content is
89 { 89 {
90 empty then 90 empty then
91 - partial_content([js], div([id(dlg_id)], empty)), 91 + head_tags([js], div([id(dlg_id)], empty)),
92 p_content(pc) then 92 p_content(pc) then
93 - if pc is partial_content(tags, html) then  
94 - partial_content( [js . tags ], div([id(dlg_id)], html)), //html code of the dialog 93 + if pc is head_tags(tags, html) then
  94 + head_tags( [js . tags ], div(id(dlg_id), html)) //html code of the dialog
  95 + else
  96 + pc,
95 off_form(html) then 97 off_form(html) then
96 - partial_content( [js], div([id(dlg_id)], html)), //html code of the dialog 98 + head_tags(js, div(id(dlg_id), html)), //html code of the dialog
97 ajax(_url) then 99 ajax(_url) then
98 with url = format_web_action_name(_url), 100 with url = format_web_action_name(_url),
99 //println("jq_dialog_create : \njs_str ->"+js_str+"\nurl ->"+url); 101 //println("jq_dialog_create : \njs_str ->"+js_str+"\nurl ->"+url);
100 - partial_content( [js], div([id(dlg_id), attr("ajax_url",url)])) 102 + head_tags( [js], div([id(dlg_id), attr("ajax_url",url)]))
101 }. 103 }.
102 104
103 -public define HTML_Partial_Content 105 +public define HTML
104 jq_dialog_create 106 jq_dialog_create
105 ( 107 (
106 JQuery_dialog_id dial_id, 108 JQuery_dialog_id dial_id,
@@ -110,7 +112,7 @@ public define HTML_Partial_Content @@ -110,7 +112,7 @@ public define HTML_Partial_Content
110 )= 112 )=
111 jq_dialog_create(dial_id, content, false, size, extra_param). 113 jq_dialog_create(dial_id, content, false, size, extra_param).
112 114
113 -public define HTML_Partial_Content 115 +public define HTML
114 jq_dialog_create 116 jq_dialog_create
115 ( 117 (
116 JQuery_dialog_id dial_id, 118 JQuery_dialog_id dial_id,
@@ -119,7 +121,7 @@ public define HTML_Partial_Content @@ -119,7 +121,7 @@ public define HTML_Partial_Content
119 )= 121 )=
120 jq_dialog_create(dial_id, content, false, size, ""). 122 jq_dialog_create(dial_id, content, false, size, "").
121 123
122 -public define HTML_Partial_Content 124 +public define HTML
123 jq_dialog_create 125 jq_dialog_create
124 ( 126 (
125 JQuery_dialog_id dial_id, 127 JQuery_dialog_id dial_id,
@@ -128,7 +130,7 @@ public define HTML_Partial_Content @@ -128,7 +130,7 @@ public define HTML_Partial_Content
128 )= 130 )=
129 jq_dialog_create(dial_id, content, false, auto, extra_param). 131 jq_dialog_create(dial_id, content, false, auto, extra_param).
130 132
131 -public define HTML_Partial_Content 133 +public define HTML
132 jq_dialog_create 134 jq_dialog_create
133 ( 135 (
134 JQuery_dialog_id dial_id, 136 JQuery_dialog_id dial_id,
@@ -136,7 +138,7 @@ public define HTML_Partial_Content @@ -136,7 +138,7 @@ public define HTML_Partial_Content
136 )= 138 )=
137 jq_dialog_create(dial_id, content, false, auto, ""). 139 jq_dialog_create(dial_id, content, false, auto, "").
138 140
139 -public define HTML_Partial_Content 141 +public define HTML
140 jq_dialog_create 142 jq_dialog_create
141 ( 143 (
142 JQuery_dialog_id dial_id, 144 JQuery_dialog_id dial_id,
@@ -188,15 +190,14 @@ public define String @@ -188,15 +190,14 @@ public define String
188 )= 190 )=
189 _jq_dialog_open(success(html), dialog_id, params). 191 _jq_dialog_open(success(html), dialog_id, params).
190 192
191 -public define HTML_Partial_Content 193 +public define HTML
192 jq_dialog_open 194 jq_dialog_open
193 ( 195 (
194 String html, 196 String html,
195 JQuery_dialog_id dialog_id, 197 JQuery_dialog_id dialog_id,
196 String params 198 String params
197 )= 199 )=
198 - partial_content([],  
199 - literal(_jq_dialog_open(success(html), dialog_id, params))). 200 + literal(_jq_dialog_open(success(html), dialog_id, params)).
200 201
201 public define String 202 public define String
202 jq_dialog_open 203 jq_dialog_open
web/jQuery/jq_eudock.anubis
@@ -171,7 +171,7 @@ define String @@ -171,7 +171,7 @@ define String
171 . 171 .
172 172
173 /* Creation of an euDock */ 173 /* Creation of an euDock */
174 -public define HTML_Partial_Content 174 +public define HTML
175 jquery_eudock 175 jquery_eudock
176 ( 176 (
177 JQ_euDock dock 177 JQ_euDock dock
web/jQuery/jq_jqplot.anubis
@@ -9,7 +9,7 @@ @@ -9,7 +9,7 @@
9 read xlib/web/making_a_web_site.anubis 9 read xlib/web/making_a_web_site.anubis
10 read tools/basis.anubis 10 read tools/basis.anubis
11 11
12 - public define HTML_Partial_Content 12 + public define HTML
13 jqplot 13 jqplot
14 ( 14 (
15 String img_url, 15 String img_url,
web/jQuery/jq_radio.anubis
@@ -80,7 +80,7 @@ define String @@ -80,7 +80,7 @@ define String
80 "radio.removeClass('unchecked').addClass('checked');" 80 "radio.removeClass('unchecked').addClass('checked');"
81 ) + on_script. 81 ) + on_script.
82 82
83 -public define HTML_Partial_Content 83 +public define HTML
84 jq_img_radio 84 jq_img_radio
85 ( 85 (
86 String radio_id, 86 String radio_id,
@@ -92,14 +92,14 @@ public define HTML_Partial_Content @@ -92,14 +92,14 @@ public define HTML_Partial_Content
92 String on_script, 92 String on_script,
93 Icon_orientation orientation 93 Icon_orientation orientation
94 ) = 94 ) =
95 - partial_content( 95 + head_tags(
96 [ 96 [
97 js_inline(jquery_ready(radio_init_script(radio_id, radio_group, initial_state))) 97 js_inline(jquery_ready(radio_init_script(radio_id, radio_group, initial_state)))
98 ], 98 ],
99 jquery_button(jquery_img_button(image_url, checkbox_label, radio_id, jQuery_actioner(same, jqscript(radio_onclick_script(radio_id, radio_group, multi_select_with_shift, on_script))), orientation)) 99 jquery_button(jquery_img_button(image_url, checkbox_label, radio_id, jQuery_actioner(same, jqscript(radio_onclick_script(radio_id, radio_group, multi_select_with_shift, on_script))), orientation))
100 ). 100 ).
101 101
102 -public define HTML_Partial_Content 102 +public define HTML
103 jq_img_radio 103 jq_img_radio
104 ( 104 (
105 String radio_id, 105 String radio_id,
@@ -112,7 +112,7 @@ public define HTML_Partial_Content @@ -112,7 +112,7 @@ public define HTML_Partial_Content
112 ) = 112 ) =
113 jq_img_radio(radio_id, none, initial_state, false, image_url, checkbox_label, script, orientation). 113 jq_img_radio(radio_id, none, initial_state, false, image_url, checkbox_label, script, orientation).
114 114
115 -public define HTML_Partial_Content 115 +public define HTML
116 jq_img_radio 116 jq_img_radio
117 ( 117 (
118 String radio_id, 118 String radio_id,
web/jQuery/jq_tabs.anubis
@@ -13,27 +13,27 @@ read xlib/web/common.anubis @@ -13,27 +13,27 @@ read xlib/web/common.anubis
13 read tools/basis.anubis 13 read tools/basis.anubis
14 14
15 public type JQuery_tab: 15 public type JQuery_tab:
16 - jQuery_tab(String title, HTML_Partial_Content content) 16 + jQuery_tab(String title, HTML content)
17 . 17 .
18 18
19 // Helper to be compatible with the first version of JQuery_tab which 19 // Helper to be compatible with the first version of JQuery_tab which
20 - // take HTML_Off_Form as second argument instead of HTML_Partial_Content. 20 + // take HTML as second argument instead of HTML.
21 21
22 public define JQuery_tab 22 public define JQuery_tab
23 jQuery_tab 23 jQuery_tab
24 ( 24 (
25 String title, 25 String title,
26 - HTML_Off_Form content 26 + HTML content
27 )= 27 )=
28 jQuery_tab(title, partial_content([], content)). 28 jQuery_tab(title, partial_content([], content)).
29 29
30 -define HTML_Partial_Content 30 +define HTML
31 _jquery_tabs 31 _jquery_tabs
32 ( 32 (
33 String tabs_container_id, 33 String tabs_container_id,
34 List(JQuery_tab) tabs, 34 List(JQuery_tab) tabs,
35 String tabs_titles, 35 String tabs_titles,
36 - List(HTML_Off_Form) tabs_contents, 36 + List(HTML) tabs_contents,
37 List(HTML_Head_Tag) tabs_heads, 37 List(HTML_Head_Tag) tabs_heads,
38 Int count 38 Int count
39 ) 39 )
@@ -66,7 +66,7 @@ define HTML_Partial_Content @@ -66,7 +66,7 @@ define HTML_Partial_Content
66 } 66 }
67 . 67 .
68 68
69 -public define HTML_Partial_Content 69 +public define HTML
70 jquery_tabs 70 jquery_tabs
71 ( 71 (
72 String tabs_container_id, 72 String tabs_container_id,
@@ -106,7 +106,7 @@ public define HTML_Partial_Content @@ -106,7 +106,7 @@ public define HTML_Partial_Content
106 div([id(tabs_container_id)], html) 106 div([id(tabs_container_id)], html)
107 ). 107 ).
108 108
109 -public define HTML_Partial_Content 109 +public define HTML
110 jquery_tabs 110 jquery_tabs
111 ( 111 (
112 String tabs_container_id, 112 String tabs_container_id,
web/jQuery/jq_tiptip.anubis
@@ -62,13 +62,13 @@ public define List(HTML_Head_Tag) @@ -62,13 +62,13 @@ public define List(HTML_Head_Tag)
62 . 62 .
63 63
64 64
65 -/* Create a tipTip tooltip with a HTML_Partial_Content and position */  
66 -public define HTML_Partial_Content 65 +/* Create a tipTip tooltip with a HTML and position */
  66 +public define HTML
67 jquery_tiptip 67 jquery_tiptip
68 ( 68 (
69 String rollovered_id, // id of the element on which toolip will be displayed => IT MUST BE UNIQUE !!!! 69 String rollovered_id, // id of the element on which toolip will be displayed => IT MUST BE UNIQUE !!!!
70 String tooltip_id, // id used to make a container around tooltip content => Uniqueness of the container's id is made with the addition of a timestamp as a suffix 70 String tooltip_id, // id used to make a container around tooltip content => Uniqueness of the container's id is made with the addition of a timestamp as a suffix
71 - HTML_Partial_Content tooltip_partial_content, 71 + HTML tooltip_partial_content,
72 JQ_tiptip_position position 72 JQ_tiptip_position position
73 ) 73 )
74 = 74 =
@@ -91,38 +91,38 @@ public define HTML_Partial_Content @@ -91,38 +91,38 @@ public define HTML_Partial_Content
91 ) 91 )
92 . 92 .
93 93
94 -/* Create a tipTip tooltip with a HTML_Off_Form and position */  
95 -public define HTML_Partial_Content 94 +/* Create a tipTip tooltip with a HTML and position */
  95 +public define HTML
96 jquery_tiptip 96 jquery_tiptip
97 ( 97 (
98 String rollovered_id, // id of the element on which toolip will be displayed => IT MUST BE UNIQUE !!!! 98 String rollovered_id, // id of the element on which toolip will be displayed => IT MUST BE UNIQUE !!!!
99 String tooltip_id, // id used to make a container around tooltip content => Uniqueness of the container's id is made with the addition of a timestamp as a suffix 99 String tooltip_id, // id used to make a container around tooltip content => Uniqueness of the container's id is made with the addition of a timestamp as a suffix
100 - HTML_Off_Form html_content, 100 + HTML html_content,
101 JQ_tiptip_position position 101 JQ_tiptip_position position
102 ) 102 )
103 = 103 =
104 jquery_tiptip(rollovered_id, tooltip_id, partial_content([], html_content), position) 104 jquery_tiptip(rollovered_id, tooltip_id, partial_content([], html_content), position)
105 . 105 .
106 106
107 -/* Create a tipTip tooltip with a HTML_Partial_Content */  
108 -public define HTML_Partial_Content 107 +/* Create a tipTip tooltip with a HTML */
  108 +public define HTML
109 jquery_tiptip 109 jquery_tiptip
110 ( 110 (
111 String rollovered_id, // id of the element on which toolip will be displayed => IT MUST BE UNIQUE !!!! 111 String rollovered_id, // id of the element on which toolip will be displayed => IT MUST BE UNIQUE !!!!
112 String tooltip_id, // id used to make a container around tooltip content => Uniqueness of the container's id is made with the addition of a timestamp as a suffix 112 String tooltip_id, // id used to make a container around tooltip content => Uniqueness of the container's id is made with the addition of a timestamp as a suffix
113 - HTML_Partial_Content tooltip_partial_content 113 + HTML tooltip_partial_content
114 ) 114 )
115 = 115 =
116 jquery_tiptip(rollovered_id, tooltip_id, tooltip_partial_content, jq_tiptip_bottom) 116 jquery_tiptip(rollovered_id, tooltip_id, tooltip_partial_content, jq_tiptip_bottom)
117 . 117 .
118 118
119 -/* Create a tipTip tooltip with a HTML_Off_Form */  
120 -public define HTML_Partial_Content 119 +/* Create a tipTip tooltip with a HTML */
  120 +public define HTML
121 jquery_tiptip 121 jquery_tiptip
122 ( 122 (
123 String rollovered_id, // id of the element on which toolip will be displayed => IT MUST BE UNIQUE !!!! 123 String rollovered_id, // id of the element on which toolip will be displayed => IT MUST BE UNIQUE !!!!
124 String tooltip_id, // id used to make a container around tooltip content => Uniqueness of the container's id is made with the addition of a timestamp as a suffix 124 String tooltip_id, // id used to make a container around tooltip content => Uniqueness of the container's id is made with the addition of a timestamp as a suffix
125 - HTML_Off_Form html_content 125 + HTML html_content
126 ) 126 )
127 = 127 =
128 jquery_tiptip(rollovered_id, tooltip_id, partial_content([], html_content)) 128 jquery_tiptip(rollovered_id, tooltip_id, partial_content([], html_content))
web/jQuery/jq_toolbar.anubis
@@ -9,11 +9,11 @@ @@ -9,11 +9,11 @@
9 read xlib/web/making_a_web_site.anubis 9 read xlib/web/making_a_web_site.anubis
10 read xlib/web/jQuery/jq_button.anubis 10 read xlib/web/jQuery/jq_button.anubis
11 11
12 -public define HTML_Partial_Content 12 +public define HTML
13 _jquery_toolbar 13 _jquery_toolbar
14 ( 14 (
15 List(JQuery_img_button) buttons, 15 List(JQuery_img_button) buttons,
16 - List(HTML_Cell(HTML_Off_Form)) so_far 16 + List(HTML_Cell(HTML)) so_far
17 )= 17 )=
18 if buttons is 18 if buttons is
19 { 19 {
@@ -24,7 +24,7 @@ public define HTML_Partial_Content @@ -24,7 +24,7 @@ public define HTML_Partial_Content
24 _jquery_toolbar(t, [ cell(partial(jquery_button(h))) . so_far]) 24 _jquery_toolbar(t, [ cell(partial(jquery_button(h))) . so_far])
25 }. 25 }.
26 26
27 -public define HTML_Partial_Content 27 +public define HTML
28 jquery_toolbar 28 jquery_toolbar
29 ( 29 (
30 List(JQuery_img_button) buttons 30 List(JQuery_img_button) buttons
@@ -11,10 +11,10 @@ read xlib/web/making_a_web_site.anubis @@ -11,10 +11,10 @@ read xlib/web/making_a_web_site.anubis
11 transmit locale/L3.anubis 11 transmit locale/L3.anubis
12 transmit locale/L3LanguageInfo.anubis 12 transmit locale/L3LanguageInfo.anubis
13 13
14 -define List(HTML_Off_Form) 14 +define List(HTML)
15 construct_language_option_list 15 construct_language_option_list
16 ( 16 (
17 - List(HTML_Off_Form) so_far, 17 + List(HTML) so_far,
18 List(L3LanguageInfo) lang_list 18 List(L3LanguageInfo) lang_list
19 ) = 19 ) =
20 if lang_list is 20 if lang_list is
@@ -26,15 +26,15 @@ define List(HTML_Off_Form) @@ -26,15 +26,15 @@ define List(HTML_Off_Form)
26 construct_language_option_list( [option(value(code_lang), text(code_lang +" | " + english_name + " | " + self_name)) . so_far], t) 26 construct_language_option_list( [option(value(code_lang), text(code_lang +" | " + english_name + " | " + self_name)) . so_far], t)
27 }. 27 }.
28 28
29 -public define List(HTML_Off_Form) 29 +public define List(HTML)
30 l3_get_language_option_list = 30 l3_get_language_option_list =
31 construct_language_option_list([], standard_languages) 31 construct_language_option_list([], standard_languages)
32 . 32 .
33 33
34 -public define List(HTML_Off_Form) 34 +public define List(HTML)
35 _l3_get_all_chapters_options_list 35 _l3_get_all_chapters_options_list
36 ( 36 (
37 - List(HTML_Off_Form) so_far, 37 + List(HTML) so_far,
38 List(String) chapters_list 38 List(String) chapters_list
39 )= 39 )=
40 if chapters_list is 40 if chapters_list is
@@ -45,7 +45,7 @@ public define List(HTML_Off_Form) @@ -45,7 +45,7 @@ public define List(HTML_Off_Form)
45 } 45 }
46 . 46 .
47 47
48 -public define List(HTML_Off_Form) 48 +public define List(HTML)
49 l3_get_all_chapters_options_list 49 l3_get_all_chapters_options_list
50 ( 50 (
51 String collection_name 51 String collection_name
web/load_content.anubis
@@ -122,7 +122,7 @@ public define String @@ -122,7 +122,7 @@ public define String
122 load_content(target, web_action, [], replace, true) 122 load_content(target, web_action, [], replace, true)
123 . 123 .
124 124
125 -public define HTML_Partial_Content 125 +public define HTML
126 load_content_init 126 load_content_init
127 ( 127 (
128 String target, 128 String target,
@@ -131,14 +131,13 @@ public define HTML_Partial_Content @@ -131,14 +131,13 @@ public define HTML_Partial_Content
131 Bool replace, 131 Bool replace,
132 Bool overlay 132 Bool overlay
133 )= 133 )=
134 - partial_content([ 134 + head_tags([
135 js(js_file("xlib/js/xlib.js")), 135 js(js_file("xlib/js/xlib.js")),
136 js_inline(script("text/javascript","$(document).ready(function(){"+load_content(target, web_action, extra_args, replace, overlay)+"});")) 136 js_inline(script("text/javascript","$(document).ready(function(){"+load_content(target, web_action, extra_args, replace, overlay)+"});"))
137 - ],  
138 - empty) 137 + ])
139 . 138 .
140 139
141 -public define HTML_Partial_Content 140 +public define HTML
142 load_content_init 141 load_content_init
143 ( 142 (
144 String target, 143 String target,
@@ -149,7 +148,7 @@ public define HTML_Partial_Content @@ -149,7 +148,7 @@ public define HTML_Partial_Content
149 load_content_init(target, web_action, extra_args, replace, true) 148 load_content_init(target, web_action, extra_args, replace, true)
150 . 149 .
151 150
152 -public define HTML_Partial_Content 151 +public define HTML
153 load_content_init 152 load_content_init
154 ( 153 (
155 String target, 154 String target,
@@ -159,7 +158,7 @@ public define HTML_Partial_Content @@ -159,7 +158,7 @@ public define HTML_Partial_Content
159 load_content_init(target, web_action, extra_args, false, true) 158 load_content_init(target, web_action, extra_args, false, true)
160 . 159 .
161 160
162 -public define HTML_Partial_Content 161 +public define HTML
163 load_content_init 162 load_content_init
164 ( 163 (
165 String target, 164 String target,
@@ -168,7 +167,7 @@ public define HTML_Partial_Content @@ -168,7 +167,7 @@ public define HTML_Partial_Content
168 load_content_init(target, web_action, [], false, true) 167 load_content_init(target, web_action, [], false, true)
169 . 168 .
170 169
171 -public define HTML_Partial_Content 170 +public define HTML
172 load_content_init 171 load_content_init
173 ( 172 (
174 String target, 173 String target,
web/making_a_web_site.anubis
@@ -6,7 +6,7 @@ @@ -6,7 +6,7 @@
6 6
7 *Copyright* Copyright (c) Alain Prouté 2004-2005. 7 *Copyright* Copyright (c) Alain Prouté 2004-2005.
8 Copyright (c) Calexium 2007-2017. 8 Copyright (c) Calexium 2007-2017.
9 - Copyright (c) David René 2007-2021. 9 + Copyright (c) David René 2007-2026.
10 10
11 11
12 *Authors* Alain Prouté 12 *Authors* Alain Prouté
@@ -372,26 +372,6 @@ public define String @@ -372,26 +372,6 @@ public define String
372 372
373 $State -> HTTP_Answer 373 $State -> HTTP_Answer
374 374
375 - where the type 'HTTP_Answer' (defined below in this file) abstractly represents HTML  
376 - pages.  
377 -  
378 -//public type HTTP_Answer:...  
379 -  
380 - It should be clear that states and pages are deeply linked together. Indeed, we really  
381 - understand the page shown to the client as a representation of the current state of the  
382 - conversation between the client and the web site, but also containing informations  
383 - taken from the data bases.  
384 -  
385 -  
386 -//public type HTML_Partial_Content:...  
387 -  
388 -  
389 -  
390 -  
391 -  
392 -  
393 -  
394 -  
395 375
396 public define List(HTTP_header) 376 public define List(HTTP_header)
397 make_session_cookie_headers 377 make_session_cookie_headers
@@ -504,44 +484,6 @@ public type Web_Site:... @@ -504,44 +484,6 @@ public type Web_Site:...
504 484
505 Producing such a datum may be performed by: 485 Producing such a datum may be performed by:
506 486
507 - public define Web_Site  
508 - make_web_site_description  
509 - (  
510 - List(String) common_names, // for example: ["www.our-business.com",  
511 - // "192.168.0.1"]  
512 - // the second one is just for testing  
513 - String site_directory, // where 'public' and other directories are  
514 - // located (should NOT end with '/')  
515 - String state_directory,  
516 - One -> One init,  
517 - (HTTP_Info,  
518 - List(Web_arg),  
519 - Bool is_https) -> $State initial_state,  
520 - ($State expired,  
521 - Maybe(String),  
522 - HTTP_Info,  
523 - List(Web_arg),  
524 - Bool is_https) -> $State ticket_expired_state,  
525 - (Maybe(String),  
526 - HTTP_Info,  
527 - List(Web_arg),  
528 - Bool is_https) -> $State ticket_lost_state,  
529 - List(Web_Action($State)) actions,  
530 - $State -> HTTP_Answer compute_page,  
531 - $State -> List(HTTP_header) additional_headers,  
532 - List(HTTP_header) constant_additional_headers,  
533 - Int timeout, // seconds (todo: minutes)  
534 - Redirections redirections,  
535 - String charset,  
536 - List(String) journal_extensions,  
537 - List(String) journal_headers,  
538 - String authorization_secret,  
539 - List(MIME) known_mime_types,  
540 - (String action_name,  
541 - List(Web_arg) args)-> One before_send_file  
542 - ).  
543 -  
544 -  
545 Explanations: 487 Explanations:
546 488
547 'common_names' is the list of names of the site (the name the browser must send as the 489 'common_names' is the list of names of the site (the name the browser must send as the
@@ -706,7 +648,7 @@ public define Start_Web_Sites_Result @@ -706,7 +648,7 @@ public define Start_Web_Sites_Result
706 For easy reference, we gather below the definitions of all the types used by the HTML 648 For easy reference, we gather below the definitions of all the types used by the HTML
707 interface, and we comment them immediately. 649 interface, and we comment them immediately.
708 650
709 - //public type HTML_Off_Form:... 651 + //public type HTML:...
710 652
711 653
712 public define Printable_tree [HTML_Id x . Printable_tree y] = str_pt(x.id, y). 654 public define Printable_tree [HTML_Id x . Printable_tree y] = str_pt(x.id, y).
@@ -719,20 +661,17 @@ public define CoreAttrs attr(String name, Bool value) = attr(name, if value th @@ -719,20 +661,17 @@ public define CoreAttrs attr(String name, Bool value) = attr(name, if value th
719 public define CoreAttrs attr(String name, Int value) = attr(name, to_String(value)). 661 public define CoreAttrs attr(String name, Int value) = attr(name, to_String(value)).
720 662
721 663
722 -public define InputAttrs attr(String name, Bool value) = attr(name, if value then "true" else "false"). 664 +//public define InputAttrs attr(String name, Bool value) = attr(name, if value then "true" else "false").
723 665
724 666
725 667
726 -public define Text_Option  
727 - tooltip(String s) = title(s). 668 +//public define Text_Option
  669 +// tooltip(String s) = title(s).
728 670
729 A list of 'Text_Option' must be given with each text you want to put in your page. 671 A list of 'Text_Option' must be given with each text you want to put in your page.
730 672
731 public define CoreAttrs 673 public define CoreAttrs
732 tooltip(String s) = title(s). 674 tooltip(String s) = title(s).
733 -public define InputAttrs  
734 - tooltip(String s) = title(s).  
735 -  
736 675
737 public type I18n: 676 public type I18n:
738 lang (String), 677 lang (String),
@@ -830,100 +769,7 @@ public define String @@ -830,100 +769,7 @@ public define String
830 }. 769 }.
831 770
832 771
833 -public define Table_Option nude = border(0,0,0,rgb(0,0,0)).  
834 -  
835 -  
836 - A list of 'Table_Option' must be given with each table.  
837 -  
838 -  
839 -  
840 -  
841 -  
842 -  
843 - A list of 'Cell_Option' must be given with each cell and each row in a table. Options  
844 - given with a row apply to all the cells in the row, but are superseded by options given  
845 - with cells, which apply only to the cell they are given with.  
846 -  
847 -  
848 -  
849 -  
850 -  
851 - The parameter $T is later instantiated either to 'HTML_In_Form' or to 'HTML_Off_Form',  
852 - depending on where you put your table (within a form or not within a form). For your  
853 - convenience, we define the following particular case:  
854 -  
855 -public define HTML_Cell($T)  
856 - cell  
857 - (  
858 - $T content  
859 - )=  
860 - cell([],content)  
861 -.  
862 -  
863 -public define HTML_Cell($T)  
864 - cell  
865 - (  
866 - Cell_Option option,  
867 - $T content  
868 - ) =  
869 - cell([option],content)  
870 -.  
871 -  
872 -public define HTML_Header_Cell($T)  
873 - header_cell  
874 - (  
875 - $T content  
876 - ) =  
877 - header_cell([],content).  
878 -  
879 -  
880 -  
881 -  
882 - Same remark as for 'HTML_Cell($T)'. We define several convenience functions:  
883 -  
884 -public define HTML_Row($T)  
885 - row  
886 - (  
887 - List(HTML_Cell($T)) cells  
888 - )=  
889 - row([],cells).  
890 -  
891 -public define HTML_Row($T)  
892 - row  
893 - (  
894 - HTML_Cell($T) cell  
895 - )=  
896 - row([],[cell]).  
897 -  
898 -public define HTML_Row($T)  
899 - row  
900 - (  
901 - List(Cell_Option) options,  
902 - HTML_Cell($T) cell  
903 - )=  
904 - row(options,[cell]).  
905 -  
906 -public define HTML_Row($T)  
907 - row  
908 - (  
909 - Cell_Option option,  
910 - HTML_Cell($T) cell  
911 - )=  
912 - row([option],[cell]).  
913 -  
914 -public define HTML_Header_Row($T)  
915 - header_row  
916 - (  
917 - List(HTML_Header_Cell($T)) cells  
918 - ) =  
919 - header_row([],cells).  
920 -  
921 -public define HTML_Header_Row($T)  
922 - header_row  
923 - (  
924 - HTML_Header_Cell($T) cell  
925 - ) =  
926 - header_row([],[cell]). 772 +//public define Table_Option nude = border(0,0,0,rgb(0,0,0)).
927 773
928 774
929 775
@@ -954,7 +800,7 @@ public define Actioner_Aspect @@ -954,7 +800,7 @@ public define Actioner_Aspect
954 public define Actioner_Aspect 800 public define Actioner_Aspect
955 link 801 link
956 ( 802 (
957 - List(Text_Option) options, 803 + List(CoreAttrs) options,
958 String text 804 String text
959 )= 805 )=
960 link(options, text, failure). 806 link(options, text, failure).
@@ -970,7 +816,7 @@ public define Actioner_Aspect @@ -970,7 +816,7 @@ public define Actioner_Aspect
970 public define Actioner_Aspect 816 public define Actioner_Aspect
971 link 817 link
972 ( 818 (
973 - List(Text_Option) options, 819 + List(CoreAttrs) options,
974 Int i 820 Int i
975 ) = 821 ) =
976 link(options, to_decimal(i), failure). 822 link(options, to_decimal(i), failure).
@@ -1058,7 +904,7 @@ public define HTML_Help @@ -1058,7 +904,7 @@ public define HTML_Help
1058 904
1059 /* It contains 905 /* It contains
1060 * - a List of HTML_Head_Tag representing necessaries head tags for the content. ex: jquery js files, js script, css specific styles, ... 906 * - a List of HTML_Head_Tag representing necessaries head tags for the content. ex: jquery js files, js script, css specific styles, ...
1061 - * - a HTML_Off_Form representing the HTML code for the part of the page we want to display 907 + * - a HTML representing the HTML code for the part of the page we want to display
1062 */ 908 */
1063 //public type HTML_In_Form:... 909 //public type HTML_In_Form:...
1064 910
@@ -1084,24 +930,13 @@ public define List(HTML_Head_Tag) @@ -1084,24 +930,13 @@ public define List(HTML_Head_Tag)
1084 convenience function: 930 convenience function:
1085 931
1086 932
1087 -public define HTML_In_Form text_input(HTML_Label label, HTML_Id id, WebArgName name, InitialValue init, Int width) = text_input([], label, id, name, init, width).  
1088 933
1089 -public define HTML_In_Form literal(Printable_tree t) = literal_pt(t). 934 +public define HTML literal(Printable_tree t) = literal_pt(t).
1090 935
1091 -public define HTML_In_Form image(String url) = image([], url, url).  
1092 936
1093 -public define HTML_In_Form image(String url, Int width, Int height) = image([], url, url, width, height).  
1094 937
1095 -public define HTML_In_Form  
1096 - foreign_link  
1097 - (  
1098 - Int tsize,  
1099 - String url,  
1100 - String name  
1101 - ) =  
1102 - foreign_link([size(tsize)],url,name).  
1103 938
1104 -public define HTML_In_Form 939 +public define HTML
1105 /* Older call with String as action instead of WEB_Action_Name. 940 /* Older call with String as action instead of WEB_Action_Name.
1106 * This function exists only for compatibility with older project. 941 * This function exists only for compatibility with older project.
1107 * Please condiser to use above function instead 942 * Please condiser to use above function instead
@@ -1118,7 +953,7 @@ public define HTML_In_Form @@ -1118,7 +953,7 @@ public define HTML_In_Form
1118 actioner(conn,targ,asp,action_name(action),extra_ops,local_actions) 953 actioner(conn,targ,asp,action_name(action),extra_ops,local_actions)
1119 . 954 .
1120 955
1121 -public define HTML_In_Form 956 +public define HTML
1122 actioner 957 actioner
1123 ( 958 (
1124 Actioner_Connection conn, 959 Actioner_Connection conn,
@@ -1130,7 +965,7 @@ public define HTML_In_Form @@ -1130,7 +965,7 @@ public define HTML_In_Form
1130 actioner(conn,targ,asp,action,extra_ops,[]) 965 actioner(conn,targ,asp,action,extra_ops,[])
1131 . 966 .
1132 967
1133 -public define HTML_In_Form 968 +public define HTML
1134 /* Older call with String as action instead of WEB_Action_Name. 969 /* Older call with String as action instead of WEB_Action_Name.
1135 * This function exists only for compatibility with older project. 970 * This function exists only for compatibility with older project.
1136 * Please condiser to use above function instead 971 * Please condiser to use above function instead
@@ -1146,7 +981,7 @@ public define HTML_In_Form @@ -1146,7 +981,7 @@ public define HTML_In_Form
1146 actioner(conn,targ,asp,action_name(action),extra_ops,[]) 981 actioner(conn,targ,asp,action_name(action),extra_ops,[])
1147 . 982 .
1148 983
1149 -public define HTML_In_Form 984 +public define HTML
1150 actioner 985 actioner
1151 ( 986 (
1152 Actioner_Connection conn, 987 Actioner_Connection conn,
@@ -1154,62 +989,8 @@ public define HTML_In_Form @@ -1154,62 +989,8 @@ public define HTML_In_Form
1154 Actioner_Aspect asp, 989 Actioner_Aspect asp,
1155 )= 990 )=
1156 actioner(conn, targ, asp, action_name(""), [], []). 991 actioner(conn, targ, asp, action_name(""), [], []).
1157 -  
1158 -  
1159 -public define HTML_In_Form  
1160 - text_area  
1161 - (  
1162 - WebArgName name,  
1163 - InitialValue init,  
1164 - Int width,  
1165 - Int height  
1166 - ) =  
1167 - text_area([], no_label, html_Id(""), name,init,width,height).  
1168 -  
1169 -public define HTML_In_Form  
1170 - text_area  
1171 - (  
1172 - List(TextAreaOption) options,  
1173 - WebArgName name,  
1174 - InitialValue init,  
1175 - Int width,  
1176 - Int height  
1177 - ) =  
1178 - text_area(options, no_label, html_Id(""), name,init,width,height).  
1179 -  
1180 -public define HTML_In_Form  
1181 - table  
1182 - (  
1183 - List(HTML_Row(HTML_In_Form)) rows  
1184 - ) =  
1185 - table([],empty,rows,empty).  
1186 -  
1187 -public define HTML_In_Form  
1188 - table  
1189 - (  
1190 - List(Table_Option) options,  
1191 - List(HTML_Row(HTML_In_Form)) rows  
1192 - ) =  
1193 - table(options,empty,rows,empty).  
1194 -  
1195 -public define HTML_In_Form  
1196 - table  
1197 - (  
1198 - HTML_Header_Row(HTML_In_Form) h_row,  
1199 - List(HTML_Row(HTML_In_Form)) rows  
1200 - ) =  
1201 - table([],h_row,rows,empty).  
1202 -  
1203 -public define HTML_In_Form  
1204 - table  
1205 - (  
1206 - List(Table_Option) options,  
1207 - HTML_Header_Row(HTML_In_Form) h_row,  
1208 - List(HTML_Row(HTML_In_Form)) rows  
1209 - ) =  
1210 - table(options,h_row,rows,empty).  
1211 -  
1212 -public define HTML_In_Form 992 +
  993 + public define HTML_In_Form
1213 private_download 994 private_download
1214 ( 995 (
1215 String abs_path, 996 String abs_path,
@@ -1218,7 +999,7 @@ public define HTML_In_Form @@ -1218,7 +999,7 @@ public define HTML_In_Form
1218 ) = 999 ) =
1219 private_download(abs_path,name,extra_ext,failure). 1000 private_download(abs_path,name,extra_ext,failure).
1220 1001
1221 -public define HTML_In_Form 1002 + public define HTML_In_Form
1222 private_download 1003 private_download
1223 ( 1004 (
1224 String abs_path, 1005 String abs_path,
@@ -1228,90 +1009,6 @@ public define HTML_In_Form @@ -1228,90 +1009,6 @@ public define HTML_In_Form
1228 List((String,String)) args 1009 List((String,String)) args
1229 ) = 1010 ) =
1230 private_download(abs_path,name,extra_ext,success((action_name,args))). 1011 private_download(abs_path,name,extra_ext,success((action_name,args))).
1231 -  
1232 -  
1233 -  
1234 -public define HTML_In_Form  
1235 - text  
1236 - (  
1237 - List(CoreAttrs) l,  
1238 - Int i  
1239 - ) =  
1240 - text(l, to_decimal(i)).  
1241 -  
1242 -public define HTML_In_Form  
1243 - text  
1244 - (  
1245 - String s  
1246 - )=  
1247 - text([],s)  
1248 -.  
1249 -  
1250 -public define HTML_In_Form  
1251 - text  
1252 - (  
1253 - Int i  
1254 - ) =  
1255 - text([], i)  
1256 -.  
1257 -  
1258 -public define HTML_In_Form  
1259 - div  
1260 - (  
1261 - HTML_In_Form element  
1262 - )=  
1263 - div([], [element])  
1264 -.  
1265 -  
1266 -public define HTML_In_Form  
1267 - div  
1268 - (  
1269 - List(CoreAttrs) attrs,  
1270 - HTML_In_Form element  
1271 - )=  
1272 - div(attrs, [element])  
1273 -.  
1274 -  
1275 -public define HTML_In_Form  
1276 - span  
1277 - (  
1278 - String s  
1279 - )=  
1280 - span([],s)  
1281 -.  
1282 -  
1283 -public define HTML_In_Form  
1284 - span  
1285 - (  
1286 - Int i  
1287 - ) =  
1288 - span([], to_decimal(i))  
1289 -.  
1290 -  
1291 -public define HTML_In_Form  
1292 - radio_button (List(CoreAttrs) options, HTML_Label label, WebArgName n, WebArgValue value, Bool checked)  
1293 - = radio_button (options, label, html_Id(n.name), n, value, checked).  
1294 -  
1295 -public define HTML_In_Form  
1296 - radio_button_r (List(CoreAttrs) options, HTML_Label label, WebArgName n, WebArgValue value, Bool checked)  
1297 - = radio_button_r (options, label, html_Id(n.name), n, value, checked).  
1298 -  
1299 -public define HTML_In_Form  
1300 - check_box (List(CoreAttrs) options, HTML_Label label, WebArgName n, Bool checked)  
1301 - = check_box (options, label, html_Id(n.name), n, checked).  
1302 -  
1303 -public define HTML_In_Form  
1304 - check_box_r (List(CoreAttrs) options, HTML_Label label, WebArgName n, Bool checked)  
1305 - = check_box_r (options, label, html_Id(n.name), n, checked).  
1306 -  
1307 -public define HTML_In_Form  
1308 - file_upload (WebArgName n, Int width)  
1309 - = file_upload([], no_label, html_Id(n.name), n, width).  
1310 -  
1311 -public define HTML_In_Form  
1312 - hidden (WebArgName name, WebArgValue value)  
1313 - =  
1314 - hidden(html_Id(""), name, value).  
1315 1012
1316 public type Input_Type: 1013 public type Input_Type:
1317 button, 1014 button,
@@ -1417,6 +1114,69 @@ public type FormMethod: @@ -1417,6 +1114,69 @@ public type FormMethod:
1417 post 1114 post
1418 . 1115 .
1419 1116
  1117 +public define String format_attrs (List(CoreAttrs) attributs).
  1118 +
  1119 + Formating choices for a <select> tag.
  1120 +
  1121 +public define Printable_tree
  1122 + format_choices
  1123 + (
  1124 + List(String) l
  1125 + ) =
  1126 + if l is
  1127 + {
  1128 + [ ] then [ ],
  1129 + [h . t] then ["<option>", h, "</option>\n" . format_choices(t)]
  1130 + }
  1131 +.
  1132 +
  1133 +
  1134 +public define Printable_tree
  1135 + format_choices
  1136 + (
  1137 + List(String) l,
  1138 + InitialValue selected
  1139 + ) =
  1140 + if l is
  1141 + {
  1142 + [ ] then [ ],
  1143 + [h . t] then if h = selected.value
  1144 + then ["<option selected=\"selected\">", h, "</option>\n" . format_choices(t)]
  1145 + else ["<option>", h, "</option>\n" . format_choices(t,selected)]
  1146 + }.
  1147 +
  1148 +
  1149 +public define Printable_tree
  1150 + format_choices
  1151 + (
  1152 + List((List(CoreAttrs),WebArgValue,String)) l
  1153 + ) =
  1154 + if l is
  1155 + {
  1156 + [ ] then [ ],
  1157 + [h . t] then
  1158 + if h is (attrs,val,item)
  1159 + then ["<option value=\""+encode_HTML_entities(val.value)+"\" "+format_attrs(attrs)+">", item, "</option>\n" . format_choices(t)]
  1160 + }.
  1161 +
  1162 +public define Printable_tree
  1163 + format_choices
  1164 + (
  1165 + List((List(CoreAttrs),WebArgValue,String)) l,
  1166 + InitialValue selected
  1167 + ) =
  1168 + if l is
  1169 + {
  1170 + [ ] then [ ],
  1171 + [h . t] then
  1172 + if h is (attrs,val,item) then
  1173 + if val.value = selected.value
  1174 + then ["<option value=\""+encode_HTML_entities(val.value)+"\" "+format_attrs(attrs)+" selected=\"selected\">", item, "</option>\n" . format_choices(t)]
  1175 + else ["<option value=\""+encode_HTML_entities(val.value)+"\" "+format_attrs(attrs)+" >", item, "</option>\n" . format_choices(t,selected)]
  1176 + }.
  1177 +
  1178 +
  1179 +
1420 //public type HTML_Body:... 1180 //public type HTML_Body:...
1421 1181
1422 public define CoreAttrs formaction(WEB_Action_Name action, List((String,String)) extra_ops) = attr("formaction", format_web_action_name(action, extra_ops)). 1182 public define CoreAttrs formaction(WEB_Action_Name action, List((String,String)) extra_ops) = attr("formaction", format_web_action_name(action, extra_ops)).
@@ -1425,227 +1185,286 @@ public define CoreAttrs formaction(WEB_Action_Name action) @@ -1425,227 +1185,286 @@ public define CoreAttrs formaction(WEB_Action_Name action)
1425 public define CoreAttrs formmethod(FormMethod method) = attr("formmethod", if method is { get then "get", post then "post"}). 1185 public define CoreAttrs formmethod(FormMethod method) = attr("formmethod", if method is { get then "get", post then "post"}).
1426 1186
1427 1187
1428 - 'HTML_Off_Form' defines all the elements you may put outside any form. 1188 + 'HTML' defines all the elements you may put outside any form.
1429 1189
1430 1190
1431 public define CoreAttrs method(String value) = attr("method", value). 1191 public define CoreAttrs method(String value) = attr("method", value).
  1192 +public define CoreAttrs method(FormMethod method) = attr("method", if method is { get then "get", post then "post"}).
1432 public define CoreAttrs action(WEB_Action_Name action)= attr("action", "/"+format_web_action_name(action)). 1193 public define CoreAttrs action(WEB_Action_Name action)= attr("action", "/"+format_web_action_name(action)).
1433 public define CoreAttrs action(WEB_Action_Name action, List((String,String)) extra_ops)= attr("action", "/"+format_web_action_name(action, extra_ops)). 1194 public define CoreAttrs action(WEB_Action_Name action, List((String,String)) extra_ops)= attr("action", "/"+format_web_action_name(action, extra_ops)).
1434 public define CoreAttrs formmethod(String value) = attr("formmethod", value). 1195 public define CoreAttrs formmethod(String value) = attr("formmethod", value).
1435 public define CoreAttrs form(String value) = attr("form", value). 1196 public define CoreAttrs form(String value) = attr("form", value).
1436 public define CoreAttrs for(String value) = attr("for", value). 1197 public define CoreAttrs for(String value) = attr("for", value).
1437 1198
1438 -  
1439 -public define HTML_Off_Form text(List(CoreAttrs) attrs, Int i) = text(attrs, to_decimal(i)).  
1440 -public define HTML_Off_Form text(CoreAttrs attr, Int i) = text([attr], i).  
1441 -public define HTML_Off_Form text(Int i) = text([], i).  
1442 -public define HTML_Off_Form text(String s) = text([], s).  
1443 -public define HTML_Off_Form text(CoreAttrs attr, String s) = text([attr], s).  
1444 -  
1445 -public define HTML_Off_Form a(A_href _href) = a([], _href, _self, []).  
1446 -public define HTML_Off_Form a(List(CoreAttrs) attrs, A_href _href) = a(attrs, _href, _self, []).  
1447 -public define HTML_Off_Form a(List(CoreAttrs) attrs, A_href _href, HTML_Off_Form content) = a(attrs, _href, _self, [content]).  
1448 -public define HTML_Off_Form a(List(CoreAttrs) attrs, A_href _href, List(HTML_Off_Form) content) = a(attrs, _href, _self, content).  
1449 -public define HTML_Off_Form a(A_href _href, HTML_Off_Form content) = a([], _href, _self, [content]).  
1450 -public define HTML_Off_Form a(A_href _href, String _text) = a([], _href, _self, [text(_text)]).  
1451 -public define HTML_Off_Form a(A_href _href, List(HTML_Off_Form) content) = a([], _href, _self, content).  
1452 -public define HTML_Off_Form a(List(CoreAttrs) attrs, A_href _href, A_target _target, HTML_Off_Form content) = a(attrs, _href, _target, [content]).  
1453 -public define HTML_Off_Form a(CoreAttrs attr, A_href _href, A_target _target, HTML_Off_Form content) = a([attr], _href, _target, [content]).  
1454 -public define HTML_Off_Form a(A_href _href, A_target _target, HTML_Off_Form content) = a([], _href, _target, [content]).  
1455 -public define HTML_Off_Form a(A_href _href, A_target _target, List(HTML_Off_Form) content) = a([], _href, _target, content).  
1456 -public define HTML_Off_Form a(CoreAttrs attr, A_href _href, A_target _target, List(HTML_Off_Form) content) = a([attr], _href, _target, content).  
1457 -public define HTML_Off_Form a(CoreAttrs attr, A_href _href, List(HTML_Off_Form) content) = a([attr], _href, _self, content).  
1458 -public define HTML_Off_Form a(CoreAttrs attr, A_href _href, HTML_Off_Form content) = a([attr], _href, _self, [content]). 1199 +/**********/
  1200 +public define HTML format_label(HTML_Label _label, HTML_Id _id).
  1201 +
  1202 +/**********/
  1203 +
  1204 +//public define HTML html_tag(String tag_name, HTML_Head_Tag head, List(CoreAttrs) attrs, List(HTML) contents) = html_tag(tag_name, [head], attrs, contents).
  1205 +//public define HTML html_tag(String tag_name, List(HTML_Head_Tag) heads, List(CoreAttrs) attrs, HTML content) = html_tag(tag_name, heads, attrs, [content]).
  1206 +//public define HTML html_tag(String tag_name, HTML_Head_Tag head, List(CoreAttrs) attrs, HTML content) = html_tag(tag_name, [head], attrs, [content]).
  1207 +//public define HTML html_tag(String tag_name, List(HTML_Head_Tag) heads, List(CoreAttrs) attrs) = html_tag(tag_name, heads, attrs, []).
  1208 +//public define HTML html_tag(String tag_name, HTML_Head_Tag head, List(CoreAttrs) attrs) = html_tag(tag_name, [head], attrs, []).
  1209 +//public define HTML html_tag(String tag_name, List(HTML_Head_Tag) heads, CoreAttrs attr, List(HTML) contents) = html_tag(tag_name, heads, [attr], contents).
  1210 +//public define HTML html_tag(String tag_name, HTML_Head_Tag head, CoreAttrs attr, List(HTML) contents) = html_tag(tag_name, [head], [attr], contents).
  1211 +//public define HTML html_tag(String tag_name, List(HTML_Head_Tag) heads, CoreAttrs attr, HTML content) = html_tag(tag_name, heads, [attr], [content]).
  1212 +//public define HTML html_tag(String tag_name, HTML_Head_Tag head, CoreAttrs attr, HTML content) = html_tag(tag_name, [head], [attr], [content]).
  1213 +//public define HTML html_tag(String tag_name, List(HTML_Head_Tag) heads, CoreAttrs attr) = html_tag(tag_name, heads, [attr], []).
  1214 +//public define HTML html_tag(String tag_name, HTML_Head_Tag head, CoreAttrs attr) = html_tag(tag_name, [head], [attr], []).
  1215 +//public define HTML html_tag(String tag_name, List(HTML_Head_Tag) heads, List(HTML) contents) = html_tag(tag_name, heads, [], contents).
  1216 +//public define HTML html_tag(String tag_name, HTML_Head_Tag head, List(HTML) contents) = html_tag(tag_name, [head], [], contents).
  1217 +//public define HTML html_tag(String tag_name, List(HTML_Head_Tag) heads, HTML content) = html_tag(tag_name, heads, [], [content]).
  1218 +//public define HTML html_tag(String tag_name, HTML_Head_Tag head, HTML content) = html_tag(tag_name, [head], [], [content]).
  1219 +//public define HTML html_tag(String tag_name, List(HTML_Head_Tag) heads) = html_tag(tag_name, heads, [], []).
  1220 +//public define HTML html_tag(String tag_name, HTML_Head_Tag head) = html_tag(tag_name, [head], [], []).
  1221 +//
  1222 +//public define HTML html_tag(String tag_name, List(CoreAttrs) attrs, List(HTML) contents) = html_tag(tag_name, [], attrs, contents).
  1223 +//public define HTML html_tag(String tag_name, List(CoreAttrs) attrs, HTML content) = html_tag(tag_name, [], attrs, [content]).
  1224 +//public define HTML html_tag(String tag_name, CoreAttrs attr, List(HTML) contents) = html_tag(tag_name, [], [attr], contents).
  1225 +//public define HTML html_tag(String tag_name, CoreAttrs attr, HTML content) = html_tag(tag_name, [], [attr], [content]).
  1226 +//public define HTML html_tag(String tag_name, List(CoreAttrs) attrs) = html_tag(tag_name, [], attrs, []).
  1227 +//public define HTML html_tag(String tag_name, CoreAttrs attr) = html_tag(tag_name, [], [attr], []).
  1228 +//public define HTML html_tag(String tag_name, List(HTML) contents) = html_tag(tag_name, [], [], contents).
  1229 +//public define HTML html_tag(String tag_name, HTML content) = html_tag(tag_name, [], [], [content]).
  1230 +//public define HTML html_tag(String tag_name) = html_tag(tag_name, [], [], []).
  1231 +
  1232 +//public define HTML html_tag(String tag_name, List(CoreAttrs) attrs, List(HTML) contents) = html_tag(tag_name, attrs, contents).
  1233 +public define HTML html_tag(String tag_name, List(CoreAttrs) attrs, HTML content) = html_tag(tag_name, attrs, [content]).
  1234 +public define HTML html_tag(String tag_name, CoreAttrs attr, List(HTML) contents) = html_tag(tag_name, [attr], contents).
  1235 +public define HTML html_tag(String tag_name, CoreAttrs attr, HTML content) = html_tag(tag_name, [attr], [content]).
  1236 +public define HTML html_tag(String tag_name, List(CoreAttrs) attrs) = html_tag(tag_name, attrs, []).
  1237 +public define HTML html_tag(String tag_name, CoreAttrs attr) = html_tag(tag_name, [attr], []).
  1238 +public define HTML html_tag(String tag_name, List(HTML) contents) = html_tag(tag_name, [], contents).
  1239 +public define HTML html_tag(String tag_name, HTML content) = html_tag(tag_name, [], [content]).
  1240 +public define HTML html_tag(String tag_name) = html_tag(tag_name, [], []).
  1241 +
  1242 +
  1243 +public define HTML text(List(CoreAttrs) attrs, Int i) = text(attrs, to_decimal(i)).
  1244 +public define HTML text(CoreAttrs attr, Int i) = text([attr], i).
  1245 +public define HTML text(Int i) = text([], i).
  1246 +public define HTML text(String s) = text([], s).
  1247 +public define HTML text(CoreAttrs attr, String s) = text([attr], s).
  1248 +
  1249 +public define HTML a(A_href _href) = a([], _href, _self, []).
  1250 +public define HTML a(List(CoreAttrs) attrs, A_href _href) = a(attrs, _href, _self, []).
  1251 +public define HTML a(List(CoreAttrs) attrs, A_href _href, HTML content) = a(attrs, _href, _self, [content]).
  1252 +public define HTML a(List(CoreAttrs) attrs, A_href _href, List(HTML) content) = a(attrs, _href, _self, content).
  1253 +public define HTML a(A_href _href, HTML content) = a([], _href, _self, [content]).
  1254 +public define HTML a(A_href _href, String _text) = a([], _href, _self, [text(_text)]).
  1255 +public define HTML a(A_href _href, List(HTML) content) = a([], _href, _self, content).
  1256 +public define HTML a(List(CoreAttrs) attrs, A_href _href, A_target _target, HTML content) = a(attrs, _href, _target, [content]).
  1257 +public define HTML a(CoreAttrs attr, A_href _href, A_target _target, HTML content) = a([attr], _href, _target, [content]).
  1258 +public define HTML a(A_href _href, A_target _target, HTML content) = a([], _href, _target, [content]).
  1259 +public define HTML a(A_href _href, A_target _target, List(HTML) content) = a([], _href, _target, content).
  1260 +public define HTML a(CoreAttrs attr, A_href _href, A_target _target, List(HTML) content) = a([attr], _href, _target, content).
  1261 +public define HTML a(CoreAttrs attr, A_href _href, List(HTML) content) = a([attr], _href, _self, content).
  1262 +public define HTML a(CoreAttrs attr, A_href _href, HTML content) = a([attr], _href, _self, [content]).
  1263 +public define HTML a(List(CoreAttrs) attrs, HTML content) = html_tag("a", attrs, [content]).
  1264 +public define HTML a(List(CoreAttrs) attrs) = html_tag("a", attrs).
  1265 +
  1266 + /// helper for <a> tag
  1267 +public define HTML mail_to(String email, HTML element) = a(href("mailto:"+email), element).
  1268 +public define HTML foreign_link(Int tsize, String url, String name) = a(size(tsize),href(url),text(name)).
1459 1269
1460 // <article> 1270 // <article>
1461 -public define HTML_Off_Form article(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("article", attrs, content).  
1462 -public define HTML_Off_Form article(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("article", attrs, [content]).  
1463 -public define HTML_Off_Form article(List(HTML_Off_Form) content) = html_tag("article", [], content).  
1464 -public define HTML_Off_Form article(HTML_Off_Form content) = html_tag("article", [], [content]). 1271 +public define HTML article(List(CoreAttrs) attrs, List(HTML) content) = html_tag("article", attrs, content).
  1272 +public define HTML article(List(CoreAttrs) attrs, HTML content) = html_tag("article", attrs, [content]).
  1273 +public define HTML article(List(HTML) content) = html_tag("article", content).
  1274 +public define HTML article(HTML content) = html_tag("article", [content]).
1465 1275
1466 // <aside> 1276 // <aside>
1467 -public define HTML_Off_Form aside(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("aside", attrs, content).  
1468 -public define HTML_Off_Form aside(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("aside", attrs, [content]).  
1469 -public define HTML_Off_Form aside(List(HTML_Off_Form) content) = html_tag("aside", [], content).  
1470 -public define HTML_Off_Form aside(HTML_Off_Form content) = html_tag("aside", [], [content]). 1277 +public define HTML aside(List(CoreAttrs) attrs, List(HTML) content) = html_tag("aside", attrs, content).
  1278 +public define HTML aside(List(CoreAttrs) attrs, HTML content) = html_tag("aside", attrs, [content]).
  1279 +public define HTML aside(List(HTML) content) = html_tag("aside", content).
  1280 +public define HTML aside(HTML content) = html_tag("aside", [content]).
1471 1281
1472 // <b> text in bold face 1282 // <b> text in bold face
1473 -public define HTML_Off_Form b(String string) = html_tag("b", [], [text(string)]).  
1474 -public define HTML_Off_Form b(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("b", attrs, [content]).  
1475 -public define HTML_Off_Form b(CoreAttrs attr, List(HTML_Off_Form) content) = html_tag("b", [attr], content).  
1476 -public define HTML_Off_Form b(CoreAttrs attr, HTML_Off_Form content) = html_tag("b", [attr], [content]).  
1477 -public define HTML_Off_Form b(List(CoreAttrs) attrs, String string) = html_tag("b", attrs, [text(string)]).  
1478 -public define HTML_Off_Form b(CoreAttrs attr, String string) = html_tag("b", [attr], [text(string)]). 1283 +public define HTML b(String string) = html_tag("b", [text(string)]).
  1284 +public define HTML b(List(CoreAttrs) attrs, HTML content) = html_tag("b", attrs, [content]).
  1285 +public define HTML b(CoreAttrs attr, List(HTML) content) = html_tag("b", [attr], content).
  1286 +public define HTML b(CoreAttrs attr, HTML content) = html_tag("b", [attr], [content]).
  1287 +public define HTML b(List(CoreAttrs) attrs, String string) = html_tag("b", attrs, [text(string)]).
  1288 +public define HTML b(CoreAttrs attr, String string) = html_tag("b", [attr], [text(string)]).
1479 1289
1480 // <br> 1290 // <br>
1481 -public define HTML_Off_Form br = html_void_tag("br", []).  
1482 -public define HTML_Off_Form br(List(CoreAttrs) attrs) = html_void_tag("br", attrs). 1291 +public define HTML br = html_void_tag("br", []).
  1292 +public define HTML br(List(CoreAttrs) attrs) = html_void_tag("br", attrs).
1483 1293
1484 // <button> 1294 // <button>
1485 -public define HTML_Off_Form button(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("button", attrs, content).  
1486 -public define HTML_Off_Form button(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("button", attrs, [content]).  
1487 -public define HTML_Off_Form button(CoreAttrs attr, List(HTML_Off_Form) content) = html_tag("button", [attr], content).  
1488 -public define HTML_Off_Form button(CoreAttrs attr, HTML_Off_Form content) = html_tag("button", [attr], [content]).  
1489 -public define HTML_Off_Form button(List(CoreAttrs) attrs) = html_tag("button", attrs, []).  
1490 -public define HTML_Off_Form button(List(CoreAttrs) attrs, String string) = html_tag("button", attrs, [text(string)]).  
1491 -public define HTML_Off_Form button(List(HTML_Off_Form) content) = html_tag("button", [], content).  
1492 -public define HTML_Off_Form button(HTML_Off_Form content) = html_tag("button", [], [content]). 1295 +public define HTML button(List(CoreAttrs) attrs, List(HTML) content) = html_tag("button", attrs, content).
  1296 +public define HTML button(List(CoreAttrs) attrs, HTML content) = html_tag("button", attrs, [content]).
  1297 +public define HTML button(CoreAttrs attr, List(HTML) content) = html_tag("button", [attr], content).
  1298 +public define HTML button(CoreAttrs attr, HTML content) = html_tag("button", [attr], [content]).
  1299 +public define HTML button(List(CoreAttrs) attrs) = html_tag("button", attrs).
  1300 +public define HTML button(List(CoreAttrs) attrs, String string) = html_tag("button", attrs, [text(string)]).
  1301 +public define HTML button(List(HTML) content) = html_tag("button", content).
  1302 +public define HTML button(HTML content) = html_tag("button", [content]).
1493 1303
1494 // <canvas> 1304 // <canvas>
1495 -public define HTML_Off_Form canvas(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("canvas", attrs, content).  
1496 -public define HTML_Off_Form canvas(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("canvas", attrs, [content]).  
1497 -public define HTML_Off_Form canvas(CoreAttrs attr, List(HTML_Off_Form) content) = html_tag("canvas", [attr], content).  
1498 -public define HTML_Off_Form canvas(CoreAttrs attr, HTML_Off_Form content) = html_tag("canvas", [attr], [content]).  
1499 -public define HTML_Off_Form canvas(List(CoreAttrs) attrs) = html_tag("canvas", attrs, []).  
1500 -public define HTML_Off_Form canvas(List(HTML_Off_Form) content) = html_tag("canvas", [], content).  
1501 -public define HTML_Off_Form canvas(HTML_Off_Form content) = html_tag("canvas", [], [content]).  
1502 -public define HTML_Off_Form canvas(CoreAttrs cattr, Int width, Int height) = html_tag("canvas", [cattr, 1305 +public define HTML canvas(List(CoreAttrs) attrs, List(HTML) content) = html_tag("canvas", attrs, content).
  1306 +public define HTML canvas(List(CoreAttrs) attrs, HTML content) = html_tag("canvas", attrs, [content]).
  1307 +public define HTML canvas(CoreAttrs attr, List(HTML) content) = html_tag("canvas", [attr], content).
  1308 +public define HTML canvas(CoreAttrs attr, HTML content) = html_tag("canvas", [attr], [content]).
  1309 +public define HTML canvas(List(CoreAttrs) attrs) = html_tag("canvas", attrs).
  1310 +public define HTML canvas(List(HTML) content) = html_tag("canvas", content).
  1311 +public define HTML canvas(HTML content) = html_tag("canvas", [content]).
  1312 +public define HTML canvas(CoreAttrs cattr, Int width, Int height) = html_tag("canvas", [cattr,
1503 attr("width", to_String(width)), 1313 attr("width", to_String(width)),
1504 attr("height", to_String(height)) 1314 attr("height", to_String(height))
1505 - ], []).  
1506 -public define HTML_Off_Form canvas(List(CoreAttrs) attrs, Int width, Int height) = html_tag("canvas", [ 1315 + ]).
  1316 +public define HTML canvas(List(CoreAttrs) attrs, Int width, Int height) = html_tag("canvas", [
1507 attr("width", to_String(width)), 1317 attr("width", to_String(width)),
1508 attr("height", to_String(height)). 1318 attr("height", to_String(height)).
1509 attrs 1319 attrs
1510 - ], []). 1320 + ]).
1511 // <datalist> 1321 // <datalist>
1512 -public define HTML_Off_Form datalist(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("datalist", attrs, content).  
1513 -public define HTML_Off_Form datalist(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("datalist", attrs, [content]).  
1514 -public define HTML_Off_Form datalist(List(HTML_Off_Form) content) = html_tag("datalist", [], content).  
1515 -public define HTML_Off_Form datalist(HTML_Off_Form content) = html_tag("datalist", [], [content]). 1322 +public define HTML datalist(List(CoreAttrs) attrs, List(HTML) content) = html_tag("datalist", attrs, content).
  1323 +public define HTML datalist(List(CoreAttrs) attrs, HTML content) = html_tag("datalist", attrs, [content]).
  1324 +public define HTML datalist(List(HTML) content) = html_tag("datalist", content).
  1325 +public define HTML datalist(HTML content) = html_tag("datalist", [content]).
1516 1326
1517 // <div> 1327 // <div>
1518 -public define HTML_Off_Form div(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("div", attrs, content).  
1519 -public define HTML_Off_Form div(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("div", attrs, [content]).  
1520 -public define HTML_Off_Form div(CoreAttrs attr, List(HTML_Off_Form) content) = html_tag("div", [attr], content).  
1521 -public define HTML_Off_Form div(CoreAttrs attr, HTML_Off_Form content) = html_tag("div", [attr], [content]).  
1522 -public define HTML_Off_Form div(List(HTML_Off_Form) content) = html_tag("div", [], content).  
1523 -public define HTML_Off_Form div(HTML_Off_Form content) = html_tag("div", [], [content]).  
1524 -public define HTML_Off_Form div(List(CoreAttrs) attrs) = html_tag("div", attrs, []).  
1525 -public define HTML_Off_Form div(CoreAttrs attr) = html_tag("div", [attr], []).  
1526 -  
1527 -public define HTML_Off_Form div(String string) = html_tag("div", [], [text(string)]).  
1528 -public define HTML_Off_Form div(CoreAttrs attr, String string) = html_tag("div", [attr], [text(string)]).  
1529 -public define HTML_Off_Form div(List(CoreAttrs) attrs, String string) = html_tag("div", attrs, [text(string)]).  
1530 -  
1531 -public define HTML_Off_Form div(List(CoreAttrs) attrs, HTML_Partial_Content content) = div(attrs, [content]).  
1532 -public define HTML_Off_Form div(List(HTML_Partial_Content) content) = div([], content).  
1533 -public define HTML_Off_Form div(CoreAttrs attr, HTML_Partial_Content content) = div([attr], [content]).  
1534 -public define HTML_Off_Form div(HTML_Partial_Content content) = div([], [content]).  
1535 -  
1536 -//public define HTML_Partial_Content div(List(CoreAttrs) attrs, HTML_Partial_Content content) = partial_content([], div(attrs, [content])).  
1537 -//public define HTML_Partial_Content div(CoreAttrs attr, HTML_Partial_Content content) = partial_content([], div([attr], [content])).  
1538 -//public define HTML_Partial_Content div(List(HTML_Partial_Content) content) = partial_content([], div([], content)).  
1539 -//public define HTML_Partial_Content div(HTML_Partial_Content content) = partial_content([], div([], [content])). 1328 +public define HTML div(List(CoreAttrs) attrs, List(HTML) content) = html_tag("div", attrs, content).
  1329 +public define HTML div(List(CoreAttrs) attrs, HTML content) = html_tag("div", attrs, [content]).
  1330 +public define HTML div(CoreAttrs attr, List(HTML) content) = html_tag("div", [attr], content).
  1331 +public define HTML div(CoreAttrs attr, HTML content) = html_tag("div", [attr], [content]).
  1332 +public define HTML div(List(HTML) content) = html_tag("div", content).
  1333 +public define HTML div(HTML content) = html_tag("div", [content]).
  1334 +public define HTML div(List(CoreAttrs) attrs) = html_tag("div", attrs).
  1335 +public define HTML div(CoreAttrs attr) = html_tag("div", [attr]).
  1336 +
  1337 +public define HTML div(String string) = html_tag("div", [text(string)]).
  1338 +public define HTML div(CoreAttrs attr, String string) = html_tag("div", [attr], [text(string)]).
  1339 +public define HTML div(List(CoreAttrs) attrs, String string) = html_tag("div", attrs, [text(string)]).
  1340 +
  1341 +//public define HTML div(List(CoreAttrs) attrs, HTML content) = html_tag("div", attrs, [content]).
  1342 +//public define HTML div(List(HTML) content) = html_tag("div", [], content).
  1343 +//public define HTML div(CoreAttrs attr, HTML content) = html_tag("div", [attr], [content]).
  1344 +//public define HTML div(HTML content) = html_tag("div", [], [content]).
  1345 +
  1346 +//public define HTML div(List(CoreAttrs) attrs, HTML content) = partial_content([], div(attrs, [content])).
  1347 +//public define HTML div(CoreAttrs attr, HTML content) = partial_content([], div([attr], [content])).
  1348 +//public define HTML div(List(HTML) content) = partial_content([], div([], content)).
  1349 +//public define HTML div(HTML content) = partial_content([], div([], [content])).
1540 1350
1541 // <dd> 1351 // <dd>
1542 -public define HTML_Off_Form dd(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("dd", attrs, content).  
1543 -public define HTML_Off_Form dd(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("dd", attrs, [content]).  
1544 -public define HTML_Off_Form dd(List(HTML_Off_Form) content) = html_tag("dd", [], content).  
1545 -public define HTML_Off_Form dd(HTML_Off_Form content) = html_tag("dd", [], [content]). 1352 +public define HTML dd(List(CoreAttrs) attrs, List(HTML) content) = html_tag("dd", attrs, content).
  1353 +public define HTML dd(List(CoreAttrs) attrs, HTML content) = html_tag("dd", attrs, [content]).
  1354 +public define HTML dd(List(HTML) content) = html_tag("dd", content).
  1355 +public define HTML dd(HTML content) = html_tag("dd", [content]).
1546 1356
1547 // <dl> 1357 // <dl>
1548 -public define HTML_Off_Form dl(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("dl", attrs, content).  
1549 -public define HTML_Off_Form dl(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("dl", attrs, [content]).  
1550 -public define HTML_Off_Form dl(List(HTML_Off_Form) content) = html_tag("dl", [], content).  
1551 -public define HTML_Off_Form dl(HTML_Off_Form content) = html_tag("dl", [], [content]). 1358 +public define HTML dl(List(CoreAttrs) attrs, List(HTML) content) = html_tag("dl", attrs, content).
  1359 +public define HTML dl(List(CoreAttrs) attrs, HTML content) = html_tag("dl", attrs, [content]).
  1360 +public define HTML dl(List(HTML) content) = html_tag("dl", content).
  1361 +public define HTML dl(HTML content) = html_tag("dl", [content]).
1552 1362
1553 // <dt> 1363 // <dt>
1554 -public define HTML_Off_Form dt(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("dt", attrs, content).  
1555 -public define HTML_Off_Form dt(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("dt", attrs, [content]).  
1556 -public define HTML_Off_Form dt(List(HTML_Off_Form) content) = html_tag("dt", [], content).  
1557 -public define HTML_Off_Form dt(HTML_Off_Form content) = html_tag("dt", [], [content]). 1364 +public define HTML dt(List(CoreAttrs) attrs, List(HTML) content) = html_tag("dt", attrs, content).
  1365 +public define HTML dt(List(CoreAttrs) attrs, HTML content) = html_tag("dt", attrs, [content]).
  1366 +public define HTML dt(List(HTML) content) = html_tag("dt", content).
  1367 +public define HTML dt(HTML content) = html_tag("dt", [content]).
1558 1368
1559 // <em> 1369 // <em>
1560 -public define HTML_Off_Form em(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("em", attrs, content).  
1561 -public define HTML_Off_Form em(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("em", attrs, [content]).  
1562 -public define HTML_Off_Form em(List(HTML_Off_Form) content) = html_tag("em", [], content).  
1563 -public define HTML_Off_Form em(HTML_Off_Form content) = html_tag("em", [], [content]). 1370 +public define HTML em(List(CoreAttrs) attrs, List(HTML) content) = html_tag("em", attrs, content).
  1371 +public define HTML em(List(CoreAttrs) attrs, HTML content) = html_tag("em", attrs, [content]).
  1372 +public define HTML em(List(HTML) content) = html_tag("em", content).
  1373 +public define HTML em(HTML content) = html_tag("em", [content]).
  1374 +
  1375 + // <fieldset>
  1376 +public define HTML fieldset(List(CoreAttrs) attrs, List(HTML) content) = html_tag("fieldset", attrs, content).
  1377 +public define HTML fieldset(List(CoreAttrs) attrs, HTML content) = html_tag("fieldset", attrs, [content]).
  1378 +public define HTML fieldset(List(HTML) content) = html_tag("fieldset", content).
  1379 +public define HTML fieldset(HTML content) = html_tag("fieldset", [content]).
1564 1380
1565 // <footer> 1381 // <footer>
1566 -public define HTML_Off_Form footer(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("footer", attrs, content).  
1567 -public define HTML_Off_Form footer(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("footer", attrs, [content]).  
1568 -public define HTML_Off_Form footer(List(HTML_Off_Form) content) = html_tag("footer", [], content).  
1569 -public define HTML_Off_Form footer(HTML_Off_Form content) = html_tag("footer", [], [content]). 1382 +public define HTML footer(List(CoreAttrs) attrs, List(HTML) content) = html_tag("footer", attrs, content).
  1383 +public define HTML footer(List(CoreAttrs) attrs, HTML content) = html_tag("footer", attrs, [content]).
  1384 +public define HTML footer(List(HTML) content) = html_tag("footer", content).
  1385 +public define HTML footer(HTML content) = html_tag("footer", [content]).
1570 1386
1571 // <form> 1387 // <form>
1572 -public define HTML_Off_Form form(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("form", attrs, content).  
1573 -public define HTML_Off_Form form(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("form", attrs, [content]).  
1574 -public define HTML_Off_Form form(CoreAttrs attr, List(HTML_Off_Form) content) = html_tag("form", [attr], content).  
1575 -public define HTML_Off_Form form(CoreAttrs attr, HTML_Off_Form content) = html_tag("form", [attr], [content]).  
1576 -public define HTML_Off_Form form(List(CoreAttrs) attrs) = html_tag("form", attrs, []).  
1577 -public define HTML_Off_Form form(CoreAttrs attr) = html_tag("form", [attr], []). 1388 +public define HTML form(List(CoreAttrs) attrs, List(HTML) content) = html_tag("form", attrs, content).
  1389 +public define HTML form(List(CoreAttrs) attrs, HTML content) = html_tag("form", attrs, [content]).
  1390 +public define HTML form(CoreAttrs attr, List(HTML) content) = html_tag("form", [attr], content).
  1391 +public define HTML form(CoreAttrs attr, HTML content) = html_tag("form", [attr], [content]).
  1392 +public define HTML form(List(CoreAttrs) attrs) = html_tag("form", attrs).
  1393 +public define HTML form(CoreAttrs attr) = html_tag("form", [attr]).
1578 1394
1579 -public define HTML_Off_Form form(List(HTML_Off_Form) content) = html_tag("form", [], content).  
1580 -public define HTML_Off_Form form(HTML_Off_Form content) = html_tag("form", [], [content]). 1395 +public define HTML form(List(HTML) content) = html_tag("form", content).
  1396 +public define HTML form(HTML content) = html_tag("form", [content]).
1581 1397
1582 1398
1583 // <header> 1399 // <header>
1584 -public define HTML_Off_Form header(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("header", attrs, content).  
1585 -public define HTML_Off_Form header(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("header", attrs, [content]).  
1586 -public define HTML_Off_Form header(List(HTML_Off_Form) content) = html_tag("header", [], content).  
1587 -public define HTML_Off_Form header(HTML_Off_Form content) = html_tag("header", [], [content]). 1400 +public define HTML header(List(CoreAttrs) attrs, List(HTML) content) = html_tag("header", attrs, content).
  1401 +public define HTML header(List(CoreAttrs) attrs, HTML content) = html_tag("header", attrs, [content]).
  1402 +public define HTML header(List(HTML) content) = html_tag("header", content).
  1403 +public define HTML header(HTML content) = html_tag("header", [content]).
1588 1404
1589 // <h1> 1405 // <h1>
1590 -public define HTML_Off_Form h1(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("h1", attrs, content).  
1591 -public define HTML_Off_Form h1(CoreAttrs attr, List(HTML_Off_Form) content) = html_tag("h1", [attr], content).  
1592 -public define HTML_Off_Form h1(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("h1", attrs, [content]).  
1593 -public define HTML_Off_Form h1(CoreAttrs attr, HTML_Off_Form content) = html_tag("h1", [attr], [content]).  
1594 -public define HTML_Off_Form h1(List(HTML_Off_Form) content) = html_tag("h1", [], content).  
1595 -public define HTML_Off_Form h1(HTML_Off_Form content) = html_tag("h1", [], [content]). 1406 +public define HTML h1(List(CoreAttrs) attrs, List(HTML) content) = html_tag("h1", attrs, content).
  1407 +public define HTML h1(CoreAttrs attr, List(HTML) content) = html_tag("h1", [attr], content).
  1408 +public define HTML h1(List(CoreAttrs) attrs, HTML content) = html_tag("h1", attrs, [content]).
  1409 +public define HTML h1(CoreAttrs attr, HTML content) = html_tag("h1", [attr], [content]).
  1410 +public define HTML h1(List(HTML) content) = html_tag("h1", content).
  1411 +public define HTML h1(HTML content) = html_tag("h1", [content]).
1596 // <h2> 1412 // <h2>
1597 -public define HTML_Off_Form h2(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("h2", attrs, content).  
1598 -public define HTML_Off_Form h2(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("h2", attrs, [content]).  
1599 -public define HTML_Off_Form h2(List(HTML_Off_Form) content) = html_tag("h2", [], content).  
1600 -public define HTML_Off_Form h2(HTML_Off_Form content) = html_tag("h2", [], [content]). 1413 +public define HTML h2(List(CoreAttrs) attrs, List(HTML) content) = html_tag("h2", attrs, content).
  1414 +public define HTML h2(List(CoreAttrs) attrs, HTML content) = html_tag("h2", attrs, [content]).
  1415 +public define HTML h2(List(HTML) content) = html_tag("h2", content).
  1416 +public define HTML h2(HTML content) = html_tag("h2", [content]).
1601 // <h3> 1417 // <h3>
1602 -public define HTML_Off_Form h3(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("h3", attrs, content).  
1603 -public define HTML_Off_Form h3(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("h3", attrs, [content]).  
1604 -public define HTML_Off_Form h3(List(HTML_Off_Form) content) = html_tag("h3", [], content).  
1605 -public define HTML_Off_Form h3(HTML_Off_Form content) = html_tag("h3", [], [content]). 1418 +public define HTML h3(List(CoreAttrs) attrs, List(HTML) content) = html_tag("h3", attrs, content).
  1419 +public define HTML h3(List(CoreAttrs) attrs, HTML content) = html_tag("h3", attrs, [content]).
  1420 +public define HTML h3(List(HTML) content) = html_tag("h3", content).
  1421 +public define HTML h3(HTML content) = html_tag("h3", [content]).
  1422 +public define HTML h3(String content) = html_tag("h3", [text(content)]).
  1423 +
1606 // <h4> 1424 // <h4>
1607 -public define HTML_Off_Form h4(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("h4", attrs, content).  
1608 -public define HTML_Off_Form h4(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("h4", attrs, [content]).  
1609 -public define HTML_Off_Form h4(List(HTML_Off_Form) content) = html_tag("h4", [], content).  
1610 -public define HTML_Off_Form h4(HTML_Off_Form content) = html_tag("h4", [], [content]). 1425 +public define HTML h4(List(CoreAttrs) attrs, List(HTML) content) = html_tag("h4", attrs, content).
  1426 +public define HTML h4(List(CoreAttrs) attrs, HTML content) = html_tag("h4", attrs, [content]).
  1427 +public define HTML h4(List(HTML) content) = html_tag("h4", content).
  1428 +public define HTML h4(HTML content) = html_tag("h4", [content]).
1611 // <h5> 1429 // <h5>
1612 -public define HTML_Off_Form h5(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("h5", attrs, content).  
1613 -public define HTML_Off_Form h5(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("h5", attrs, [content]).  
1614 -public define HTML_Off_Form h5(List(HTML_Off_Form) content) = html_tag("h5", [], content).  
1615 -public define HTML_Off_Form h5(HTML_Off_Form content) = html_tag("h5", [], [content]). 1430 +public define HTML h5(List(CoreAttrs) attrs, List(HTML) content) = html_tag("h5", attrs, content).
  1431 +public define HTML h5(List(CoreAttrs) attrs, HTML content) = html_tag("h5", attrs, [content]).
  1432 +public define HTML h5(List(HTML) content) = html_tag("h5", content).
  1433 +public define HTML h5(HTML content) = html_tag("h5", [content]).
1616 1434
1617 // <h6> 1435 // <h6>
1618 -public define HTML_Off_Form h6(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("h6", attrs, content).  
1619 -public define HTML_Off_Form h6(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("h6", attrs, [content]).  
1620 -public define HTML_Off_Form h6(List(HTML_Off_Form) content) = html_tag("h6", [], content).  
1621 -public define HTML_Off_Form h6(HTML_Off_Form content) = html_tag("h6", [], [content]). 1436 +public define HTML h6(List(CoreAttrs) attrs, List(HTML) content) = html_tag("h6", attrs, content).
  1437 +public define HTML h6(List(CoreAttrs) attrs, HTML content) = html_tag("h6", attrs, [content]).
  1438 +public define HTML h6(List(HTML) content) = html_tag("h6", content).
  1439 +public define HTML h6(HTML content) = html_tag("h6", [content]).
1622 1440
1623 // <hr> 1441 // <hr>
1624 -public define HTML_Off_Form hr = html_void_tag("hr", []).  
1625 -public define HTML_Off_Form hr(List(CoreAttrs) attrs) = html_void_tag("hr", attrs).  
1626 -public define HTML_Off_Form hr(CoreAttrs attr) = html_void_tag("hr", [attr]). 1442 +public define HTML hr = html_void_tag("hr", []).
  1443 +public define HTML hr(List(CoreAttrs) attrs) = html_void_tag("hr", attrs).
  1444 +public define HTML hr(CoreAttrs attr) = html_void_tag("hr", [attr]).
1627 1445
1628 // <i> 1446 // <i>
1629 -public define HTML_Off_Form i(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("i", attrs, content).  
1630 -public define HTML_Off_Form i(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("i", attrs, [content]).  
1631 -public define HTML_Off_Form i(CoreAttrs attr, List(HTML_Off_Form) content) = html_tag("i", [attr], content).  
1632 -public define HTML_Off_Form i(CoreAttrs attr, HTML_Off_Form content) = html_tag("i", [attr], [content]).  
1633 -public define HTML_Off_Form i(List(HTML_Off_Form) content) = html_tag("i", [], content).  
1634 -public define HTML_Off_Form i(HTML_Off_Form content) = html_tag("i", [], [content]).  
1635 -public define HTML_Off_Form i(String string) = html_tag("i", [], [text(string)]).  
1636 -public define HTML_Off_Form i(CoreAttrs attr, String string) = html_tag("i", [attr], [text(string)]).  
1637 -public define HTML_Off_Form i(List(CoreAttrs) attrs, String string) = html_tag("i", attrs, [text(string)]). 1447 +public define HTML i(List(CoreAttrs) attrs, List(HTML) content) = html_tag("i", attrs, content).
  1448 +public define HTML i(List(CoreAttrs) attrs, HTML content) = html_tag("i", attrs, [content]).
  1449 +public define HTML i(List(CoreAttrs) attrs) = html_tag("i", attrs).
  1450 +public define HTML i(CoreAttrs attr, List(HTML) content) = html_tag("i", [attr], content).
  1451 +public define HTML i(CoreAttrs attr, HTML content) = html_tag("i", [attr], [content]).
  1452 +public define HTML i(List(HTML) content) = html_tag("i", content).
  1453 +public define HTML i(HTML content) = html_tag("i", [content]).
  1454 +public define HTML i(String string) = html_tag("i", [text(string)]).
  1455 +public define HTML i(CoreAttrs attr, String string) = html_tag("i", [attr], [text(string)]).
  1456 +public define HTML i(List(CoreAttrs) attrs, String string) = html_tag("i", attrs, [text(string)]).
1638 1457
1639 // <iframe> 1458 // <iframe>
1640 -public define HTML_Off_Form iframe(CoreAttrs _attr, String src, Int width, Int height) =  
1641 - html_tag("iframe", [_attr, attr("src",src), width_px(width), height_px(height)], []).  
1642 -public define HTML_Off_Form iframe(String src, Int width, Int height) =  
1643 - html_tag("iframe", [attr("src",src), width_px(width), height_px(height)], []).  
1644 -public define HTML_Off_Form iframe(String src) = html_tag("iframe", [attr("src",src)], []). 1459 +public define HTML iframe(CoreAttrs _attr, String src, Int width, Int height) =
  1460 + html_tag("iframe", [_attr, attr("src",src), width_px(width), height_px(height)]).
  1461 +public define HTML iframe(String src, Int width, Int height) =
  1462 + html_tag("iframe", [attr("src",src), width_px(width), height_px(height)]).
  1463 +public define HTML iframe(String src) = html_tag("iframe", [attr("src",src)]).
1645 1464
1646 // <input> 1465 // <input>
1647 -public define HTML_Off_Form input(List(CoreAttrs) attrs) = html_void_tag("input", attrs).  
1648 -public define HTML_Off_Form input(CoreAttrs attr) = html_void_tag("input", [attr]). 1466 +public define HTML input(List(CoreAttrs) attrs) = html_void_tag("input", attrs).
  1467 +public define HTML input(CoreAttrs attr) = html_void_tag("input", [attr]).
1649 1468
1650 public define CoreAttrs type(Input_Type value)= attr("type", to_String(value)). 1469 public define CoreAttrs type(Input_Type value)= attr("type", to_String(value)).
1651 public define CoreAttrs type(String value)= attr("type", value). 1470 public define CoreAttrs type(String value)= attr("type", value).
@@ -1653,359 +1472,484 @@ public define CoreAttrs name(String value)= attr(&quot;name&quot;, value). @@ -1653,359 +1472,484 @@ public define CoreAttrs name(String value)= attr(&quot;name&quot;, value).
1653 public define CoreAttrs value(String value)= attr("value", value). 1472 public define CoreAttrs value(String value)= attr("value", value).
1654 public define CoreAttrs placeholder(String value) = attr("placeholder", value). 1473 public define CoreAttrs placeholder(String value) = attr("placeholder", value).
1655 public define CoreAttrs init(String value)= attr("value", encode_HTML_entities(value)). 1474 public define CoreAttrs init(String value)= attr("value", encode_HTML_entities(value)).
  1475 +
1656 //-- BEGIN of <input> preset type 1476 //-- BEGIN of <input> preset type
1657 - 1477 +
  1478 + /// hidden value
  1479 +public define HTML hidden(List(CoreAttrs) attrs, String _name, String _value, String form) = input([type(hidden), name(_name), value(encode_HTML_entities(_value)), attr("form", form) . attrs]).
  1480 +public define HTML hidden(CoreAttrs attr, String name, String value, String form) = hidden([attr], name, value, form).
  1481 +public define HTML hidden(String name, String value, String form) = hidden([], name, value, form).
  1482 +public define HTML hidden(String _name, String _value) = input([type(hidden), name(_name), value(encode_HTML_entities(_value))]).
  1483 +
  1484 +public define HTML text_input(List(CoreAttrs) options, HTML_Label label, HTML_Id _id, WebArgName wan, InitialValue init, Int w) =
  1485 + sequence([
  1486 + format_label(label, _id),
  1487 + input([class("in"), type(text), id(_id.id), name(wan.name), size(w), value(encode_HTML_entities(init.value)). options])
  1488 + ]).
  1489 +
  1490 +public define HTML text_input(HTML_Label label, HTML_Id _id, WebArgName wan, InitialValue init, Int _width) =
  1491 + sequence([
  1492 + format_label(label, _id),
  1493 + input([class("in"), type(text), id(_id.id), name(wan.name), size(_width), value(encode_HTML_entities(init.value))])
  1494 + ]).
  1495 +
  1496 +
  1497 +// text_input_ro(options, label_text, id, name, init, w) then
  1498 +// [ format_label(label_text, id),
  1499 +// "<input readonly=\"readonly\" type=\"text\" name=\"",name,"\" id=\"",id,"\" size=\"",w,"\" value=\"",encode_HTML_entities(init.value),"\"",format_attrs([class("in") . options])," />"],
  1500 +
  1501 +public define HTML text_input_ro(List(CoreAttrs) options, HTML_Label label, HTML_Id _id, WebArgName wan, InitialValue init, Int w) =
  1502 + sequence([
  1503 + format_label(label, _id),
  1504 + input([class("in"), boolean("readonly"), type(text), id(_id.id), name(wan.name), size(w), value(encode_HTML_entities(init.value)). options])
  1505 + ]).
  1506 +
  1507 +public define HTML password_input(List(CoreAttrs) attrs, HTML_Label label, HTML_Id _id, WebArgName wan, InitialValue init, Int w) =
  1508 + sequence([
  1509 + format_label(label, _id),
  1510 + input([class("in"), type(password), id(_id.id), name(wan.name), size(w), value(encode_HTML_entities(init.value)). attrs])
  1511 + ]).
  1512 +
  1513 +
1658 /// Checkbox 1514 /// Checkbox
1659 -public define HTML_Off_Form checkbox(List(CoreAttrs) attrs, String name, String form, Bool checked) = input([type("checkbox"), attr("name",name), attr("form", form), bool_attr(checked, "checked") . attrs]).  
1660 -public define HTML_Off_Form checkbox(List(CoreAttrs) attrs, String name, Bool checked) = input([type("checkbox"), attr("name",name), bool_attr(checked, "checked") . attrs]).  
1661 -public define HTML_Off_Form checkbox(String name, String form, Bool checked) = checkbox([], name, form, checked).  
1662 -public define HTML_Off_Form checkbox(String name, Bool checked) = checkbox([], name, checked). 1515 +
  1516 +public define HTML checkbox(List(CoreAttrs) attrs) = input([type(checkbox) . attrs]).
  1517 +public define HTML checkbox(List(CoreAttrs) attrs, String _name, String _form, Bool checked) = input([type(checkbox), name(_name), form(_form), bool_attr(checked, "checked") . attrs]).
  1518 +public define HTML checkbox(List(CoreAttrs) attrs, String _name, Bool checked) = input([type(checkbox), name(_name), bool_attr(checked, "checked") . attrs]).
  1519 +public define HTML checkbox(String name, String form, Bool checked) = checkbox([], name, form, checked).
  1520 +public define HTML checkbox(String name, Bool checked) = checkbox([], name, checked).
  1521 +
  1522 +public define HTML check_box(List(CoreAttrs) attrs, HTML_Label label, HTML_Id _id, WebArgName wan, Bool checked) =
  1523 + sequence([
  1524 + format_label(label, _id),
  1525 + hidden("~"+wan.name, "~true"),
  1526 + input([type(checkbox), name(wan.name), id(_id.id), value("true"), bool_attr(checked, "checked"), class("in") . attrs])
  1527 + ])
  1528 +.
  1529 +
  1530 +public define HTML check_box(List(CoreAttrs) attrs, HTML_Label label, WebArgName wan, Bool checked)
  1531 + = check_box (attrs, label, html_Id(wan.name), wan, checked).
  1532 +
  1533 +public define HTML check_box_r(List(CoreAttrs) attrs, HTML_Label label, HTML_Id _id, WebArgName wan, Bool checked) =
  1534 + sequence([
  1535 + input([type(checkbox), name(wan.name), id(_id.id), value("true"), bool_attr(checked, "checked"), class("in") . attrs]),
  1536 + format_label(label, _id),
  1537 + hidden("~"+wan.name, "~true"),
  1538 + ])
  1539 +.
  1540 +public define HTML check_box_r(List(CoreAttrs) attrs, HTML_Label label, WebArgName wan, Bool checked)
  1541 + = check_box_r (attrs, label, html_Id(wan.name), wan, checked).
  1542 +
  1543 +public define HTML file_upload(List(CoreAttrs) attrs, HTML_Label label, HTML_Id _id, WebArgName wan, Int width)=
  1544 + sequence([
  1545 + format_label(label, _id),
  1546 + input([type(file), id(_id.id), size(width), name(wan.name), class("in") . attrs])
  1547 + ])
  1548 +.
1663 1549
  1550 +public define HTML file_upload(WebArgName n, Int width)= file_upload([], no_label, html_Id(n.name), n, width).
  1551 +
1664 /// Radio button 1552 /// Radio button
1665 -public define HTML_Off_Form radio(List(CoreAttrs) attrs, String name, String value, String form, Bool checked) = input([type("radio"), attr("name",name), attr("value",value), attr("form", form), bool_attr(checked, "checked") . attrs]).  
1666 -public define HTML_Off_Form radio(List(CoreAttrs) attrs, String name, String value, String form) = radio(attrs, name, value, form, false).  
1667 -public define HTML_Off_Form radio(String name, String value, String form, Bool checked) = radio([], name, value, form, checked).  
1668 -public define HTML_Off_Form radio(String name, String value, String form) = radio([], name, value, form, false). 1553 +public define HTML radio(List(CoreAttrs) attrs, String _name, String _value, String _form, Bool checked) = input([type(radio), name(_name), value(_value), form(_form), bool_attr(checked, "checked") . attrs]).
  1554 +public define HTML radio(List(CoreAttrs) attrs, String name, String value, String form) = radio(attrs, name, value, form, false).
  1555 +public define HTML radio(String name, String value, String form, Bool checked) = radio([], name, value, form, checked).
  1556 +public define HTML radio(String name, String value, String form) = radio([], name, value, form, false).
  1557 +public define HTML radio(String _name, String _value) = input([type(radio), name(_name), value(_value)]).
  1558 +
  1559 +public define HTML radio_button(List(CoreAttrs) attrs, HTML_Label label, HTML_Id _id, WebArgName wan, WebArgValue _value, Bool checked) =
  1560 + sequence([
  1561 + format_label(label, _id),
  1562 + input([type(radio), name(wan.name), id(_id.id), value(_value.value), bool_attr(checked, "checked"), class("in") . attrs])
  1563 + ])
  1564 +.
1669 1565
1670 - /// hidden value  
1671 -public define HTML_Off_Form hidden(List(CoreAttrs) attrs, String name, String value, String form) = input([type("hidden"), attr("name",name), attr("value",value), attr("form", form) . attrs]).  
1672 -public define HTML_Off_Form hidden(CoreAttrs attr, String name, String value, String form) = hidden([attr], name, value, form).  
1673 -public define HTML_Off_Form hidden(String name, String value, String form) = hidden([], name, value, form).  
1674 -public define HTML_Off_Form hidden(String _name, String _value) = input([type("hidden"), name(_name), value(_value)]). 1566 +public define HTML radio_button(List(CoreAttrs) attrs, HTML_Label label, WebArgName wan, WebArgValue value, Bool checked)
  1567 + = radio_button (attrs, label, html_Id(wan.name), wan, value, checked).
  1568 +
  1569 +
  1570 +public define HTML radio_button_r(List(CoreAttrs) attrs, HTML_Label label, HTML_Id _id, WebArgName wan, WebArgValue _value, Bool checked) =
  1571 + sequence([
  1572 + input([type(radio), name(wan.name), id(_id.id), value(_value.value), bool_attr(checked, "checked"), class("in") . attrs]),
  1573 + format_label(label, _id)
  1574 + ])
  1575 +.
1675 1576
  1577 +public define HTML radio_button_r(List(CoreAttrs) attrs, HTML_Label label, WebArgName wan, WebArgValue value, Bool checked)
  1578 + = radio_button_r(attrs, label, html_Id(wan.name), wan, value, checked).
  1579 +
1676 //-- END of <input> preset type 1580 //-- END of <input> preset type
1677 1581
1678 // <img> 1582 // <img>
1679 -public define HTML_Off_Form img(List(CoreAttrs) attrs, String src, String alt) = html_void_tag("img", attrs + [attr("src",src), attr("alt",alt)] ).  
1680 -public define HTML_Off_Form img(CoreAttrs _attr, String src, String alt) = html_void_tag("img", [_attr, attr("src",src), attr("alt",alt)] ).  
1681 -public define HTML_Off_Form img(String src) = img([], src, "").  
1682 -public define HTML_Off_Form img(String src, String alt) = img([], src, alt).  
1683 -public define HTML_Off_Form img(List(CoreAttrs) attrs, String src) = img(attrs, src, "").  
1684 -public define HTML_Off_Form img(CoreAttrs attr, String src) = img([attr], src, "").  
1685 -public define HTML_Off_Form img(String src, Int width, Int height) = img([attr("width",to_String(width)+"px"), attr("height",to_String(height)+"px")], src, src).  
1686 -public define HTML_Off_Form img(String src, String alt, Int width, Int height) = 1583 +public define HTML img(List(CoreAttrs) attrs, String src, String alt) = html_void_tag("img", attrs + [attr("src",src), attr("alt",alt)] ).
  1584 +public define HTML img(CoreAttrs _attr, String src, String alt) = html_void_tag("img", [_attr, attr("src",src), attr("alt",alt)] ).
  1585 +public define HTML img(String src) = img([], src, "").
  1586 +public define HTML img(String src, String alt) = img([], src, alt).
  1587 +public define HTML img(List(CoreAttrs) attrs, String src) = img(attrs, src, "").
  1588 +public define HTML img(CoreAttrs attr, String src) = img([attr], src, "").
  1589 +public define HTML img(String src, Int width, Int height) = img([attr("width",to_String(width)+"px"), attr("height",to_String(height)+"px")], src, src).
  1590 +public define HTML img(String src, String alt, Int width, Int height) =
1687 html_void_tag("img", [attr("src",src), attr("alt",alt), attr("width",to_String(width)+"px"), attr("height",to_String(height)+"px")]). 1591 html_void_tag("img", [attr("src",src), attr("alt",alt), attr("width",to_String(width)+"px"), attr("height",to_String(height)+"px")]).
1688 1592
1689 -public define HTML_Off_Form img(List(CoreAttrs) attrs, String src, String alt, Int width, Int height) = 1593 +public define HTML img(List(CoreAttrs) attrs, String src, String alt, Int width, Int height) =
1690 html_void_tag("img", attrs + [attr("src",src), attr("alt",alt), attr("width",to_String(width)+"px"), attr("height",to_String(height)+"px")]). 1594 html_void_tag("img", attrs + [attr("src",src), attr("alt",alt), attr("width",to_String(width)+"px"), attr("height",to_String(height)+"px")]).
1691 1595
1692 -public define HTML_Off_Form img(CoreAttrs _attr, String src, String alt, Int width, Int height) = 1596 +public define HTML img(CoreAttrs _attr, String src, String alt, Int width, Int height) =
1693 html_void_tag("img", [_attr, attr("src",src), attr("alt",alt), width_px(width), height_px(height)]). 1597 html_void_tag("img", [_attr, attr("src",src), attr("alt",alt), width_px(width), height_px(height)]).
1694 1598
1695 // <label> 1599 // <label>
1696 -public define HTML_Off_Form label(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("label", attrs, content).  
1697 -public define HTML_Off_Form label(CoreAttrs attr, List(HTML_Off_Form) content) = html_tag("label", [attr], content).  
1698 -public define HTML_Off_Form label(List(HTML_Off_Form) content) = html_tag("label", [], content).  
1699 -public define HTML_Off_Form label(HTML_Off_Form content) = html_tag("label", [], [content]).  
1700 -public define HTML_Off_Form label(String string) = html_tag("label", [], [text(string)]).  
1701 -public define HTML_Off_Form label(CoreAttrs attr, String string) = html_tag("label", [attr], [text(string)]).  
1702 -public define HTML_Off_Form label(List(CoreAttrs) attrs, String string) = html_tag("label", attrs, [text(string)]). 1600 +public define HTML label(List(CoreAttrs) attrs, List(HTML) content) = html_tag("label", attrs, content).
  1601 +public define HTML label(CoreAttrs attr, List(HTML) content) = html_tag("label", [attr], content).
  1602 +public define HTML label(List(HTML) content) = html_tag("label", content).
  1603 +public define HTML label(HTML content) = html_tag("label", [content]).
  1604 +public define HTML label(String string) = html_tag("label", [text(string)]).
  1605 +public define HTML label(CoreAttrs attr, String string) = html_tag("label", [attr], [text(string)]).
  1606 +public define HTML label(List(CoreAttrs) attrs, String string) = html_tag("label", attrs, [text(string)]).
  1607 +
  1608 + // <legend>
  1609 +public define HTML legend(List(CoreAttrs) attrs, List(HTML) content) = html_tag("legend", attrs, content).
  1610 +public define HTML legend(List(CoreAttrs) attrs, HTML content) = html_tag("legend", attrs, [content]).
  1611 +public define HTML legend(CoreAttrs attr, List(HTML) content) = html_tag("legend", [attr], content).
  1612 +public define HTML legend(CoreAttrs attr, HTML content) = html_tag("legend", [attr], [content]).
  1613 +public define HTML legend(List(HTML) content) = html_tag("legend", content).
  1614 +public define HTML legend(HTML content) = html_tag("legend", [content]).
  1615 +public define HTML legend(String content) = html_tag("legend", [text(content)]).
1703 1616
1704 // <li> 1617 // <li>
1705 -public define HTML_Off_Form li(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("li", attrs, content).  
1706 -public define HTML_Off_Form li(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("li", attrs, [content]).  
1707 -public define HTML_Off_Form li(CoreAttrs attr, List(HTML_Off_Form) content) = html_tag("li", [attr], content).  
1708 -public define HTML_Off_Form li(CoreAttrs attr, HTML_Off_Form content) = html_tag("li", [attr], [content]).  
1709 -public define HTML_Off_Form li(List(HTML_Off_Form) content) = html_tag("li", [], content).  
1710 -public define HTML_Off_Form li(HTML_Off_Form content) = html_tag("li", [], [content]).  
1711 -public define HTML_Off_Form li(String string) = html_tag("li", [], [text(string)]).  
1712 -public define HTML_Off_Form li(CoreAttrs attr, String string) = html_tag("li", [attr], [text(string)]).  
1713 -public define HTML_Off_Form li(List(CoreAttrs) attrs, String string) = html_tag("li", attrs, [text(string)]). 1618 +public define HTML li(List(CoreAttrs) attrs, List(HTML) content) = html_tag("li", attrs, content).
  1619 +public define HTML li(List(CoreAttrs) attrs, HTML content) = html_tag("li", attrs, [content]).
  1620 +public define HTML li(CoreAttrs attr, List(HTML) content) = html_tag("li", [attr], content).
  1621 +public define HTML li(CoreAttrs attr, HTML content) = html_tag("li", [attr], [content]).
  1622 +public define HTML li(List(HTML) content) = html_tag("li", content).
  1623 +public define HTML li(HTML content) = html_tag("li", [content]).
  1624 +public define HTML li(String string) = html_tag("li", [text(string)]).
  1625 +public define HTML li(CoreAttrs attr, String string) = html_tag("li", [attr], [text(string)]).
  1626 +public define HTML li(List(CoreAttrs) attrs, String string) = html_tag("li", attrs, [text(string)]).
1714 1627
1715 // <main> 1628 // <main>
1716 -public define HTML_Off_Form main(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("main", attrs, content).  
1717 -public define HTML_Off_Form main(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("main", attrs, [content]).  
1718 -public define HTML_Off_Form main(CoreAttrs attr, List(HTML_Off_Form) content) = html_tag("main", [attr], content).  
1719 -public define HTML_Off_Form main(CoreAttrs attr, HTML_Off_Form content) = html_tag("main", [attr], [content]).  
1720 -public define HTML_Off_Form main(List(HTML_Off_Form) content) = html_tag("main", [], content).  
1721 -public define HTML_Off_Form main(HTML_Off_Form content) = html_tag("main", [], [content]). 1629 +public define HTML main(List(CoreAttrs) attrs, List(HTML) content) = html_tag("main", attrs, content).
  1630 +public define HTML main(List(CoreAttrs) attrs, HTML content) = html_tag("main", attrs, [content]).
  1631 +public define HTML main(CoreAttrs attr, List(HTML) content) = html_tag("main", [attr], content).
  1632 +public define HTML main(CoreAttrs attr, HTML content) = html_tag("main", [attr], [content]).
  1633 +public define HTML main(List(HTML) content) = html_tag("main", content).
  1634 +public define HTML main(HTML content) = html_tag("main", [content]).
1722 1635
1723 // <nav> 1636 // <nav>
1724 -public define HTML_Off_Form nav(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("nav", attrs, content).  
1725 -public define HTML_Off_Form nav(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("nav", attrs, [content]).  
1726 -public define HTML_Off_Form nav(List(HTML_Off_Form) content) = html_tag("nav", [], content).  
1727 -public define HTML_Off_Form nav(HTML_Off_Form content) = html_tag("nav", [], [content]). 1637 +public define HTML nav(List(CoreAttrs) attrs, List(HTML) content) = html_tag("nav", attrs, content).
  1638 +public define HTML nav(List(CoreAttrs) attrs, HTML content) = html_tag("nav", attrs, [content]).
  1639 +public define HTML nav(CoreAttrs attr, List(HTML) content) = html_tag("nav", [attr], content).
  1640 +public define HTML nav(CoreAttrs attr, HTML content) = html_tag("nav", [attr], [content]).
  1641 +public define HTML nav(List(HTML) content) = html_tag("nav", content).
  1642 +public define HTML nav(HTML content) = html_tag("nav", [content]).
1728 1643
1729 // <ol> 1644 // <ol>
1730 -public define HTML_Off_Form ol(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("ol", attrs, content).  
1731 -public define HTML_Off_Form ol(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("ol", attrs, [content]).  
1732 -public define HTML_Off_Form ol(List(HTML_Off_Form) content) = html_tag("ol", [], content).  
1733 -public define HTML_Off_Form ol(HTML_Off_Form content) = html_tag("ol", [], [content]). 1645 +public define HTML ol(List(CoreAttrs) attrs, List(HTML) content) = html_tag("ol", attrs, content).
  1646 +public define HTML ol(List(CoreAttrs) attrs, HTML content) = html_tag("ol", attrs, [content]).
  1647 +public define HTML ol(List(HTML) content) = html_tag("ol", content).
  1648 +public define HTML ol(HTML content) = html_tag("ol", [content]).
1734 1649
1735 // <option> 1650 // <option>
1736 -public define HTML_Off_Form option(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("option", attrs, content).  
1737 -public define HTML_Off_Form option(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("option", attrs, [content]).  
1738 -public define HTML_Off_Form option(List(HTML_Off_Form) content) = html_tag("option", [], content).  
1739 -public define HTML_Off_Form option(CoreAttrs attr, HTML_Off_Form content) = html_tag("option", [attr], [content]).  
1740 -public define HTML_Off_Form option(HTML_Off_Form content) = html_tag("option", [], [content]).  
1741 -public define HTML_Off_Form option(String _value, String _text) = html_tag("option", [value(_value)], [text(_text)]). 1651 +public define HTML option(List(CoreAttrs) attrs, List(HTML) content) = html_tag("option", attrs, content).
  1652 +public define HTML option(List(CoreAttrs) attrs, HTML content) = html_tag("option", attrs, [content]).
  1653 +public define HTML option(List(HTML) content) = html_tag("option", content).
  1654 +public define HTML option(CoreAttrs attr, HTML content) = html_tag("option", [attr], [content]).
  1655 +public define HTML option(HTML content) = html_tag("option", [content]).
  1656 +public define HTML option(String _value, String _text) = html_tag("option", [value(_value)], [text(_text)]).
  1657 +
1742 // <p> 1658 // <p>
1743 -public define HTML_Off_Form p(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("p", attrs, content).  
1744 -public define HTML_Off_Form p(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("p", attrs, [content]).  
1745 -public define HTML_Off_Form p(CoreAttrs attr, List(HTML_Off_Form) content) = html_tag("p", [attr], content).  
1746 -public define HTML_Off_Form p(CoreAttrs attr, HTML_Off_Form content) = html_tag("p", [attr], [content]).  
1747 -public define HTML_Off_Form p(CoreAttrs attr, String _text) = html_tag("p", [attr], [text(_text)]).  
1748 -public define HTML_Off_Form p(List(HTML_Off_Form) content) = html_tag("p", [], content).  
1749 -public define HTML_Off_Form p(HTML_Off_Form content) = html_tag("p", [], [content]). 1659 +public define HTML p(List(CoreAttrs) attrs, List(HTML) content) = html_tag("p", attrs, content).
  1660 +public define HTML p(List(CoreAttrs) attrs, HTML content) = html_tag("p", attrs, [content]).
  1661 +public define HTML p(CoreAttrs attr, List(HTML) content) = html_tag("p", [attr], content).
  1662 +public define HTML p(CoreAttrs attr, HTML content) = html_tag("p", [attr], [content]).
  1663 +public define HTML p(CoreAttrs attr, String _text) = html_tag("p", [attr], [text(_text)]).
  1664 +public define HTML p(List(HTML) content) = html_tag("p", content).
  1665 +public define HTML p(HTML content) = html_tag("p", [content]).
1750 1666
1751 // <pre> preformatted 1667 // <pre> preformatted
1752 -public define HTML_Off_Form pre(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("pre", attrs, content).  
1753 -public define HTML_Off_Form pre(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("pre", attrs, [content]).  
1754 -public define HTML_Off_Form pre(CoreAttrs attr, List(HTML_Off_Form) content) = html_tag("pre", [attr], content).  
1755 -public define HTML_Off_Form pre(CoreAttrs attr, HTML_Off_Form content) = html_tag("pre", [attr], [content]).  
1756 -public define HTML_Off_Form pre(List(HTML_Off_Form) content) = html_tag("pre", [], content).  
1757 -public define HTML_Off_Form pre(HTML_Off_Form content) = html_tag("pre", [], [content]).  
1758 -public define HTML_Off_Form pre(String string) = html_tag("pre", [], [text(string)]).  
1759 -public define HTML_Off_Form pre(CoreAttrs attr, String string) = html_tag("pre", [attr], [text(string)]).  
1760 -public define HTML_Off_Form pre(List(CoreAttrs) attrs, String string) = html_tag("pre", attrs, [text(string)]). 1668 +public define HTML pre(List(CoreAttrs) attrs, List(HTML) content) = html_tag("pre", attrs, content).
  1669 +public define HTML pre(List(CoreAttrs) attrs, HTML content) = html_tag("pre", attrs, [content]).
  1670 +public define HTML pre(CoreAttrs attr, List(HTML) content) = html_tag("pre", [attr], content).
  1671 +public define HTML pre(CoreAttrs attr, HTML content) = html_tag("pre", [attr], [content]).
  1672 +public define HTML pre(List(HTML) content) = html_tag("pre", content).
  1673 +public define HTML pre(HTML content) = html_tag("pre", [content]).
  1674 +public define HTML pre(String string) = html_tag("pre", [text(string)]).
  1675 +public define HTML pre(CoreAttrs attr, String string) = html_tag("pre", [attr], [text(string)]).
  1676 +public define HTML pre(List(CoreAttrs) attrs, String string) = html_tag("pre", attrs, [text(string)]).
1761 1677
1762 // <progress> 1678 // <progress>
1763 -public define HTML_Off_Form progress(List(CoreAttrs) attrs, Int value, Int max, List(HTML_Off_Form) content) = html_tag("progress", [attr("value", value), attr("max", max) . attrs], content).  
1764 -public define HTML_Off_Form progress(List(CoreAttrs) attrs, Int value, Int max, HTML_Off_Form content) = html_tag("progress", [attr("value", value), attr("max", max) . attrs], [content]).  
1765 -public define HTML_Off_Form progress(CoreAttrs _attr, Int value, Int max, HTML_Off_Form content) = html_tag("progress", [attr("value", value), attr("max", max) , _attr], [content]).  
1766 -public define HTML_Off_Form progress(Int value, Int max, HTML_Off_Form content) = html_tag("progress", [attr("value", value), attr("max", max)], [content]).  
1767 -public define HTML_Off_Form progress(List(CoreAttrs) attrs, Int value, Int max, String content) = html_tag("progress", [attr("value", value), attr("max", max) . attrs], [text(content)]).  
1768 -public define HTML_Off_Form progress(CoreAttrs _attr, Int value, Int max, String content) = html_tag("progress", [attr("value", value), attr("max", max), _attr], [text(content)]).  
1769 -public define HTML_Off_Form progress(List(CoreAttrs) attrs, Int value, Int max) = html_tag("progress", [attr("value", value), attr("max", max) . attrs], []).  
1770 -public define HTML_Off_Form progress(CoreAttrs _attr, Int value, Int max) = html_tag("progress", [attr("value", value), attr("max", max), _attr], []).  
1771 -public define HTML_Off_Form progress(Int value, Int max, String content) = html_tag("progress", [attr("value", value), attr("max", max)], [text(content)]).  
1772 -public define HTML_Off_Form progress(Int value, Int max) = html_tag("progress", [attr("value", value), attr("max", max)], []). 1679 +public define HTML progress(List(CoreAttrs) attrs, Int value, Int max, List(HTML) content) = html_tag("progress", [attr("value", value), attr("max", max) . attrs], content).
  1680 +public define HTML progress(List(CoreAttrs) attrs, Int value, Int max, HTML content) = html_tag("progress", [attr("value", value), attr("max", max) . attrs], [content]).
  1681 +public define HTML progress(CoreAttrs _attr, Int value, Int max, HTML content) = html_tag("progress", [attr("value", value), attr("max", max) , _attr], [content]).
  1682 +public define HTML progress(Int value, Int max, HTML content) = html_tag("progress", [attr("value", value), attr("max", max)], [content]).
  1683 +public define HTML progress(List(CoreAttrs) attrs, Int value, Int max, String content) = html_tag("progress", [attr("value", value), attr("max", max) . attrs], [text(content)]).
  1684 +public define HTML progress(CoreAttrs _attr, Int value, Int max, String content) = html_tag("progress", [attr("value", value), attr("max", max), _attr], [text(content)]).
  1685 +public define HTML progress(List(CoreAttrs) attrs, Int value, Int max) = html_tag("progress", [attr("value", value), attr("max", max) . attrs]).
  1686 +public define HTML progress(CoreAttrs _attr, Int value, Int max) = html_tag("progress", [attr("value", value), attr("max", max), _attr]).
  1687 +public define HTML progress(Int value, Int max, String content) = html_tag("progress", [attr("value", value), attr("max", max)], [text(content)]).
  1688 +public define HTML progress(Int value, Int max) = html_tag("progress", [attr("value", value), attr("max", max)]).
1773 1689
1774 // <script> 1690 // <script>
1775 -public define HTML_Off_Form script(String file_name, List(JS_Attribute) attrs) = literal_pt(add_js_files([js_file(file_name, attrs)])).  
1776 -public define HTML_Off_Form script(String content) = literal_pt(add_script([script("text/javascript", content)])). 1691 +public define HTML script(String file_name, List(JS_Attribute) attrs) = literal_pt(add_js_files([js_file(file_name, attrs)])).
  1692 +public define HTML script(String content) = literal_pt(add_script([script("text/javascript", content)])).
1777 1693
1778 // <section> 1694 // <section>
1779 -public define HTML_Off_Form section(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("section", attrs, content).  
1780 -public define HTML_Off_Form section(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("section", attrs, [content]).  
1781 -public define HTML_Off_Form section(List(HTML_Off_Form) content) = html_tag("section", [], content).  
1782 -public define HTML_Off_Form section(HTML_Off_Form content) = html_tag("section", [], [content]). 1695 +public define HTML section(List(CoreAttrs) attrs, List(HTML) content) = html_tag("section", attrs, content).
  1696 +public define HTML section(List(CoreAttrs) attrs, HTML content) = html_tag("section", attrs, [content]).
  1697 +public define HTML section(List(HTML) content) = html_tag("section", content).
  1698 +public define HTML section(HTML content) = html_tag("section", [content]).
1783 1699
1784 // <select> 1700 // <select>
1785 -public define HTML_Off_Form select(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("select", attrs, content).  
1786 -public define HTML_Off_Form select(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("select", attrs, [content]).  
1787 -public define HTML_Off_Form select(List(CoreAttrs) attrs) = html_tag("select", attrs, []).  
1788 -public define HTML_Off_Form select(List(HTML_Off_Form) content) = html_tag("select", [], content).  
1789 -public define HTML_Off_Form select(HTML_Off_Form content) = html_tag("select", [], [content]). 1701 +public define HTML select(List(CoreAttrs) attrs, List(HTML) content) = html_tag("select", attrs, content).
  1702 +public define HTML select(List(CoreAttrs) attrs, HTML content) = html_tag("select", attrs, [content]).
  1703 +public define HTML select(List(CoreAttrs) attrs) = html_tag("select", attrs).
  1704 +public define HTML select(List(HTML) content) = html_tag("select", content).
  1705 +public define HTML select(HTML content) = html_tag("select", [content]).
  1706 +
  1707 + //selector (List(CoreAttrs), HTML_Label label, HTML_Id id, WebArgName name, Int size, List(String) choices),
  1708 +public define HTML selector(List(CoreAttrs) attrs, HTML_Label label, HTML_Id _id, WebArgName wan, Int s, List(String) choices)=
  1709 + sequence([
  1710 + format_label(label, _id),
  1711 + select([id(_id.id), name(wan.name), size(s) , class("in") . attrs], literal_pt(format_choices(choices)))
  1712 + ])
  1713 +.
  1714 +
  1715 + //selector (List(CoreAttrs), HTML_Label label, HTML_Id id, WebArgName name, Int size, List(String) choices, InitialValue selected),
  1716 +public define HTML selector(List(CoreAttrs) attrs, HTML_Label label, HTML_Id _id, WebArgName wan, Int s, List(String) choices , InitialValue selected)=
  1717 + sequence([
  1718 + format_label(label, _id),
  1719 + select([id(_id.id), name(wan.name), size(s) , class("in") . attrs], literal_pt(format_choices(choices, selected)))
  1720 + ])
  1721 +.
1790 1722
  1723 + //selector_c (List(CoreAttrs), HTML_Label label, HTML_Id id, WebArgName name, Int size, List((List(CoreAttrs),WebArgValue,String)) choices),
  1724 +
  1725 +public define HTML selector_c(List(CoreAttrs) attrs, HTML_Label label, HTML_Id _id, WebArgName wan, Int s, List((List(CoreAttrs),WebArgValue,String)) choices)=
  1726 + sequence([
  1727 + format_label(label, _id),
  1728 + select([id(_id.id), name(wan.name), size(s) , class("in") . attrs], literal_pt(format_choices(choices)))
  1729 + ])
  1730 +.
  1731 +
  1732 + //selector_c (List(CoreAttrs), HTML_Label label, HTML_Id id, WebArgName name, Int size, List((List(CoreAttrs),WebArgValue,String)) choices, InitialValue selected),
  1733 +public define HTML selector_c(List(CoreAttrs) attrs, HTML_Label label, HTML_Id _id, WebArgName wan, Int s, List((List(CoreAttrs),WebArgValue,String)) choices, InitialValue selected)=
  1734 + sequence([
  1735 + format_label(label, _id),
  1736 + select([id(_id.id), name(wan.name), size(s) , class("in") . attrs], literal_pt(format_choices(choices, selected)))
  1737 + ])
  1738 +.
1791 1739
1792 // <span> 1740 // <span>
1793 -public define HTML_Off_Form span(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("span", attrs, content).  
1794 -public define HTML_Off_Form span(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("span", attrs, [content]).  
1795 -public define HTML_Off_Form span(CoreAttrs attr, List(HTML_Off_Form) content) = html_tag("span", [attr], content).  
1796 -public define HTML_Off_Form span(CoreAttrs attr, HTML_Off_Form content) = html_tag("span", [attr], [content]).  
1797 -public define HTML_Off_Form span(List(HTML_Off_Form) content) = html_tag("span", [], content).  
1798 -public define HTML_Off_Form span(HTML_Off_Form content) = html_tag("span", [], [content]).  
1799 -public define HTML_Off_Form span(Int i) = html_tag("span", [], [text(to_decimal(i))]).  
1800 -public define HTML_Off_Form span(List(CoreAttrs) attrs, String s) = html_tag("span", attrs, [text(s)]).  
1801 -public define HTML_Off_Form span(CoreAttrs attr, String s) = html_tag("span", [attr],[text(s)]).  
1802 -public define HTML_Off_Form span(String s) = html_tag("span", [], [text(s)]).  
1803 -public define HTML_Off_Form span(List(CoreAttrs) attrs) = html_tag("span", attrs, []).  
1804 -public define HTML_Off_Form span(CoreAttrs attr) = html_tag("span", [attr],[]). 1741 +public define HTML span(List(CoreAttrs) attrs, List(HTML) content) = html_tag("span", attrs, content).
  1742 +public define HTML span(List(CoreAttrs) attrs, HTML content) = html_tag("span", attrs, [content]).
  1743 +public define HTML span(CoreAttrs attr, List(HTML) content) = html_tag("span", [attr], content).
  1744 +public define HTML span(CoreAttrs attr, HTML content) = html_tag("span", [attr], [content]).
  1745 +public define HTML span(List(HTML) content) = html_tag("span", content).
  1746 +public define HTML span(HTML content) = html_tag("span", [content]).
  1747 +public define HTML span(Int i) = html_tag("span", [text(to_decimal(i))]).
  1748 +public define HTML span(List(CoreAttrs) attrs, String s) = html_tag("span", attrs, [text(s)]).
  1749 +public define HTML span(CoreAttrs attr, String s) = html_tag("span", [attr],[text(s)]).
  1750 +public define HTML span(String s) = html_tag("span", [text(s)]).
  1751 +public define HTML span(List(CoreAttrs) attrs) = html_tag("span", attrs).
  1752 +public define HTML span(CoreAttrs attr) = html_tag("span", [attr]).
1805 1753
1806 // <strong> 1754 // <strong>
1807 -public define HTML_Off_Form strong(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("strong", attrs, content).  
1808 -public define HTML_Off_Form strong(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("strong", attrs, [content]).  
1809 -public define HTML_Off_Form strong(CoreAttrs attr, List(HTML_Off_Form) content) = html_tag("strong", [attr], content).  
1810 -public define HTML_Off_Form strong(CoreAttrs attr, HTML_Off_Form content) = html_tag("strong", [attr], [content]).  
1811 -public define HTML_Off_Form strong(List(HTML_Off_Form) content) = html_tag("strong", [], content).  
1812 -public define HTML_Off_Form strong(HTML_Off_Form content) = html_tag("strong", [], [content]). 1755 +public define HTML strong(List(CoreAttrs) attrs, List(HTML) content) = html_tag("strong", attrs, content).
  1756 +public define HTML strong(List(CoreAttrs) attrs, HTML content) = html_tag("strong", attrs, [content]).
  1757 +public define HTML strong(CoreAttrs attr, List(HTML) content) = html_tag("strong", [attr], content).
  1758 +public define HTML strong(CoreAttrs attr, HTML content) = html_tag("strong", [attr], [content]).
  1759 +public define HTML strong(List(HTML) content) = html_tag("strong", content).
  1760 +public define HTML strong(HTML content) = html_tag("strong", [content]).
1813 1761
1814 // <svg> 1762 // <svg>
1815 -public define HTML_Off_Form svg(List(CoreAttrs) attrs) = html_tag("svg", attrs, []). 1763 +public define HTML svg(List(CoreAttrs) attrs) = html_tag("svg", attrs).
1816 1764
1817 1765
1818 // <table> 1766 // <table>
1819 -public define HTML_Off_Form table(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("table", attrs, content).  
1820 -public define HTML_Off_Form table(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("table", attrs, [content]).  
1821 -public define HTML_Off_Form table(CoreAttrs attr, List(HTML_Off_Form) content) = html_tag("table", [attr], content).  
1822 -public define HTML_Off_Form table(CoreAttrs attr, HTML_Off_Form content) = html_tag("table", [attr], [content]).  
1823 -public define HTML_Off_Form table(List(HTML_Off_Form) content) = html_tag("table", [], content).  
1824 -public define HTML_Off_Form table(HTML_Off_Form content) = html_tag("table", [], [content]). 1767 +public define HTML table(List(CoreAttrs) attrs, List(HTML) content) = html_tag("table", attrs, content).
  1768 +public define HTML table(List(CoreAttrs) attrs, HTML content) = html_tag("table", attrs, [content]).
  1769 +public define HTML table(CoreAttrs attr, List(HTML) content) = html_tag("table", [attr], content).
  1770 +public define HTML table(CoreAttrs attr, HTML content) = html_tag("table", [attr], [content]).
  1771 +public define HTML table(List(HTML) content) = html_tag("table", content).
  1772 +public define HTML table(HTML content) = html_tag("table", [content]).
  1773 +
  1774 + // <textarea>
  1775 + // CoreAttrs for textarea
  1776 +public define CoreAttrs wrap_lines = attr("wrap", "hard").
  1777 +public define CoreAttrs read_only = bool_attr(true, "readonly").
  1778 +public define CoreAttrs cols(Int value) = attr("cols",to_String(value)).
  1779 +public define CoreAttrs rows(Int value) = attr("rows",to_String(value)).
  1780 +
  1781 +public define HTML textarea(List(CoreAttrs) attrs, List(HTML) content) = html_tag("textarea", attrs, content).
  1782 +public define HTML textarea(List(CoreAttrs) attrs, HTML content) = html_tag("textarea", attrs, [content]).
  1783 +
  1784 +public define HTML textarea(List(CoreAttrs) attrs, Int _cols, Int _rows, List(HTML) content)
  1785 + = html_tag("textarea", [cols(_cols), rows(_rows) . attrs], content).
  1786 +
  1787 +public define HTML textarea(List(CoreAttrs) attrs, Int _cols, Int _rows, HTML content)
  1788 + = html_tag("textarea", [cols(_cols), rows(_rows) . attrs], [content]).
  1789 +
  1790 +public define HTML textarea(Int _cols, Int _rows, HTML content) = html_tag("textarea", [cols(_cols), rows(_rows)], [content]).
  1791 +public define HTML textarea(CoreAttrs attr, List(HTML) content) = html_tag("textarea", [attr], content).
  1792 +public define HTML textarea(CoreAttrs attr, HTML content) = html_tag("textarea", [attr], [content]).
  1793 +
  1794 +//public define HTML password_input(List(CoreAttrs) options, HTML_Label label, HTML_Id _id, WebArgName wan, InitialValue init, Int w) =
  1795 +public define HTML text_area(List(CoreAttrs) options, HTML_Label label, HTML_Id _id, WebArgName wan, InitialValue init, Int width, Int height) =
  1796 + sequence([
  1797 + format_label(label, _id),
  1798 + textarea([class("in"), type(password), id(_id.id), name(wan.name), cols(width), rows(height) . options], text(init.value))
  1799 + ])
  1800 +.
  1801 +
  1802 +public define HTML text_area(WebArgName name, InitialValue init, Int width, Int height) =
  1803 + text_area([], no_label, html_Id(""), name, init, width, height).
  1804 +
  1805 +public define HTML text_area(List(CoreAttrs) options, WebArgName name, InitialValue init, Int width, Int height)=
  1806 + text_area(options, no_label, html_Id(""), name,init,width,height).
  1807 +
  1808 +// text_area(options,label_text, id, n, init, w, h) then
  1809 +// [ format_label(label_text, id), "<textarea ",format(options)," id=\"",id,"\" name=\"",n,"\" cols=\"",w,"\" rows=\"",h,"\">",encode_HTML_entities(init.value),"</textarea>"],
  1810 +
1825 1811
1826 // <thead> 1812 // <thead>
1827 -public define HTML_Off_Form thead(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("thead", attrs, content).  
1828 -public define HTML_Off_Form thead(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("thead", attrs, [content]).  
1829 -public define HTML_Off_Form thead(CoreAttrs attr, List(HTML_Off_Form) content) = html_tag("thead", [attr], content).  
1830 -public define HTML_Off_Form thead(CoreAttrs attr, HTML_Off_Form content) = html_tag("thead", [attr], [content]).  
1831 -public define HTML_Off_Form thead(List(HTML_Off_Form) content) = html_tag("thead", [], content).  
1832 -public define HTML_Off_Form thead(HTML_Off_Form content) = html_tag("thead", [], [content]). 1813 +public define HTML thead(List(CoreAttrs) attrs, List(HTML) content) = html_tag("thead", attrs, content).
  1814 +public define HTML thead(List(CoreAttrs) attrs, HTML content) = html_tag("thead", attrs, [content]).
  1815 +public define HTML thead(CoreAttrs attr, List(HTML) content) = html_tag("thead", [attr], content).
  1816 +public define HTML thead(CoreAttrs attr, HTML content) = html_tag("thead", [attr], [content]).
  1817 +public define HTML thead(List(HTML) content) = html_tag("thead", content).
  1818 +public define HTML thead(HTML content) = html_tag("thead", [content]).
1833 1819
1834 // <tbody> 1820 // <tbody>
1835 -public define HTML_Off_Form tbody(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("tbody", attrs, content).  
1836 -public define HTML_Off_Form tbody(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("tbody", attrs, [content]).  
1837 -public define HTML_Off_Form tbody(CoreAttrs attr, List(HTML_Off_Form) content) = html_tag("tbody", [attr], content).  
1838 -public define HTML_Off_Form tbody(CoreAttrs attr, HTML_Off_Form content) = html_tag("tbody", [attr], [content]).  
1839 -public define HTML_Off_Form tbody(List(HTML_Off_Form) content) = html_tag("tbody", [], content).  
1840 -public define HTML_Off_Form tbody(HTML_Off_Form content) = html_tag("tbody", [], [content]). 1821 +public define HTML tbody(List(CoreAttrs) attrs, List(HTML) content) = html_tag("tbody", attrs, content).
  1822 +public define HTML tbody(List(CoreAttrs) attrs, HTML content) = html_tag("tbody", attrs, [content]).
  1823 +public define HTML tbody(CoreAttrs attr, List(HTML) content) = html_tag("tbody", [attr], content).
  1824 +public define HTML tbody(CoreAttrs attr, HTML content) = html_tag("tbody", [attr], [content]).
  1825 +public define HTML tbody(List(HTML) content) = html_tag("tbody", content).
  1826 +public define HTML tbody(HTML content) = html_tag("tbody", [content]).
1841 1827
1842 // <tfoot> 1828 // <tfoot>
1843 -public define HTML_Off_Form tfoot(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("tfoot", attrs, content).  
1844 -public define HTML_Off_Form tfoot(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("tfoot", attrs, [content]).  
1845 -public define HTML_Off_Form tfoot(CoreAttrs attr, List(HTML_Off_Form) content) = html_tag("tfoot", [attr], content).  
1846 -public define HTML_Off_Form tfoot(CoreAttrs attr, HTML_Off_Form content) = html_tag("tfoot", [attr], [content]).  
1847 -public define HTML_Off_Form tfoot(List(HTML_Off_Form) content) = html_tag("tfoot", [], content).  
1848 -public define HTML_Off_Form tfoot(HTML_Off_Form content) = html_tag("tfoot", [], [content]). 1829 +public define HTML tfoot(List(CoreAttrs) attrs, List(HTML) content) = html_tag("tfoot", attrs, content).
  1830 +public define HTML tfoot(List(CoreAttrs) attrs, HTML content) = html_tag("tfoot", attrs, [content]).
  1831 +public define HTML tfoot(CoreAttrs attr, List(HTML) content) = html_tag("tfoot", [attr], content).
  1832 +public define HTML tfoot(CoreAttrs attr, HTML content) = html_tag("tfoot", [attr], [content]).
  1833 +public define HTML tfoot(List(HTML) content) = html_tag("tfoot", content).
  1834 +public define HTML tfoot(HTML content) = html_tag("tfoot", [content]).
1849 1835
1850 // <th> 1836 // <th>
1851 -public define HTML_Off_Form th(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("th", attrs, content).  
1852 -public define HTML_Off_Form th(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("th", attrs, [content]).  
1853 -public define HTML_Off_Form th(CoreAttrs attr, List(HTML_Off_Form) content) = html_tag("th", [attr], content).  
1854 -public define HTML_Off_Form th(CoreAttrs attr, HTML_Off_Form content) = html_tag("th", [attr], [content]).  
1855 -public define HTML_Off_Form th(CoreAttrs attr) = html_tag("th", [attr], []).  
1856 -public define HTML_Off_Form th(List(HTML_Off_Form) content) = html_tag("th", [], content).  
1857 -public define HTML_Off_Form th(HTML_Off_Form content) = html_tag("th", [], [content]).  
1858 -public define HTML_Off_Form th(String string) = html_tag("th", [], [text(string)]).  
1859 -public define HTML_Off_Form th(CoreAttrs attr, String string) = html_tag("th", [attr], [text(string)]).  
1860 -public define HTML_Off_Form th(List(CoreAttrs) attrs, String string) = html_tag("th", attrs, [text(string)]).  
1861 -public define HTML_Off_Form th = html_tag("th", [], []). 1837 +public define HTML th(List(CoreAttrs) attrs, List(HTML) content) = html_tag("th", attrs, content).
  1838 +public define HTML th(List(CoreAttrs) attrs, HTML content) = html_tag("th", attrs, [content]).
  1839 +public define HTML th(CoreAttrs attr, List(HTML) content) = html_tag("th", [attr], content).
  1840 +public define HTML th(CoreAttrs attr, HTML content) = html_tag("th", [attr], [content]).
  1841 +public define HTML th(CoreAttrs attr) = html_tag("th", [attr]).
  1842 +public define HTML th(List(HTML) content) = html_tag("th", content).
  1843 +public define HTML th(HTML content) = html_tag("th", [content]).
  1844 +public define HTML th(String string) = html_tag("th", [text(string)]).
  1845 +public define HTML th(CoreAttrs attr, String string) = html_tag("th", [attr], [text(string)]).
  1846 +public define HTML th(List(CoreAttrs) attrs, String string) = html_tag("th", attrs, [text(string)]).
  1847 +public define HTML th = html_tag("th").
1862 1848
1863 // <td> 1849 // <td>
1864 -public define HTML_Off_Form td(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("td", attrs, content).  
1865 -public define HTML_Off_Form td(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("td", attrs, [content]).  
1866 -public define HTML_Off_Form td(CoreAttrs attr, List(HTML_Off_Form) content) = html_tag("td", [attr], content).  
1867 -public define HTML_Off_Form td(CoreAttrs attr, HTML_Off_Form content) = html_tag("td", [attr], [content]).  
1868 -public define HTML_Off_Form td(List(HTML_Off_Form) content) = html_tag("td", [], content).  
1869 -public define HTML_Off_Form td(HTML_Off_Form content) = html_tag("td", [], [content]).  
1870 -public define HTML_Off_Form td(List(CoreAttrs) attrs, String string) = html_tag("td", attrs, [text(string)]).  
1871 -public define HTML_Off_Form td(CoreAttrs attr, String string) = html_tag("td", [attr], [text(string)]).  
1872 -public define HTML_Off_Form td(String string) = html_tag("td", [], [text(string)]).  
1873 -public define HTML_Off_Form td(List(CoreAttrs) attrs, Int i) = html_tag("td", attrs, [text(to_decimal(i))]).  
1874 -public define HTML_Off_Form td(CoreAttrs attr, Int i) = html_tag("td", [attr], [text(to_decimal(i))]).  
1875 -public define HTML_Off_Form td(Int i) = html_tag("td", [], [text(to_decimal(i))]). 1850 + // CoreAttrs for <td>
  1851 +//public define CoreAttrs colspan(Int value) = attr("colspan", to_String(value)).
  1852 +//public define CoreAttrs rowspan(Int value) = attr("rowspan", to_String(value)).
  1853 +//public define CoreAttrs headers(String header_id) = attr("headers", header_id).
  1854 +
  1855 +public define HTML td(List(CoreAttrs) attrs, List(HTML) content) = html_tag("td", attrs, content).
  1856 +public define HTML td(List(CoreAttrs) attrs, HTML content) = html_tag("td", attrs, [content]).
  1857 +public define HTML td(CoreAttrs attr, List(HTML) content) = html_tag("td", [attr], content).
  1858 +public define HTML td(CoreAttrs attr, HTML content) = html_tag("td", [attr], [content]).
  1859 +public define HTML td(List(HTML) content) = html_tag("td", content).
  1860 +public define HTML td(HTML content) = html_tag("td", [content]).
  1861 +public define HTML td(List(CoreAttrs) attrs, String string) = html_tag("td", attrs, [text(string)]).
  1862 +public define HTML td(CoreAttrs attr, String string) = html_tag("td", [attr], [text(string)]).
  1863 +public define HTML td(String string) = html_tag("td", [text(string)]).
  1864 +public define HTML td(List(CoreAttrs) attrs, Int i) = html_tag("td", attrs, [text(to_decimal(i))]).
  1865 +public define HTML td(CoreAttrs attr, Int i) = html_tag("td", [attr], [text(to_decimal(i))]).
  1866 +public define HTML td(Int i) = html_tag("td", [text(to_decimal(i))]).
1876 1867
1877 // <tr> 1868 // <tr>
1878 -public define HTML_Off_Form tr(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("tr", attrs, content).  
1879 -public define HTML_Off_Form tr(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("tr", attrs, [content]).  
1880 -public define HTML_Off_Form tr(CoreAttrs attr, List(HTML_Off_Form) content) = html_tag("tr", [attr], content).  
1881 -public define HTML_Off_Form tr(CoreAttrs attr, HTML_Off_Form content) = html_tag("tr", [attr], [content]).  
1882 -public define HTML_Off_Form tr(List(HTML_Off_Form) content) = html_tag("tr", [], content).  
1883 -public define HTML_Off_Form tr(HTML_Off_Form content) = html_tag("tr", [], [content]). 1869 +public define HTML tr(List(CoreAttrs) attrs, List(HTML) content) = html_tag("tr", attrs, content).
  1870 +public define HTML tr(List(CoreAttrs) attrs, HTML content) = html_tag("tr", attrs, [content]).
  1871 +public define HTML tr(CoreAttrs attr, List(HTML) content) = html_tag("tr", [attr], content).
  1872 +public define HTML tr(CoreAttrs attr, HTML content) = html_tag("tr", [attr], [content]).
  1873 +public define HTML tr(List(HTML) content) = html_tag("tr", content).
  1874 +public define HTML tr(HTML content) = html_tag("tr", [content]).
1884 1875
  1876 + // <ul>
  1877 +public define HTML ul(List(CoreAttrs) attrs, List(HTML) content) = html_tag("ul", attrs, content).
  1878 +public define HTML ul(List(CoreAttrs) attrs, HTML content) = html_tag("ul", attrs, [content]).
  1879 +public define HTML ul(CoreAttrs attr, List(HTML) content) = html_tag("ul", [attr], content).
  1880 +public define HTML ul(CoreAttrs attr, HTML content) = html_tag("ul", [attr], [content]).
  1881 +public define HTML ul(List(HTML) content) = html_tag("ul", content).
  1882 +public define HTML ul(HTML content) = html_tag("ul", [content]).
1885 1883
1886 - // <textarea>  
1887 - // CoreAttrs for textarea  
1888 -public define CoreAttrs wrap_lines = attr("wrap", "hard").  
1889 -public define CoreAttrs read_only = bool_attr(true, "readonly"). 1884 +//public define HTML empty = html_tag(
1890 1885
1891 -public define HTML_Off_Form textarea(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("textarea", attrs, content).  
1892 -public define HTML_Off_Form textarea(List(CoreAttrs) attrs, Int cols, Int rows, List(HTML_Off_Form) content)  
1893 - = html_tag("textarea", [attr("cols",to_String(cols)), attr("rows",to_String(rows)) . attrs], content).  
1894 -public define HTML_Off_Form textarea(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("textarea", attrs, [content]).  
1895 -public define HTML_Off_Form textarea(List(CoreAttrs) attrs, Int cols, Int rows, HTML_Off_Form content)  
1896 - = html_tag("textarea", [attr("cols",to_String(cols)), attr("rows",to_String(rows)) . attrs], [content]).  
1897 -public define HTML_Off_Form textarea(CoreAttrs attr, List(HTML_Off_Form) content) = html_tag("textarea", [attr], content).  
1898 -public define HTML_Off_Form textarea(CoreAttrs attr, HTML_Off_Form content) = html_tag("textarea", [attr], [content]). 1886 +//public define HTML
  1887 +// form
  1888 +// (
  1889 +// String form_name,
  1890 +// List(CoreAttrs) options,
  1891 +// HTML content
  1892 +// ) =
  1893 +// form([id(form_name). options], [content]).
1899 1894
1900 - // <ul>  
1901 -public define HTML_Off_Form ul(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("ul", attrs, content).  
1902 -public define HTML_Off_Form ul(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("ul", attrs, [content]).  
1903 -public define HTML_Off_Form ul(CoreAttrs attr, List(HTML_Off_Form) content) = html_tag("ul", [attr], content).  
1904 -public define HTML_Off_Form ul(CoreAttrs attr, HTML_Off_Form content) = html_tag("ul", [attr], [content]).  
1905 -public define HTML_Off_Form ul(List(HTML_Off_Form) content) = html_tag("ul", [], content).  
1906 -public define HTML_Off_Form ul(HTML_Off_Form content) = html_tag("ul", [], [content]). 1895 +//public define HTML
  1896 +// form
  1897 +// (
  1898 +// String form_name,
  1899 +// List(CoreAttrs) options,
  1900 +// List(HTML) contents
  1901 +// ) =
  1902 +// form([id(form_name) . options], contents).
1907 1903
1908 1904
1909 -public define HTML_Off_Form  
1910 - form  
1911 - (  
1912 - String form_name,  
1913 - List(CoreAttrs) options,  
1914 - HTML_In_Form content  
1915 - ) =  
1916 - form(html_Id(form_name), options, [content]). 1905 +
  1906 +public define HTML image(String url) = img(url).
  1907 +public define HTML image(String url, Int width, Int height) = img(url, width, height).
1917 1908
1918 -public define HTML_Off_Form  
1919 - form  
1920 - (  
1921 - String form_name,  
1922 - List(CoreAttrs) options,  
1923 - List(HTML_In_Form) contents  
1924 - ) =  
1925 - form(html_Id(form_name), options, contents).  
1926 -  
1927 -public define HTML_Off_Form 1909 +
  1910 +
  1911 +public define HTML
1928 form 1912 form
1929 ( 1913 (
1930 - String form_name,  
1931 List(CoreAttrs) options, 1914 List(CoreAttrs) options,
1932 - WEB_Action_Name action, 1915 + WEB_Action_Name _action,
1933 List((String,String)) extra_ops, 1916 List((String,String)) extra_ops,
1934 - HTML_In_Form content 1917 + HTML content
1935 ) = 1918 ) =
1936 - form(html_Id(form_name), options, action, extra_ops, [content]). 1919 + form([action(_action, extra_ops). options], [content]).
1937 1920
1938 -public define HTML_Off_Form 1921 +public define HTML
1939 form 1922 form
1940 ( 1923 (
1941 - HTML_Id form_id,  
1942 List(CoreAttrs) options, 1924 List(CoreAttrs) options,
1943 WEB_Action_Name action, 1925 WEB_Action_Name action,
1944 List((String,String)) extra_ops, 1926 List((String,String)) extra_ops,
1945 - HTML_In_Form content 1927 + List(HTML) contents
1946 ) = 1928 ) =
1947 - form(form_id, options, action, extra_ops, [content]). 1929 + form(options, action, extra_ops, contents).
1948 1930
1949 -public define HTML_Off_Form 1931 +public define HTML
1950 form 1932 form
1951 ( 1933 (
1952 - String form_name,  
1953 - List(CoreAttrs) options,  
1954 - WEB_Action_Name action,  
1955 - List((String,String)) extra_ops,  
1956 - List(HTML_In_Form) contents  
1957 - ) =  
1958 - form(html_Id(form_name), options, action, extra_ops, contents).  
1959 -  
1960 -public define HTML_Off_Form  
1961 - form  
1962 - (  
1963 - String form_name,  
1964 List(CoreAttrs) options, 1934 List(CoreAttrs) options,
1965 String action, 1935 String action,
1966 List((String,String)) extra_ops, 1936 List((String,String)) extra_ops,
1967 - HTML_In_Form content 1937 + HTML content
1968 ) = 1938 ) =
1969 - form(html_Id(form_name), options, action_name(action), extra_ops, [content]). 1939 + form(options, action_name(action), extra_ops, [content]).
1970 1940
1971 -public define HTML_Off_Form 1941 +public define HTML
1972 form 1942 form
1973 ( 1943 (
1974 String form_name, 1944 String form_name,
1975 List(CoreAttrs) options, 1945 List(CoreAttrs) options,
1976 String action, 1946 String action,
1977 List((String,String)) extra_ops, 1947 List((String,String)) extra_ops,
1978 - List(HTML_In_Form) contents 1948 + List(HTML) contents
1979 ) = 1949 ) =
1980 - form(html_Id(form_name), options, action_name(action), extra_ops, contents).  
1981 -  
1982 -public define HTML_Off_Form literal(Printable_tree t) = literal_pt(t).  
1983 -//public define HTML_Off_Form fixed_size(HTML_Size width, HTML_Size height, String name_of_HTML_file)  
1984 -// = fixed_size_2(width,height,name_of_HTML_file).  
1985 -  
1986 -  
1987 -public define HTML_Off_Form  
1988 - foreign_link  
1989 - (  
1990 - Int tsize,  
1991 - String url,  
1992 - String name  
1993 - ) =  
1994 - foreign_link([size(tsize)],url,name).  
1995 -  
1996 -  
1997 -public define HTML_Off_Form  
1998 - actioner  
1999 - (  
2000 - Actioner_Connection conn,  
2001 - Actioner_Target targ,  
2002 - Actioner_Aspect asp,  
2003 - WEB_Action_Name action,  
2004 - List((String,String)) extra_ops  
2005 - ) =  
2006 - actioner(conn,targ,asp,action,extra_ops,[]). 1950 + form(form_name, options, action, extra_ops, contents).
2007 1951
2008 -public define HTML_Off_Form 1952 +public define HTML
2009 actioner 1953 actioner
2010 ( 1954 (
2011 Actioner_Connection conn, 1955 Actioner_Connection conn,
@@ -2017,7 +1961,7 @@ public define HTML_Off_Form @@ -2017,7 +1961,7 @@ public define HTML_Off_Form
2017 ) = 1961 ) =
2018 actioner(conn,targ,asp,action,extra_ops,[], form_name). 1962 actioner(conn,targ,asp,action,extra_ops,[], form_name).
2019 1963
2020 -public define HTML_Off_Form 1964 +public define HTML
2021 actioner 1965 actioner
2022 ( 1966 (
2023 Actioner_Aspect asp, 1967 Actioner_Aspect asp,
@@ -2026,52 +1970,18 @@ public define HTML_Off_Form @@ -2026,52 +1970,18 @@ public define HTML_Off_Form
2026 ) = 1970 ) =
2027 actioner(same, same, asp, action, extra_ops, []). 1971 actioner(same, same, asp, action, extra_ops, []).
2028 1972
2029 -public define HTML_Off_Form 1973 +public define HTML
2030 actioner 1974 actioner
2031 ( 1975 (
2032 Actioner_Aspect asp, 1976 Actioner_Aspect asp,
2033 WEB_Action_Name action, 1977 WEB_Action_Name action,
2034 List((String,String)) extra_ops, 1978 List((String,String)) extra_ops,
2035 String form_name 1979 String form_name
2036 - ) =  
2037 - actioner(same, same, asp, action, extra_ops, [], form_name).  
2038 -  
2039 -public define HTML_Off_Form  
2040 -/* Older call with String as action instead of WEB_Action_Name.  
2041 - * This function exists only for compatibility with older project.  
2042 - * Please condiser to use above function instead  
2043 - */  
2044 - actioner  
2045 - (  
2046 - Actioner_Connection conn,  
2047 - Actioner_Target targ,  
2048 - Actioner_Aspect asp,  
2049 - String action,  
2050 - List((String,String)) extra_ops,  
2051 - List(Actioner_Local_Action) local_actions  
2052 - )=  
2053 - actioner(conn,targ,asp,action_name(action),extra_ops,local_actions)  
2054 -.  
2055 -  
2056 -public define HTML_Off_Form  
2057 -/* Older call with String as action instead of WEB_Action_Name.  
2058 - * This function exists only for compatibility with older project.  
2059 - * Please condiser to use above function instead  
2060 - */  
2061 - actioner  
2062 - (  
2063 - Actioner_Connection conn,  
2064 - Actioner_Target targ,  
2065 - Actioner_Aspect asp,  
2066 - String action,  
2067 - List((String,String)) extra_ops,  
2068 - List(Actioner_Local_Action) local_actions,  
2069 - String form_name  
2070 - )=  
2071 - actioner(conn, targ, asp, action_name(action), extra_ops, local_actions, form_name)  
2072 -. 1980 + ) =
  1981 + actioner(same, same, asp, action, extra_ops, [], form_name).
  1982 +
2073 1983
2074 -public define HTML_Off_Form 1984 +public define HTML
2075 /* Older call with String as action instead of WEB_Action_Name. 1985 /* Older call with String as action instead of WEB_Action_Name.
2076 * This function exists only for compatibility with older project. 1986 * This function exists only for compatibility with older project.
2077 * Please condiser to use above function instead 1987 * Please condiser to use above function instead
@@ -2082,12 +1992,14 @@ public define HTML_Off_Form @@ -2082,12 +1992,14 @@ public define HTML_Off_Form
2082 Actioner_Target targ, 1992 Actioner_Target targ,
2083 Actioner_Aspect asp, 1993 Actioner_Aspect asp,
2084 String action, 1994 String action,
2085 - List((String,String)) extra_ops 1995 + List((String,String)) extra_ops,
  1996 + List(Actioner_Local_Action) local_actions,
  1997 + String form_name
2086 )= 1998 )=
2087 - actioner(conn,targ,asp,action_name(action),extra_ops,[]) 1999 + actioner(conn, targ, asp, action_name(action), extra_ops, local_actions, form_name)
2088 . 2000 .
2089 2001
2090 -public define HTML_Off_Form 2002 +public define HTML
2091 /* Older call with String as action instead of WEB_Action_Name. 2003 /* Older call with String as action instead of WEB_Action_Name.
2092 * This function exists only for compatibility with older project. 2004 * This function exists only for compatibility with older project.
2093 * Please condiser to use above function instead 2005 * Please condiser to use above function instead
@@ -2104,100 +2016,27 @@ public define HTML_Off_Form @@ -2104,100 +2016,27 @@ public define HTML_Off_Form
2104 actioner(conn, targ, asp, action_name(action), extra_ops, [], form_name) 2016 actioner(conn, targ, asp, action_name(action), extra_ops, [], form_name)
2105 . 2017 .
2106 2018
2107 -public define HTML_Off_Form  
2108 - table  
2109 - (  
2110 - List(HTML_Row(HTML_Off_Form)) rows  
2111 - )=  
2112 - table([], empty, rows,empty)  
2113 -.  
2114 -  
2115 -public define HTML_Off_Form  
2116 - table  
2117 - (  
2118 - List(Table_Option) options,  
2119 - List(HTML_Row(HTML_Off_Form)) rows  
2120 - ) =  
2121 - table(options,empty,rows,empty)  
2122 -.  
2123 -  
2124 -public define HTML_Off_Form  
2125 - table  
2126 - (  
2127 - Table_Option option,  
2128 - HTML_Row(HTML_Off_Form) row  
2129 - ) =  
2130 - table([option], empty, [row], empty)  
2131 -.  
2132 -  
2133 -public define HTML_Off_Form  
2134 - table  
2135 - (  
2136 - HTML_Header_Row(HTML_Off_Form) h_row,  
2137 - List(HTML_Row(HTML_Off_Form)) rows  
2138 - ) =  
2139 - table([],h_row,rows,empty)  
2140 -.  
2141 -  
2142 -public define HTML_Off_Form  
2143 - table  
2144 - (  
2145 - List(Table_Option) options,  
2146 - HTML_Header_Row(HTML_Off_Form) h_row,  
2147 - List(HTML_Row(HTML_Off_Form)) rows  
2148 - ) =  
2149 - table(options,h_row,rows,empty)  
2150 -.  
2151 -  
2152 -public define HTML_Off_Form  
2153 - table  
2154 - (  
2155 - Table_Option option,  
2156 - HTML_Header_Row(HTML_Off_Form) h_row,  
2157 - List(HTML_Row(HTML_Off_Form)) rows  
2158 - ) =  
2159 - table([option], h_row, rows,empty)  
2160 -.  
2161 -  
2162 - We add two convenience functions for 'row'. The reason why we add two functions, one  
2163 - for 'HTML_In_Form' and one for 'HTML_Off_Form', is that adding a schema with an  
2164 - arbitrary '$T' creates too many ambiguities. This is due to the fact that, if we do so,  
2165 - the arguments of the function do not refer to any of the types defined here.  
2166 -  
2167 -public define HTML_Row(HTML_In_Form)  
2168 - row  
2169 - (  
2170 - HTML_In_Form content  
2171 - ) =  
2172 - row([],[cell([],content)]).  
2173 -  
2174 -public define HTML_Row(HTML_Off_Form)  
2175 - row  
2176 - (  
2177 - HTML_Off_Form content  
2178 - ) =  
2179 - row([],[cell([],content)]).  
2180 -  
2181 -public define HTML_Cell(HTML_Off_Form) 2019 +public define HTML
2182 cells_to_column_in_cell 2020 cells_to_column_in_cell
2183 ( 2021 (
2184 - List(HTML_Cell(HTML_Off_Form)) cells 2022 + List(HTML) cells
2185 )= 2023 )=
2186 - cell( 2024 + td(
2187 table( 2025 table(
2188 - map( (HTML_Cell(HTML_Off_Form) current_cell) |-> row(current_cell), cells)  
2189 - )). 2026 + map( ((HTML) current_cell) |-> tr(current_cell), cells)
  2027 + ))
  2028 +.
2190 2029
2191 -public define HTML_Off_Form 2030 +public define HTML
2192 cells_to_line 2031 cells_to_line
2193 ( 2032 (
2194 - List(HTML_Off_Form) cells 2033 + List(HTML) cells
2195 )= 2034 )=
2196 - table([row(  
2197 - map (((HTML_Off_Form) current_cell) |-> cell(current_cell), cells))]) 2035 + table([tr(
  2036 + map (((HTML) current_cell) |-> td(current_cell), cells))])
2198 . 2037 .
2199 2038
2200 -public define HTML_Off_Form 2039 +public define HTML
2201 private_download 2040 private_download
2202 ( 2041 (
2203 String abs_path, 2042 String abs_path,
@@ -2207,7 +2046,7 @@ public define HTML_Off_Form @@ -2207,7 +2046,7 @@ public define HTML_Off_Form
2207 private_download(abs_path,name,extra_ext,failure). 2046 private_download(abs_path,name,extra_ext,failure).
2208 2047
2209 2048
2210 -public define HTML_Off_Form 2049 +public define HTML
2211 private_download 2050 private_download
2212 ( 2051 (
2213 String abs_path, 2052 String abs_path,
@@ -2219,147 +2058,83 @@ public define HTML_Off_Form @@ -2219,147 +2058,83 @@ public define HTML_Off_Form
2219 private_download(abs_path,name,extra_ext,success((action_name,args))). 2058 private_download(abs_path,name,extra_ext,success((action_name,args))).
2220 2059
2221 . 2060 .
2222 -  
2223 -  
2224 -  
2225 -public define HTML_In_Form  
2226 - hr  
2227 - =  
2228 - hr([])  
2229 -.  
2230 -  
2231 -public define HTML_In_Form  
2232 - button  
2233 - (  
2234 - List(HTML_In_Form) elements  
2235 - )=  
2236 - button([], elements)  
2237 -.  
2238 -  
2239 -public define HTML_In_Form  
2240 - button  
2241 - (  
2242 - List(CoreAttrs) attrs,  
2243 - HTML_In_Form element  
2244 - )=  
2245 - button(attrs, [element])  
2246 -.  
2247 -  
2248 -public define HTML_In_Form  
2249 - button  
2250 - (  
2251 - HTML_In_Form element  
2252 - )=  
2253 - button([], [element])  
2254 -.  
2255 - - Cell a gap between two other cells :  
2256 -  
2257 -public define HTML_Cell(HTML_Off_Form)  
2258 - width_gap  
2259 - (  
2260 - Int w  
2261 - )=  
2262 - cell([width(w)], empty).  
2263 -  
2264 -public define HTML_Cell(HTML_In_Form)  
2265 - width_gap  
2266 - (  
2267 - Int w  
2268 - )=  
2269 - cell([width(w)],empty)  
2270 -.  
2271 - - Row a gap between two other rows :  
2272 -  
2273 -public define HTML_Row(HTML_Off_Form)  
2274 - height_gap  
2275 - (  
2276 - Int h  
2277 - )=  
2278 - row([],[cell([height(h)],empty)]).  
2279 -  
2280 -public define HTML_Row(HTML_In_Form)  
2281 - height_gap  
2282 - (  
2283 - Int h  
2284 - )=  
2285 - row([],[cell([height(h)],empty)])  
2286 -.  
2287 -  
2288 - 2061 +
2289 Notice that the two types have alternatives in common (same name, same arguments types, 2062 Notice that the two types have alternatives in common (same name, same arguments types,
2290 up to the value of the parameter $T), which correspond to elements which may be put 2063 up to the value of the parameter $T), which correspond to elements which may be put
2291 anywhere in the page. 2064 anywhere in the page.
2292 2065
2293 -public define HTML_Partial_Content  
2294 - partial_content  
2295 - (  
2296 - List(HTML_Head_Tag) tags,  
2297 - List(HTML_Off_Form) content  
2298 - )=  
2299 - partial_content(tags, sequence(content)).  
2300 -  
2301 -public define HTML_Partial_Content  
2302 - partial_content  
2303 - (  
2304 - HTML_Off_Form content  
2305 - )=  
2306 - partial_content([], content).  
2307 -  
2308 -public define HTML_Partial_Content  
2309 - partial_content  
2310 - (  
2311 - List(HTML_Off_Form) content  
2312 - )=  
2313 - partial_content([], sequence(content)).  
2314 -  
2315 -public define HTML_Partial_Content  
2316 - partial_content 2066 +//public define HTML
  2067 +// partial_content
  2068 +// (
  2069 +// List(HTML_Head_Tag) tags,
  2070 +// List(HTML) content
  2071 +// )=
  2072 +// partial_content(tags, sequence(content)).
  2073 +//
  2074 +//public define HTML
  2075 +// partial_content
  2076 +// (
  2077 +// HTML content
  2078 +// )=
  2079 +// partial_content([], content).
  2080 +//
  2081 +//public define HTML
  2082 +// partial_content
  2083 +// (
  2084 +// List(HTML) content
  2085 +// )=
  2086 +// partial_content([], sequence(content)).
  2087 +//
  2088 +public define HTML
  2089 + add_head_tags
2317 ( 2090 (
2318 List(HTML_Head_Tag) tags, 2091 List(HTML_Head_Tag) tags,
2319 - HTML_Partial_Content p_content 2092 + HTML p_content
2320 )= 2093 )=
2321 - if p_content is partial_content(ptags, html) then  
2322 - partial_content(tags + ptags, html). 2094 + if p_content is head_tags(_head_tags, html) then
  2095 + head_tags(tags + _head_tags, html)
  2096 + else
  2097 + p_content
  2098 +.
2323 2099
2324 -define HTML_Partial_Content 2100 +define HTML
2325 list_to_pcontent 2101 list_to_pcontent
2326 ( 2102 (
2327 - List(HTML_Partial_Content) l_p_content,  
2328 - List(HTML_Head_Tag) so_far_tags,  
2329 - List(HTML_Off_Form) so_far_html 2103 + List(HTML) l_content,
  2104 + List(HTML_Head_Tag) so_far_tags,
  2105 + List(HTML) so_far_html
2330 )= 2106 )=
2331 - if l_p_content is 2107 + if l_content is
2332 { 2108 {
2333 - [] then partial_content(so_far_tags, sequence(reverse(so_far_html))), 2109 + [] then head_tags(so_far_tags, reverse(so_far_html)),
2334 [h . t] then 2110 [h . t] then
2335 //extract resurgent type and symbols of h 2111 //extract resurgent type and symbols of h
2336 - if h is partial_content(tags, html) then  
2337 - list_to_pcontent(t, so_far_tags + tags, [html . so_far_html]) 2112 + if h is head_tags(tags, html) then
  2113 + list_to_pcontent(t, so_far_tags + tags, html + so_far_html)
  2114 + else
  2115 + list_to_pcontent(t, so_far_tags, [h . so_far_html])
2338 }. 2116 }.
2339 2117
2340 -public define HTML_Partial_Content  
2341 - partial_content  
2342 - (  
2343 - List(HTML_Partial_Content) l_p_content  
2344 - )=  
2345 - list_to_pcontent(l_p_content, [], []).  
2346 -  
2347 -public define HTML_Partial_Content  
2348 - partial_empty  
2349 - =  
2350 - partial_content(empty)  
2351 -. 2118 +//public define HTML
  2119 +// partial_content
  2120 +// (
  2121 +// List(HTML) l_p_content
  2122 +// )=
  2123 +// list_to_pcontent(l_p_content, [], []).
  2124 +//
  2125 +//public define HTML
  2126 +// partial_empty
  2127 +// =
  2128 +// partial_content(empty)
  2129 +//.
2352 2130
2353 -define String 2131 + define String
2354 format 2132 format
2355 ( 2133 (
2356 List(Text_Option) l 2134 List(Text_Option) l
2357 ). 2135 ).
2358 -  
2359 -  
2360 -  
2361 -  
2362 -define Printable_tree 2136 +
  2137 + define Printable_tree
2363 format_css_styles 2138 format_css_styles
2364 ( 2139 (
2365 List(CSS_Style) l 2140 List(CSS_Style) l
@@ -2392,14 +2167,7 @@ public define HTML_Meta @@ -2392,14 +2167,7 @@ public define HTML_Meta
2392 )= 2167 )=
2393 refresh(connection, target, action_name(action), delay) 2168 refresh(connection, target, action_name(action), delay)
2394 . 2169 .
2395 -  
2396 -  
2397 -  
2398 -  
2399 -  
2400 -  
2401 -  
2402 - 2170 +
2403 public define HTTP_Answer 2171 public define HTTP_Answer
2404 html_page 2172 html_page
2405 ( 2173 (
@@ -2407,17 +2175,7 @@ public define HTTP_Answer @@ -2407,17 +2175,7 @@ public define HTTP_Answer
2407 List(HTML_Head_Tag) head_tags, 2175 List(HTML_Head_Tag) head_tags,
2408 HTML_Body body 2176 HTML_Body body
2409 )= 2177 )=
2410 - html_page(http_ok, title, head_tags,[],[],[],[],body).  
2411 -  
2412 -public define HTTP_Answer  
2413 - html_page  
2414 - (  
2415 - String title,  
2416 - List(HTML_Head_Tag) head_tags,  
2417 - List(CSS_Style) styles,  
2418 - HTML_Body body  
2419 - )=  
2420 - html_page(http_ok, title, head_tags, styles, [], [], [], body). 2178 + html_page(http_ok, title, head_tags,[],[],[],body).
2421 2179
2422 public define HTTP_Answer 2180 public define HTTP_Answer
2423 web_controller_error_page 2181 web_controller_error_page
@@ -2465,11 +2223,11 @@ public define HTTP_Answer @@ -2465,11 +2223,11 @@ public define HTTP_Answer
2465 Anubis in order to forbid non meaningful placement of elements. 2223 Anubis in order to forbid non meaningful placement of elements.
2466 2224
2467 The type 'HTML_In_Form' defines elements to be put within forms. Similarly, 2225 The type 'HTML_In_Form' defines elements to be put within forms. Similarly,
2468 - 'HTML_Off_Form' defines elements not to be put within forms. Both types are recursive,  
2469 - and 'HTML_Off_Form' refers to 'HTML_In_Form' (via the 'form' alternative, of course), 2226 + 'HTML' defines elements not to be put within forms. Both types are recursive,
  2227 + and 'HTML' refers to 'HTML_In_Form' (via the 'form' alternative, of course),
2470 but the two types are not cross recursive. This is the reason why it is impossible to 2228 but the two types are not cross recursive. This is the reason why it is impossible to
2471 put a form within a form. In order to construct a web page, you essentially have to 2229 put a form within a form. In order to construct a web page, you essentially have to
2472 - produce a datum of type 'HTML_Off_Form' (maybe containing data of type 'HTML_In_Form'). 2230 + produce a datum of type 'HTML' (maybe containing data of type 'HTML_In_Form').
2473 2231
2474 In practice, you don't have to worry so much about these two types, because elements 2232 In practice, you don't have to worry so much about these two types, because elements
2475 which may be put anywhere are constructed for both types by functions with the same 2233 which may be put anywhere are constructed for both types by functions with the same
@@ -2492,7 +2250,7 @@ public define HTTP_Answer @@ -2492,7 +2250,7 @@ public define HTTP_Answer
2492 2250
2493 define RGB text_color = rgb(10,40,40). 2251 define RGB text_color = rgb(10,40,40).
2494 2252
2495 - define HTML_Off_Form 2253 + define HTML
2496 text 2254 text
2497 ( 2255 (
2498 String the_text 2256 String the_text
@@ -2510,7 +2268,7 @@ public define HTTP_Answer @@ -2510,7 +2268,7 @@ public define HTTP_Answer
2510 convenience functions. This also suggests a trick. You may want for example different 2268 convenience functions. This also suggests a trick. You may want for example different
2511 colors for 'in form' texts and 'off form' texts. This may be achieved automatically by 2269 colors for 'in form' texts and 'off form' texts. This may be achieved automatically by
2512 defining two functions as above, with the same name and same argument type, but 2270 defining two functions as above, with the same name and same argument type, but
2513 - returning either a 'HTML_In_Form' or a 'HTML_Off_Form'. 2271 + returning either a 'HTML_In_Form' or a 'HTML'.
2514 2272
2515 If this preliminary work is well done, you will not waste your time later when you 2273 If this preliminary work is well done, you will not waste your time later when you
2516 concentrate on the actual informational content of your pages. 2274 concentrate on the actual informational content of your pages.
@@ -2646,7 +2404,7 @@ define Printable_tree @@ -2646,7 +2404,7 @@ define Printable_tree
2646 ( 2404 (
2647 CommonInfo cinfo, 2405 CommonInfo cinfo,
2648 Var(Int) ic_v, // 'idnum' counter variable 2406 Var(Int) ic_v, // 'idnum' counter variable
2649 - HTML_Off_Form element, 2407 + HTML element,
2650 Bool is_https, 2408 Bool is_https,
2651 Var(Int) action_count, 2409 Var(Int) action_count,
2652 Var(List(HTML_Head_Tag)) head_tags 2410 Var(List(HTML_Head_Tag)) head_tags
@@ -2851,10 +2609,6 @@ define One @@ -2851,10 +2609,6 @@ define One
2851 2609
2852 The above loop must be run in a separate virtual machine. This will be done just after 2610 The above loop must be run in a separate virtual machine. This will be done just after
2853 the two servers are started. 2611 the two servers are started.
2854 -  
2855 -  
2856 -  
2857 -  
2858 2612
2859 *** [2] Tools. 2613 *** [2] Tools.
2860 2614
@@ -3315,7 +3069,7 @@ public define Web_Site @@ -3315,7 +3069,7 @@ public define Web_Site
3315 3069
3316 3070
3317 public define JsonValue to_html_ajax_content(Printable_tree content_HTML, String additional_script). 3071 public define JsonValue to_html_ajax_content(Printable_tree content_HTML, String additional_script).
3318 -public define JsonValue to_html_ajax_content(HTML_Partial_Content content_HTML, CommonInfo cinfo, String additional_script). 3072 +public define JsonValue to_html_ajax_content(HTML content_HTML, CommonInfo cinfo, String additional_script).
3319 3073
3320 3074
3321 3075
@@ -3492,20 +3246,16 @@ public define One @@ -3492,20 +3246,16 @@ public define One
3492 *** [5.1] The type 'HTML_Any($T)'. 3246 *** [5.1] The type 'HTML_Any($T)'.
3493 3247
3494 The type 'HTML_Any($T)' gathers elements which may be put anywhere in the page. The 3248 The type 'HTML_Any($T)' gathers elements which may be put anywhere in the page. The
3495 - parameter $T becomes either 'HTML_Off_Form' or 'HTML_In_Form'. 3249 + parameter $T becomes either 'HTML' or 'HTML_In_Form'.
3496 3250
3497 -type HTML_Any($T): 3251 + type HTML_Any($T):
3498 any_text (List(CoreAttrs), String the_text), 3252 any_text (List(CoreAttrs), String the_text),
3499 - any_preformated (List(Text_Option), String),  
3500 - any_paragraph (List(Text_Option), List($T) content),  
3501 - any_image (List(CoreAttrs), String url, String alternate),  
3502 - any_image (List(CoreAttrs), String url, String alternate, Int width, Int height),  
3503 - any_table (List(Table_Option), HTML_Header_Row($T), List(HTML_Row($T)), HTML_Footer_Row($T)),  
3504 - any_center ($T),  
3505 - any_mail_to (String email, $T element),  
3506 - any_scroller (Int width, Int height,  
3507 - Int content_width, Int content_height,  
3508 - $T content), 3253 + any_preformated (List(CoreAttrs), String),
  3254 + any_paragraph (List(CoreAttrs), List($T) content),
  3255 + //any_image (List(CoreAttrs), String url, String alternate),
  3256 + //any_image (List(CoreAttrs), String url, String alternate, Int width, Int height),
  3257 + //any_center ($T),
  3258 + //any_mail_to (String email, $T element),
3509 any_fixed_size (HTML_Size width, HTML_Size height, $T content), 3259 any_fixed_size (HTML_Size width, HTML_Size height, $T content),
3510 any_fixed_size_2 (HTML_Size width, HTML_Size height, String name_of_HTML_file), 3260 any_fixed_size_2 (HTML_Size width, HTML_Size height, String name_of_HTML_file),
3511 any_actioner (Actioner_Connection, 3261 any_actioner (Actioner_Connection,
@@ -3516,8 +3266,8 @@ type HTML_Any($T): @@ -3516,8 +3266,8 @@ type HTML_Any($T):
3516 List(Actioner_Local_Action), 3266 List(Actioner_Local_Action),
3517 Maybe(String) form_name), 3267 Maybe(String) form_name),
3518 any_foreign_link_new (Actioner_Target, Actioner_Aspect, String url), 3268 any_foreign_link_new (Actioner_Target, Actioner_Aspect, String url),
3519 - any_foreign_link (List(Text_Option), String url),  
3520 - any_foreign_link (List(Text_Option), String url, String name), 3269 + any_foreign_link (List(CoreAttrs), String url),
  3270 + any_foreign_link (List(CoreAttrs), String url, String name),
3521 any_private_download (String abs_path, String name, String extra_ext, 3271 any_private_download (String abs_path, String name, String extra_ext,
3522 Maybe((String,List((String,String))))), 3272 Maybe((String,List((String,String))))),
3523 any_div (List(CoreAttrs), List($T) element), 3273 any_div (List(CoreAttrs), List($T) element),
@@ -3592,11 +3342,7 @@ define RGBA @@ -3592,11 +3342,7 @@ define RGBA
3592 3342
3593 &oname=value 3343 &oname=value
3594 3344
3595 -public define String  
3596 - format_attrs  
3597 - (  
3598 - List(CoreAttrs) attributs  
3599 - ). 3345 +
3600 3346
3601 //public define String 3347 //public define String
3602 // format_extra_operands 3348 // format_extra_operands
@@ -3636,65 +3382,7 @@ define String @@ -3636,65 +3382,7 @@ define String
3636 3382
3637 3383
3638 3384
3639 - Formating choices for a <select> tag.  
3640 -  
3641 -public define Printable_tree  
3642 - format_choices  
3643 - (  
3644 - List(String) l  
3645 - ) =  
3646 - if l is  
3647 - {  
3648 - [ ] then [ ],  
3649 - [h . t] then ["<option>", h, "</option>\n" . format_choices(t)]  
3650 - }.  
3651 -  
3652 -  
3653 -public define Printable_tree  
3654 - format_choices  
3655 - (  
3656 - List(String) l,  
3657 - InitialValue selected  
3658 - ) =  
3659 - if l is  
3660 - {  
3661 - [ ] then [ ],  
3662 - [h . t] then if h = selected.value  
3663 - then ["<option selected=\"selected\">", h, "</option>\n" . format_choices(t)]  
3664 - else ["<option>", h, "</option>\n" . format_choices(t,selected)]  
3665 - }.  
3666 -  
3667 -  
3668 -public define Printable_tree  
3669 - format_choices  
3670 - (  
3671 - List((List(CoreAttrs),WebArgValue,String)) l  
3672 - ) =  
3673 - if l is  
3674 - {  
3675 - [ ] then [ ],  
3676 - [h . t] then  
3677 - if h is (attrs,val,item)  
3678 - then ["<option value=\""+encode_HTML_entities(val.value)+"\" "+format_attrs(attrs)+">", item, "</option>\n" . format_choices(t)]  
3679 - }.  
3680 -  
3681 -public define Printable_tree  
3682 - format_choices  
3683 - (  
3684 - List((List(CoreAttrs),WebArgValue,String)) l,  
3685 - InitialValue selected  
3686 - ) =  
3687 - if l is  
3688 - {  
3689 - [ ] then [ ],  
3690 - [h . t] then  
3691 - if h is (attrs,val,item) then  
3692 - if val.value = selected.value  
3693 - then ["<option value=\""+encode_HTML_entities(val.value)+"\" "+format_attrs(attrs)+" selected=\"selected\">", item, "</option>\n" . format_choices(t)]  
3694 - else ["<option value=\""+encode_HTML_entities(val.value)+"\" "+format_attrs(attrs)+" >", item, "</option>\n" . format_choices(t,selected)]  
3695 - }.  
3696 -  
3697 - 3385 +
3698 3386
3699 Note: this counter is private to the virtual machine, hence there is one counter by 3387 Note: this counter is private to the virtual machine, hence there is one counter by
3700 client and by page : it seems that a new VM (simply a delegate) is started for each request. 3388 client and by page : it seems that a new VM (simply a delegate) is started for each request.
@@ -3844,78 +3532,76 @@ define URL_or_JavaScript @@ -3844,78 +3532,76 @@ define URL_or_JavaScript
3844 3532
3845 Now, we format the actioner according to its aspect. 3533 Now, we format the actioner according to its aspect.
3846 3534
3847 -define List(Text_Option)  
3848 - get_text_options  
3849 - (  
3850 - List(Text_Option) l  
3851 - )  
3852 - =  
3853 - if l is  
3854 - {  
3855 - [] then [],  
3856 - [h . t ] then  
3857 - if h is class(_) then  
3858 - get_text_options(t)  
3859 - else if h is id(_) then  
3860 - get_text_options(t)  
3861 - else if h is style(_) then  
3862 - get_text_options(t)  
3863 - else if h is title(_) then  
3864 - get_text_options(t)  
3865 - else if h is core_attrs(_) then  
3866 - get_text_options(t)  
3867 - else  
3868 - [ h . get_text_options(t) ]  
3869 -  
3870 - }.  
3871 - 3535 +//define List(Text_Option)
  3536 +// get_text_options
  3537 +// (
  3538 +// List(Text_Option) l
  3539 +// )
  3540 +// =
  3541 +// if l is
  3542 +// {
  3543 +// [] then [],
  3544 +// [h . t ] then
  3545 +// if h is class(_) then
  3546 +// get_text_options(t)
  3547 +// else if h is id(_) then
  3548 +// get_text_options(t)
  3549 +// else if h is style(_) then
  3550 +// get_text_options(t)
  3551 +// else if h is title(_) then
  3552 +// get_text_options(t)
  3553 +// else if h is core_attrs(_) then
  3554 +// get_text_options(t)
  3555 +// else
  3556 +// [ h . get_text_options(t) ]
  3557 +//
  3558 +// }.
  3559 +//
3872 /** 3560 /**
3873 * Extract the CSS class list from the list of Text_Option 3561 * Extract the CSS class list from the list of Text_Option
3874 */ 3562 */
3875 -define List(CoreAttrs)  
3876 - get_css_class  
3877 - (  
3878 - List(Text_Option) l  
3879 - )  
3880 - =  
3881 - if l is  
3882 - {  
3883 - [] then [],  
3884 - [h . t ] then  
3885 -  
3886 -  
3887 - if h is class(name) then  
3888 - [ class(name) . get_css_class(t) ]  
3889 - else if h is id(name) then  
3890 - [ id(name) . get_css_class(t) ]  
3891 - else if h is style(the_style) then  
3892 - [ style(the_style) . get_css_class(t) ]  
3893 - else if h is title(name) then  
3894 - [ tooltip(name) . get_css_class(t) ]  
3895 - else if h is attr(name, value) then  
3896 - [ attr(name, value) . get_css_class(t) ]  
3897 - else  
3898 - get_css_class(t)  
3899 - }  
3900 - . 3563 +//define List(CoreAttrs)
  3564 +// get_css_class
  3565 +// (
  3566 +// List(Text_Option) l
  3567 +// )
  3568 +// =
  3569 +// if l is
  3570 +// {
  3571 +// [] then [],
  3572 +// [h . t ] then
  3573 +// if h is class(name) then
  3574 +// [ class(name) . get_css_class(t) ]
  3575 +// else if h is id(name) then
  3576 +// [ id(name) . get_css_class(t) ]
  3577 +// else if h is style(the_style) then
  3578 +// [ style(the_style) . get_css_class(t) ]
  3579 +// else if h is title(name) then
  3580 +// [ tooltip(name) . get_css_class(t) ]
  3581 +// else if h is attr(name, value) then
  3582 +// [ attr(name, value) . get_css_class(t) ]
  3583 +// else
  3584 +// get_css_class(t)
  3585 +// }
  3586 +//.
3901 3587
3902 3588
3903 -define List(CoreAttrs)  
3904 - get_core_attrs  
3905 - (  
3906 - List(Text_Option) l  
3907 - )  
3908 - =  
3909 - if l is  
3910 - {  
3911 - [] then [],  
3912 - [h . t ] then  
3913 - if h is core_attrs(attrs) then  
3914 - attrs + get_core_attrs(t)  
3915 - else  
3916 - get_core_attrs(t)  
3917 - }  
3918 - . 3589 +//define List(CoreAttrs)
  3590 +// get_core_attrs
  3591 +// (
  3592 +// List(Text_Option) l
  3593 +// )
  3594 +// =
  3595 +// if l is
  3596 +// {
  3597 +// [] then [],
  3598 +// [h . t ] then
  3599 +// if h is core_attrs(attrs) then
  3600 +// attrs + get_core_attrs(t)
  3601 +// else
  3602 +// get_core_attrs(t)
  3603 +// }
  3604 +// .
3919 3605
3920 define Printable_tree 3606 define Printable_tree
3921 format 3607 format
@@ -3933,54 +3619,54 @@ define Printable_tree @@ -3933,54 +3619,54 @@ define Printable_tree
3933 }. 3619 }.
3934 3620
3935 3621
3936 -define String  
3937 - format_attrs  
3938 - (  
3939 - List(InputAttrs) attributs,  
3940 - List(String) classes,  
3941 - List(String) styles  
3942 - )=  
3943 - if attributs is  
3944 - {  
3945 - [] then  
3946 - if length(classes) = 0 then "" else " class=\""+join(" ",classes)+"\""+  
3947 - if length(styles) = 0 then "" else " style=\""+join(";",styles)+"\"",  
3948 - [h . t] then  
3949 - with new_classes = if h is class(class_name) then [class_name. classes] else classes,  
3950 - new_styles = if h is style(style_string) then [style_string . styles] else styles,  
3951 - current = if h is  
3952 - {  
3953 - id(id_name) then  
3954 - " id=\"" + id_name + "\"",  
3955 - class(class_name) then "",  
3956 - style(style_string) then "",  
3957 - title(title_string) then  
3958 - " title=\"" + title_string + "\"",  
3959 -  
3960 - lang(lang) then  
3961 - " xml:lang=" + lang,  
3962 - dir(reading_Way) then  
3963 - if reading_Way is  
3964 - {  
3965 - ltr then " dir=ltr",  
3966 - rtl then " dir=rtl"  
3967 - },  
3968 -  
3969 - accesskey(key) then  
3970 - " accesskey=\"" + key + "\"",  
3971 - tabindex(index) then  
3972 - " tabindex=\"" + index + "\"",  
3973 -  
3974 - attr(name, value) then  
3975 - " " + name + "=\"" + value + "\"",  
3976 -  
3977 - event(e, value) then  
3978 - " " + event_name(e) + "=\"" + value + "\"",  
3979 - data(name, value) then  
3980 - " data-" + to_lower(name) + "=\"" + value + "\"",  
3981 - },  
3982 - current + format_attrs(t, classes, styles)  
3983 - }. 3622 +//define String
  3623 +// format_attrs
  3624 +// (
  3625 +// List(InputAttrs) attributs,
  3626 +// List(String) classes,
  3627 +// List(String) styles
  3628 +// )=
  3629 +// if attributs is
  3630 +// {
  3631 +// [] then
  3632 +// if length(classes) = 0 then "" else " class=\""+join(" ",classes)+"\""+
  3633 +// if length(styles) = 0 then "" else " style=\""+join(";",styles)+"\"",
  3634 +// [h . t] then
  3635 +// with new_classes = if h is class(class_name) then [class_name. classes] else classes,
  3636 +// new_styles = if h is style(style_string) then [style_string . styles] else styles,
  3637 +// current = if h is
  3638 +// {
  3639 +// id(id_name) then
  3640 +// " id=\"" + id_name + "\"",
  3641 +// class(class_name) then "",
  3642 +// style(style_string) then "",
  3643 +// title(title_string) then
  3644 +// " title=\"" + title_string + "\"",
  3645 +//
  3646 +// lang(lang) then
  3647 +// " xml:lang=" + lang,
  3648 +// dir(reading_Way) then
  3649 +// if reading_Way is
  3650 +// {
  3651 +// ltr then " dir=ltr",
  3652 +// rtl then " dir=rtl"
  3653 +// },
  3654 +//
  3655 +// accesskey(key) then
  3656 +// " accesskey=\"" + key + "\"",
  3657 +// tabindex(index) then
  3658 +// " tabindex=\"" + index + "\"",
  3659 +//
  3660 +// attr(name, value) then
  3661 +// " " + name + "=\"" + value + "\"",
  3662 +//
  3663 +// event(e, value) then
  3664 +// " " + event_name(e) + "=\"" + value + "\"",
  3665 +// data(name, value) then
  3666 +// " data-" + to_lower(name) + "=\"" + value + "\"",
  3667 +// },
  3668 +// current + format_attrs(t, classes, styles)
  3669 +// }.
3984 3670
3985 public define List(CoreAttrs) extract_attributes(HTML_tooltip htt). 3671 public define List(CoreAttrs) extract_attributes(HTML_tooltip htt).
3986 3672
@@ -4068,33 +3754,13 @@ define String @@ -4068,33 +3754,13 @@ define String
4068 current + format_attrs(t + new_attrs, new_classes, new_styles) 3754 current + format_attrs(t + new_attrs, new_classes, new_styles)
4069 }. 3755 }.
4070 3756
4071 -define String  
4072 - format_attrs  
4073 - (  
4074 - List(InputAttrs) attributs  
4075 - )=  
4076 - format_attrs(attributs, [], []).  
4077 -  
4078 public define String 3757 public define String
4079 format_attrs 3758 format_attrs
4080 ( 3759 (
4081 List(CoreAttrs) attributs 3760 List(CoreAttrs) attributs
4082 - )=  
4083 - format_attrs(attributs, [], []).  
4084 -  
4085 -define String  
4086 - format_text_options  
4087 - (  
4088 - List(Text_Option) l  
4089 - )  
4090 - =  
4091 - with text_options = get_text_options(l),  
4092 - core_attrs = get_css_class(l) + get_core_attrs(l),  
4093 - (if length(text_options)= 0 then "" else " style=\"" + format(text_options) + "\" ")  
4094 - +  
4095 - (if length(core_attrs) = 0 then "" else format_attrs(core_attrs))  
4096 - .  
4097 - 3761 + )=
  3762 + format_attrs(attributs, [], []).
  3763 +
4098 define Printable_tree 3764 define Printable_tree
4099 format_div_option 3765 format_div_option
4100 ( 3766 (
@@ -4166,7 +3832,7 @@ define Printable_tree @@ -4166,7 +3832,7 @@ define Printable_tree
4166 link(opt, text, mb_name) then 3832 link(opt, text, mb_name) then
4167 with name_tag = if mb_name is success(n) then " name=\"" + n + "\"" else "", 3833 with name_tag = if mb_name is success(n) then " name=\"" + n + "\"" else "",
4168 [ 3834 [
4169 - "<a href=\"", full_url, "\"", format_text_options(opt), name_tag, ">", 3835 + "<a href=\"", full_url, "\"", format_attrs(opt), name_tag, ">",
4170 text, 3836 text,
4171 "</a>" 3837 "</a>"
4172 ], 3838 ],
@@ -4192,10 +3858,10 @@ define Printable_tree @@ -4192,10 +3858,10 @@ define Printable_tree
4192 // [ ], 3858 // [ ],
4193 immediate_selector(opt,name,size,choices,selected,function) then 3859 immediate_selector(opt,name,size,choices,selected,function) then
4194 [ ], 3860 [ ],
4195 - html(options, html_off_form) then 3861 + html(options, html) then
4196 [ 3862 [
4197 "<a href=\"", full_url,"\"", format_attrs(options), ">", 3863 "<a href=\"", full_url,"\"", format_attrs(options), ">",
4198 - format(cinfo, ic_v, html_off_form, is_https, action_count, head_tags), 3864 + format(cinfo, ic_v, html, is_https, action_count, head_tags),
4199 "</a>" 3865 "</a>"
4200 ] 3866 ]
4201 }. 3867 }.
@@ -4234,10 +3900,10 @@ define Printable_tree @@ -4234,10 +3900,10 @@ define Printable_tree
4234 url(_) then "" 3900 url(_) then ""
4235 }, 3901 },
4236 if action_name = "" then 3902 if action_name = "" then
4237 - ["<a ", format_text_options(opt), name_tag, ">", text, "</a>" ] 3903 + ["<a ", format_attrs(opt), name_tag, ">", text, "</a>" ]
4238 else 3904 else
4239 ["<a href=\"",url,"\"", 3905 ["<a href=\"",url,"\"",
4240 - format_text_options(opt), name_tag, ">", 3906 + format_attrs(opt), name_tag, ">",
4241 text, 3907 text,
4242 "</a>" 3908 "</a>"
4243 ], 3909 ],
@@ -4329,15 +3995,6 @@ define Printable_tree @@ -4329,15 +3995,6 @@ define Printable_tree
4329 } 3995 }
4330 ], 3996 ],
4331 3997
4332 -// immediate_selector(options,name,size,choices) then  
4333 -// [ if action is  
4334 -// {  
4335 -// url(u) then ["<select href=\"",u]  
4336 -// javascript(s,h) then [s,"<select onchange=\"",h]  
4337 -// },  
4338 -// "\" name=\"",name,"\" size=\"",size,"\"", format_attrs(options), ">",  
4339 -// format_choices(choices),"</select>"  
4340 -// ],  
4341 immediate_selector(options, name, size, choices, mb_selected, custom_function_name) then 3998 immediate_selector(options, name, size, choices, mb_selected, custom_function_name) then
4342 [ 3999 [
4343 //if custom function name is provided, that name is used instead of autogenerated js function 4000 //if custom function name is provided, that name is used instead of autogenerated js function
@@ -4353,10 +4010,10 @@ define Printable_tree @@ -4353,10 +4010,10 @@ define Printable_tree
4353 "\" name=\"",name,"\" size=\"",size,"\"", format_attrs(options), ">", 4010 "\" name=\"",name,"\" size=\"",size,"\"", format_attrs(options), ">",
4354 if mb_selected is success(selected) then format_choices(choices, selected) else format_choices(choices),"</select>" 4011 if mb_selected is success(selected) then format_choices(choices, selected) else format_choices(choices),"</select>"
4355 ], 4012 ],
4356 - html(options, html_off_form) then 4013 + html(options, html) then
4357 [ 4014 [
4358 "<a href=\"", url,"\"", format_attrs(options), ">", 4015 "<a href=\"", url,"\"", format_attrs(options), ">",
4359 - format(cinfo, ic_v, html_off_form, is_https, action_count, head_tags), 4016 + format(cinfo, ic_v, html, is_https, action_count, head_tags),
4360 "</a>" 4017 "</a>"
4361 ] 4018 ]
4362 }. 4019 }.
@@ -4401,283 +4058,14 @@ define Printable_tree @@ -4401,283 +4058,14 @@ define Printable_tree
4401 4058
4402 *** [5.6] Formating rows and cells in a table. 4059 *** [5.6] Formating rows and cells in a table.
4403 4060
4404 -define Int  
4405 - percent  
4406 - (  
4407 - Int p  
4408 - ) =  
4409 - if p < 0 then 0 else if p > 100 then 100 else p.  
4410 -  
4411 -  
4412 -  
4413 -  
4414 - Formating cell options.  
4415 -  
4416 -  
4417 -  
4418 -define String  
4419 - format  
4420 - (  
4421 - BackgroundOption o  
4422 - ) =  
4423 - if o is  
4424 - {  
4425 - repeat then "",  
4426 - repeat_horizontal then "; background-repeat: repeat-x",  
4427 - repeat_vertical then "; background-repeat: repeat-y",  
4428 - no_repeat then "; background-repeat: no-repeat",  
4429 - center then "; background-position: center top"  
4430 - }.  
4431 -  
4432 -define String  
4433 - format  
4434 - (  
4435 - List(BackgroundOption) l  
4436 - ) =  
4437 - if l is  
4438 - {  
4439 - [ ] then "",  
4440 - [h . t] then format(h)+format(t)  
4441 - }.  
4442 -  
4443 -  
4444 -define String  
4445 - format  
4446 - (  
4447 - List(Cell_Option) options  
4448 - ) =  
4449 - if options is  
4450 - {  
4451 - [ ] then "",  
4452 - [h . t] then  
4453 - if h is  
4454 - {  
4455 - core_attrs(core_attr_list) then format_attrs(core_attr_list),  
4456 - left then " align=\"left\"",  
4457 - h_center then " align=\"center\"",  
4458 - right then " align=\"right\"",  
4459 - top then " valign=\"top\"",  
4460 - v_center then " valign=\"middle\"",  
4461 - bottom then " valign=\"bottom\"",  
4462 - base_line then " valign=\"baseline\"",  
4463 - background_color(c) then " bgcolor=\""+html_format(c)+"\"",  
4464 - background_image(n,o) then " style=\"background: url("+n+")"+format(o)+"\"",  
4465 - width(w) then " width=\""+w+"\"",  
4466 - percentage_width(n) then " width=\""+percent(n)+"%\"",  
4467 - height(h2) then " height=\""+h2+"\"",  
4468 - columns(n) then " colspan=\""+n+"\"",  
4469 - rows(n) then " rowspan=\""+n+"\"",  
4470 - nowrap then " nowrap",  
4471 - style(style_string) then " style=\"" + style_string + "\"",  
4472 - class(class_name) then " class=\""+class_name+"\""  
4473 - }  
4474 - + format(t)  
4475 - }.  
4476 -  
4477 -  
4478 - Normalizing a list of cell options (horizontal position must be specified; the default  
4479 - is 'left').  
4480 -  
4481 - Formating cells in a row.  
4482 -  
4483 -define Printable_tree  
4484 - format  
4485 - (  
4486 - List(HTML_Cell($T)) cells,  
4487 - $T -> Printable_tree format_element  
4488 - ) =  
4489 - if cells is  
4490 - {  
4491 - [ ] then [ ],  
4492 - [h . t] then if h is cell(options,element) then  
4493 - ["<td",format(reverse(options)),">",  
4494 - format_element(element),  
4495 - "</td>"  
4496 - . format(t,format_element)]  
4497 - }.  
4498 -  
4499 -define Printable_tree  
4500 - format  
4501 - (  
4502 - List(HTML_Header_Cell($T)) cells,  
4503 - $T -> Printable_tree format_element  
4504 - ) =  
4505 - if cells is  
4506 - {  
4507 - [ ] then [ ],  
4508 - [h . t] then if h is header_cell(options,element) then  
4509 - ["<th ",format(reverse(options)),">",  
4510 - format_element(element),  
4511 - "</th>"  
4512 - . format(t,format_element)]  
4513 - }.  
4514 -  
4515 - Formating the rows in a table.  
4516 -  
4517 -define Printable_tree  
4518 - format  
4519 - (  
4520 - List(HTML_Row($T)) rows,  
4521 - $T -> Printable_tree format_element,  
4522 - )=  
4523 - if rows is  
4524 - {  
4525 - [ ] then [ ],  
4526 - [h . t] then  
4527 - if h is  
4528 - {  
4529 - empty then format(t, format_element),  
4530 - row(options, cells) then  
4531 - ["<tr",format(reverse(options)),">", format(cells, format_element), "</tr>\n"  
4532 - . format(t, format_element)]  
4533 - }  
4534 - }  
4535 -.  
4536 -  
4537 -define Printable_tree  
4538 - format  
4539 - (  
4540 - HTML_Header_Row($T) row,  
4541 - $T -> Printable_tree format_element  
4542 - ) =  
4543 - if row is  
4544 - {  
4545 - empty then [ ],  
4546 - header_row(options,cells) then  
4547 - ["<thead> <tr",format(reverse(options)),">",  
4548 - format(cells,format_element),  
4549 - "</tr> </thead>\n"  
4550 - ]  
4551 - }.  
4552 -  
4553 -define Printable_tree  
4554 - format  
4555 - (  
4556 - HTML_Footer_Row($T) row,  
4557 - $T -> Printable_tree format_element  
4558 - ) =  
4559 - if row is  
4560 - {  
4561 - empty then [ ],  
4562 - footer_row(options,cells) then  
4563 - ["<tfoot> <tr",format(reverse(options)),">",  
4564 - format(cells,format_element),  
4565 - "</tr> </tfoot>\n"  
4566 - ]  
4567 - }.  
4568 -  
4569 -define Printable_tree  
4570 - format1  
4571 - (  
4572 - List(TextAreaOption) l  
4573 - ) =  
4574 - if l is  
4575 - {  
4576 - [] then [],  
4577 - [h . t] then if h is  
4578 - {  
4579 - input_attrs(input_attr_list) then [format_attrs(input_attr_list) . format1(t)],  
4580 - disabled then [" disabled=\"disabled\" " . format1(t)]  
4581 - read_only then [" readonly=\"readonly\" " . format1(t)]  
4582 - wrap_lines then [" wrap=\"wrap\" " . format1(t)]  
4583 - }  
4584 - }.  
4585 -  
4586 -define Printable_tree  
4587 - format  
4588 - (  
4589 - List(TextAreaOption) l  
4590 - )=  
4591 - if member(l, wrap_lines) then  
4592 - format1(l)  
4593 - else  
4594 - [" wrap=\"off\" " . format1(l)]  
4595 -.  
4596 -  
4597 -  
4598 - *** [5.7] Formating elements which may be put anywhere.  
4599 -  
4600 - The function below involves the parameter $T which is later instantiated as  
4601 - 'HTML_In_Form' or as 'HTML_Off_Form'. Now, since there are dictinct 'format' functions  
4602 - for these two types, and because formating of tables requires recursive calls of such  
4603 - functions, it is necessary to provide the 'format' function to be called recursively as  
4604 - an argument. Putting naively a call to 'format' will not work, because the compiler  
4605 - will look for a function able to format data of type $T (which is at that time distinct  
4606 - from any other type, including our two types). Such a function does not exist. Hence  
4607 - the function to be called for formating elements must be passed as a functional  
4608 - argument (called 'format_element' below). Actually, what we pass is a function taking  
4609 - a unique argument of type $T. Other informations (like the name of the state) are  
4610 - already in the function by way of full functionality.  
4611 -  
4612 -  
4613 - Formating text options. They are formated in CSS syntax, to be used within a  
4614 - 'style=...'.  
4615 -  
4616 -define String  
4617 - format  
4618 - (  
4619 - List(Text_Option) l  
4620 - ) =  
4621 - if l is  
4622 - {  
4623 - [ ] then "",  
4624 - [h . t] then if h is  
4625 - {  
4626 - core_attrs(core_attr_list) then format_attrs(core_attr_list),  
4627 - size(n) then "font-size:"+n+"pt",  
4628 - font(fn) then "font-family:"+fn,  
4629 - color(c) then if c is rgb(r,g,b) then  
4630 - "color:rgb("+to_decimal(r)+","+to_decimal(g)+","+to_decimal(b)+")",  
4631 - italic then "font-style:italic",  
4632 - oblique then "font-style:oblique",  
4633 - small_capitals then "font-variant:small-caps",  
4634 - bold then "font-weight:bold",  
4635 - underlined then "text-decoration:underline",  
4636 - left_justified then "text-align:left",  
4637 - right_justified then "text-align:right",  
4638 - justified then "text-align:justify",  
4639 - line_through then "text-decoration:line-through",  
4640 - nowrap then "white-space:nowrap",  
4641 - class(class_name)then " class=\"" + class_name +"\"",  
4642 - id(id_name) then " id=\"" + id_name +"\"",  
4643 - style(style_string) then " style=\"" + style_string + "\"",  
4644 - title(s) then " title=\"" + s +"\""  
4645 - attr(n,v) then " " + n + "=\"" + v +"\""  
4646 - } + if t is [ ] then "" else ("; "+format(t))  
4647 - }.  
4648 -  
4649 -  
4650 -  
4651 - Formating table options.  
4652 -  
4653 -define String  
4654 - format  
4655 - (  
4656 - List(Table_Option) l,  
4657 - Bool border_seen  
4658 - ) =  
4659 - if l is  
4660 - {  
4661 - [ ] then if border_seen then "" else " border=\"0\" cellspacing=\"0\" cellpadding=\"0\"",  
4662 - [h . t] then if h is  
4663 - {  
4664 - core_attrs(core_attr_list) then format_attrs(core_attr_list),  
4665 - background_color(c) then " bgcolor=\""+html_format(c)+"\""+format(t,border_seen),  
4666 - background_image(url) then " background="+url+format(t,border_seen),  
4667 - border(o,top,i,c) then " border=\""+o+"\" cellspacing=\""+top+"\" cellpadding=\""+i+"\""+  
4668 - //" bordercolor="+format(c)+  
4669 - format(t,true),  
4670 - width(w) then " width=\""+w+"\""+format(t,border_seen),  
4671 - percentage_width(p) then " width=\""+percent(p)+"%\""+format(t,border_seen),  
4672 - attr(name, value) then " " + name + "=\"" + value + "\"" +format(t,border_seen),  
4673 - class(name) then " class=\""+name+"\""  
4674 - }  
4675 - }.  
4676 -  
4677 -  
4678 -  
4679 - 4061 +//define Int
  4062 +// percent
  4063 +// (
  4064 +// Int p
  4065 +// ) =
  4066 +// if p < 0 then 0 else if p > 100 then 100 else p.
4680 4067
  4068 +
4681 define Printable_tree 4069 define Printable_tree
4682 format_scroller 4070 format_scroller
4683 ( 4071 (
@@ -4766,7 +4154,7 @@ define Printable_tree @@ -4766,7 +4154,7 @@ define Printable_tree
4766 }. 4154 }.
4767 4155
4768 4156
4769 -define Printable_tree 4157 + define Printable_tree
4770 add_css_styles 4158 add_css_styles
4771 ( 4159 (
4772 List(CSS_Style) css_styles 4160 List(CSS_Style) css_styles
@@ -4784,7 +4172,7 @@ define Printable_tree @@ -4784,7 +4172,7 @@ define Printable_tree
4784 4172
4785 // The function below formats a datum of type 'HTML_Any($T)'. 4173 // The function below formats a datum of type 'HTML_Any($T)'.
4786 4174
4787 -define Printable_tree 4175 + define Printable_tree
4788 format 4176 format
4789 ( 4177 (
4790 CommonInfo cinfo, 4178 CommonInfo cinfo,
@@ -4798,55 +4186,14 @@ define Printable_tree @@ -4798,55 +4186,14 @@ define Printable_tree
4798 if cinfo is info(common_name,http_port,https_port,site_directory,secret) then 4186 if cinfo is info(common_name,http_port,https_port,site_directory,secret) then
4799 if element is 4187 if element is
4800 { 4188 {
4801 - any_text(opts , t) then  
4802 - if opts is  
4803 - {  
4804 - [] then [t],  
4805 - [_ . _] then ["<span", format_attrs(opts), ">",t,"</span>"]  
4806 - },  
4807 - any_preformated(opts,s) then  
4808 - ["<span", format_text_options(opts), "><pre>",s,"</pre></span>"],  
4809 - //["<pre>",s,"</pre>"],  
4810 - any_paragraph(opts,l) then  
4811 - ["<p", format_text_options(opts), ">", flat(map(($T e) |-> format_element(e), l)),"</p>\n"],  
4812 - any_image(opts, url, _alt) then  
4813 - with alt = if _alt = "" then "" else "alt=\""+_alt+"\"",  
4814 - ["<img ",alt," src=\"",url,"\" ", format_attrs(opts)," />"],  
4815 - any_image(opts, url, alt, w, h) then  
4816 - ["<img alt=\"",alt,"\" src=\"",url,"\" width=\"",w,"\" height=\"",h,"\" ", format_attrs(opts)," />"],  
4817 - any_table(opts,h_row, rows, f_row) then  
4818 - ["<table",format(reverse(opts),false),">",  
4819 - format(h_row, format_element),  
4820 - "<tbody>",format(rows,format_element),"</tbody>",  
4821 - format(f_row, format_element),  
4822 - "</table>\n"],  
4823 - any_center(e) then  
4824 - ["<center>",format_element(e),"</center>"],  
4825 - any_mail_to(email,elem) then  
4826 - ["<a href=\"mailto:",email,"\">",format_element(elem),"</a>"],  
4827 - any_scroller(w,h,cw,ch,c) then  
4828 - format_scroller(w,h,cw,ch,new_idnum(ic_v),c,format_element),  
4829 - any_fixed_size(w,h,c) then  
4830 - with url = create_secondary_document(site_directory,secret,format_element,c,w),  
4831 - ["<object data=\"",url,"\" type=\"text/html\" width=\"",format(w),"\" height=\"",format(h),"\" >",  
4832 - "secondary document",  
4833 - "</object>"],  
4834 - any_fixed_size_2(w,h,fn) then  
4835 - with url = fn+"?zauth="+make_authorization(site_directory,secret,  
4836 - fn),  
4837 - ["<object data=\"",url,"\" type=\"text/html\" width=\"",format(w),"\" height=\"",format(h),"\" >",  
4838 - "secondary document",  
4839 - "</object>"],  
4840 - any_actioner(c,t,a,an,eo,ja,fn) then  
4841 - format_actioner(cinfo,c,t,a,an,eo,ja,fn,is_https, action_count, ic_v, head_tags),  
4842 4189
4843 any_foreign_link_new(target, aspect, url) then 4190 any_foreign_link_new(target, aspect, url) then
4844 format_foreign_link(target, aspect, url, is_https, cinfo, action_count, ic_v, head_tags), 4191 format_foreign_link(target, aspect, url, is_https, cinfo, action_count, ic_v, head_tags),
4845 4192
4846 any_foreign_link(options,url) then 4193 any_foreign_link(options,url) then
4847 - ["<a href=\"",url,"\" ", format_text_options(options), "></a>"], // IE7 doesn't support the form <a href="..." /> 4194 + ["<a href=\"",url,"\" ", format_attrs(options), "></a>"], // IE7 doesn't support the form <a href="..." />
4848 any_foreign_link(options,url,name) then 4195 any_foreign_link(options,url,name) then
4849 - ["<a href=\"",url,"\"><span ", format_text_options(options), ">",name,"</span></a>"], 4196 + ["<a href=\"",url,"\"><span ", format_attrs(options), ">",name,"</span></a>"],
4850 any_private_download(url,name,extra_ext,action) then 4197 any_private_download(url,name,extra_ext,action) then
4851 format_private_download(cinfo,url,name,extra_ext,action), 4198 format_private_download(cinfo,url,name,extra_ext,action),
4852 any_div(options, l) then 4199 any_div(options, l) then
@@ -4879,22 +4226,6 @@ define Printable_tree @@ -4879,22 +4226,6 @@ define Printable_tree
4879 4226
4880 // *** [5.8] Formating 'in form' elements. 4227 // *** [5.8] Formating 'in form' elements.
4881 4228
4882 -  
4883 -//public define Printable_tree  
4884 -// format  
4885 -// (  
4886 -// HTML_tooltip tooltip  
4887 -// )=  
4888 -// if tooltip is  
4889 -// {  
4890 -// html_tooltip(title, keyword, width) then  
4891 -// ["<a id=\"help_",keyword,"\" class=\"jTipu jTip_help\" name=\"",title,"\" href=\"/?a=ajax_show_tooltip&amp;tooltip_id=",keyword,(if width > 0 then ["&width=",width,"\""] else ["\""]), "></a>"],  
4892 -//  
4893 -// html_tooltip_ext(title, extend_type, class_suffix, ext_args) then  
4894 -// with extra_args = format_extra_operands(ext_args),  
4895 -// ["<a id=\"jTip\" class=\"jTipu jTip_",class_suffix,"\" name=\"",title,"\" href=\"/?a=ajax_show_tooltip&amp;tooltip_ext=",extend_type+extra_args,"\"></a>"]  
4896 -// }.  
4897 -  
4898 public define List(CoreAttrs) 4229 public define List(CoreAttrs)
4899 extract_attributes 4230 extract_attributes
4900 ( 4231 (
@@ -4904,26 +4235,18 @@ public define List(CoreAttrs) @@ -4904,26 +4235,18 @@ public define List(CoreAttrs)
4904 { 4235 {
4905 html_tooltip(title, keyword, width) then //TODO 4236 html_tooltip(title, keyword, width) then //TODO
4906 [] 4237 []
4907 - //["<a id=\"help_",keyword,"\" class=\"jTipu \" name=\"",title,"\" href=\"/?a=ajax_show_tooltip&tooltip_id=",keyword,(if width > 0 then ["&width=",width,"\""] else ["\""]), "><i class=\"fa fa-info\" aria-hidden=\"true\" style=\"color:#2e6da4\"></i></a>"],  
4908 - 4238 +
4909 html_tooltip_ext(title, extend_type, class_suffix, ext_args) then //TODO 4239 html_tooltip_ext(title, extend_type, class_suffix, ext_args) then //TODO
4910 - //[] 4240 +
4911 with extra_args = format_extra_operands(ext_args), 4241 with extra_args = format_extra_operands(ext_args),
4912 [id("jTip"), class("jTipu jTip_"+class_suffix), data("name",title), data("href", "/?a=ajax_show_tooltip&tooltip_ext="+extend_type+extra_args)] 4242 [id("jTip"), class("jTipu jTip_"+class_suffix), data("name",title), data("href", "/?a=ajax_show_tooltip&tooltip_ext="+extend_type+extra_args)]
4913 4243
4914 html_tooltip_ext(title, extend_type, ext_args) then //TODO 4244 html_tooltip_ext(title, extend_type, ext_args) then //TODO
4915 with extra_args = format_extra_operands(ext_args), 4245 with extra_args = format_extra_operands(ext_args),
4916 [id("jTip"), class("jTipu"), data("name",title), data("href", "/?a=ajax_show_tooltip&tooltip_ext="+extend_type+extra_args)] 4246 [id("jTip"), class("jTipu"), data("name",title), data("href", "/?a=ajax_show_tooltip&tooltip_ext="+extend_type+extra_args)]
4917 -// []  
4918 - //with extra_args = format_extra_operands(ext_args),  
4919 - //["<a id=\"jTip\" class=\"jTipu \" name=\"",title,"\" href=\"/?a=ajax_show_tooltip&tooltip_ext=",extend_type+extra_args,"\"><i class=\"fa fa-info\" aria-hidden=\"true\" style=\"color:#2e6da4\"></i></a>"],  
4920 4247
4921 html_tooltip(title, web_action, extra_args) then 4248 html_tooltip(title, web_action, extra_args) then
4922 - [ id("jTip"), class("jTipu"), data("name", title), data("href", "/"+format_web_action_name(web_action, extra_args))  
4923 - ]  
4924 -  
4925 - //["<a id=\"jTip\" class=\"jTipu \" name=\"",title,"\" href=\"/", format_web_action_name(web_action, extra_args) ,"\"><i class=\"fa fa-info\" aria-hidden=\"true\" style=\"color:#2e6da4\"></i></a>"],  
4926 - 4249 + [ id("jTip"), class("jTipu"), data("name", title), data("href", "/"+format_web_action_name(web_action, extra_args))]
4927 } 4250 }
4928 . 4251 .
4929 4252
@@ -4952,31 +4275,45 @@ public define Printable_tree @@ -4952,31 +4275,45 @@ public define Printable_tree
4952 4275
4953 } 4276 }
4954 . 4277 .
4955 -  
4956 -public define HTML_Off_Form 4278 +
  4279 +public define HTML
  4280 + format
  4281 + (
  4282 + HTML_tooltip tooltip
  4283 + )=
  4284 + if tooltip is
  4285 + {
  4286 + html_tooltip(title, keyword, width) then
  4287 + a([id("help_"+keyword), class("jTipu"), data("name", title), data("href", "/?a=ajax_show_tooltip&tooltip_id="+keyword+(if width > 0 then "&width="+width+"\"" else "\""))],
  4288 + i([class("fa fa-info"), aria("hidden","true"), style("color:#2e6da4")])),
  4289 +
  4290 + html_tooltip_ext(title, extend_type, class_suffix, ext_args) then
  4291 + with extra_args = format_extra_operands(ext_args),
  4292 + a([id("jTip"), class("jTipu jTip_"+class_suffix), data("name", title), data("href", "/?a=ajax_show_tooltip&tooltip_ext="+extend_type+extra_args)])
  4293 +
  4294 + html_tooltip_ext(title, extend_type, ext_args) then
  4295 + with extra_args = format_extra_operands(ext_args),
  4296 + a([id("jTip"), class("jTipu"), data("name", title), data("href", "/?a=ajax_show_tooltip&tooltip_ext="+extend_type+extra_args)],
  4297 + i([class("fa fa-info"), aria("hidden","true"), style("color:#2e6da4")])),
  4298 +
  4299 + html_tooltip(title, web_action, extra_args) then
  4300 + a([id("jTip"), class("jTipu"), data("name", title), data("href", "/"+format_web_action_name(web_action, extra_args))],
  4301 + i([class("fa fa-info"), aria("hidden","true"), style("color:#2e6da4")])),
  4302 + }
  4303 +.
  4304 +
  4305 +public define HTML
4957 html_tooltip 4306 html_tooltip
4958 ( 4307 (
4959 String title, 4308 String title,
4960 WEB_Action_Name web_action, 4309 WEB_Action_Name web_action,
4961 List((String,String)) extra_args, 4310 List((String,String)) extra_args,
4962 - HTML_Off_Form html_element, 4311 + HTML html_element,
4963 )= 4312 )=
4964 - sequence([  
4965 - literal_pt(["<span id=\"jTip\" class=\"jTipu\" data-name=\"",title,"\" data-href=\"/", format_web_action_name(web_action, extra_args) ,"\">"]),  
4966 - html_element,  
4967 - literal_pt(["</span>"])  
4968 - ]) 4313 + span([id("jTip"), class("jTipu"), data("name", title), data("href", "/"+format_web_action_name(web_action, extra_args))], html_element)
4969 . 4314 .
4970 4315
4971 -public define HTML_Off_Form  
4972 - html_tooltip  
4973 - (  
4974 - String title,  
4975 - String keyword,  
4976 - ) =  
4977 - literal_pt(format(html_tooltip(title, keyword, 0))).  
4978 -  
4979 -public define HTML_In_Form 4316 +public define HTML
4980 html_tooltip 4317 html_tooltip
4981 ( 4318 (
4982 String title, 4319 String title,
@@ -4984,7 +4321,7 @@ public define HTML_In_Form @@ -4984,7 +4321,7 @@ public define HTML_In_Form
4984 ) = 4321 ) =
4985 literal_pt(format(html_tooltip(title, keyword, 0))). 4322 literal_pt(format(html_tooltip(title, keyword, 0))).
4986 4323
4987 -public define HTML_Off_Form 4324 +public define HTML
4988 html_tooltip 4325 html_tooltip
4989 ( 4326 (
4990 String keyword, 4327 String keyword,
@@ -4992,13 +4329,6 @@ public define HTML_Off_Form @@ -4992,13 +4329,6 @@ public define HTML_Off_Form
4992 ) = 4329 ) =
4993 literal_pt(format(html_tooltip("", keyword, size))). 4330 literal_pt(format(html_tooltip("", keyword, size))).
4994 4331
4995 -public define HTML_In_Form  
4996 - html_tooltip  
4997 - (  
4998 - String keyword,  
4999 - Int size,  
5000 - ) =  
5001 - literal_pt(format(html_tooltip("", keyword, size))).  
5002 4332
5003 public define Printable_tree 4333 public define Printable_tree
5004 format_help 4334 format_help
@@ -5008,8 +4338,8 @@ public define Printable_tree @@ -5008,8 +4338,8 @@ public define Printable_tree
5008 ) = 4338 ) =
5009 if _help is 4339 if _help is
5010 { 4340 {
5011 - no_help then label,  
5012 - tooltip(html_tooltip, position) then 4341 + no_help then label,
  4342 + tooltip(html_tooltip, position) then
5013 if position is 4343 if position is
5014 { 4344 {
5015 left then pt_pt(format(html_tooltip),label), 4345 left then pt_pt(format(html_tooltip),label),
@@ -5035,7 +4365,7 @@ public define Printable_tree @@ -5035,7 +4365,7 @@ public define Printable_tree
5035 ) = 4365 ) =
5036 if _label is 4366 if _label is
5037 { 4367 {
5038 - no_label then [], 4368 + no_label then [],
5039 label(text, help) then 4369 label(text, help) then
5040 format_help( 4370 format_help(
5041 ["<label"+(if _id.id ="" then "" else " for=\""+_id.id+"\"")+">",text,"</label>"], 4371 ["<label"+(if _id.id ="" then "" else " for=\""+_id.id+"\"")+">",text,"</label>"],
@@ -5043,234 +4373,27 @@ public define Printable_tree @@ -5043,234 +4373,27 @@ public define Printable_tree
5043 ) 4373 )
5044 }. 4374 }.
5045 4375
5046 -  
5047 -define Printable_tree  
5048 - format 4376 +public define HTML
  4377 + format_label
5049 ( 4378 (
5050 - CommonInfo cinfo,  
5051 - String fn, // form_name  
5052 - Var(Int) ic_v, // idnum counter variable  
5053 - HTML_In_Form element,  
5054 - Bool is_https,  
5055 - Var(Int) action_count,  
5056 - Var(List(HTML_Head_Tag)) head_tags 4379 + HTML_Label _label,
  4380 + HTML_Id _id
5057 ) = 4381 ) =
5058 - if cinfo is info(common_name,http_port,https_port,site_directory,secret) then  
5059 - with format_element = (HTML_In_Form e) |-> format(cinfo, fn, ic_v, e, is_https, action_count, head_tags),  
5060 - if element is  
5061 - {  
5062 - empty then [],  
5063 - literal_pt(t) then t,  
5064 - literal(t) then [t],  
5065 - sequence(l) then flat(map(format_element,l))  
5066 - text(opts,t) then  
5067 - format(cinfo,ic_v,any_text(opts,t),format_element,is_https, action_count, head_tags),  
5068 - preformated(o,s) then  
5069 - format(cinfo,ic_v,any_preformated(o,s),format_element,is_https, action_count, head_tags),  
5070 - paragraph(opts,t) then  
5071 - format(cinfo,ic_v,any_paragraph(opts,t),format_element,is_https, action_count, head_tags),  
5072 - image(opts, url, alt) then  
5073 - format(cinfo,ic_v,any_image(opts, url, alt),format_element,is_https, action_count, head_tags),  
5074 - image(opts, url, alt, w, h) then  
5075 - format(cinfo,ic_v,any_image(opts, url, alt, w, h),format_element,is_https, action_count, head_tags),  
5076 - table(opts,header_row,rows,footer_row) then  
5077 - format(cinfo,ic_v,any_table(opts, header_row, rows, footer_row),format_element,is_https, action_count, head_tags),  
5078 - center(e) then  
5079 - format(cinfo,ic_v,any_center(e),format_element,is_https, action_count, head_tags),  
5080 - mail_to(a,e) then  
5081 - format(cinfo,ic_v,any_mail_to(a,e),format_element,is_https, action_count, head_tags),  
5082 - scroller(w,h,cw,ch,c) then  
5083 - format(cinfo,ic_v,any_scroller(w,h,cw,ch,c),format_element,is_https, action_count, head_tags),  
5084 - actioner(c,t,a,an,eo,ja) then  
5085 - format(cinfo,ic_v,any_actioner(c,t,a,an,eo,ja,success(fn)),format_element,is_https, action_count, head_tags),  
5086 -  
5087 - foreign_link_new(target, aspect, url) then  
5088 - format(cinfo,ic_v,any_foreign_link_new(target,aspect,url),format_element,is_https, action_count, head_tags),  
5089 -  
5090 - foreign_link(options,url) then  
5091 - format(cinfo,ic_v,any_foreign_link(options,url),format_element,is_https, action_count, head_tags),  
5092 - foreign_link(options,url,name) then  
5093 - format(cinfo,ic_v,any_foreign_link(options,url,name),format_element,is_https, action_count, head_tags),  
5094 - private_download(url,name,extra,action) then  
5095 - format(cinfo,ic_v,any_private_download(url,name,extra,action),format_element,is_https, action_count, head_tags),  
5096 - text_input(options, label_text, id, name, init, w) then  
5097 - [ format_label(label_text, id),  
5098 - "<input type=\"text\" name=\"",name,"\" id=\"",id,"\" size=\"",w,"\" value=\"",encode_HTML_entities(init.value),"\"",format_attrs([class("in") . options])," />"],  
5099 - text_input_ro(options, label_text, id, name, init, w) then  
5100 - [ format_label(label_text, id),  
5101 - "<input readonly=\"readonly\" type=\"text\" name=\"",name,"\" id=\"",id,"\" size=\"",w,"\" value=\"",encode_HTML_entities(init.value),"\"",format_attrs([class("in") . options])," />"],  
5102 - password_input(options, label_text, id, name, init, w) then  
5103 - [ format_label(label_text, id),  
5104 - "<input type=\"password\" name=\"",name,"\" id=\"",id,"\" size=\"",w,"\" value=\"",encode_HTML_entities(init.value),"\"",format_attrs([class("in") . options])," />"],  
5105 - text_area(options,label_text, id, n, init, w, h) then  
5106 - [ format_label(label_text, id), "<textarea ",format(options)," id=\"",id,"\" name=\"",n,"\" cols=\"",w,"\" rows=\"",h,"\">",encode_HTML_entities(init.value),"</textarea>"],  
5107 - file_upload(options, label, id, n, w) then  
5108 - [ format_label(label, id),  
5109 - "<input type=\"file\" id=\"",id,"\" size=\"",w,"\" name=\"",n,"\"",format_attrs([class("in") . options])," />"],  
5110 - selector(options, label, id, n,s,cs) then  
5111 - [ format_label(label, id),  
5112 - "<select id=\"",id,"\" name=\"",n,"\" size=\"",s,"\" ",format_attrs([class("in") . options]),">",format_choices(cs),"</select>"],  
5113 - selector(options, label, id, n,s,cs,sd) then  
5114 - [ format_label(label, id),  
5115 - "<select id=\"",id,"\" name=\"",n,"\" size=\"",s,"\" ",format_attrs([class("in") . options]),">",format_choices(cs,sd),"</select>"],  
5116 - selector_c(options, label, id, n,s,cs) then  
5117 - [ format_label(label, id),  
5118 - "<select id=\"",id,"\" name=\"",n,"\" size=\"",s,"\" ",format_attrs([class("in") . options]),">",format_choices(cs),"</select>"],  
5119 - selector_c(options, label, id, n,s,cs,sd) then  
5120 - [ format_label(label, id),  
5121 - "<select id=\"",id,"\" name=\"",n,"\" size=\"",s,"\" ",format_attrs([class("in") . options]),">",format_choices(cs,sd),"</select>"],  
5122 -  
5123 - radio_button(options, label, id, n, value, c) then  
5124 - [ format_label(label, id),  
5125 - "<input type=\"radio\" name=\"",n,"\" id=\"",id,"\" value=\"",value,"\"",(if c then " checked=\"checked\"" else ""),format_attrs([class("in") . options])," />"],  
5126 - radio_button_r(options, label, id, n, value, c) then  
5127 - [ "<input type=\"radio\" name=\"",n,"\" id=\"",id,"\" value=\"",value,"\"",(if c then " checked=\"checked\"" else ""),format_attrs([class("in") . options])," />",  
5128 - format_label(label, id)],  
5129 - check_box(options, label, id, n, c) then  
5130 - [ format_label(label, id),  
5131 - "<input type=\"hidden\" name=\"~",n,"\" value=\"~true\" /><input type=\"checkbox\" name=\"",n,"\" id=\"",id,"\" value=\"true\"",(if c then " checked=\"checked\" " else ""),format_attrs([class("in") . options])," />"]  
5132 - check_box_r(options, label, id, n, c) then  
5133 - [ "<input type=\"hidden\" name=\"~",n,"\" value=\"~true\" /><input type=\"checkbox\" name=\"",n,"\" id=\"",id,"\" value=\"true\"",(if c then " checked=\"checked\" " else ""),format_attrs([class("in") . options])," />",  
5134 - format_label(label, id)]  
5135 - div(options, e) then  
5136 - format(cinfo,ic_v,any_div(options, e),format_element,is_https, action_count, head_tags),  
5137 - div_empty(options) then  
5138 - format(cinfo,ic_v,any_div_empty(options),format_element,is_https, action_count, head_tags),  
5139 - hidden(_id, name, init) then  
5140 - since _id is html_Id(id),  
5141 - ["<input type=\"hidden\"",(if id = "" then "" else " id=\""+id+"\"")," name=\"",name,"\" value=\"",encode_HTML_entities(init.value),"\" />"],  
5142 - partial(p_content) then  
5143 - if p_content is partial_content(tags, html_elements) then  
5144 - head_tags <- *head_tags + tags;  
5145 -  
5146 - format(cinfo, ic_v, html_elements, is_https, action_count, head_tags),  
5147 - br then ["<br>"],  
5148 - progress(options, value, max) then ["<progress max=\"",value,"\" value=\"",max,"\"",format_attrs(options),"></progress>"],  
5149 - ol(opts, t) then  
5150 - format(cinfo,ic_v,any_ol(opts,t),format_element,is_https, action_count, head_tags),  
5151 - ul(opts, t) then  
5152 - format(cinfo,ic_v,any_ul(opts,t),format_element,is_https, action_count, head_tags),  
5153 - li(opts, t) then  
5154 - format(cinfo,ic_v,any_li(opts,t),format_element,is_https, action_count, head_tags),  
5155 - button(options, e) then  
5156 - format(cinfo,ic_v,any_button(options, e),format_element,is_https, action_count, head_tags),  
5157 - i(opts, t) then  
5158 - format(cinfo,ic_v,any_i(opts,t),format_element,is_https, action_count, head_tags),  
5159 - span(opts,t) then  
5160 - format(cinfo,ic_v,any_span(opts,t),format_element,is_https, action_count, head_tags)  
5161 - hr(opts) then  
5162 - format(cinfo,ic_v,any_hr(opts),format_element,is_https, action_count, head_tags)  
5163 - }.  
5164 -  
5165 -  
5166 -  
5167 -  
5168 -  
5169 - 4382 + if _label is
  4383 + {
  4384 + no_label then empty,
  4385 + label(text, help) then
  4386 + literal_pt(
  4387 + format_help(
  4388 + ["<label"+(if _id.id ="" then "" else " for=\""+_id.id+"\"")+">",text,"</label>"],
  4389 + help
  4390 + ))
  4391 + }.
  4392 +
5170 *** [5.9] Formating 'off form' elements. 4393 *** [5.9] Formating 'off form' elements.
5171 4394
5172 The encryption type 'multipart/form-data' is required for a form containing an upload. 4395 The encryption type 'multipart/form-data' is required for a form containing an upload.
5173 4396
5174 -  
5175 -define Bool  
5176 - contains_an_upload  
5177 - (  
5178 - HTML_In_Form form_content  
5179 - ).  
5180 -  
5181 -define Bool  
5182 - contains_an_upload  
5183 - (  
5184 - HTML_Row(HTML_In_Form) row  
5185 - ) =  
5186 - if row is  
5187 - {  
5188 - empty then false,  
5189 - row(_, cells) then  
5190 - mapor(contains_an_upload,  
5191 - map(content, cells))  
5192 - }  
5193 -.  
5194 -  
5195 -define Bool  
5196 - contains_an_upload  
5197 - (  
5198 - HTML_Footer_Row(HTML_In_Form) row  
5199 - )=  
5200 - if row is  
5201 - {  
5202 - empty then false,  
5203 - footer_row(_, cells) then  
5204 - mapor(contains_an_upload,  
5205 - map(content,cells))  
5206 - }.  
5207 -  
5208 -define Bool  
5209 - contains_an_upload  
5210 - (  
5211 - HTML_In_Form form_content  
5212 - ) =  
5213 - if form_content is  
5214 - {  
5215 - empty then false,  
5216 - literal_pt(t) then false,  
5217 - literal(t) then false,  
5218 - sequence(l) then mapor(contains_an_upload,l),  
5219 - text(o,t) then false,  
5220 - preformated(o,s) then false,  
5221 - paragraph(o,l) then mapor(contains_an_upload,l),  
5222 - image(o,u,a) then false,  
5223 - image(o,u,a,w,h) then false,  
5224 - table(o,_,rows,f_row) then if mapor(contains_an_upload,rows) then true  
5225 - else contains_an_upload(f_row),  
5226 - center(e) then contains_an_upload(e),  
5227 - mail_to(m,e) then false, // 'e' may but should not contain an upload  
5228 - scroller(w,h,cw,ch,e) then contains_an_upload(e),  
5229 - actioner(c,t,a,an,eo,ja) then false,  
5230 - foreign_link_new(_,_,_) then false,  
5231 - foreign_link(o,u) then false,  
5232 - foreign_link(o,u,n) then false,  
5233 - private_download(p,n,e,a) then false,  
5234 - text_input(o,lt,l,n,i,w) then false,  
5235 - text_input_ro(o,lt,l,n,i,w) then false,  
5236 - password_input(o,lt,l,n,i,w) then false,  
5237 - text_area(o,lt,id,n,i,w,h) then false,  
5238 - file_upload(o,l,i,n,w) then true,  
5239 - selector(o,l,i,n,s,c) then false,  
5240 - selector(o,l,i,n,s,c,p) then false,  
5241 - selector_c(o,l,i,n,s,c) then false,  
5242 - selector_c(o,l,i,n,s,c,p) then false,  
5243 - radio_button(o,_,_,n,v,c) then false,  
5244 - radio_button_r(o,_,_,n,v,c) then false,  
5245 - check_box(o,_,_,n,c) then false,  
5246 - check_box_r(o,_,_,n,c) then false,  
5247 - div(o,l) then mapor(contains_an_upload,l), //contains_an_upload(c),  
5248 - div_empty(o) then false,  
5249 - hidden(_,_,_) then false,  
5250 - partial(_) then false,  
5251 - br then false,  
5252 - progress(_,_,_) then false,  
5253 - ol(_,l) then mapor(contains_an_upload,l),  
5254 - ul(_,l) then mapor(contains_an_upload,l),  
5255 - li(_,l) then mapor(contains_an_upload,l),  
5256 - button(_,_) then false,  
5257 - i(_,_) then false,  
5258 - span(_,_) then false,  
5259 - hr(_) then false  
5260 - }  
5261 -.  
5262 -  
5263 -define String  
5264 - enctype  
5265 - (  
5266 - List(HTML_In_Form) form_contents  
5267 - )=  
5268 - if mapor(contains_an_upload, form_contents) then  
5269 - " enctype=\"multipart/form-data\""  
5270 - else  
5271 - ""  
5272 -.  
5273 -  
5274 define Printable_tree 4397 define Printable_tree
5275 format_href 4398 format_href
5276 ( 4399 (
@@ -5305,7 +4428,7 @@ define Printable_tree @@ -5305,7 +4428,7 @@ define Printable_tree
5305 ( 4428 (
5306 CommonInfo cinfo, 4429 CommonInfo cinfo,
5307 Var(Int) ic_v, // 'idnum' counter variable 4430 Var(Int) ic_v, // 'idnum' counter variable
5308 - List(HTML_Off_Form) elements, 4431 + List(HTML) elements,
5309 Bool is_https, 4432 Bool is_https,
5310 Var(Int) action_count, 4433 Var(Int) action_count,
5311 Var(List(HTML_Head_Tag)) head_tags 4434 Var(List(HTML_Head_Tag)) head_tags
@@ -5316,13 +4439,13 @@ define Printable_tree @@ -5316,13 +4439,13 @@ define Printable_tree
5316 ( 4439 (
5317 CommonInfo cinfo, 4440 CommonInfo cinfo,
5318 Var(Int) ic_v, // 'idnum' counter variable 4441 Var(Int) ic_v, // 'idnum' counter variable
5319 - HTML_Off_Form element, 4442 + HTML element,
5320 Bool is_https, 4443 Bool is_https,
5321 Var(Int) action_count, 4444 Var(Int) action_count,
5322 - Var(List(HTML_Head_Tag)) head_tags 4445 + Var(List(HTML_Head_Tag)) global_head_tags
5323 ) = 4446 ) =
5324 if cinfo is info(common_name,http_port,https_port,site_directory,secret) then 4447 if cinfo is info(common_name,http_port,https_port,site_directory,secret) then
5325 - with format_element = (HTML_Off_Form e) |-> format(cinfo, ic_v, e, is_https, action_count, head_tags), 4448 + with format_element = (HTML e) |-> format(cinfo, ic_v, e, is_https, action_count, global_head_tags),
5326 if element is 4449 if element is
5327 { 4450 {
5328 a(opts, _href, _target, l) then ["<a ", format_attrs(opts), format_href(_href), format_target(_target), ">",flat(map(format_element,l)),"</a>\n"], 4451 a(opts, _href, _target, l) then ["<a ", format_attrs(opts), format_href(_href), format_target(_target), ">",flat(map(format_element,l)),"</a>\n"],
@@ -5330,88 +4453,75 @@ define Printable_tree @@ -5330,88 +4453,75 @@ define Printable_tree
5330 literal_pt(t) then t, 4453 literal_pt(t) then t,
5331 literal(t) then [t], 4454 literal(t) then [t],
5332 sequence(l) then flat(map(format_element,l)), 4455 sequence(l) then flat(map(format_element,l)),
5333 - text(opts,t) then  
5334 - format(cinfo,ic_v,any_text(opts,t),format_element,is_https, action_count, head_tags),  
5335 - table(opts,header_row, rows, footer_row) then  
5336 - format(cinfo,ic_v,any_table(opts,header_row, rows, footer_row),format_element,is_https, action_count, head_tags), 4456 + text(opts,t) then
  4457 + if opts is
  4458 + {
  4459 + [] then [t],
  4460 + [_ . _] then ["<span", format_attrs(opts), ">",t,"</span>"]
  4461 + },
5337 actioner(c,t,a,an,eo,ja) then 4462 actioner(c,t,a,an,eo,ja) then
5338 - format(cinfo,ic_v,any_actioner(c,t,a,an,eo,ja,failure),format_element,is_https, action_count, head_tags), 4463 + //format(cinfo,ic_v,
  4464 + format_actioner(cinfo,c,t,a,an,eo,ja,failure,is_https, action_count, ic_v, global_head_tags),
  4465 + // is_https, action_count, head_tags),
  4466 +
5339 actioner(c,t,a,an,eo,ja,fn) then 4467 actioner(c,t,a,an,eo,ja,fn) then
5340 - format(cinfo,ic_v,any_actioner(c,t,a,an,eo,ja,success(fn)),format_element,is_https, action_count, head_tags),  
5341 - foreign_link_new(target, aspect, url) then  
5342 - format(cinfo,ic_v,any_foreign_link_new(target,aspect,url),format_element,is_https, action_count, head_tags),  
5343 - foreign_link(options,url) then  
5344 - format(cinfo,ic_v,any_foreign_link(options,url),format_element,is_https, action_count, head_tags),  
5345 - foreign_link(options,url,name) then  
5346 - format(cinfo,ic_v,any_foreign_link(options,url,name),format_element,is_https, action_count, head_tags),  
5347 - private_download(url,name,extra,action) then  
5348 - format(cinfo,ic_v,any_private_download(url,name,extra,action),format_element,is_https, action_count, head_tags),  
5349 - form(fn,attributs, l) then  
5350 - [  
5351 - "<form id=\"",fn,"\"",  
5352 - format(cinfo,ic_v,any_coreattrs(attributs),format_element,is_https, action_count, head_tags),  
5353 - " method=\"post\"",  
5354 - enctype(l),  
5355 - " action=\"http",  
5356 - if is_https then "s" else "",  
5357 - "://",common_name,":",to_decimal(http_port),"/\">",  
5358 - // action is set dynamically by  
5359 - // the actioner using JavaScript  
5360 - if fn is html_Id(id) then  
5361 - flat(map((HTML_In_Form e) |-> format(cinfo,id,ic_v,e,is_https, action_count, head_tags), l)),  
5362 - "</form>"  
5363 - ]  
5364 - form(fn,attributs, action, extra_ops, l) then  
5365 - with url = make_actioner_url(cinfo, same, same,  
5366 - action, extra_ops, is_https),  
5367 - [  
5368 - "<form id=\"",fn,"\"",  
5369 - format(cinfo,ic_v, any_coreattrs(attributs),format_element,is_https, action_count, head_tags),  
5370 - " method=\"post\"",  
5371 - enctype(l),  
5372 - " action=\"" + url + "\">",  
5373 -// " action=\"http",  
5374 -// if is_https then "s" else "",  
5375 -// "://",common_name,":",http_port,"/\">",  
5376 - // action is set dynamically by  
5377 - // the actioner using JavaScript  
5378 - if fn is html_Id(id) then  
5379 - flat(map((HTML_In_Form e) |-> format(cinfo,id,ic_v,e,is_https, action_count, head_tags),l)),  
5380 - "</form>"  
5381 - ],  
5382 - in_form(fn, content) then  
5383 - if fn is html_Id(id) then  
5384 - format(cinfo,id,ic_v, content,is_https, action_count, head_tags),  
5385 - div(options, p_content) then  
5386 - with html_elements = map((HTML_Partial_Content pc) |-> since pc is partial_content(tags, html_elem), head_tags <- *head_tags +tags; html_elem, p_content), 4468 + //format(cinfo,ic_v,
  4469 + format_actioner(cinfo,c,t,a,an,eo,ja,success(fn),is_https, action_count, ic_v, global_head_tags),
  4470 + // format_element,is_https, action_count, head_tags),
5387 4471
5388 - format(cinfo, ic_v, any_div(options, html_elements), format_element, is_https, action_count, head_tags),  
5389 - iframe(options, css_styles, css_files, js_files, body) then  
5390 - println("formating iframe");  
5391 - if body is body(body_options,elem) then  
5392 - [ "<iframe", format_attrs(options), " srcdoc=\"\n", 4472 + foreign_link_new(target, aspect, url) then
  4473 + //format(cinfo,ic_v,
  4474 + format_foreign_link(target, aspect, url, is_https, cinfo, action_count, ic_v, global_head_tags),
  4475 + //format_element,is_https, action_count, head_tags),
  4476 +
  4477 +
  4478 +// foreign_link(options,url,name) then
  4479 +// format(cinfo,ic_v,any_foreign_link(options,url,name),format_element,is_https, action_count, head_tags),
  4480 + private_download(url, name, extra, action) then
  4481 + //format(cinfo,ic_v,
  4482 + format_private_download(cinfo, url, name, extra, action),
  4483 + //format_element,is_https, action_count, head_tags),
  4484 +
  4485 +// div(options, p_content) then
  4486 +// with html_elements = map((HTML pc) |->
  4487 +// since pc is partial_content(tags, html_elem),
  4488 +// head_tags <- *head_tags + tags; //accumulate the tags
  4489 +// html_elem, //return the HTML element
  4490 +// p_content),
  4491 +//
  4492 +// //format(cinfo, ic_v,
  4493 +
  4494 +// [format_div_option(options), flat(map((HTML e) |-> format_element(e), html_elements)),"</div>\n"],
  4495 + //format_element, is_https, action_count, head_tags),
  4496 +// iframe(options, css_styles, css_files, js_files, body) then
  4497 +// println("formating iframe");
  4498 +// if body is body(body_options,elem) then
  4499 +// [ "<iframe", format_attrs(options), " srcdoc=\"\n",
  4500 +//
  4501 +// encode_HTML_quote(to_String([
  4502 +// "<html style=\"margin: 0pt; padding: 0pt;\">\n",
  4503 +// "<head>\n",
  4504 +// //add_css_styles(css_styles),
  4505 +// add_css_files(css_files),
  4506 +// add_js_files(js_files),
  4507 +// "</head>\n",
  4508 +// "<body ", format_attrs(body_options), ">\n", // format body options
  4509 +// format(cinfo,ic_v, elem ,is_https, action_count, head_tags),
  4510 +// "</body>\n",
  4511 +// "</html>\n",])),
  4512 +//
  4513 +// "\"></iframe>\n",
  4514 +// ],
  4515 + head_tags(_head_tags, html_elements) then
  4516 + global_head_tags <- *global_head_tags + _head_tags; //accumulate the tags
  4517 +// if p_content is partial_content(tags, html_elements) then
  4518 +// head_tags <- *head_tags + tags;
  4519 +// format(cinfo, ic_v, html_elements, is_https, action_count, head_tags),
  4520 + flat(map(format_element, html_elements))
  4521 +
5393 4522
5394 - encode_HTML_quote(to_String([  
5395 - "<html style=\"margin: 0pt; padding: 0pt;\">\n",  
5396 - "<head>\n",  
5397 - add_css_styles(css_styles),  
5398 - add_css_files(css_files),  
5399 - add_js_files(js_files),  
5400 - "</head>\n",  
5401 - "<body ", format_attrs(body_options), ">\n", // format body options  
5402 - format(cinfo,ic_v, elem ,is_https, action_count, head_tags),  
5403 - "</body>\n",  
5404 - "</html>\n",])),  
5405 -  
5406 - "\"></iframe>\n",  
5407 - ],  
5408 - partial(p_content) then  
5409 - if p_content is partial_content(tags, html_elements) then  
5410 - head_tags <- *head_tags + tags;  
5411 - format(cinfo, ic_v, html_elements, is_https, action_count, head_tags),  
5412 -// i(opts, t) then  
5413 -// format(cinfo,ic_v,any_i(opts,t),format_element,is_https, action_count, head_tags),  
5414 html_tag(tag_name, opts, l) then ["<",tag_name, format_attrs(opts), ">", flat(map(format_element,l)), "</",tag_name,">\n"], 4523 html_tag(tag_name, opts, l) then ["<",tag_name, format_attrs(opts), ">", flat(map(format_element,l)), "</",tag_name,">\n"],
  4524 +// html_tag(tag_name, opts) then ["<",tag_name, format_attrs(opts), "></",tag_name,">\n"],
5415 html_void_tag(tag_name, opts) then ["<",tag_name, format_attrs(opts), ">"], 4525 html_void_tag(tag_name, opts) then ["<",tag_name, format_attrs(opts), ">"],
5416 }. 4526 }.
5417 4527
@@ -5420,13 +4530,13 @@ define Printable_tree @@ -5420,13 +4530,13 @@ define Printable_tree
5420 ( 4530 (
5421 CommonInfo cinfo, 4531 CommonInfo cinfo,
5422 Var(Int) ic_v, // 'idnum' counter variable 4532 Var(Int) ic_v, // 'idnum' counter variable
5423 - List(HTML_Off_Form) elements, 4533 + List(HTML) elements,
5424 Bool is_https, 4534 Bool is_https,
5425 Var(Int) action_count, 4535 Var(Int) action_count,
5426 Var(List(HTML_Head_Tag)) head_tags 4536 Var(List(HTML_Head_Tag)) head_tags
5427 ) = 4537 ) =
5428 if cinfo is info(common_name,http_port,https_port,site_directory,secret) then 4538 if cinfo is info(common_name,http_port,https_port,site_directory,secret) then
5429 - flat(map((HTML_Off_Form element) |-> 4539 + flat(map((HTML element) |->
5430 format(cinfo, ic_v, element, is_https, action_count, head_tags), 4540 format(cinfo, ic_v, element, is_https, action_count, head_tags),
5431 elements)) 4541 elements))
5432 . 4542 .
@@ -5620,7 +4730,7 @@ public define HTML_ajax_content @@ -5620,7 +4730,7 @@ public define HTML_ajax_content
5620 public define HTML_ajax_content 4730 public define HTML_ajax_content
5621 to_html_ajax_content 4731 to_html_ajax_content
5622 ( 4732 (
5623 - HTML_Off_Form content_HTML, 4733 + HTML content_HTML,
5624 CommonInfo cinfo 4734 CommonInfo cinfo
5625 )= 4735 )=
5626 //println("to_html_ajax_content(content_HTML, cinfo)"); 4736 //println("to_html_ajax_content(content_HTML, cinfo)");
@@ -5632,7 +4742,7 @@ public define HTML_ajax_content @@ -5632,7 +4742,7 @@ public define HTML_ajax_content
5632 public define String 4742 public define String
5633 to_String 4743 to_String
5634 ( 4744 (
5635 - HTML_Off_Form content_HTML, 4745 + HTML content_HTML,
5636 CommonInfo cinfo 4746 CommonInfo cinfo
5637 )= 4747 )=
5638 //println("to_html_ajax_content(content_HTML, cinfo)"); 4748 //println("to_html_ajax_content(content_HTML, cinfo)");
@@ -5645,13 +4755,13 @@ public define String @@ -5645,13 +4755,13 @@ public define String
5645 public define JsonValue 4755 public define JsonValue
5646 to_html_ajax_content 4756 to_html_ajax_content
5647 ( 4757 (
5648 - HTML_Partial_Content content_HTML, 4758 + HTML content_HTML,
5649 CommonInfo cinfo, 4759 CommonInfo cinfo,
5650 String additional_script 4760 String additional_script
5651 )= 4761 )=
5652 //println("to_html_ajax_content(content_HTML, cinfo, additional_script)"); 4762 //println("to_html_ajax_content(content_HTML, cinfo, additional_script)");
5653 //println("additional_script"+additional_script); 4763 //println("additional_script"+additional_script);
5654 - since to_html_ajax_content(partial(content_HTML), cinfo) is html_ajax_content(html, script, js_files, css_files), 4764 + since to_html_ajax_content(content_HTML, cinfo) is html_ajax_content(html, script, js_files, css_files),
5655 json_object([ 4765 json_object([
5656 json_member("html", json_string(html)), 4766 json_member("html", json_string(html)),
5657 json_member("js_files", to_json_array(js_files)), 4767 json_member("js_files", to_json_array(js_files)),
@@ -5663,7 +4773,7 @@ public define JsonValue @@ -5663,7 +4773,7 @@ public define JsonValue
5663 public define JsonValue 4773 public define JsonValue
5664 to_html_ajax_content 4774 to_html_ajax_content
5665 ( 4775 (
5666 - HTML_Partial_Content content_HTML, 4776 + HTML content_HTML,
5667 CommonInfo cinfo 4777 CommonInfo cinfo
5668 )= to_html_ajax_content(content_HTML, cinfo, ""). 4778 )= to_html_ajax_content(content_HTML, cinfo, "").
5669 4779
@@ -5723,7 +4833,7 @@ public define AWP_Handler_Answer //Printable_tree @@ -5723,7 +4833,7 @@ public define AWP_Handler_Answer //Printable_tree
5723 answer_body_body 4833 answer_body_body
5724 ]), 4834 ]),
5725 4835
5726 - html_page(status, title, head_tags, css_styles, css_files, js_files, script, body) then 4836 + html_page(status, title, head_tags, /*css_styles,*/ css_files, js_files, script, body) then
5727 if body is body(options,element) then 4837 if body is body(options,element) then
5728 if format(status) is (status_string, status_headers) then 4838 if format(status) is (status_string, status_headers) then
5729 with 4839 with
@@ -5737,7 +4847,7 @@ public define AWP_Handler_Answer //Printable_tree @@ -5737,7 +4847,7 @@ public define AWP_Handler_Answer //Printable_tree
5737 [ doctype_w3c_header, 4847 [ doctype_w3c_header,
5738 //html_header, 4848 //html_header,
5739 "<head>\n", 4849 "<head>\n",
5740 - add_css_styles(css_styles), 4850 + //add_css_styles(css_styles),
5741 add_css_files(css_files), 4851 add_css_files(css_files),
5742 add_js_files(js_files), 4852 add_js_files(js_files),
5743 add_script(script), 4853 add_script(script),
@@ -5797,7 +4907,7 @@ public define AWP_Handler_Answer //Printable_tree @@ -5797,7 +4907,7 @@ public define AWP_Handler_Answer //Printable_tree
5797 if format(status) is (status_string, status_headers) then 4907 if format(status) is (status_string, status_headers) then
5798 printable_tree([ 4908 printable_tree([
5799 "HTTP/1.1 " + status_string, crlf, 4909 "HTTP/1.1 " + status_string, crlf,
5800 - format_headers(status_headers), 4910 + format_headers(standard_headers),
5801 format_headers(standard_headers_for(to_String(mime_type), length(content), failure)), 4911 format_headers(standard_headers_for(to_String(mime_type), length(content), failure)),
5802 format_headers(status_headers), 4912 format_headers(status_headers),
5803 format_headers(other_headers), 4913 format_headers(other_headers),
@@ -5839,7 +4949,7 @@ public define AWP_Handler_Answer //Printable_tree @@ -5839,7 +4949,7 @@ public define AWP_Handler_Answer //Printable_tree
5839 http_raw(Printable_tree content) then 4949 http_raw(Printable_tree content) then
5840 printable_tree(content), 4950 printable_tree(content),
5841 4951
5842 - html_content(HTTP_Status status, HTML_Off_Form content_HTML) then 4952 + html_content(HTTP_Status status, HTML content_HTML) then
5843 if format(status) is (status_string, status_headers) then 4953 if format(status) is (status_string, status_headers) then
5844 with content = format(cinfo, ic_v, content_HTML, is_https, var(0), p_content_head_tags), 4954 with content = format(cinfo, ic_v, content_HTML, is_https, var(0), p_content_head_tags),
5845 printable_tree([ 4955 printable_tree([
@@ -5852,29 +4962,30 @@ public define AWP_Handler_Answer //Printable_tree @@ -5852,29 +4962,30 @@ public define AWP_Handler_Answer //Printable_tree
5852 content 4962 content
5853 ]), 4963 ]),
5854 //HMTL content with some header 4964 //HMTL content with some header
5855 - html_partial_content(HTTP_Status status, HTML_Partial_Content p_content) then  
5856 -  
5857 - since p_content is partial_content(head_tags, html_content),  
5858 - since format(status) is (status_string, status_headers),  
5859 - with  
5860 - answer_body = (Printable_tree)  
5861 - [  
5862 - format(cinfo, ic_v, html_content, is_https, var(0), p_content_head_tags),  
5863 - ],  
5864 - answer_header = (Printable_tree)  
5865 - [  
5866 - // html_header,  
5867 - format_html_head(head_tags + *p_content_head_tags),  
5868 - ],  
5869 - printable_tree([  
5870 - "HTTP/1.1 " + status_string, crlf,  
5871 - format_headers(standard_headers),  
5872 - format_headers(standard_headers_for("text/html", length(answer_header) + length(answer_body), success(charset))),  
5873 - format_headers(status_headers),  
5874 - format_headers(additional_headers),  
5875 - crlf,  
5876 - answer_header .  
5877 - answer_body  
5878 - ]),  
5879 - }. 4965 +// HTML(HTTP_Status status, HTML p_content) then
  4966 +//
  4967 +// since p_content is partial_content(head_tags, html_content),
  4968 +// since format(status) is (status_string, status_headers),
  4969 +// with
  4970 +// answer_body = (Printable_tree)
  4971 +// [
  4972 +// format(cinfo, ic_v, html_content, is_https, var(0), p_content_head_tags),
  4973 +// ],
  4974 +// answer_header = (Printable_tree)
  4975 +// [
  4976 +// // html_header,
  4977 +// format_html_head(head_tags + *p_content_head_tags),
  4978 +// ],
  4979 +// printable_tree([
  4980 +// "HTTP/1.1 " + status_string, crlf,
  4981 +// format_headers(standard_headers),
  4982 +// format_headers(standard_headers_for("text/html", length(answer_header) + length(answer_body), success(charset))),
  4983 +// format_headers(status_headers),
  4984 +// format_headers(additional_headers),
  4985 +// crlf,
  4986 +// answer_header .
  4987 +// answer_body
  4988 +// ]),
  4989 + }
  4990 +.
5880 4991
web/making_a_web_site.anubis.bak 0 → 100644
  1 +
  2 +
  3 + *Project* Anubis
  4 +
  5 + *Title* Making interactive Web sites.
  6 +
  7 + *Copyright* Copyright (c) Alain Prouté 2004-2005.
  8 + Copyright (c) Calexium 2007-2017.
  9 + Copyright (c) David René 2007-2021.
  10 +
  11 +
  12 + *Authors* Alain Prouté
  13 + David René
  14 + Jérémy Larrieu
  15 + Julien Verneuil
  16 +
  17 +
  18 + *Revised* May 2015
  19 +
  20 +
  21 + *Overview*
  22 +
  23 + In this file we propose simple tools for making well structured interactive and secured
  24 + web sites.
  25 +
  26 +
  27 + ----------------------------------- Table of Contents ---------------------------------
  28 +
  29 + * (1) Structure of a web site.
  30 + ** (1.1) Three sorts of data.
  31 + ** (1.2) How requests are handled.
  32 + ** (1.3) What web pages are made of.
  33 + ** (1.4) Actions.
  34 + ** (1.5) States.
  35 +
  36 + * (2) Carrying on.
  37 + ** (2.1) Describing your web sites.
  38 + ** (2.2) Directories on the server's disk.
  39 + ** (2.3) Starting your web sites.
  40 +
  41 + * (3) The HTML interface.
  42 + ** (3.1) Types used by the HTML interface.
  43 + ** (3.2) ``in form'' versus ``off form''.
  44 + ** (3.3) Defining your own style.
  45 + ** (3.4) Actioners and forms.
  46 + ** (3.5) Local popup.
  47 +
  48 + ---------------------------------------------------------------------------------------
  49 +
  50 +
  51 +transmit tools/basis.anubis
  52 +read tools/printable_tree.anubis
  53 +read tools/base64.anubis
  54 +read tools/random.anubis
  55 +read tools/avlt_dictionaries.anubis
  56 +read system/lists.anubis
  57 +read system/string.anubis
  58 +read system/logger.anubis
  59 +transmit xlib/web/common.anubis
  60 +transmit xlib/web/multihost_http_server.anubis
  61 +read web/mime.anubis
  62 +
  63 +read xlib/web/cookies.anubis
  64 +read xlib/web/json.anubis
  65 +transmit xlib/web/web_dump.anubis
  66 +transmit xlib/web/web_arg_utils.anubis
  67 +transmit xlib/web/web_session.anubis
  68 +transmit xlib/web/web_action.anubis
  69 +
  70 +transmit xlib/web/types/web_action_name.anubis
  71 +transmit xlib/web/types/making_a_web_site.anubis
  72 +
  73 +//TODO move anywhere
  74 +
  75 +
  76 +define List(Word8)
  77 +/** Test for HTML entity which must be encoded
  78 + * and return the encoded entity if needed
  79 + */
  80 + get_entity
  81 + (
  82 + Word8 _char,
  83 + List(Word8) tail
  84 + )=
  85 + //test for the ampersand
  86 + if _char = '&' then
  87 + //test if it's already an encoded string like &amp; &lt; etc. In that case we do nothing
  88 + if insensitive_equal(['&','a','m','p',';'], tail, 0) then [_char]
  89 + else if insensitive_equal(['&','l','t',';'], tail, 0) then [_char]
  90 + else if insensitive_equal(['&','g','t',';'], tail, 0) then [_char]
  91 + else if insensitive_equal(['&','q','u','o','t',';'], tail, 0) then [_char]
  92 + else
  93 + [';','p','m','a','&']
  94 + //test for '<' etc.
  95 + else if _char = '<' then [';','t','l','&']
  96 + else if _char = '>' then [';','t','g','&']
  97 + else if _char = '\"' then [';','t','o','u','q','&']
  98 + else [_char]
  99 +.
  100 +
  101 +define String
  102 + _HTML_encode_entities
  103 + (
  104 + List(Word8) source,
  105 + List(Word8) current
  106 + )=
  107 + if source is
  108 + {
  109 + [] then implode(reverse(current)),
  110 + [c . t] then
  111 + _HTML_encode_entities(t, get_entity(c, t) + current)
  112 + }
  113 +.
  114 +
  115 +public define String
  116 + encode_HTML_entities
  117 + (
  118 + String source
  119 + )=
  120 + _HTML_encode_entities(explode(source), [])
  121 +.
  122 +
  123 +define List(Word8)
  124 +/** Test for HTML entity which must be encoded
  125 + * and return the encoded entity if needed
  126 + */
  127 + get_entity_quote
  128 + (
  129 + Word8 _char,
  130 + List(Word8) tail
  131 + )=
  132 + //test for the ampersand
  133 + if _char = '&' then
  134 + //test if it's already an encoded string like &amp; &lt; etc. In that case we do nothing
  135 + if insensitive_equal(['&','a','m','p',';'], tail, 0) then [_char]
  136 + else if insensitive_equal(['&','l','t',';'], tail, 0) then [_char]
  137 + else if insensitive_equal(['&','g','t',';'], tail, 0) then [_char]
  138 + else if insensitive_equal(['&','q','u','o','t',';'], tail, 0) then [_char]
  139 + else
  140 + [';','p','m','a','&']
  141 + //test for '"' only.
  142 + else if _char = '\"' then [';','t','o','u','q','&']
  143 + else [_char]
  144 +.
  145 +
  146 +define String
  147 + _HTML_encode_quote
  148 + (
  149 + List(Word8) source,
  150 + List(Word8) current
  151 + )=
  152 + if source is
  153 + {
  154 + [] then implode(reverse(current)),
  155 + [c . t] then
  156 + _HTML_encode_quote(t, get_entity_quote(c, t) + current)
  157 + }
  158 +.
  159 +
  160 +public define String
  161 + encode_HTML_quote
  162 + (
  163 + String source
  164 + )=
  165 + _HTML_encode_quote(explode(source), [])
  166 +.
  167 +
  168 + * (1) Structure of a web site.
  169 +
  170 + First of all we need to explain what a web site should be made of. Ideally, the
  171 + visitor (also called the 'client') should see the web site working as any other
  172 + interactive computer software. So, it should be clear that a 'session' (i.e. a visit
  173 + to the web site, including the consultation of several pages) is some kind of
  174 + conversation between the visitor and the web site, and that the web site should
  175 + maintain a 'current state' of this conversation. At each new request (click) from the
  176 + visitor, this state must be updated. This whole conversation is called a 'session' and
  177 + should not be confused with a single request.
  178 +
  179 +
  180 +
  181 + ** (1.1) Three sorts of data.
  182 +
  183 + All the data needed for putting a web site at work may be dispatched into three
  184 + categories:
  185 +
  186 + 1. Constant data (data that never change). These data may be hard coded into the
  187 + Anubis source files of the web site.
  188 +
  189 + 2. Permanent data (data which always exist independantly of the users connected to
  190 + the web site). These data are normally recorded into data bases.
  191 +
  192 + 3. Session data (data which depend on a particular visitor and which exist only
  193 + during the time he visits the web site). These data are stored into so-called
  194 + 'states'.
  195 +
  196 +
  197 + It is important to determine which data belongs to which category. This is part of your
  198 + design decisions.
  199 +
  200 +
  201 +
  202 + ** (1.2) How requests are handled.
  203 +
  204 + We want to separate the following two functionalities (which are used at each request
  205 + (click) during a single session):
  206 +
  207 + - computing the new state from the previous state and from the client request, and
  208 + updating the data base,
  209 +
  210 + - computing the page to be sent to the client from the new current state and from
  211 + the informations in the data base.
  212 +
  213 +
  214 + The next picture shows the structure we have in mind:
  215 +
  216 +
  217 + request +---------+ HTML page (with state name in cookie)
  218 + .-------------------| client |<--------------.
  219 + | .-----------------| | |
  220 + | | session +---------+ |
  221 + | | in cookie |
  222 + | | | client side
  223 + ............................................................................
  224 + | | | server side
  225 + | | |
  226 + | | .-------------------. |
  227 + | | | previous session | |
  228 + V V V | |
  229 + +---------------+ +---------------+ +--------------+
  230 + | compute state | | server's disk | | compute page |
  231 + +---------------+ +---------------+ +--------------+
  232 + ^ | | ^ ^ ^ ^ ^
  233 + | | | | | | | |
  234 + | | `--------------------+--------------------' | |
  235 + | | new state | | |
  236 + read | `------------------------+--------------------' |
  237 + write | new state name |
  238 + update V |
  239 + +-----------+ |
  240 + | data base |--------------------------------------------'
  241 + +-----------+ read only
  242 +
  243 +
  244 + When the client begins a session, there is no previous state. In this case, a default
  245 + 'initial state' is used instead.
  246 +
  247 + The data base may be updated by 'compute state' box, but should not be update by the
  248 + 'compute page' box. The 'compute page' box should be allowed only to read the data
  249 + base.
  250 +
  251 + In this file, all the above stuff is defined, except the 'compute state' and 'compute
  252 + page' boxes. You just have to provide the function for computing a new state (compute
  253 + state) and the function for computing the page (compute page) from the new state. You
  254 + don't have to worry about state names, saving and retrieving states and the like.
  255 +
  256 +
  257 +
  258 +
  259 +
  260 + ** (1.3) What web pages are made of.
  261 +
  262 + What the client can see in his browser's window may be called a 'page'. Within a page,
  263 + we have several sorts of components:
  264 +
  265 + - 'local' components, i.e. all components which do not open a connection, like
  266 + texts, images, etc... possibly using JavaScript programmation,
  267 +
  268 + - 'actioners', which, when clicked upon, open a connection with our web site; they
  269 + may appear as links or buttons, etc...
  270 +
  271 + - 'foreign links', which when clicked upon, open a connection with another web site
  272 + (or ours eventually).
  273 +
  274 + Of course, what an actioner does is just ask our web site to perform an action. To that
  275 + end, the actioner essentially sends the name of the action to be performed. However, it
  276 + may be necessary to provide additional informations which may be seen as 'operands' of
  277 + the action. In order to attach operands to an action, HTML provides the notion of
  278 + 'form'. Indeed, a form contains essentially a set of input fields into which the client
  279 + may put values for the required operands of the action, and a submit button, which is
  280 + the actioner itself. Notice that a single form may contain several submit buttons,
  281 + which simply means that there are several distincts actions taking the same set of
  282 + operands.
  283 +
  284 + Restrictions must be put on the use of all theses gadgets. Indeed, for example,
  285 + putting a form within another form is officially meaningless in HTML, and the client's
  286 + browser may be seriously disturbed by this. In this file, we propose an interface to
  287 + the HTML language, which forbids such meaningless things, simply by imposing a strict
  288 + typing of HTML concepts.
  289 +
  290 + Each web site may be accessible through two communication channels:
  291 +
  292 + - a non secured channel (HTTP),
  293 + - a secured channel (HTTPS).
  294 +
  295 + Nevertheless, the whole thing should be considered as a single web site. For example,
  296 + you may have a secured page, obtained through HTTPS, containing public images obtained
  297 + through HTTP. An actioner in a non secured page may open a secured connection, and
  298 + conversely.
  299 +
  300 + Summarizing, a web page is made of local elements, foreign links and actioners.
  301 + Actioners receive operands from forms, and they also choose to communicate through the
  302 + non secured or through the secured channel.
  303 +
  304 +
  305 +
  306 + +-------------------+
  307 + | page |
  308 + | | +---------------+
  309 + | +--------------+ | | next page |
  310 + | | form | | | (non secured) |
  311 + | | +----------+ | | HTTP | |
  312 + | | | actioner |---------------------------->| |
  313 + | | +----------+ | | +---------------+
  314 + | | | |
  315 + | | +----------+ | | +---------------+
  316 + | | | actioner |---------------------------->| next page |
  317 + | | +----------+ | | HTTPS | (secured) |
  318 + | | | | | |
  319 + | +--------------+ | | |
  320 + | | +---------------+
  321 + | |
  322 + +-------------------+
  323 +
  324 +
  325 + Notice that actioners need no be necessarily put into forms. In that case, they work as
  326 + ordinary links, but they still may receive operands as we shall see.
  327 +
  328 +
  329 +
  330 +
  331 + ** (1.4) Actions.
  332 +
  333 + The client opens a new connection with our web site whenever he clicks on an
  334 + actioner. The result is that a request is sent, essentially made of a list of 'web
  335 + arguments'. Each web argument is a pair (name,value). One of these web arguments, the
  336 + 'action' web argument (whose name is "a"), determines the action to be performed. The
  337 + other web arguments (not including "s", used to identify the state) are the operands
  338 + for this action.
  339 +
  340 + Hence, the 'compute state' box in the picture above, splits naturally into as many
  341 + sub-boxes as there are actions. For this reason, we define the following type for
  342 + representing actions (where '$State' is the type representing session informations):
  343 +
  344 +
  345 +
  346 + 'http_action's are executed only under HTTP, and 'https_action's are executed only
  347 + under HTTPS. 'http_https_action's may be executed under both types of connections.
  348 +
  349 + Each action has a name, which is used to identify the action. Each action also has a
  350 + function 'allow' whose job is to verify that the action is allowed in the current
  351 + state, and a function 'do_it' for performing the action. The function 'do_it' receives
  352 + a lot of informations:
  353 +
  354 + - 'HTTP informations':
  355 + - the IP address of the client,
  356 + - the URI requested by the client (after redirection),
  357 + - the list of HTTP headers generated by the client's browser,
  358 + - the list of web arguments sent by the client (except "s" and "a"),
  359 + - the previous state (or the 'initial' or 'ticket expired' state if no previous
  360 + state can be found).
  361 +
  362 + In most cases, HTTP informations are not used. This is the reason why they are gathered
  363 + for simplicity into a unique datum of type 'HTTP_Info'.
  364 +
  365 +
  366 +
  367 +
  368 + When you define your web site, you must provide the list of all the actions of the
  369 + site. When a new state has been computed, a graphical representation of this state
  370 + must be sent to the client. To that end, you must provide a function (named below
  371 + 'compute_page') of type:
  372 +
  373 + $State -> HTTP_Answer
  374 +
  375 + where the type 'HTTP_Answer' (defined below in this file) abstractly represents HTML
  376 + pages.
  377 +
  378 +//public type HTTP_Answer:...
  379 +
  380 + It should be clear that states and pages are deeply linked together. Indeed, we really
  381 + understand the page shown to the client as a representation of the current state of the
  382 + conversation between the client and the web site, but also containing informations
  383 + taken from the data bases.
  384 +
  385 +
  386 +//public type HTML_Partial_Content:...
  387 +
  388 +
  389 +
  390 +
  391 +
  392 +
  393 +
  394 +
  395 +
  396 +public define List(HTTP_header)
  397 + make_session_cookie_headers
  398 + (
  399 + String website_name,
  400 + String session_name
  401 + )
  402 + =
  403 + //println("Set-Cookie state_"+website_name+"="+state_name);
  404 + [
  405 + http_header("Set-Cookie", "session_"+website_name+"="+session_name+"; SameSite=Strict")
  406 + ]
  407 + .
  408 +
  409 +
  410 +
  411 + When a request arrives, we need to retrieve the previous state from the server's
  412 + disk. We receive the name of that state. If the state is out of date, the state file is
  413 + kept 3 days, and then deleted.
  414 +
  415 +
  416 +
  417 +
  418 +define One
  419 + delete_out_of_date_sessions // for all web sites
  420 + (
  421 + List((String, List(String) -> One)) directories_and_functions
  422 + )=
  423 + if directories_and_functions is
  424 + {
  425 + [ ] then unique,
  426 + [h . t] then
  427 + since h is (state_directory, function),
  428 + function(directory_list(state_directory,"*"));
  429 + delete_out_of_date_sessions(t)
  430 + }
  431 +.
  432 +
  433 + ** (1.5) States.
  434 +
  435 + Now, we explain how you can define the type (say 'State') to be used as an instance of
  436 + the type parameter '$State'. The following is just a suggestion.
  437 +
  438 + Each state determines a page (since 'compute_page' computes a page from a
  439 + state). However, some components of the state may be independant of the page. It may be
  440 + the case for example for the indication of the natural language used by the
  441 + client. Hence, a state should be made of (at least) two parts:
  442 +
  443 + - informations which are the same for all pages,
  444 + - informations which are particular to each page.
  445 +
  446 + For example, you could define:
  447 +
  448 + type Page: // one alternative per page, with particular informations
  449 + login(...), // in the components
  450 + main_page(...),
  451 + ...etc...
  452 +
  453 + Now, the type 'State' could be defined as follows:
  454 +
  455 + type State:
  456 + state(Language, // informations valid for all pages
  457 + ...,
  458 + Page). // informations particular to a page
  459 +
  460 + However, if you are making a secured web site within which clients should be identified
  461 + (by id and password), it may be a good idea to have two sorts of states, one for non
  462 + identified clients and one for identified clients. In this case, define the type
  463 + 'State' as follows (this is just a suggestion):
  464 +
  465 + type State:
  466 + non_identified(Language),
  467 + identified(String id,
  468 + Language,
  469 + Page).
  470 +
  471 + When a request arrives, check if the previous state is 'identified(...)' or
  472 + 'non_identified(...)', and don't provide access to certain pages to non identified
  473 + clients. This is required for security.
  474 +
  475 + Some more words on security. If your site needs to identify clients, define the
  476 + initial state as 'non_identified(...)'. Construct a 'login' page, and check the id and
  477 + password of the client. If the id and password are correct, then change the state of
  478 + the client to 'identified(...)'. No other action should be able to do that. Now, be
  479 + confident that clients cannot forge states. The only information they have is the name
  480 + of a state, not the state itself which is never sent over the network, but only stored
  481 + on the server's disk. The name of the state is constructed using strong cryptographical
  482 + methods (sha1). If everything (since the 'login' page) is performed under HTTPS, even
  483 + state names cannot be seen by a third party. So, if the system retrieves a previous
  484 + state of the form 'identified(...)', you can be confident that your client is well
  485 + identified, and you can send him confidential informations.
  486 +
  487 + States have a limited life time. It may happen that a client clicks on a button at a
  488 + time its state is out of date. In this case, this system considers that the new state
  489 + is a special state named 'ticket expired'. You must provide a function producing this
  490 + state when you describe your web site. The page corresponding to this state must just
  491 + inform the client that he/she waited a too long time before clicking on a button, and
  492 + has to restart (a new conversation) from the begining.
  493 +
  494 +
  495 +
  496 + * (2) Carrying on.
  497 +
  498 + ** (2.1) Describing your web sites.
  499 +
  500 + Before you may start your web site, you must describe it, i.e. produce a datum of the
  501 + opaque type 'Web_Site'.
  502 +
  503 +public type Web_Site:...
  504 +
  505 + Producing such a datum may be performed by:
  506 +
  507 + public define Web_Site
  508 + make_web_site_description
  509 + (
  510 + List(String) common_names, // for example: ["www.our-business.com",
  511 + // "192.168.0.1"]
  512 + // the second one is just for testing
  513 + String site_directory, // where 'public' and other directories are
  514 + // located (should NOT end with '/')
  515 + String state_directory,
  516 + One -> One init,
  517 + (HTTP_Info,
  518 + List(Web_arg),
  519 + Bool is_https) -> $State initial_state,
  520 + ($State expired,
  521 + Maybe(String),
  522 + HTTP_Info,
  523 + List(Web_arg),
  524 + Bool is_https) -> $State ticket_expired_state,
  525 + (Maybe(String),
  526 + HTTP_Info,
  527 + List(Web_arg),
  528 + Bool is_https) -> $State ticket_lost_state,
  529 + List(Web_Action($State)) actions,
  530 + $State -> HTTP_Answer compute_page,
  531 + $State -> List(HTTP_header) additional_headers,
  532 + List(HTTP_header) constant_additional_headers,
  533 + Int timeout, // seconds (todo: minutes)
  534 + Redirections redirections,
  535 + String charset,
  536 + List(String) journal_extensions,
  537 + List(String) journal_headers,
  538 + String authorization_secret,
  539 + List(MIME) known_mime_types,
  540 + (String action_name,
  541 + List(Web_arg) args)-> One before_send_file
  542 + ).
  543 +
  544 +
  545 + Explanations:
  546 +
  547 + 'common_names' is the list of names of the site (the name the browser must send as the
  548 + value of the 'Host' HTTP header in order to access the site must be in that list). Such
  549 + a name generally looks like this:
  550 +
  551 + www.somewhere.com
  552 +
  553 + If you are using HTTPS, you also have an 'X.509 SSL server certificate'. The name of
  554 + the site must be exactly the same as the name on the certificate (which is precisely
  555 + called the 'common name' in the X.509 jargon). If the two names do not match, the site
  556 + will still work, but the transaction will not be transparent to the client. His browser
  557 + will complain that the name of the certificate does not match the name of the site, and
  558 + he will have to accept the certificate manually.
  559 +
  560 + 'site_directory' is the absolute path to the directory where the files needed by the
  561 + site are located. Usually this directory looks like:
  562 +
  563 + my_anubis/web_sites/www.somewhere.com
  564 +
  565 + However, this information is not computed from 'common_name', so that you can change
  566 + the common name (for example temporarily, for networking reasons) without loosing
  567 + access to the files.
  568 +
  569 + 'ticket_expired_state(expired_state,http_info,lwa,is_https)' must produce the state
  570 + whose graphical representation is a page explaining to the user that its 'ticket' (or
  571 + 'session information') has expired, and that he/she must close all popup windows and
  572 + start a new session. The arguments of the function contain the previous (expired)
  573 + state and all current informations concerning the user. This arguments may be useful
  574 + for example for producing the expiration message in the language chosen by the user.
  575 + You can also (and this may be much smarter) send a 'ticket prolongation page'
  576 + (including a new login for example), and resume the same conversation, since you have
  577 + all the pertinent informations at hand. In the case the ticket is definitely lost, the
  578 + second fonction 'ticket_lost_state' is used.
  579 +
  580 + Notice that despite the fact that the parameter $State is involved in the arguments of
  581 + the above function, the type 'Web_Site' does not depend on this parameter. This allows
  582 + to produce lists of web site descriptions, where each description may be constructed
  583 + with a different instance of $State. This is required because distinct sites must have
  584 + distinct types of session informations. This is made possible by the fact that the
  585 + type is obscure, and the constructor replaced by a function which assembles
  586 + 'ticket_expired_state', ticket_lost_state', 'actions' and 'compute_page' into a single
  587 + entity not depending on $State. You should have a look to the private part of this file
  588 + if you want more precisions about this programming technique.
  589 +
  590 + 'charset' is a string which will determine the character encoding to be used by the
  591 + browser. Typically, this string is one of: "UTF-8", "ISO-8859-1", "Windows-1252",
  592 + etc...
  593 +
  594 + 'before_send_file' is a function which is executed just before the HTTP server sends a
  595 + file. It gets an action name and the web arguments received with the request for that
  596 + file. Notice that this action name and these web arguments may be put into a
  597 + 'private_download' element, and will come back to the server at the time of the
  598 + download.
  599 +
  600 +
  601 +
  602 + ** (2.2) Directories on the server's disk.
  603 +
  604 + The description of your site contains the name of the directory within which the
  605 + required files are located. This may be for example:
  606 +
  607 + my_anubis/web_sites/www.our-business.com/
  608 +
  609 + This is called the 'site directory' (for the given site). Within the site directory,
  610 + the following directories are created by this program:
  611 +
  612 + states
  613 + public
  614 + journal
  615 + private_download
  616 + upload_temporary
  617 +
  618 + The directory 'states' is used for storing states (session informations). Out of date
  619 + states are automatically removed after some time.
  620 +
  621 + The tree rooted at 'public' contains files that the server is allowed to send to the
  622 + clients. For security reasons, the server never sends a file which is not within the
  623 + tree whose root is this 'public' directory (except for the 'private download' mecanism;
  624 + see 'web/multihost_http_server.anubis'). Also, the MIME type (see 'web/mime.anubis')
  625 + must have been recognized before the file may be sent.
  626 +
  627 + The directory 'journal' contains the jounal files. The roles of the remaining
  628 + directories 'private_download' and 'upload_temporary' is explained in
  629 + 'multihost_http_server.anubis', where you will also find further informations on
  630 + 'public' and 'journal'.
  631 +
  632 +
  633 + ** (2.3) Web servers parameters.
  634 +
  635 + The web servers have several parameters useful for administration. They are described
  636 + as follows:
  637 +
  638 + public type WebServersParameters:
  639 + wsparms(Var(Bool) shutdown_required,
  640 +
  641 + ** (2.4) Starting your web sites.
  642 +
  643 + When you have described all your web sites (you may want to have several web sites, and
  644 + they are distinguished by their 'common name'), you may start them all together using
  645 + 'start_web_sites' below. This function returns a result of the following type:
  646 +
  647 +public type Start_Web_Sites_Result:
  648 + cannot_bind_to_port(Word32),
  649 + cannot_bind_to_port(Word32,Word32),
  650 + ok(Server http_server,
  651 + Server https_server).
  652 +
  653 + Indeed, it may happen that the system cannot bind (begin to listen) to one of the two
  654 + ports (or to both). The main reason is that another server is already listening on that
  655 + port. Another reason may be that 'anbexec' has not been correctly installed, i.e. that
  656 + the 's' bit has not been set for 'user' and 'group' (there is not such problem under
  657 + Windows). Also notice that the Linux kernel may need a rather long time (up to several
  658 + minutes) before liberating a listening port. Now, if the system can bind to the two
  659 + ports, the pair of the two servers is returned. Two tools are useful for manipulating
  660 + servers:
  661 +
  662 + shutdown of type Server -> One
  663 + is_down of type Server -> Bool
  664 +
  665 + They are defined in 'predefined.anubis' (together with the type 'Server').
  666 +
  667 +
  668 +public define Start_Web_Sites_Result
  669 + start_web_sites
  670 + (
  671 + Word32 ip_address, // the IP address shared by the web sites
  672 + Word32 http_port, // usually: 80
  673 + Word32 https_port, // usually: 443
  674 + String ssl_certificate_common_name,
  675 + List(Web_Site) web_sites, // web sites to be started
  676 + (One) -> Bool shutdown_required
  677 + ).
  678 +
  679 + 'ip_address' is the IP address on which the two servers listen. If you put 0, the
  680 + servers listen on all the IP addresses of the machine. This may be useful if the
  681 + machine has several network interfaces.
  682 +
  683 + 'ssl_certificate_common_name' is the common name of the SSL certificate that 'anbexec'
  684 + loads when it starts. One instance of 'anbexec' cannot handle more than one SSL server
  685 + certificate. This is due to a problem of conception of SSL itself. See the book 'SSL
  686 + and TLS' by Eric Rescorla (at Addison Wesley) for more explanations.
  687 +
  688 + Notice that the number of servers is always 2, regardless of the number of web sites
  689 + you are starting.
  690 +
  691 + The dynamic variable 'shutdown_required' may be used to control the shutdown of the two
  692 + servers from within the web site (typically the administration part). The servers will
  693 + shutdown as soon as this variable contains 'true'. So you must provide a variable
  694 + containing 'false' otherwise your servers will not run. You may also use the primitive
  695 + 'must_restart' (see 'predefined.anubis') to control the restarting of your servers.
  696 +
  697 + * (3) The HTML interface.
  698 +
  699 + We propose an interface to dynamic HTML. Dynamic HTML includes HTML, and a combination
  700 + of CSS (Cascading Style Sheet) and JavaScript techniques for making HTML elements more
  701 + reactive and attractive on the client side.
  702 +
  703 +
  704 + ** (3.1) Types used by the HTML interface.
  705 +
  706 + For easy reference, we gather below the definitions of all the types used by the HTML
  707 + interface, and we comment them immediately.
  708 +
  709 + //public type HTML_Off_Form:...
  710 +
  711 +
  712 +public define Printable_tree [HTML_Id x . Printable_tree y] = str_pt(x.id, y).
  713 +public define Printable_tree [HtmlClass x . Printable_tree y] = str_pt(x.class, y).
  714 +public define Printable_tree [WebArgName x . Printable_tree y] = str_pt(x.name, y).
  715 +public define Printable_tree [WebArgValue x . Printable_tree y] = str_pt(x.value, y).
  716 +public define Printable_tree [InitialValue x . Printable_tree y] = str_pt(x.value, y).
  717 +
  718 +public define CoreAttrs attr(String name, Bool value) = attr(name, if value then "true" else "false").
  719 +public define CoreAttrs attr(String name, Int value) = attr(name, to_String(value)).
  720 +
  721 +
  722 +public define InputAttrs attr(String name, Bool value) = attr(name, if value then "true" else "false").
  723 +
  724 +
  725 +
  726 +public define Text_Option
  727 + tooltip(String s) = title(s).
  728 +
  729 + A list of 'Text_Option' must be given with each text you want to put in your page.
  730 +
  731 +public define CoreAttrs
  732 + tooltip(String s) = title(s).
  733 +public define InputAttrs
  734 + tooltip(String s) = title(s).
  735 +
  736 +
  737 +public type I18n:
  738 + lang (String),
  739 + dir (Reading_Way).
  740 +
  741 +
  742 + A list of 'DIV_Option' must be given with each DIV you want to put in your page.
  743 +
  744 +public define String
  745 + event_name
  746 + (
  747 + HtmlEvents e
  748 + ) =
  749 + if e is
  750 + {
  751 + onafterprint then "onafterprint", //HTML5 Script to be run after the document is printed
  752 + onbeforeprint then "onbeforeprint", //HTML5 Script to be run before the document is printed
  753 + onbeforeunload then "onbeforeunload", //HTML5 Script to be run when the document is about to be unloaded
  754 + onerror then "onerror", //HTML5 Script to be run when an error occurs
  755 + onhashchange then "onhashchange", //HTML5 Script to be run when there has been changes to the anchor part of the a URL
  756 + onload then "onload", // Fires after the page is finished loading
  757 + onmessage then "onmessage", //HTML5 Script to be run when the message is triggered
  758 + onoffline then "onoffline", //HTML5 Script to be run when the browser starts to work offline
  759 + ononline then "ononline", //HTML5 Script to be run when the browser starts to work online
  760 + onpagehide then "onpagehide", //HTML5 Script to be run when a user navigates away from a page
  761 + onpageshow then "onpageshow", //HTML5 Script to be run when a user navigates to a page
  762 + onpopstate then "onpopstate", //HTML5 Script to be run when the window's history changes
  763 + onresize then "onresize", //HTML5 Fires when the browser window is resized
  764 + onstorage then "onstorage", //HTML5 Script to be run when a Web Storage area is updated
  765 + onunload then "onunload", // Fires once a page has unloaded (or the browser window has been closed)
  766 + // Form element events
  767 + onblur then "onblur", // Fires the moment that the element loses focus
  768 + onchange then "onchange", // Fires the moment when the value of the element is changed
  769 + oncontextmenu then "oncontextmenu", //HTML5 Script to be run when a context menu is triggered
  770 + onfocus then "onfocus", // Fires the moment when the element gets focus
  771 + oninput then "oninput", //HTML5 Script to be run when an element gets user input
  772 + oninvalid then "oninvalid", //HTML5 Script to be run when an element is invalid
  773 + onreset then "onreset", // Fires when the Reset button in a form is clicked
  774 + onsearch then "onsearch", // Fires when the user writes something in a search field (for <input="search">)
  775 + onselect then "onselect", // Fires after some text has been selected in an element
  776 + onsubmit then "onsubmit", // Fires when a form is submitted
  777 + // Keyboard events (Not valid in base, bdo, br, frame, frameset, head, html, iframe, meta, param, script, style, and title elements.)
  778 + onkeydown then "onkeydown", // Fires when a user is pressing a key
  779 + onkeypress then "onkeypress", // Fires when a user presses a key
  780 + onkeyup then "onkeyup", // Fires when a user releases a key
  781 + // Mouse events (Not valid in base, bdo, br, frame, frameset, head, html, iframe, meta, param, script, style, and title elements.)
  782 + onclick then "onclick", // Fires on a mouse click on the element
  783 + ondblclick then "ondblclick", // Fires on a mouse double-click on the element
  784 + onmousedown then "onmousedown", // Fires when a mouse button is pressed down on an element
  785 + onmousemove then "onmousemove", // Fires when the mouse pointer is moving while it is over an element
  786 + onmouseout then "onmouseout", // Fires when the mouse pointer moves out of an element
  787 + onmouseover then "onmouseover", // Fires when the mouse pointer moves over an element
  788 + onmouseup then "onmouseup", // Fires when a mouse button is released over an element
  789 + onwheel then "onwheel", //HTML5 Fires when the mouse wheel rolls up or down over an element
  790 + //Drag Events
  791 + ondrag then "ondrag", //HMTL5 Script to be run when an element is dragged
  792 + ondragend then "ondragend", //HTML5 Script to be run at the end of a drag operation
  793 + ondragenter then "ondragenter", //HTML5 Script to be run when an element has been dragged to a valid drop target
  794 + ondragleave then "ondragleave", //HTML5 Script to be run when an element leaves a valid drop target
  795 + ondragover then "ondragover", //HTML5 Script to be run when an element is being dragged over a valid drop target
  796 + ondragstart then "ondragstart", //HTML5 Script to be run at the start of a drag operation
  797 + ondrop then "ondrop", //HTML5 Script to be run when dragged element is being dropped
  798 + onscroll then "onscroll", //HTML5 Script to be run when an element's scrollbar is being scrolled
  799 + //Clipboard Events
  800 + oncopy then "oncopy", //HTML5 Fires when the user copies the content of an element
  801 + oncut then "oncut", //HTML5 Fires when the user cuts the content of an element
  802 + onpaste then "onpaste", //HTML5 Fires when the user pastes some content in an element
  803 + //Media Events
  804 + onabort then "onabort", //HTML5 Script to be run on abort
  805 + oncanplay then "oncanplay", //HTML5 Script to be run when a file is ready to start playing (when it has buffered enough to begin)
  806 + oncanplaythrough then "oncanplaythrough", //HTML5 Script to be run when a file can be played all the way to the end without pausing for buffering
  807 + oncuechange then "oncuechange", //HTML5 Script to be run when the cue changes in a <track> element
  808 + ondurationchange then "ondurationchange", //HTML5 Script to be run when the length of the media changes
  809 + onemptied then "onemptied", //HTML5 Script to be run when something bad happens and the file is suddenly unavailable (like unexpectedly disconnects)
  810 + onended then "onended", //HTML5 Script to be run when the media has reach the end (a useful event for messages like "thanks for listening")
  811 + onerror then "onerror", //HTML5 Script to be run when an error occurs when the file is being loaded
  812 + onloadeddata then "onloadeddata", //HTML5 Script to be run when media data is loaded
  813 + onloadedmetadata then "onloadedmetadata", //HTML5 Script to be run when meta data (like dimensions and duration) are loaded
  814 + onloadstart then "onloadstart", //HTML5 Script to be run just as the file begins to load before anything is actually loaded
  815 + onpause then "onpause", //HTML5 Script to be run when the media is paused either by the user or programmatically
  816 + onplay then "onplay", //HTML5 Script to be run when the media is ready to start playing
  817 + onplaying then "onplaying", //HTML5 Script to be run when the media actually has started playing
  818 + onprogress then "onprogress", //HTML5 Script to be run when the browser is in the process of getting the media data
  819 + onratechange then "onratechange", //HTML5 Script to be run each time the playback rate changes (like when a user switches to a slow motion or fast forward mode)
  820 + onseeked then "onseeked", //HTML5 Script to be run when the seeking attribute is set to false indicating that seeking has ended
  821 + onseeking then "onseeking", //HTML5 Script to be run when the seeking attribute is set to true indicating that seeking is active
  822 + onstalled then "onstalled", //HTML5 Script to be run when the browser is unable to fetch the media data for whatever reason
  823 + onsuspend then "onsuspend", //HTML5 Script to be run when fetching the media data is stopped before it is completely loaded for whatever reason
  824 + ontimeupdate then "ontimeupdate", //HTML5 Script to be run when the playing position has changed (like when the user fast forwards to a different point in the media)
  825 + onvolumechange then "onvolumechange", //HTML5 Script to be run each time the volume is changed which (includes setting the volume to "mute")
  826 + onwaiting then "onwaiting", //HTML5 Script to be run when the media has paused but is expected to resume (like when the media pauses to buffer more data)
  827 + //Misc Events
  828 + onshow then "onshow", //HTML5 Fires when a <menu> element is shown as a context menu
  829 + ontoggle then "ontoggle"
  830 + }.
  831 +
  832 +
  833 +public define Table_Option nude = border(0,0,0,rgb(0,0,0)).
  834 +
  835 +
  836 + A list of 'Table_Option' must be given with each table.
  837 +
  838 +
  839 +
  840 +
  841 +
  842 +
  843 + A list of 'Cell_Option' must be given with each cell and each row in a table. Options
  844 + given with a row apply to all the cells in the row, but are superseded by options given
  845 + with cells, which apply only to the cell they are given with.
  846 +
  847 +
  848 +
  849 +
  850 +
  851 + The parameter $T is later instantiated either to 'HTML_In_Form' or to 'HTML_Off_Form',
  852 + depending on where you put your table (within a form or not within a form). For your
  853 + convenience, we define the following particular case:
  854 +
  855 +public define HTML_Cell($T)
  856 + cell
  857 + (
  858 + $T content
  859 + )=
  860 + cell([],content)
  861 +.
  862 +
  863 +public define HTML_Cell($T)
  864 + cell
  865 + (
  866 + Cell_Option option,
  867 + $T content
  868 + ) =
  869 + cell([option],content)
  870 +.
  871 +
  872 +public define HTML_Header_Cell($T)
  873 + header_cell
  874 + (
  875 + $T content
  876 + ) =
  877 + header_cell([],content).
  878 +
  879 +
  880 +
  881 +
  882 + Same remark as for 'HTML_Cell($T)'. We define several convenience functions:
  883 +
  884 +public define HTML_Row($T)
  885 + row
  886 + (
  887 + List(HTML_Cell($T)) cells
  888 + )=
  889 + row([],cells).
  890 +
  891 +public define HTML_Row($T)
  892 + row
  893 + (
  894 + HTML_Cell($T) cell
  895 + )=
  896 + row([],[cell]).
  897 +
  898 +public define HTML_Row($T)
  899 + row
  900 + (
  901 + List(Cell_Option) options,
  902 + HTML_Cell($T) cell
  903 + )=
  904 + row(options,[cell]).
  905 +
  906 +public define HTML_Row($T)
  907 + row
  908 + (
  909 + Cell_Option option,
  910 + HTML_Cell($T) cell
  911 + )=
  912 + row([option],[cell]).
  913 +
  914 +public define HTML_Header_Row($T)
  915 + header_row
  916 + (
  917 + List(HTML_Header_Cell($T)) cells
  918 + ) =
  919 + header_row([],cells).
  920 +
  921 +public define HTML_Header_Row($T)
  922 + header_row
  923 + (
  924 + HTML_Header_Cell($T) cell
  925 + ) =
  926 + header_row([],[cell]).
  927 +
  928 +
  929 +
  930 +public define Actioner_Aspect
  931 + immediate_selector
  932 + (
  933 + List(CoreAttrs) core_attrs,
  934 + WebArgName name,
  935 + Int size,
  936 + List((List(CoreAttrs),WebArgValue,String)) choices
  937 + )=
  938 + immediate_selector(core_attrs, name, size, choices, failure, "")
  939 + .
  940 +
  941 +public define Actioner_Aspect
  942 + immediate_selector
  943 + (
  944 + List(CoreAttrs) core_attrs,
  945 + WebArgName name,
  946 + Int size,
  947 + List((List(CoreAttrs),WebArgValue,String)) choices,
  948 + Maybe(InitialValue) selected
  949 + )=
  950 + immediate_selector(core_attrs, name, size, choices, selected, "")
  951 + .
  952 +
  953 +
  954 +public define Actioner_Aspect
  955 + link
  956 + (
  957 + List(Text_Option) options,
  958 + String text
  959 + )=
  960 + link(options, text, failure).
  961 +
  962 +public define Actioner_Aspect
  963 + link
  964 + (
  965 + String text
  966 + ) =
  967 + link([], text, failure).
  968 +
  969 +
  970 +public define Actioner_Aspect
  971 + link
  972 + (
  973 + List(Text_Option) options,
  974 + Int i
  975 + ) =
  976 + link(options, to_decimal(i), failure).
  977 +
  978 +public define Actioner_Aspect
  979 + link
  980 + (
  981 + Int i
  982 + ) =
  983 + link([], i).
  984 +
  985 +public define Actioner_Aspect
  986 + button
  987 + (
  988 + String url_img
  989 + ) =
  990 + button(url_img,url_img).
  991 +
  992 + Actioners are explained in details below.
  993 +
  994 +
  995 +
  996 +
  997 +
  998 +public define String
  999 + to_String
  1000 + (
  1001 + CSS_File_Media css_file_media
  1002 + )=
  1003 + if css_file_media is
  1004 + {
  1005 + screen then "screen",
  1006 + tty then "tty",
  1007 + tv then "tv",
  1008 + projection then "projection",
  1009 + handheld then "handheld",
  1010 + print then "print",
  1011 + braille then "braille",
  1012 + aural then "aural",
  1013 + all then "all"
  1014 + }.
  1015 +
  1016 +
  1017 +//public type HTML_Meta:...
  1018 +
  1019 +
  1020 +
  1021 +public define HTML_Head_Tag
  1022 + js_script
  1023 + (
  1024 + String script_content
  1025 + )=
  1026 + js_inline(script("text/javascript", script_content))
  1027 +.
  1028 + /* Label with help */
  1029 +
  1030 +
  1031 +public define HTML_tooltip
  1032 + html_tooltip
  1033 + (
  1034 + String keyword,
  1035 + Int width
  1036 + )=
  1037 + html_tooltip("", keyword, width).
  1038 +
  1039 +public define HTML_tooltip
  1040 + html_tooltip
  1041 + (
  1042 + String title,
  1043 + String keyword
  1044 + )=
  1045 + html_tooltip(title, keyword, 0).
  1046 +
  1047 +
  1048 +
  1049 +public define HTML_Help
  1050 + tooltip
  1051 + (
  1052 + HTML_tooltip h_tooltip
  1053 + )=
  1054 + tooltip(h_tooltip, left)
  1055 +.
  1056 +
  1057 +
  1058 +
  1059 + /* It contains
  1060 + * - a List of HTML_Head_Tag representing necessaries head tags for the content. ex: jquery js files, js script, css specific styles, ...
  1061 + * - a HTML_Off_Form representing the HTML code for the part of the page we want to display
  1062 + */
  1063 +//public type HTML_In_Form:...
  1064 +
  1065 +
  1066 +
  1067 +public define List(HTML_Head_Tag)
  1068 + to_HTML_Head_Tag
  1069 + (
  1070 + List(CSS_File) css_file_list
  1071 + )=
  1072 + map((CSS_File css_f) |-> css(css_f), css_file_list).
  1073 +
  1074 +public define List(HTML_Head_Tag)
  1075 + to_HTML_Head_Tag
  1076 + (
  1077 + List(JS_File) js_file_list
  1078 + )=
  1079 + map((JS_File js_f) |-> js(js_f), js_file_list).
  1080 +
  1081 +
  1082 +
  1083 + 'HTML_In_Form' defines all the elements you may put within a form. We define a
  1084 + convenience function:
  1085 +
  1086 +
  1087 +public define HTML_Off_Form text_input(HTML_Label label, HTML_Id id, WebArgName name, InitialValue init, Int width) = text_input([], label, id, name, init, width).
  1088 +
  1089 +public define HTML_Off_Form literal(Printable_tree t) = literal_pt(t).
  1090 +
  1091 +public define HTML_Off_Form image(String url) = image([], url, url).
  1092 +
  1093 +public define HTML_Off_Form image(String url, Int width, Int height) = image([], url, url, width, height).
  1094 +
  1095 +public define HTML_In_Form
  1096 + foreign_link
  1097 + (
  1098 + Int tsize,
  1099 + String url,
  1100 + String name
  1101 + ) =
  1102 + foreign_link([size(tsize)],url,name).
  1103 +
  1104 +public define HTML_In_Form
  1105 +/* Older call with String as action instead of WEB_Action_Name.
  1106 + * This function exists only for compatibility with older project.
  1107 + * Please condiser to use above function instead
  1108 + */
  1109 + actioner
  1110 + (
  1111 + Actioner_Connection conn,
  1112 + Actioner_Target targ,
  1113 + Actioner_Aspect asp,
  1114 + String action,
  1115 + List((String,String)) extra_ops,
  1116 + List(Actioner_Local_Action) local_actions
  1117 + )=
  1118 + actioner(conn,targ,asp,action_name(action),extra_ops,local_actions)
  1119 +.
  1120 +
  1121 +public define HTML_In_Form
  1122 + actioner
  1123 + (
  1124 + Actioner_Connection conn,
  1125 + Actioner_Target targ,
  1126 + Actioner_Aspect asp,
  1127 + WEB_Action_Name action,
  1128 + List((String,String)) extra_ops
  1129 + )=
  1130 + actioner(conn,targ,asp,action,extra_ops,[])
  1131 +.
  1132 +
  1133 +public define HTML_In_Form
  1134 +/* Older call with String as action instead of WEB_Action_Name.
  1135 + * This function exists only for compatibility with older project.
  1136 + * Please condiser to use above function instead
  1137 + */
  1138 + actioner
  1139 + (
  1140 + Actioner_Connection conn,
  1141 + Actioner_Target targ,
  1142 + Actioner_Aspect asp,
  1143 + String action,
  1144 + List((String,String)) extra_ops
  1145 + )=
  1146 + actioner(conn,targ,asp,action_name(action),extra_ops,[])
  1147 +.
  1148 +
  1149 +public define HTML_In_Form
  1150 + actioner
  1151 + (
  1152 + Actioner_Connection conn,
  1153 + Actioner_Target targ,
  1154 + Actioner_Aspect asp,
  1155 + )=
  1156 + actioner(conn, targ, asp, action_name(""), [], []).
  1157 +
  1158 +
  1159 +public define HTML_In_Form
  1160 + text_area
  1161 + (
  1162 + WebArgName name,
  1163 + InitialValue init,
  1164 + Int width,
  1165 + Int height
  1166 + ) =
  1167 + text_area([], no_label, html_Id(""), name,init,width,height).
  1168 +
  1169 +public define HTML_In_Form
  1170 + text_area
  1171 + (
  1172 + List(TextAreaOption) options,
  1173 + WebArgName name,
  1174 + InitialValue init,
  1175 + Int width,
  1176 + Int height
  1177 + ) =
  1178 + text_area(options, no_label, html_Id(""), name,init,width,height).
  1179 +
  1180 +public define HTML_In_Form
  1181 + table
  1182 + (
  1183 + List(HTML_Row(HTML_In_Form)) rows
  1184 + ) =
  1185 + table([],empty,rows,empty).
  1186 +
  1187 +public define HTML_In_Form
  1188 + table
  1189 + (
  1190 + List(Table_Option) options,
  1191 + List(HTML_Row(HTML_In_Form)) rows
  1192 + ) =
  1193 + table(options,empty,rows,empty).
  1194 +
  1195 +public define HTML_In_Form
  1196 + table
  1197 + (
  1198 + HTML_Header_Row(HTML_In_Form) h_row,
  1199 + List(HTML_Row(HTML_In_Form)) rows
  1200 + ) =
  1201 + table([],h_row,rows,empty).
  1202 +
  1203 +public define HTML_In_Form
  1204 + table
  1205 + (
  1206 + List(Table_Option) options,
  1207 + HTML_Header_Row(HTML_In_Form) h_row,
  1208 + List(HTML_Row(HTML_In_Form)) rows
  1209 + ) =
  1210 + table(options,h_row,rows,empty).
  1211 +
  1212 +public define HTML_In_Form
  1213 + private_download
  1214 + (
  1215 + String abs_path,
  1216 + String name,
  1217 + String extra_ext
  1218 + ) =
  1219 + private_download(abs_path,name,extra_ext,failure).
  1220 +
  1221 +public define HTML_In_Form
  1222 + private_download
  1223 + (
  1224 + String abs_path,
  1225 + String name,
  1226 + String extra_ext,
  1227 + String action_name,
  1228 + List((String,String)) args
  1229 + ) =
  1230 + private_download(abs_path,name,extra_ext,success((action_name,args))).
  1231 +
  1232 +
  1233 +
  1234 +public define HTML_In_Form
  1235 + text
  1236 + (
  1237 + List(CoreAttrs) l,
  1238 + Int i
  1239 + ) =
  1240 + text(l, to_decimal(i)).
  1241 +
  1242 +public define HTML_In_Form
  1243 + text
  1244 + (
  1245 + String s
  1246 + )=
  1247 + text([],s)
  1248 +.
  1249 +
  1250 +public define HTML_In_Form
  1251 + text
  1252 + (
  1253 + Int i
  1254 + ) =
  1255 + text([], i)
  1256 +.
  1257 +
  1258 +public define HTML_In_Form
  1259 + div
  1260 + (
  1261 + HTML_In_Form element
  1262 + )=
  1263 + div([], [element])
  1264 +.
  1265 +
  1266 +public define HTML_In_Form
  1267 + div
  1268 + (
  1269 + List(CoreAttrs) attrs,
  1270 + HTML_In_Form element
  1271 + )=
  1272 + div(attrs, [element])
  1273 +.
  1274 +
  1275 +public define HTML_In_Form
  1276 + span
  1277 + (
  1278 + String s
  1279 + )=
  1280 + span([],s)
  1281 +.
  1282 +
  1283 +public define HTML_In_Form
  1284 + span
  1285 + (
  1286 + Int i
  1287 + ) =
  1288 + span([], to_decimal(i))
  1289 +.
  1290 +
  1291 +public define HTML_In_Form
  1292 + radio_button (List(CoreAttrs) options, HTML_Label label, WebArgName n, WebArgValue value, Bool checked)
  1293 + = radio_button (options, label, html_Id(n.name), n, value, checked).
  1294 +
  1295 +public define HTML_In_Form
  1296 + radio_button_r (List(CoreAttrs) options, HTML_Label label, WebArgName n, WebArgValue value, Bool checked)
  1297 + = radio_button_r (options, label, html_Id(n.name), n, value, checked).
  1298 +
  1299 +public define HTML_In_Form
  1300 + check_box (List(CoreAttrs) options, HTML_Label label, WebArgName n, Bool checked)
  1301 + = check_box (options, label, html_Id(n.name), n, checked).
  1302 +
  1303 +public define HTML_In_Form
  1304 + check_box_r (List(CoreAttrs) options, HTML_Label label, WebArgName n, Bool checked)
  1305 + = check_box_r (options, label, html_Id(n.name), n, checked).
  1306 +
  1307 +public define HTML_In_Form
  1308 + file_upload (WebArgName n, Int width)
  1309 + = file_upload([], no_label, html_Id(n.name), n, width).
  1310 +
  1311 +public define HTML_In_Form
  1312 + hidden (WebArgName name, WebArgValue value)
  1313 + =
  1314 + hidden(html_Id(""), name, value).
  1315 +
  1316 +public type Input_Type:
  1317 +button,
  1318 +checkbox,
  1319 +color,
  1320 +date,
  1321 +datetime_local,
  1322 +email,
  1323 +file,
  1324 +hidden,
  1325 +image,
  1326 +month,
  1327 +number,
  1328 +password,
  1329 +radio,
  1330 +range,
  1331 +reset,
  1332 +search,
  1333 +submit,
  1334 +tel,
  1335 +text,
  1336 +time,
  1337 +url,
  1338 +week
  1339 +.
  1340 +
  1341 +public define String
  1342 + to_String
  1343 + (
  1344 + Input_Type type
  1345 + )=
  1346 + if type is
  1347 + {
  1348 + button then "button",
  1349 + checkbox then "checkbox",
  1350 + color then "color",
  1351 + date then "date",
  1352 + datetime_local then "datetime_local",
  1353 + email then "email",
  1354 + file then "file",
  1355 + hidden then "hidden",
  1356 + image then "image",
  1357 + month then "month",
  1358 + number then "number",
  1359 + password then "password",
  1360 + radio then "radio",
  1361 + range then "range",
  1362 + reset then "reset",
  1363 + search then "search",
  1364 + submit then "submit",
  1365 + tel then "tel",
  1366 + text then "text",
  1367 + time then "time",
  1368 + url then "url",
  1369 + week then "week"
  1370 + }
  1371 +.
  1372 +
  1373 +define Printable_tree
  1374 + add_js_files_attributes
  1375 + (
  1376 + List(JS_Attribute) l
  1377 + ) =
  1378 + if l is
  1379 + {
  1380 + [ ] then [ ],
  1381 + [h . t] then
  1382 + [ " " + to_String(h)
  1383 + . add_js_files_attributes(t)]
  1384 + }
  1385 +.
  1386 +
  1387 +
  1388 +define Printable_tree
  1389 + add_js_files
  1390 + (
  1391 + List(JS_File) l
  1392 + ) =
  1393 + if l is
  1394 + {
  1395 + [ ] then [ ],
  1396 + [h . t] then
  1397 + [ ["<script src=\""+ file_name(h) +"\" type=\"text/javascript\""
  1398 + . add_js_files_attributes(attributes(h)) ]
  1399 + . ["></script>\n"
  1400 + . add_js_files(t)] ]
  1401 + }
  1402 +.
  1403 +
  1404 +define Printable_tree
  1405 + add_script
  1406 + (
  1407 + List(Script) l
  1408 + ) =
  1409 + if l is
  1410 + {
  1411 + [ ] then [ ],
  1412 + [h . t] then [ "<script type=\""+ script_type(h) +"\">\n"+ content(h) + "\n</script>\n" . add_script(t) ]
  1413 + }.
  1414 +
  1415 +public type FormMethod:
  1416 + get,
  1417 + post
  1418 +.
  1419 +
  1420 +//public type HTML_Body:...
  1421 +
  1422 +public define CoreAttrs formaction(WEB_Action_Name action, List((String,String)) extra_ops) = attr("formaction", format_web_action_name(action, extra_ops)).
  1423 +public define CoreAttrs formaction(WEB_Action_Name action, (String,String) extra_op) = attr("formaction", format_web_action_name(action, extra_op)).
  1424 +public define CoreAttrs formaction(WEB_Action_Name action) = attr("formaction", format_web_action_name(action)).
  1425 +public define CoreAttrs formmethod(FormMethod method) = attr("formmethod", if method is { get then "get", post then "post"}).
  1426 +
  1427 +
  1428 + 'HTML_Off_Form' defines all the elements you may put outside any form.
  1429 +
  1430 +
  1431 +public define CoreAttrs method(String value) = attr("method", value).
  1432 +public define CoreAttrs action(WEB_Action_Name action)= attr("action", "/"+format_web_action_name(action)).
  1433 +public define CoreAttrs action(WEB_Action_Name action, List((String,String)) extra_ops)= attr("action", "/"+format_web_action_name(action, extra_ops)).
  1434 +public define CoreAttrs formmethod(String value) = attr("formmethod", value).
  1435 +public define CoreAttrs form(String value) = attr("form", value).
  1436 +public define CoreAttrs for(String value) = attr("for", value).
  1437 +
  1438 +
  1439 +public define HTML_Off_Form text(List(CoreAttrs) attrs, Int i) = text(attrs, to_decimal(i)).
  1440 +public define HTML_Off_Form text(CoreAttrs attr, Int i) = text([attr], i).
  1441 +public define HTML_Off_Form text(Int i) = text([], i).
  1442 +public define HTML_Off_Form text(String s) = text([], s).
  1443 +public define HTML_Off_Form text(CoreAttrs attr, String s) = text([attr], s).
  1444 +
  1445 +public define HTML_Off_Form a(A_href _href) = a([], _href, _self, []).
  1446 +public define HTML_Off_Form a(List(CoreAttrs) attrs, A_href _href) = a(attrs, _href, _self, []).
  1447 +public define HTML_Off_Form a(List(CoreAttrs) attrs, A_href _href, HTML_Off_Form content) = a(attrs, _href, _self, [content]).
  1448 +public define HTML_Off_Form a(List(CoreAttrs) attrs, A_href _href, List(HTML_Off_Form) content) = a(attrs, _href, _self, content).
  1449 +public define HTML_Off_Form a(A_href _href, HTML_Off_Form content) = a([], _href, _self, [content]).
  1450 +public define HTML_Off_Form a(A_href _href, String _text) = a([], _href, _self, [text(_text)]).
  1451 +public define HTML_Off_Form a(A_href _href, List(HTML_Off_Form) content) = a([], _href, _self, content).
  1452 +public define HTML_Off_Form a(List(CoreAttrs) attrs, A_href _href, A_target _target, HTML_Off_Form content) = a(attrs, _href, _target, [content]).
  1453 +public define HTML_Off_Form a(CoreAttrs attr, A_href _href, A_target _target, HTML_Off_Form content) = a([attr], _href, _target, [content]).
  1454 +public define HTML_Off_Form a(A_href _href, A_target _target, HTML_Off_Form content) = a([], _href, _target, [content]).
  1455 +public define HTML_Off_Form a(A_href _href, A_target _target, List(HTML_Off_Form) content) = a([], _href, _target, content).
  1456 +public define HTML_Off_Form a(CoreAttrs attr, A_href _href, A_target _target, List(HTML_Off_Form) content) = a([attr], _href, _target, content).
  1457 +public define HTML_Off_Form a(CoreAttrs attr, A_href _href, List(HTML_Off_Form) content) = a([attr], _href, _self, content).
  1458 +public define HTML_Off_Form a(CoreAttrs attr, A_href _href, HTML_Off_Form content) = a([attr], _href, _self, [content]).
  1459 +
  1460 + // <article>
  1461 +public define HTML_Off_Form article(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("article", attrs, content).
  1462 +public define HTML_Off_Form article(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("article", attrs, [content]).
  1463 +public define HTML_Off_Form article(List(HTML_Off_Form) content) = html_tag("article", [], content).
  1464 +public define HTML_Off_Form article(HTML_Off_Form content) = html_tag("article", [], [content]).
  1465 +
  1466 + // <aside>
  1467 +public define HTML_Off_Form aside(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("aside", attrs, content).
  1468 +public define HTML_Off_Form aside(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("aside", attrs, [content]).
  1469 +public define HTML_Off_Form aside(List(HTML_Off_Form) content) = html_tag("aside", [], content).
  1470 +public define HTML_Off_Form aside(HTML_Off_Form content) = html_tag("aside", [], [content]).
  1471 +
  1472 + // <b> text in bold face
  1473 +public define HTML_Off_Form b(String string) = html_tag("b", [], [text(string)]).
  1474 +public define HTML_Off_Form b(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("b", attrs, [content]).
  1475 +public define HTML_Off_Form b(CoreAttrs attr, List(HTML_Off_Form) content) = html_tag("b", [attr], content).
  1476 +public define HTML_Off_Form b(CoreAttrs attr, HTML_Off_Form content) = html_tag("b", [attr], [content]).
  1477 +public define HTML_Off_Form b(List(CoreAttrs) attrs, String string) = html_tag("b", attrs, [text(string)]).
  1478 +public define HTML_Off_Form b(CoreAttrs attr, String string) = html_tag("b", [attr], [text(string)]).
  1479 +
  1480 + // <br>
  1481 +public define HTML_Off_Form br = html_void_tag("br", []).
  1482 +public define HTML_Off_Form br(List(CoreAttrs) attrs) = html_void_tag("br", attrs).
  1483 +
  1484 + // <button>
  1485 +public define HTML_Off_Form button(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("button", attrs, content).
  1486 +public define HTML_Off_Form button(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("button", attrs, [content]).
  1487 +public define HTML_Off_Form button(CoreAttrs attr, List(HTML_Off_Form) content) = html_tag("button", [attr], content).
  1488 +public define HTML_Off_Form button(CoreAttrs attr, HTML_Off_Form content) = html_tag("button", [attr], [content]).
  1489 +public define HTML_Off_Form button(List(CoreAttrs) attrs) = html_tag("button", attrs, []).
  1490 +public define HTML_Off_Form button(List(CoreAttrs) attrs, String string) = html_tag("button", attrs, [text(string)]).
  1491 +public define HTML_Off_Form button(List(HTML_Off_Form) content) = html_tag("button", [], content).
  1492 +public define HTML_Off_Form button(HTML_Off_Form content) = html_tag("button", [], [content]).
  1493 +
  1494 + // <canvas>
  1495 +public define HTML_Off_Form canvas(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("canvas", attrs, content).
  1496 +public define HTML_Off_Form canvas(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("canvas", attrs, [content]).
  1497 +public define HTML_Off_Form canvas(CoreAttrs attr, List(HTML_Off_Form) content) = html_tag("canvas", [attr], content).
  1498 +public define HTML_Off_Form canvas(CoreAttrs attr, HTML_Off_Form content) = html_tag("canvas", [attr], [content]).
  1499 +public define HTML_Off_Form canvas(List(CoreAttrs) attrs) = html_tag("canvas", attrs, []).
  1500 +public define HTML_Off_Form canvas(List(HTML_Off_Form) content) = html_tag("canvas", [], content).
  1501 +public define HTML_Off_Form canvas(HTML_Off_Form content) = html_tag("canvas", [], [content]).
  1502 +public define HTML_Off_Form canvas(CoreAttrs cattr, Int width, Int height) = html_tag("canvas", [cattr,
  1503 + attr("width", to_String(width)),
  1504 + attr("height", to_String(height))
  1505 + ], []).
  1506 +public define HTML_Off_Form canvas(List(CoreAttrs) attrs, Int width, Int height) = html_tag("canvas", [
  1507 + attr("width", to_String(width)),
  1508 + attr("height", to_String(height)).
  1509 + attrs
  1510 + ], []).
  1511 + // <datalist>
  1512 +public define HTML_Off_Form datalist(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("datalist", attrs, content).
  1513 +public define HTML_Off_Form datalist(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("datalist", attrs, [content]).
  1514 +public define HTML_Off_Form datalist(List(HTML_Off_Form) content) = html_tag("datalist", [], content).
  1515 +public define HTML_Off_Form datalist(HTML_Off_Form content) = html_tag("datalist", [], [content]).
  1516 +
  1517 + // <div>
  1518 +public define HTML_Off_Form div(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("div", attrs, content).
  1519 +public define HTML_Off_Form div(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("div", attrs, [content]).
  1520 +public define HTML_Off_Form div(CoreAttrs attr, List(HTML_Off_Form) content) = html_tag("div", [attr], content).
  1521 +public define HTML_Off_Form div(CoreAttrs attr, HTML_Off_Form content) = html_tag("div", [attr], [content]).
  1522 +public define HTML_Off_Form div(List(HTML_Off_Form) content) = html_tag("div", [], content).
  1523 +public define HTML_Off_Form div(HTML_Off_Form content) = html_tag("div", [], [content]).
  1524 +public define HTML_Off_Form div(List(CoreAttrs) attrs) = html_tag("div", attrs, []).
  1525 +public define HTML_Off_Form div(CoreAttrs attr) = html_tag("div", [attr], []).
  1526 +
  1527 +public define HTML_Off_Form div(String string) = html_tag("div", [], [text(string)]).
  1528 +public define HTML_Off_Form div(CoreAttrs attr, String string) = html_tag("div", [attr], [text(string)]).
  1529 +public define HTML_Off_Form div(List(CoreAttrs) attrs, String string) = html_tag("div", attrs, [text(string)]).
  1530 +
  1531 +public define HTML_Off_Form div(List(CoreAttrs) attrs, HTML_Partial_Content content) = div(attrs, [content]).
  1532 +public define HTML_Off_Form div(List(HTML_Partial_Content) content) = div([], content).
  1533 +public define HTML_Off_Form div(CoreAttrs attr, HTML_Partial_Content content) = div([attr], [content]).
  1534 +public define HTML_Off_Form div(HTML_Partial_Content content) = div([], [content]).
  1535 +
  1536 +//public define HTML_Partial_Content div(List(CoreAttrs) attrs, HTML_Partial_Content content) = partial_content([], div(attrs, [content])).
  1537 +//public define HTML_Partial_Content div(CoreAttrs attr, HTML_Partial_Content content) = partial_content([], div([attr], [content])).
  1538 +//public define HTML_Partial_Content div(List(HTML_Partial_Content) content) = partial_content([], div([], content)).
  1539 +//public define HTML_Partial_Content div(HTML_Partial_Content content) = partial_content([], div([], [content])).
  1540 +
  1541 + // <dd>
  1542 +public define HTML_Off_Form dd(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("dd", attrs, content).
  1543 +public define HTML_Off_Form dd(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("dd", attrs, [content]).
  1544 +public define HTML_Off_Form dd(List(HTML_Off_Form) content) = html_tag("dd", [], content).
  1545 +public define HTML_Off_Form dd(HTML_Off_Form content) = html_tag("dd", [], [content]).
  1546 +
  1547 + // <dl>
  1548 +public define HTML_Off_Form dl(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("dl", attrs, content).
  1549 +public define HTML_Off_Form dl(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("dl", attrs, [content]).
  1550 +public define HTML_Off_Form dl(List(HTML_Off_Form) content) = html_tag("dl", [], content).
  1551 +public define HTML_Off_Form dl(HTML_Off_Form content) = html_tag("dl", [], [content]).
  1552 +
  1553 + // <dt>
  1554 +public define HTML_Off_Form dt(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("dt", attrs, content).
  1555 +public define HTML_Off_Form dt(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("dt", attrs, [content]).
  1556 +public define HTML_Off_Form dt(List(HTML_Off_Form) content) = html_tag("dt", [], content).
  1557 +public define HTML_Off_Form dt(HTML_Off_Form content) = html_tag("dt", [], [content]).
  1558 +
  1559 + // <em>
  1560 +public define HTML_Off_Form em(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("em", attrs, content).
  1561 +public define HTML_Off_Form em(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("em", attrs, [content]).
  1562 +public define HTML_Off_Form em(List(HTML_Off_Form) content) = html_tag("em", [], content).
  1563 +public define HTML_Off_Form em(HTML_Off_Form content) = html_tag("em", [], [content]).
  1564 +
  1565 + // <fieldset>
  1566 +public define HTML_Off_Form fieldset(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("fieldset", attrs, content).
  1567 +public define HTML_Off_Form fieldset(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("fieldset", attrs, [content]).
  1568 +public define HTML_Off_Form fieldset(List(HTML_Off_Form) content) = html_tag("fieldset", [], content).
  1569 +public define HTML_Off_Form fieldset(HTML_Off_Form content) = html_tag("fieldset", [], [content]).
  1570 +
  1571 + // <footer>
  1572 +public define HTML_Off_Form footer(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("footer", attrs, content).
  1573 +public define HTML_Off_Form footer(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("footer", attrs, [content]).
  1574 +public define HTML_Off_Form footer(List(HTML_Off_Form) content) = html_tag("footer", [], content).
  1575 +public define HTML_Off_Form footer(HTML_Off_Form content) = html_tag("footer", [], [content]).
  1576 +
  1577 + // <form>
  1578 +public define HTML_Off_Form form(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("form", attrs, content).
  1579 +public define HTML_Off_Form form(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("form", attrs, [content]).
  1580 +public define HTML_Off_Form form(CoreAttrs attr, List(HTML_Off_Form) content) = html_tag("form", [attr], content).
  1581 +public define HTML_Off_Form form(CoreAttrs attr, HTML_Off_Form content) = html_tag("form", [attr], [content]).
  1582 +public define HTML_Off_Form form(List(CoreAttrs) attrs) = html_tag("form", attrs, []).
  1583 +public define HTML_Off_Form form(CoreAttrs attr) = html_tag("form", [attr], []).
  1584 +
  1585 +public define HTML_Off_Form form(List(HTML_Off_Form) content) = html_tag("form", [], content).
  1586 +public define HTML_Off_Form form(HTML_Off_Form content) = html_tag("form", [], [content]).
  1587 +
  1588 +
  1589 + // <header>
  1590 +public define HTML_Off_Form header(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("header", attrs, content).
  1591 +public define HTML_Off_Form header(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("header", attrs, [content]).
  1592 +public define HTML_Off_Form header(List(HTML_Off_Form) content) = html_tag("header", [], content).
  1593 +public define HTML_Off_Form header(HTML_Off_Form content) = html_tag("header", [], [content]).
  1594 +
  1595 + // <h1>
  1596 +public define HTML_Off_Form h1(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("h1", attrs, content).
  1597 +public define HTML_Off_Form h1(CoreAttrs attr, List(HTML_Off_Form) content) = html_tag("h1", [attr], content).
  1598 +public define HTML_Off_Form h1(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("h1", attrs, [content]).
  1599 +public define HTML_Off_Form h1(CoreAttrs attr, HTML_Off_Form content) = html_tag("h1", [attr], [content]).
  1600 +public define HTML_Off_Form h1(List(HTML_Off_Form) content) = html_tag("h1", [], content).
  1601 +public define HTML_Off_Form h1(HTML_Off_Form content) = html_tag("h1", [], [content]).
  1602 + // <h2>
  1603 +public define HTML_Off_Form h2(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("h2", attrs, content).
  1604 +public define HTML_Off_Form h2(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("h2", attrs, [content]).
  1605 +public define HTML_Off_Form h2(List(HTML_Off_Form) content) = html_tag("h2", [], content).
  1606 +public define HTML_Off_Form h2(HTML_Off_Form content) = html_tag("h2", [], [content]).
  1607 + // <h3>
  1608 +public define HTML_Off_Form h3(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("h3", attrs, content).
  1609 +public define HTML_Off_Form h3(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("h3", attrs, [content]).
  1610 +public define HTML_Off_Form h3(List(HTML_Off_Form) content) = html_tag("h3", [], content).
  1611 +public define HTML_Off_Form h3(HTML_Off_Form content) = html_tag("h3", [], [content]).
  1612 +public define HTML_Off_Form h3(String content) = html_tag("h3", [], [text(content)]).
  1613 +
  1614 + // <h4>
  1615 +public define HTML_Off_Form h4(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("h4", attrs, content).
  1616 +public define HTML_Off_Form h4(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("h4", attrs, [content]).
  1617 +public define HTML_Off_Form h4(List(HTML_Off_Form) content) = html_tag("h4", [], content).
  1618 +public define HTML_Off_Form h4(HTML_Off_Form content) = html_tag("h4", [], [content]).
  1619 + // <h5>
  1620 +public define HTML_Off_Form h5(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("h5", attrs, content).
  1621 +public define HTML_Off_Form h5(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("h5", attrs, [content]).
  1622 +public define HTML_Off_Form h5(List(HTML_Off_Form) content) = html_tag("h5", [], content).
  1623 +public define HTML_Off_Form h5(HTML_Off_Form content) = html_tag("h5", [], [content]).
  1624 +
  1625 + // <h6>
  1626 +public define HTML_Off_Form h6(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("h6", attrs, content).
  1627 +public define HTML_Off_Form h6(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("h6", attrs, [content]).
  1628 +public define HTML_Off_Form h6(List(HTML_Off_Form) content) = html_tag("h6", [], content).
  1629 +public define HTML_Off_Form h6(HTML_Off_Form content) = html_tag("h6", [], [content]).
  1630 +
  1631 + // <hr>
  1632 +public define HTML_Off_Form hr = html_void_tag("hr", []).
  1633 +public define HTML_Off_Form hr(List(CoreAttrs) attrs) = html_void_tag("hr", attrs).
  1634 +public define HTML_Off_Form hr(CoreAttrs attr) = html_void_tag("hr", [attr]).
  1635 +
  1636 + // <i>
  1637 +public define HTML_Off_Form i(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("i", attrs, content).
  1638 +public define HTML_Off_Form i(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("i", attrs, [content]).
  1639 +public define HTML_Off_Form i(CoreAttrs attr, List(HTML_Off_Form) content) = html_tag("i", [attr], content).
  1640 +public define HTML_Off_Form i(CoreAttrs attr, HTML_Off_Form content) = html_tag("i", [attr], [content]).
  1641 +public define HTML_Off_Form i(List(HTML_Off_Form) content) = html_tag("i", [], content).
  1642 +public define HTML_Off_Form i(HTML_Off_Form content) = html_tag("i", [], [content]).
  1643 +public define HTML_Off_Form i(String string) = html_tag("i", [], [text(string)]).
  1644 +public define HTML_Off_Form i(CoreAttrs attr, String string) = html_tag("i", [attr], [text(string)]).
  1645 +public define HTML_Off_Form i(List(CoreAttrs) attrs, String string) = html_tag("i", attrs, [text(string)]).
  1646 +
  1647 + // <iframe>
  1648 +public define HTML_Off_Form iframe(CoreAttrs _attr, String src, Int width, Int height) =
  1649 + html_tag("iframe", [_attr, attr("src",src), width_px(width), height_px(height)], []).
  1650 +public define HTML_Off_Form iframe(String src, Int width, Int height) =
  1651 + html_tag("iframe", [attr("src",src), width_px(width), height_px(height)], []).
  1652 +public define HTML_Off_Form iframe(String src) = html_tag("iframe", [attr("src",src)], []).
  1653 +
  1654 + // <input>
  1655 +public define HTML_Off_Form input(List(CoreAttrs) attrs) = html_void_tag("input", attrs).
  1656 +public define HTML_Off_Form input(CoreAttrs attr) = html_void_tag("input", [attr]).
  1657 +
  1658 +public define CoreAttrs type(Input_Type value)= attr("type", to_String(value)).
  1659 +public define CoreAttrs type(String value)= attr("type", value).
  1660 +public define CoreAttrs name(String value)= attr("name", value).
  1661 +public define CoreAttrs value(String value)= attr("value", value).
  1662 +public define CoreAttrs placeholder(String value) = attr("placeholder", value).
  1663 +public define CoreAttrs init(String value)= attr("value", encode_HTML_entities(value)).
  1664 + //-- BEGIN of <input> preset type
  1665 +
  1666 +public define HTML_Off_Form text_input(List(CoreAttrs) options, HTML_Label label_text, WebArgName _name, InitialValue _init, Int w) =
  1667 + sequence([
  1668 + format_label(label_text),
  1669 + input([class("in"), id(_id), name(_name), value(_int), size(w), options])
  1670 + ]).
  1671 +
  1672 + /// Checkbox
  1673 +public define HTML_Off_Form checkbox(List(CoreAttrs) attrs, String _name, String _form, Bool checked) = input([type(checkbox), name(_name), form(_form), bool_attr(checked, "checked") . attrs]).
  1674 +public define HTML_Off_Form checkbox(List(CoreAttrs) attrs, String _name, Bool checked) = input([type(checkbox), name(_name), bool_attr(checked, "checked") . attrs]).
  1675 +public define HTML_Off_Form checkbox(String name, String form, Bool checked) = checkbox([], name, form, checked).
  1676 +public define HTML_Off_Form checkbox(String name, Bool checked) = checkbox([], name, checked).
  1677 +
  1678 + /// Radio button
  1679 +public define HTML_Off_Form radio(List(CoreAttrs) attrs, String _name, String _value, String _form, Bool checked) = input([type(radio), name(_name), value(_value), form(_form), bool_attr(checked, "checked") . attrs]).
  1680 +public define HTML_Off_Form radio(List(CoreAttrs) attrs, String name, String value, String form) = radio(attrs, name, value, form, false).
  1681 +public define HTML_Off_Form radio(String name, String value, String form, Bool checked) = radio([], name, value, form, checked).
  1682 +public define HTML_Off_Form radio(String name, String value, String form) = radio([], name, value, form, false).
  1683 +
  1684 + /// hidden value
  1685 +public define HTML_Off_Form hidden(List(CoreAttrs) attrs, String name, String value, String form) = input([type("hidden"), attr("name",name), attr("value",value), attr("form", form) . attrs]).
  1686 +public define HTML_Off_Form hidden(CoreAttrs attr, String name, String value, String form) = hidden([attr], name, value, form).
  1687 +public define HTML_Off_Form hidden(String name, String value, String form) = hidden([], name, value, form).
  1688 +public define HTML_Off_Form hidden(String _name, String _value) = input([type("hidden"), name(_name), value(_value)]).
  1689 +
  1690 + //-- END of <input> preset type
  1691 +
  1692 + // <img>
  1693 +public define HTML_Off_Form img(List(CoreAttrs) attrs, String src, String alt) = html_void_tag("img", attrs + [attr("src",src), attr("alt",alt)] ).
  1694 +public define HTML_Off_Form img(CoreAttrs _attr, String src, String alt) = html_void_tag("img", [_attr, attr("src",src), attr("alt",alt)] ).
  1695 +public define HTML_Off_Form img(String src) = img([], src, "").
  1696 +public define HTML_Off_Form img(String src, String alt) = img([], src, alt).
  1697 +public define HTML_Off_Form img(List(CoreAttrs) attrs, String src) = img(attrs, src, "").
  1698 +public define HTML_Off_Form img(CoreAttrs attr, String src) = img([attr], src, "").
  1699 +public define HTML_Off_Form img(String src, Int width, Int height) = img([attr("width",to_String(width)+"px"), attr("height",to_String(height)+"px")], src, src).
  1700 +public define HTML_Off_Form img(String src, String alt, Int width, Int height) =
  1701 + html_void_tag("img", [attr("src",src), attr("alt",alt), attr("width",to_String(width)+"px"), attr("height",to_String(height)+"px")]).
  1702 +
  1703 +public define HTML_Off_Form img(List(CoreAttrs) attrs, String src, String alt, Int width, Int height) =
  1704 + html_void_tag("img", attrs + [attr("src",src), attr("alt",alt), attr("width",to_String(width)+"px"), attr("height",to_String(height)+"px")]).
  1705 +
  1706 +public define HTML_Off_Form img(CoreAttrs _attr, String src, String alt, Int width, Int height) =
  1707 + html_void_tag("img", [_attr, attr("src",src), attr("alt",alt), width_px(width), height_px(height)]).
  1708 +
  1709 + // <label>
  1710 +public define HTML_Off_Form label(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("label", attrs, content).
  1711 +public define HTML_Off_Form label(CoreAttrs attr, List(HTML_Off_Form) content) = html_tag("label", [attr], content).
  1712 +public define HTML_Off_Form label(List(HTML_Off_Form) content) = html_tag("label", [], content).
  1713 +public define HTML_Off_Form label(HTML_Off_Form content) = html_tag("label", [], [content]).
  1714 +public define HTML_Off_Form label(String string) = html_tag("label", [], [text(string)]).
  1715 +public define HTML_Off_Form label(CoreAttrs attr, String string) = html_tag("label", [attr], [text(string)]).
  1716 +public define HTML_Off_Form label(List(CoreAttrs) attrs, String string) = html_tag("label", attrs, [text(string)]).
  1717 +
  1718 + // <legend>
  1719 +public define HTML_Off_Form legend(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("legend", attrs, content).
  1720 +public define HTML_Off_Form legend(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("legend", attrs, [content]).
  1721 +public define HTML_Off_Form legend(CoreAttrs attr, List(HTML_Off_Form) content) = html_tag("legend", [attr], content).
  1722 +public define HTML_Off_Form legend(CoreAttrs attr, HTML_Off_Form content) = html_tag("legend", [attr], [content]).
  1723 +public define HTML_Off_Form legend(List(HTML_Off_Form) content) = html_tag("legend", [], content).
  1724 +public define HTML_Off_Form legend(HTML_Off_Form content) = html_tag("legend", [], [content]).
  1725 +
  1726 + // <li>
  1727 +public define HTML_Off_Form li(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("li", attrs, content).
  1728 +public define HTML_Off_Form li(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("li", attrs, [content]).
  1729 +public define HTML_Off_Form li(CoreAttrs attr, List(HTML_Off_Form) content) = html_tag("li", [attr], content).
  1730 +public define HTML_Off_Form li(CoreAttrs attr, HTML_Off_Form content) = html_tag("li", [attr], [content]).
  1731 +public define HTML_Off_Form li(List(HTML_Off_Form) content) = html_tag("li", [], content).
  1732 +public define HTML_Off_Form li(HTML_Off_Form content) = html_tag("li", [], [content]).
  1733 +public define HTML_Off_Form li(String string) = html_tag("li", [], [text(string)]).
  1734 +public define HTML_Off_Form li(CoreAttrs attr, String string) = html_tag("li", [attr], [text(string)]).
  1735 +public define HTML_Off_Form li(List(CoreAttrs) attrs, String string) = html_tag("li", attrs, [text(string)]).
  1736 +
  1737 + // <main>
  1738 +public define HTML_Off_Form main(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("main", attrs, content).
  1739 +public define HTML_Off_Form main(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("main", attrs, [content]).
  1740 +public define HTML_Off_Form main(CoreAttrs attr, List(HTML_Off_Form) content) = html_tag("main", [attr], content).
  1741 +public define HTML_Off_Form main(CoreAttrs attr, HTML_Off_Form content) = html_tag("main", [attr], [content]).
  1742 +public define HTML_Off_Form main(List(HTML_Off_Form) content) = html_tag("main", [], content).
  1743 +public define HTML_Off_Form main(HTML_Off_Form content) = html_tag("main", [], [content]).
  1744 +
  1745 + // <nav>
  1746 +public define HTML_Off_Form nav(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("nav", attrs, content).
  1747 +public define HTML_Off_Form nav(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("nav", attrs, [content]).
  1748 +public define HTML_Off_Form nav(CoreAttrs attr, List(HTML_Off_Form) content) = html_tag("nav", [attr], content).
  1749 +public define HTML_Off_Form nav(CoreAttrs attr, HTML_Off_Form content) = html_tag("nav", [attr], [content]).
  1750 +public define HTML_Off_Form nav(List(HTML_Off_Form) content) = html_tag("nav", [], content).
  1751 +public define HTML_Off_Form nav(HTML_Off_Form content) = html_tag("nav", [], [content]).
  1752 +
  1753 + // <ol>
  1754 +public define HTML_Off_Form ol(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("ol", attrs, content).
  1755 +public define HTML_Off_Form ol(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("ol", attrs, [content]).
  1756 +public define HTML_Off_Form ol(List(HTML_Off_Form) content) = html_tag("ol", [], content).
  1757 +public define HTML_Off_Form ol(HTML_Off_Form content) = html_tag("ol", [], [content]).
  1758 +
  1759 + // <option>
  1760 +public define HTML_Off_Form option(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("option", attrs, content).
  1761 +public define HTML_Off_Form option(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("option", attrs, [content]).
  1762 +public define HTML_Off_Form option(List(HTML_Off_Form) content) = html_tag("option", [], content).
  1763 +public define HTML_Off_Form option(CoreAttrs attr, HTML_Off_Form content) = html_tag("option", [attr], [content]).
  1764 +public define HTML_Off_Form option(HTML_Off_Form content) = html_tag("option", [], [content]).
  1765 +public define HTML_Off_Form option(String _value, String _text) = html_tag("option", [value(_value)], [text(_text)]).
  1766 + // <p>
  1767 +public define HTML_Off_Form p(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("p", attrs, content).
  1768 +public define HTML_Off_Form p(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("p", attrs, [content]).
  1769 +public define HTML_Off_Form p(CoreAttrs attr, List(HTML_Off_Form) content) = html_tag("p", [attr], content).
  1770 +public define HTML_Off_Form p(CoreAttrs attr, HTML_Off_Form content) = html_tag("p", [attr], [content]).
  1771 +public define HTML_Off_Form p(CoreAttrs attr, String _text) = html_tag("p", [attr], [text(_text)]).
  1772 +public define HTML_Off_Form p(List(HTML_Off_Form) content) = html_tag("p", [], content).
  1773 +public define HTML_Off_Form p(HTML_Off_Form content) = html_tag("p", [], [content]).
  1774 +
  1775 + // <pre> preformatted
  1776 +public define HTML_Off_Form pre(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("pre", attrs, content).
  1777 +public define HTML_Off_Form pre(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("pre", attrs, [content]).
  1778 +public define HTML_Off_Form pre(CoreAttrs attr, List(HTML_Off_Form) content) = html_tag("pre", [attr], content).
  1779 +public define HTML_Off_Form pre(CoreAttrs attr, HTML_Off_Form content) = html_tag("pre", [attr], [content]).
  1780 +public define HTML_Off_Form pre(List(HTML_Off_Form) content) = html_tag("pre", [], content).
  1781 +public define HTML_Off_Form pre(HTML_Off_Form content) = html_tag("pre", [], [content]).
  1782 +public define HTML_Off_Form pre(String string) = html_tag("pre", [], [text(string)]).
  1783 +public define HTML_Off_Form pre(CoreAttrs attr, String string) = html_tag("pre", [attr], [text(string)]).
  1784 +public define HTML_Off_Form pre(List(CoreAttrs) attrs, String string) = html_tag("pre", attrs, [text(string)]).
  1785 +
  1786 + // <progress>
  1787 +public define HTML_Off_Form progress(List(CoreAttrs) attrs, Int value, Int max, List(HTML_Off_Form) content) = html_tag("progress", [attr("value", value), attr("max", max) . attrs], content).
  1788 +public define HTML_Off_Form progress(List(CoreAttrs) attrs, Int value, Int max, HTML_Off_Form content) = html_tag("progress", [attr("value", value), attr("max", max) . attrs], [content]).
  1789 +public define HTML_Off_Form progress(CoreAttrs _attr, Int value, Int max, HTML_Off_Form content) = html_tag("progress", [attr("value", value), attr("max", max) , _attr], [content]).
  1790 +public define HTML_Off_Form progress(Int value, Int max, HTML_Off_Form content) = html_tag("progress", [attr("value", value), attr("max", max)], [content]).
  1791 +public define HTML_Off_Form progress(List(CoreAttrs) attrs, Int value, Int max, String content) = html_tag("progress", [attr("value", value), attr("max", max) . attrs], [text(content)]).
  1792 +public define HTML_Off_Form progress(CoreAttrs _attr, Int value, Int max, String content) = html_tag("progress", [attr("value", value), attr("max", max), _attr], [text(content)]).
  1793 +public define HTML_Off_Form progress(List(CoreAttrs) attrs, Int value, Int max) = html_tag("progress", [attr("value", value), attr("max", max) . attrs], []).
  1794 +public define HTML_Off_Form progress(CoreAttrs _attr, Int value, Int max) = html_tag("progress", [attr("value", value), attr("max", max), _attr], []).
  1795 +public define HTML_Off_Form progress(Int value, Int max, String content) = html_tag("progress", [attr("value", value), attr("max", max)], [text(content)]).
  1796 +public define HTML_Off_Form progress(Int value, Int max) = html_tag("progress", [attr("value", value), attr("max", max)], []).
  1797 +
  1798 + // <script>
  1799 +public define HTML_Off_Form script(String file_name, List(JS_Attribute) attrs) = literal_pt(add_js_files([js_file(file_name, attrs)])).
  1800 +public define HTML_Off_Form script(String content) = literal_pt(add_script([script("text/javascript", content)])).
  1801 +
  1802 + // <section>
  1803 +public define HTML_Off_Form section(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("section", attrs, content).
  1804 +public define HTML_Off_Form section(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("section", attrs, [content]).
  1805 +public define HTML_Off_Form section(List(HTML_Off_Form) content) = html_tag("section", [], content).
  1806 +public define HTML_Off_Form section(HTML_Off_Form content) = html_tag("section", [], [content]).
  1807 +
  1808 + // <select>
  1809 +public define HTML_Off_Form select(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("select", attrs, content).
  1810 +public define HTML_Off_Form select(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("select", attrs, [content]).
  1811 +public define HTML_Off_Form select(List(CoreAttrs) attrs) = html_tag("select", attrs, []).
  1812 +public define HTML_Off_Form select(List(HTML_Off_Form) content) = html_tag("select", [], content).
  1813 +public define HTML_Off_Form select(HTML_Off_Form content) = html_tag("select", [], [content]).
  1814 +
  1815 +
  1816 + // <span>
  1817 +public define HTML_Off_Form span(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("span", attrs, content).
  1818 +public define HTML_Off_Form span(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("span", attrs, [content]).
  1819 +public define HTML_Off_Form span(CoreAttrs attr, List(HTML_Off_Form) content) = html_tag("span", [attr], content).
  1820 +public define HTML_Off_Form span(CoreAttrs attr, HTML_Off_Form content) = html_tag("span", [attr], [content]).
  1821 +public define HTML_Off_Form span(List(HTML_Off_Form) content) = html_tag("span", [], content).
  1822 +public define HTML_Off_Form span(HTML_Off_Form content) = html_tag("span", [], [content]).
  1823 +public define HTML_Off_Form span(Int i) = html_tag("span", [], [text(to_decimal(i))]).
  1824 +public define HTML_Off_Form span(List(CoreAttrs) attrs, String s) = html_tag("span", attrs, [text(s)]).
  1825 +public define HTML_Off_Form span(CoreAttrs attr, String s) = html_tag("span", [attr],[text(s)]).
  1826 +public define HTML_Off_Form span(String s) = html_tag("span", [], [text(s)]).
  1827 +public define HTML_Off_Form span(List(CoreAttrs) attrs) = html_tag("span", attrs, []).
  1828 +public define HTML_Off_Form span(CoreAttrs attr) = html_tag("span", [attr],[]).
  1829 +
  1830 + // <strong>
  1831 +public define HTML_Off_Form strong(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("strong", attrs, content).
  1832 +public define HTML_Off_Form strong(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("strong", attrs, [content]).
  1833 +public define HTML_Off_Form strong(CoreAttrs attr, List(HTML_Off_Form) content) = html_tag("strong", [attr], content).
  1834 +public define HTML_Off_Form strong(CoreAttrs attr, HTML_Off_Form content) = html_tag("strong", [attr], [content]).
  1835 +public define HTML_Off_Form strong(List(HTML_Off_Form) content) = html_tag("strong", [], content).
  1836 +public define HTML_Off_Form strong(HTML_Off_Form content) = html_tag("strong", [], [content]).
  1837 +
  1838 + // <svg>
  1839 +public define HTML_Off_Form svg(List(CoreAttrs) attrs) = html_tag("svg", attrs, []).
  1840 +
  1841 +
  1842 + // <table>
  1843 +public define HTML_Off_Form table(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("table", attrs, content).
  1844 +public define HTML_Off_Form table(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("table", attrs, [content]).
  1845 +public define HTML_Off_Form table(CoreAttrs attr, List(HTML_Off_Form) content) = html_tag("table", [attr], content).
  1846 +public define HTML_Off_Form table(CoreAttrs attr, HTML_Off_Form content) = html_tag("table", [attr], [content]).
  1847 +public define HTML_Off_Form table(List(HTML_Off_Form) content) = html_tag("table", [], content).
  1848 +public define HTML_Off_Form table(HTML_Off_Form content) = html_tag("table", [], [content]).
  1849 +
  1850 + // <textarea>
  1851 + // CoreAttrs for textarea
  1852 +public define CoreAttrs wrap_lines = attr("wrap", "hard").
  1853 +public define CoreAttrs read_only = bool_attr(true, "readonly").
  1854 +public define CoreAttrs cols(Int value) = attr("cols",to_String(value)).
  1855 +public define CoreAttrs rows(Int value) = attr("rows",to_String(value)).
  1856 +
  1857 +public define HTML_Off_Form textarea(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("textarea", attrs, content).
  1858 +public define HTML_Off_Form textarea(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("textarea", attrs, [content]).
  1859 +
  1860 +public define HTML_Off_Form textarea(List(CoreAttrs) attrs, Int _cols, Int _rows, List(HTML_Off_Form) content)
  1861 + = html_tag("textarea", [cols(_cols), rows(_rows) . attrs], content).
  1862 +
  1863 +public define HTML_Off_Form textarea(List(CoreAttrs) attrs, Int _cols, Int _rows, HTML_Off_Form content)
  1864 + = html_tag("textarea", [cols(_cols), rows(_rows) . attrs], [content]).
  1865 +
  1866 +public define HTML_Off_Form textarea(Int _cols, Int _rows, HTML_Off_Form content) = html_tag("textarea", [cols(_cols), rows(_rows)], [content]).
  1867 +public define HTML_Off_Form textarea(CoreAttrs attr, List(HTML_Off_Form) content) = html_tag("textarea", [attr], content).
  1868 +public define HTML_Off_Form textarea(CoreAttrs attr, HTML_Off_Form content) = html_tag("textarea", [attr], [content]).
  1869 +
  1870 + // <thead>
  1871 +public define HTML_Off_Form thead(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("thead", attrs, content).
  1872 +public define HTML_Off_Form thead(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("thead", attrs, [content]).
  1873 +public define HTML_Off_Form thead(CoreAttrs attr, List(HTML_Off_Form) content) = html_tag("thead", [attr], content).
  1874 +public define HTML_Off_Form thead(CoreAttrs attr, HTML_Off_Form content) = html_tag("thead", [attr], [content]).
  1875 +public define HTML_Off_Form thead(List(HTML_Off_Form) content) = html_tag("thead", [], content).
  1876 +public define HTML_Off_Form thead(HTML_Off_Form content) = html_tag("thead", [], [content]).
  1877 +
  1878 + // <tbody>
  1879 +public define HTML_Off_Form tbody(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("tbody", attrs, content).
  1880 +public define HTML_Off_Form tbody(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("tbody", attrs, [content]).
  1881 +public define HTML_Off_Form tbody(CoreAttrs attr, List(HTML_Off_Form) content) = html_tag("tbody", [attr], content).
  1882 +public define HTML_Off_Form tbody(CoreAttrs attr, HTML_Off_Form content) = html_tag("tbody", [attr], [content]).
  1883 +public define HTML_Off_Form tbody(List(HTML_Off_Form) content) = html_tag("tbody", [], content).
  1884 +public define HTML_Off_Form tbody(HTML_Off_Form content) = html_tag("tbody", [], [content]).
  1885 +
  1886 + // <tfoot>
  1887 +public define HTML_Off_Form tfoot(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("tfoot", attrs, content).
  1888 +public define HTML_Off_Form tfoot(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("tfoot", attrs, [content]).
  1889 +public define HTML_Off_Form tfoot(CoreAttrs attr, List(HTML_Off_Form) content) = html_tag("tfoot", [attr], content).
  1890 +public define HTML_Off_Form tfoot(CoreAttrs attr, HTML_Off_Form content) = html_tag("tfoot", [attr], [content]).
  1891 +public define HTML_Off_Form tfoot(List(HTML_Off_Form) content) = html_tag("tfoot", [], content).
  1892 +public define HTML_Off_Form tfoot(HTML_Off_Form content) = html_tag("tfoot", [], [content]).
  1893 +
  1894 + // <th>
  1895 +public define HTML_Off_Form th(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("th", attrs, content).
  1896 +public define HTML_Off_Form th(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("th", attrs, [content]).
  1897 +public define HTML_Off_Form th(CoreAttrs attr, List(HTML_Off_Form) content) = html_tag("th", [attr], content).
  1898 +public define HTML_Off_Form th(CoreAttrs attr, HTML_Off_Form content) = html_tag("th", [attr], [content]).
  1899 +public define HTML_Off_Form th(CoreAttrs attr) = html_tag("th", [attr], []).
  1900 +public define HTML_Off_Form th(List(HTML_Off_Form) content) = html_tag("th", [], content).
  1901 +public define HTML_Off_Form th(HTML_Off_Form content) = html_tag("th", [], [content]).
  1902 +public define HTML_Off_Form th(String string) = html_tag("th", [], [text(string)]).
  1903 +public define HTML_Off_Form th(CoreAttrs attr, String string) = html_tag("th", [attr], [text(string)]).
  1904 +public define HTML_Off_Form th(List(CoreAttrs) attrs, String string) = html_tag("th", attrs, [text(string)]).
  1905 +public define HTML_Off_Form th = html_tag("th", [], []).
  1906 +
  1907 + // <td>
  1908 + // CoreAttrs for <td>
  1909 +//public define CoreAttrs colspan(Int value) = attr("colspan", to_String(value)).
  1910 +//public define CoreAttrs rowspan(Int value) = attr("rowspan", to_String(value)).
  1911 +//public define CoreAttrs headers(String header_id) = attr("headers", header_id).
  1912 +
  1913 +public define HTML_Off_Form td(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("td", attrs, content).
  1914 +public define HTML_Off_Form td(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("td", attrs, [content]).
  1915 +public define HTML_Off_Form td(CoreAttrs attr, List(HTML_Off_Form) content) = html_tag("td", [attr], content).
  1916 +public define HTML_Off_Form td(CoreAttrs attr, HTML_Off_Form content) = html_tag("td", [attr], [content]).
  1917 +public define HTML_Off_Form td(List(HTML_Off_Form) content) = html_tag("td", [], content).
  1918 +public define HTML_Off_Form td(HTML_Off_Form content) = html_tag("td", [], [content]).
  1919 +public define HTML_Off_Form td(List(CoreAttrs) attrs, String string) = html_tag("td", attrs, [text(string)]).
  1920 +public define HTML_Off_Form td(CoreAttrs attr, String string) = html_tag("td", [attr], [text(string)]).
  1921 +public define HTML_Off_Form td(String string) = html_tag("td", [], [text(string)]).
  1922 +public define HTML_Off_Form td(List(CoreAttrs) attrs, Int i) = html_tag("td", attrs, [text(to_decimal(i))]).
  1923 +public define HTML_Off_Form td(CoreAttrs attr, Int i) = html_tag("td", [attr], [text(to_decimal(i))]).
  1924 +public define HTML_Off_Form td(Int i) = html_tag("td", [], [text(to_decimal(i))]).
  1925 +
  1926 + // <tr>
  1927 +public define HTML_Off_Form tr(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("tr", attrs, content).
  1928 +public define HTML_Off_Form tr(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("tr", attrs, [content]).
  1929 +public define HTML_Off_Form tr(CoreAttrs attr, List(HTML_Off_Form) content) = html_tag("tr", [attr], content).
  1930 +public define HTML_Off_Form tr(CoreAttrs attr, HTML_Off_Form content) = html_tag("tr", [attr], [content]).
  1931 +public define HTML_Off_Form tr(List(HTML_Off_Form) content) = html_tag("tr", [], content).
  1932 +public define HTML_Off_Form tr(HTML_Off_Form content) = html_tag("tr", [], [content]).
  1933 +
  1934 + // <ul>
  1935 +public define HTML_Off_Form ul(List(CoreAttrs) attrs, List(HTML_Off_Form) content) = html_tag("ul", attrs, content).
  1936 +public define HTML_Off_Form ul(List(CoreAttrs) attrs, HTML_Off_Form content) = html_tag("ul", attrs, [content]).
  1937 +public define HTML_Off_Form ul(CoreAttrs attr, List(HTML_Off_Form) content) = html_tag("ul", [attr], content).
  1938 +public define HTML_Off_Form ul(CoreAttrs attr, HTML_Off_Form content) = html_tag("ul", [attr], [content]).
  1939 +public define HTML_Off_Form ul(List(HTML_Off_Form) content) = html_tag("ul", [], content).
  1940 +public define HTML_Off_Form ul(HTML_Off_Form content) = html_tag("ul", [], [content]).
  1941 +
  1942 +//public define HTML_Off_Form empty = html_tag(
  1943 +
  1944 +//public define HTML_Off_Form
  1945 +// form
  1946 +// (
  1947 +// String form_name,
  1948 +// List(CoreAttrs) options,
  1949 +// HTML_Off_Form content
  1950 +// ) =
  1951 +// form([id(form_name). options], [content]).
  1952 +
  1953 +//public define HTML_Off_Form
  1954 +// form
  1955 +// (
  1956 +// String form_name,
  1957 +// List(CoreAttrs) options,
  1958 +// List(HTML_Off_Form) contents
  1959 +// ) =
  1960 +// form([id(form_name) . options], contents).
  1961 +
  1962 +public define HTML_Off_Form
  1963 + form
  1964 + (
  1965 + List(CoreAttrs) options,
  1966 + WEB_Action_Name _action,
  1967 + List((String,String)) extra_ops,
  1968 + HTML_Off_Form content
  1969 + ) =
  1970 + form([action(_action, extra_ops). options], [content]).
  1971 +
  1972 +//public define HTML_Off_Form
  1973 +// form
  1974 +// (
  1975 +// List(CoreAttrs) options,
  1976 +// WEB_Action_Name action,
  1977 +// List((String,String)) extra_ops,
  1978 +// HTML_Off_Form content
  1979 +// ) =
  1980 +// form(options, action, extra_ops, [content]).
  1981 +
  1982 +public define HTML_Off_Form
  1983 + form
  1984 + (
  1985 + List(CoreAttrs) options,
  1986 + WEB_Action_Name action,
  1987 + List((String,String)) extra_ops,
  1988 + List(HTML_Off_Form) contents
  1989 + ) =
  1990 + form(options, action, extra_ops, contents).
  1991 +
  1992 +public define HTML_Off_Form
  1993 + form
  1994 + (
  1995 + List(CoreAttrs) options,
  1996 + String action,
  1997 + List((String,String)) extra_ops,
  1998 + HTML_Off_Form content
  1999 + ) =
  2000 + form(options, action_name(action), extra_ops, [content]).
  2001 +
  2002 +public define HTML_Off_Form
  2003 + form
  2004 + (
  2005 + String form_name,
  2006 + List(CoreAttrs) options,
  2007 + String action,
  2008 + List((String,String)) extra_ops,
  2009 + List(HTML_Off_Form) contents
  2010 + ) =
  2011 + form(options, action_name(action), extra_ops, contents).
  2012 +
  2013 +public define HTML_Off_Form literal(Printable_tree t) = literal_pt(t).
  2014 +//public define HTML_Off_Form fixed_size(HTML_Size width, HTML_Size height, String name_of_HTML_file)
  2015 +// = fixed_size_2(width,height,name_of_HTML_file).
  2016 +
  2017 +
  2018 +public define HTML_Off_Form
  2019 + foreign_link
  2020 + (
  2021 + Int tsize,
  2022 + String url,
  2023 + String name
  2024 + ) =
  2025 + foreign_link([size(tsize)],url,name).
  2026 +
  2027 +
  2028 +public define HTML_Off_Form
  2029 + actioner
  2030 + (
  2031 + Actioner_Connection conn,
  2032 + Actioner_Target targ,
  2033 + Actioner_Aspect asp,
  2034 + WEB_Action_Name action,
  2035 + List((String,String)) extra_ops
  2036 + ) =
  2037 + actioner(conn,targ,asp,action,extra_ops,[]).
  2038 +
  2039 +public define HTML_Off_Form
  2040 + actioner
  2041 + (
  2042 + Actioner_Connection conn,
  2043 + Actioner_Target targ,
  2044 + Actioner_Aspect asp,
  2045 + WEB_Action_Name action,
  2046 + List((String,String)) extra_ops,
  2047 + String form_name
  2048 + ) =
  2049 + actioner(conn,targ,asp,action,extra_ops,[], form_name).
  2050 +
  2051 +public define HTML_Off_Form
  2052 + actioner
  2053 + (
  2054 + Actioner_Aspect asp,
  2055 + WEB_Action_Name action,
  2056 + List((String,String)) extra_ops
  2057 + ) =
  2058 + actioner(same, same, asp, action, extra_ops, []).
  2059 +
  2060 +public define HTML_Off_Form
  2061 + actioner
  2062 + (
  2063 + Actioner_Aspect asp,
  2064 + WEB_Action_Name action,
  2065 + List((String,String)) extra_ops,
  2066 + String form_name
  2067 + ) =
  2068 + actioner(same, same, asp, action, extra_ops, [], form_name).
  2069 +
  2070 +public define HTML_Off_Form
  2071 +/* Older call with String as action instead of WEB_Action_Name.
  2072 + * This function exists only for compatibility with older project.
  2073 + * Please condiser to use above function instead
  2074 + */
  2075 + actioner
  2076 + (
  2077 + Actioner_Connection conn,
  2078 + Actioner_Target targ,
  2079 + Actioner_Aspect asp,
  2080 + String action,
  2081 + List((String,String)) extra_ops,
  2082 + List(Actioner_Local_Action) local_actions
  2083 + )=
  2084 + actioner(conn,targ,asp,action_name(action),extra_ops,local_actions)
  2085 +.
  2086 +
  2087 +public define HTML_Off_Form
  2088 +/* Older call with String as action instead of WEB_Action_Name.
  2089 + * This function exists only for compatibility with older project.
  2090 + * Please condiser to use above function instead
  2091 + */
  2092 + actioner
  2093 + (
  2094 + Actioner_Connection conn,
  2095 + Actioner_Target targ,
  2096 + Actioner_Aspect asp,
  2097 + String action,
  2098 + List((String,String)) extra_ops,
  2099 + List(Actioner_Local_Action) local_actions,
  2100 + String form_name
  2101 + )=
  2102 + actioner(conn, targ, asp, action_name(action), extra_ops, local_actions, form_name)
  2103 +.
  2104 +
  2105 +public define HTML_Off_Form
  2106 +/* Older call with String as action instead of WEB_Action_Name.
  2107 + * This function exists only for compatibility with older project.
  2108 + * Please condiser to use above function instead
  2109 + */
  2110 + actioner
  2111 + (
  2112 + Actioner_Connection conn,
  2113 + Actioner_Target targ,
  2114 + Actioner_Aspect asp,
  2115 + String action,
  2116 + List((String,String)) extra_ops
  2117 + )=
  2118 + actioner(conn,targ,asp,action_name(action),extra_ops,[])
  2119 +.
  2120 +
  2121 +public define HTML_Off_Form
  2122 +/* Older call with String as action instead of WEB_Action_Name.
  2123 + * This function exists only for compatibility with older project.
  2124 + * Please condiser to use above function instead
  2125 + */
  2126 + actioner
  2127 + (
  2128 + Actioner_Connection conn,
  2129 + Actioner_Target targ,
  2130 + Actioner_Aspect asp,
  2131 + String action,
  2132 + List((String,String)) extra_ops,
  2133 + String form_name
  2134 + )=
  2135 + actioner(conn, targ, asp, action_name(action), extra_ops, [], form_name)
  2136 +.
  2137 +
  2138 +//public define HTML_Off_Form
  2139 +// table
  2140 +// (
  2141 +// List(HTML_Row(HTML_Off_Form)) rows
  2142 +// )=
  2143 +// table([], empty, rows,empty)
  2144 +//.
  2145 +
  2146 +//public define HTML_Off_Form
  2147 +// table
  2148 +// (
  2149 +// List(Table_Option) options,
  2150 +// List(HTML_Row(HTML_Off_Form)) rows
  2151 +// ) =
  2152 +// table(options,empty,rows,empty)
  2153 +//.
  2154 +
  2155 +//public define HTML_Off_Form
  2156 +// table
  2157 +// (
  2158 +// Table_Option option,
  2159 +// HTML_Row(HTML_Off_Form) row
  2160 +// ) =
  2161 +// table([option], empty, [row], empty)
  2162 +//.
  2163 +//
  2164 +//public define HTML_Off_Form
  2165 +// table
  2166 +// (
  2167 +// HTML_Header_Row(HTML_Off_Form) h_row,
  2168 +// List(HTML_Row(HTML_Off_Form)) rows
  2169 +// ) =
  2170 +// table([],h_row,rows,empty)
  2171 +//.
  2172 +
  2173 +//public define HTML_Off_Form
  2174 +// table
  2175 +// (
  2176 +// List(Table_Option) options,
  2177 +// HTML_Header_Row(HTML_Off_Form) h_row,
  2178 +// List(HTML_Row(HTML_Off_Form)) rows
  2179 +// ) =
  2180 +// table(options,h_row,rows,empty)
  2181 +//.
  2182 +
  2183 +//public define HTML_Off_Form
  2184 +// table
  2185 +// (
  2186 +// Table_Option option,
  2187 +// HTML_Header_Row(HTML_Off_Form) h_row,
  2188 +// List(HTML_Row(HTML_Off_Form)) rows
  2189 +// ) =
  2190 +// table([option], h_row, rows,empty)
  2191 +//.
  2192 +
  2193 + We add two convenience functions for 'row'. The reason why we add two functions, one
  2194 + for 'HTML_In_Form' and one for 'HTML_Off_Form', is that adding a schema with an
  2195 + arbitrary '$T' creates too many ambiguities. This is due to the fact that, if we do so,
  2196 + the arguments of the function do not refer to any of the types defined here.
  2197 +
  2198 +public define HTML_Row(HTML_In_Form)
  2199 + row
  2200 + (
  2201 + HTML_In_Form content
  2202 + ) =
  2203 + row([],[cell([],content)]).
  2204 +
  2205 +public define HTML_Row(HTML_Off_Form)
  2206 + row
  2207 + (
  2208 + HTML_Off_Form content
  2209 + ) =
  2210 + row([],[cell([],content)]).
  2211 +
  2212 +//public define HTML_Cell(HTML_Off_Form)
  2213 +// cells_to_column_in_cell
  2214 +// (
  2215 +// List(HTML_Cell(HTML_Off_Form)) cells
  2216 +// )=
  2217 +// cell(
  2218 +// table(
  2219 +// map( (HTML_Cell(HTML_Off_Form) current_cell) |-> row(current_cell), cells)
  2220 +// )).
  2221 +
  2222 +//public define HTML_Off_Form
  2223 +// cells_to_line
  2224 +// (
  2225 +// List(HTML_Off_Form) cells
  2226 +// )=
  2227 +// table([row(
  2228 +// map (((HTML_Off_Form) current_cell) |-> cell(current_cell), cells))])
  2229 +// .
  2230 +
  2231 +public define HTML_Off_Form
  2232 + private_download
  2233 + (
  2234 + String abs_path,
  2235 + String name,
  2236 + String extra_ext
  2237 + ) =
  2238 + private_download(abs_path,name,extra_ext,failure).
  2239 +
  2240 +
  2241 +public define HTML_Off_Form
  2242 + private_download
  2243 + (
  2244 + String abs_path,
  2245 + String name,
  2246 + String extra_ext,
  2247 + String action_name,
  2248 + List((String,String)) args
  2249 + ) =
  2250 + private_download(abs_path,name,extra_ext,success((action_name,args))).
  2251 +
  2252 +.
  2253 +
  2254 +
  2255 +
  2256 +public define HTML_In_Form
  2257 + hr
  2258 + =
  2259 + hr([])
  2260 +.
  2261 +
  2262 +public define HTML_In_Form
  2263 + button
  2264 + (
  2265 + List(HTML_In_Form) elements
  2266 + )=
  2267 + button([], elements)
  2268 +.
  2269 +
  2270 +public define HTML_In_Form
  2271 + button
  2272 + (
  2273 + List(CoreAttrs) attrs,
  2274 + HTML_In_Form element
  2275 + )=
  2276 + button(attrs, [element])
  2277 +.
  2278 +
  2279 +public define HTML_In_Form
  2280 + button
  2281 + (
  2282 + HTML_In_Form element
  2283 + )=
  2284 + button([], [element])
  2285 +.
  2286 + - Cell a gap between two other cells :
  2287 +
  2288 +public define HTML_Cell(HTML_Off_Form)
  2289 + width_gap
  2290 + (
  2291 + Int w
  2292 + )=
  2293 + cell([width(w)], empty).
  2294 +
  2295 +public define HTML_Cell(HTML_In_Form)
  2296 + width_gap
  2297 + (
  2298 + Int w
  2299 + )=
  2300 + cell([width(w)],empty)
  2301 +.
  2302 + - Row a gap between two other rows :
  2303 +
  2304 +public define HTML_Row(HTML_Off_Form)
  2305 + height_gap
  2306 + (
  2307 + Int h
  2308 + )=
  2309 + row([],[cell([height(h)],empty)]).
  2310 +
  2311 +public define HTML_Row(HTML_In_Form)
  2312 + height_gap
  2313 + (
  2314 + Int h
  2315 + )=
  2316 + row([],[cell([height(h)],empty)])
  2317 +.
  2318 +
  2319 +
  2320 + Notice that the two types have alternatives in common (same name, same arguments types,
  2321 + up to the value of the parameter $T), which correspond to elements which may be put
  2322 + anywhere in the page.
  2323 +
  2324 +public define HTML_Partial_Content
  2325 + partial_content
  2326 + (
  2327 + List(HTML_Head_Tag) tags,
  2328 + List(HTML_Off_Form) content
  2329 + )=
  2330 + partial_content(tags, sequence(content)).
  2331 +
  2332 +public define HTML_Partial_Content
  2333 + partial_content
  2334 + (
  2335 + HTML_Off_Form content
  2336 + )=
  2337 + partial_content([], content).
  2338 +
  2339 +public define HTML_Partial_Content
  2340 + partial_content
  2341 + (
  2342 + List(HTML_Off_Form) content
  2343 + )=
  2344 + partial_content([], sequence(content)).
  2345 +
  2346 +public define HTML_Partial_Content
  2347 + partial_content
  2348 + (
  2349 + List(HTML_Head_Tag) tags,
  2350 + HTML_Partial_Content p_content
  2351 + )=
  2352 + if p_content is partial_content(ptags, html) then
  2353 + partial_content(tags + ptags, html).
  2354 +
  2355 +define HTML_Partial_Content
  2356 + list_to_pcontent
  2357 + (
  2358 + List(HTML_Partial_Content) l_p_content,
  2359 + List(HTML_Head_Tag) so_far_tags,
  2360 + List(HTML_Off_Form) so_far_html
  2361 + )=
  2362 + if l_p_content is
  2363 + {
  2364 + [] then partial_content(so_far_tags, sequence(reverse(so_far_html))),
  2365 + [h . t] then
  2366 + //extract resurgent type and symbols of h
  2367 + if h is partial_content(tags, html) then
  2368 + list_to_pcontent(t, so_far_tags + tags, [html . so_far_html])
  2369 + }.
  2370 +
  2371 +public define HTML_Partial_Content
  2372 + partial_content
  2373 + (
  2374 + List(HTML_Partial_Content) l_p_content
  2375 + )=
  2376 + list_to_pcontent(l_p_content, [], []).
  2377 +
  2378 +public define HTML_Partial_Content
  2379 + partial_empty
  2380 + =
  2381 + partial_content(empty)
  2382 +.
  2383 +
  2384 +define String
  2385 + format
  2386 + (
  2387 + List(Text_Option) l
  2388 + ).
  2389 +
  2390 +
  2391 +
  2392 +
  2393 +define Printable_tree
  2394 + format_css_styles
  2395 + (
  2396 + List(CSS_Style) l
  2397 + ) =
  2398 + if l is
  2399 + {
  2400 + [ ] then [ ],
  2401 + [h . t] then
  2402 + [ if h is
  2403 + {
  2404 + text_options(tos) then
  2405 + [" body, span, p { ", format(tos), " }\n" ]
  2406 + }
  2407 + . format_css_styles(t)]
  2408 + }.
  2409 +
  2410 +
  2411 +
  2412 +
  2413 +
  2414 + Meta tags are put in the 'head' of the HTML page.
  2415 +
  2416 +public define HTML_Meta
  2417 + refresh
  2418 + (
  2419 + Actioner_Connection connection,
  2420 + Actioner_Target target,
  2421 + String action,
  2422 + Int delay
  2423 + )=
  2424 + refresh(connection, target, action_name(action), delay)
  2425 +.
  2426 +
  2427 +
  2428 +
  2429 +
  2430 +
  2431 +
  2432 +
  2433 +
  2434 +public define HTTP_Answer
  2435 + html_page
  2436 + (
  2437 + String title,
  2438 + List(HTML_Head_Tag) head_tags,
  2439 + HTML_Body body
  2440 + )=
  2441 + html_page(http_ok, title, head_tags,[],[],[],[],body).
  2442 +
  2443 +public define HTTP_Answer
  2444 + html_page
  2445 + (
  2446 + String title,
  2447 + List(HTML_Head_Tag) head_tags,
  2448 + List(CSS_Style) styles,
  2449 + HTML_Body body
  2450 + )=
  2451 + html_page(http_ok, title, head_tags, styles, [], [], [], body).
  2452 +
  2453 +public define HTTP_Answer
  2454 + web_controller_error_page
  2455 + (
  2456 + String name
  2457 + )
  2458 + =
  2459 + html_page
  2460 + (
  2461 + name+" Controller error", // title of web site
  2462 + [], // list of 'META' tags (empty for this site)
  2463 + body // body of page
  2464 + (
  2465 + // list of body options
  2466 + [
  2467 + //background_color(rgb(255,200,200))
  2468 + // add more body options here
  2469 + ],
  2470 +
  2471 + // content of page
  2472 + text(name+" Controller error")
  2473 + )
  2474 + )
  2475 +.
  2476 +
  2477 +
  2478 + 'HTTP_Answer' represents the final product of the construction of a web page.
  2479 +
  2480 +
  2481 +
  2482 +
  2483 + *** (3.2) ``in form'' versus ``off form''.
  2484 +
  2485 + There is a variety of HTML elements: texts, buttons, links, forms, inputs, etc... Some
  2486 + of them may have a content, which is yet another HTML element (or several). Hence, it
  2487 + is meaningful to say that an element is 'within' another one. Now, putting any element
  2488 + within any other one may be meaningless. For example, an input element must be put
  2489 + within a form (otherwise, it is useless), and a from within another form has no precise
  2490 + meaning (and is forbidden by the HTML specification).
  2491 +
  2492 + Actually, the main criterium is ``within a form or not within a form''. So, HTML
  2493 + elements in a given page are separated into two categories: those who are within a
  2494 + form, and the others. Nevertheless, there are elements which may belong to both
  2495 + categories, like images and texts. We want to make use of the strong typing mecanism of
  2496 + Anubis in order to forbid non meaningful placement of elements.
  2497 +
  2498 + The type 'HTML_In_Form' defines elements to be put within forms. Similarly,
  2499 + 'HTML_Off_Form' defines elements not to be put within forms. Both types are recursive,
  2500 + and 'HTML_Off_Form' refers to 'HTML_In_Form' (via the 'form' alternative, of course),
  2501 + but the two types are not cross recursive. This is the reason why it is impossible to
  2502 + put a form within a form. In order to construct a web page, you essentially have to
  2503 + produce a datum of type 'HTML_Off_Form' (maybe containing data of type 'HTML_In_Form').
  2504 +
  2505 + In practice, you don't have to worry so much about these two types, because elements
  2506 + which may be put anywhere are constructed for both types by functions with the same
  2507 + name and the same arguments. Hence, for both types, you just write the same thing. You
  2508 + are warned by the compiler only when you try to put an element at a place it is not
  2509 + allowed.
  2510 +
  2511 +
  2512 +
  2513 + *** (3.3) Defining your own style.
  2514 +
  2515 + We provide generic tools for constructing HTML elements. However, your web site needs
  2516 + to have a ``style''.
  2517 +
  2518 + To that end, you need to write down a set of ``styling functions'', using the tools
  2519 + defined here. These styling functions allow the introduction of your colors and other
  2520 + visual characteristics into the constructed elements once and for all. For example, you
  2521 + may want all your texts to be rendered in the ``Helvetica'' font, in size 14 and using
  2522 + some 'text_color'. You may write something like this:
  2523 +
  2524 + define RGB text_color = rgb(10,40,40).
  2525 +
  2526 + define HTML_Off_Form
  2527 + text
  2528 + (
  2529 + String the_text
  2530 + ) =
  2531 + text([font("helvetica"),size(14),color(text_color)],
  2532 + the_text).
  2533 +
  2534 + (and the same one for type 'HTML_In_Form') so that in order to put a piece of text in a
  2535 + page, you just write:
  2536 +
  2537 + text("... some text ...")
  2538 +
  2539 + and you don't have to provide the font, size and color for each text. If you want to
  2540 + have several styles of text presentation, you just write several sets of such
  2541 + convenience functions. This also suggests a trick. You may want for example different
  2542 + colors for 'in form' texts and 'off form' texts. This may be achieved automatically by
  2543 + defining two functions as above, with the same name and same argument type, but
  2544 + returning either a 'HTML_In_Form' or a 'HTML_Off_Form'.
  2545 +
  2546 + If this preliminary work is well done, you will not waste your time later when you
  2547 + concentrate on the actual informational content of your pages.
  2548 +
  2549 + This general principle should be applied to all sorts of elements. This is the best
  2550 + thing to do in order to separate the functions defining the visual style from the
  2551 + functions defining the informational content itself, so that changing the style without
  2552 + changing the content becomes easy. This is also the best way for having a clean and
  2553 + easily readable source for your web site.
  2554 +
  2555 +
  2556 +
  2557 +
  2558 +
  2559 + *** (3.4) Actioners and forms.
  2560 +
  2561 + We have gathered several notions from HTML into that of an 'actioner'. An actioner is
  2562 + an HTML element which opens a connection to our server when clicked upon. Actioners may
  2563 + have different visual aspects. They may look like hypertext links or like buttons
  2564 + (rollovers), or even like selectors (with immediate action). In any case, their
  2565 + behavior is the same: they open a connection to our server, and send a set of 'web
  2566 + arguments', i.e. pairs 'name=value'. Among these web arguments, one of them denotes
  2567 + the action to be performed, and the others should be considered as operands for this
  2568 + action. Actually, the precise behavior of the actioner has several variants.
  2569 +
  2570 + The connection with the server may be secured (HTTPS) or non secured (HTTP). See the
  2571 + type 'Actioner_Connection' above.
  2572 +
  2573 + You must also choose where the answer must be rendered. This may be in the same window
  2574 + or in another window (or frame). If it is in another window, the name of that window
  2575 + must be given. If the window does not exist, the browser will create it. Optionally,
  2576 + you may give the dimensions of the new window and other characteristics. See the type
  2577 + 'Actioner_Target' above.
  2578 +
  2579 + The actioner also has a visual aspect. See the type 'Actioner_Aspect' above. In the
  2580 + case of a rollover button, you provide the URLs of two images (of the same size)
  2581 + representing the button:
  2582 +
  2583 + url_off: to be used when the mouse is not over the button,
  2584 + url_on: to be used when the mouse is over the button.
  2585 +
  2586 + You can also create rollover buttons without creating images. Just use the second
  2587 + alternative named 'button'. The server creates the images automatically.
  2588 +
  2589 + The purpose of forms is just to give operands to actioners. If the actioner is placed
  2590 + within a form, all the input elements which are within this form provide operands to
  2591 + the actioner (except sometimes when they are not set by the client). If it is not put
  2592 + within a form, the actioner gets no operand, except if the name of a form is explicitly
  2593 + given, in which case the actioner gets all the inputs from that form as
  2594 + operands. Furthermore, you may want to give extra operands to the actioner. This may be
  2595 + useful for separating families of actioners with the same action name. Extra operands
  2596 + 'name=value' must be given in the form of pairs '(name,value)'.
  2597 +
  2598 + Notice that the name of a form may be used by an actioner which is off the form, so as
  2599 + to get the operands provided by this form. Also notice that several actioners may refer
  2600 + to the same form, being either in the form, or referring to the form from the
  2601 + outside. These actioners simply get the same set of operands, even if they correspond
  2602 + to distinct actions.
  2603 +
  2604 + Input elements may be put only within a form.
  2605 +
  2606 +
  2607 +
  2608 + *** (3.5) Local popup.
  2609 +
  2610 + This element looks like a link or a rollover button. When this button is clicked upon,
  2611 + a 'popup window' appears. Actually, this popup window is just a layer in the same HTML
  2612 + page, which becomes suddenly visible. It is realized with a '<div>' HTML tag. In
  2613 + particular, clicking on the button does not open any connection. This is why it is
  2614 + called 'local'. The arguments have the following roles:
  2615 +
  2616 + Actioner_Aspect aspect of the button (same semantics as for actioners)
  2617 + content content of the popup window
  2618 + x, y, position of the popup window on the HTML page (not relative
  2619 + to the button but to the page itself)
  2620 + title title of the popup window
  2621 + color color of the title bar and close button in the popup window.
  2622 + A lightened version of this color is used for the background
  2623 + of the popup window.
  2624 + width width of the title bar
  2625 +
  2626 +
  2627 +
  2628 +
  2629 +
  2630 + --- That's all for the public part ! --------------------------------------------------
  2631 +
  2632 +
  2633 +
  2634 +
  2635 +
  2636 + ----------------------------------- Table of Contents ---------------------------------
  2637 +
  2638 + *** [1] States.
  2639 + *** [1.1] Saving and retrieving states.
  2640 + *** [1.2] Deleting out of date states.
  2641 +
  2642 + *** [2] Sessions.
  2643 + *** [2.1] Saving and retrieving sessions.
  2644 + *** [2.2] Deleting out of date sessions.
  2645 +
  2646 + *** [3] Tools.
  2647 + *** [3.1] Directories.
  2648 + *** [3.2] Secondary documents.
  2649 +
  2650 + *** [4] Managing web arguments.
  2651 + *** [3.1] Prefixing web arguments names.
  2652 + *** [3.2] Separating web arguments.
  2653 + *** [3.3] Applying an action.
  2654 +
  2655 + *** [5] Web site descriptions and the 'awp handlers'.
  2656 + *** [4.1] The type 'Web_Site'.
  2657 + *** [4.2] Making a web site description.
  2658 + *** [4.3] Starting the servers.
  2659 +
  2660 + *** [6] HTML Formating.
  2661 + *** [5.1] The type 'HTML_Any($T)'.
  2662 + *** [5.2] Formating a color.
  2663 + *** [5.3] Creating buttons.
  2664 + *** [5.4] Formating an actioner.
  2665 + *** [5.5] Formating a private download link.
  2666 + *** [5.6] Formating rows and cells in a table.
  2667 + *** [5.7] Formating elements which may be put anywhere.
  2668 + *** [5.8] Formating 'in form' elements.
  2669 + *** [5.9] Formating 'off form' elements.
  2670 + *** [5.10] Formating meta-tags.
  2671 +
  2672 + ---------------------------------------------------------------------------------------
  2673 +public type CommonInfo:...
  2674 +
  2675 +define Printable_tree
  2676 + format
  2677 + (
  2678 + CommonInfo cinfo,
  2679 + Var(Int) ic_v, // 'idnum' counter variable
  2680 + HTML_Off_Form element,
  2681 + Bool is_https,
  2682 + Var(Int) action_count,
  2683 + Var(List(HTML_Head_Tag)) head_tags
  2684 + ).
  2685 +
  2686 +public define String
  2687 + doctype_w3c_header
  2688 + =
  2689 + "<!DOCTYPE html>\n". //html 5
  2690 +
  2691 +
  2692 + *** [1] States.
  2693 +
  2694 + We have to define functions for saving a state, retrieving a state, deleting out of
  2695 + date states. We need one such function per web site. The types of the first two
  2696 + functions depend on the parameter $State. This is not the case of the third one. The
  2697 + fact that the instance of $State is variable from one web sites to the other implies
  2698 + rather subtle manipulations using full functionality.
  2699 +
  2700 +
  2701 + *** [1.1] Saving and retrieving states.
  2702 +
  2703 + Each state is saved into a file on the server's disk (in the directory represented by
  2704 + the symbol 'state_directory', which is 'my_anubis/web_sites/common_name/states'). The
  2705 + state is saved together with a time stamp whose value is obtained by adding the current
  2706 + time to the given timeout for states. The state receives a name obtained by hashing
  2707 + (using sha1) the content of the file itself, and then encoding the hash with
  2708 + 'web_arg_encode'. The name of the file into which the state is saved is the
  2709 + concatenation of "s" and the name of the state.
  2710 +
  2711 +read web_arg_encode.anubis
  2712 +
  2713 + The tool below constructs the function which is able to save a state on the server's
  2714 + disk.
  2715 +
  2716 +
  2717 +define ($State s) -> String // the function constructed returns the name of the state
  2718 + make_save_state_function
  2719 + (
  2720 + Int timeout,
  2721 + String state_directory,
  2722 + (LogLevel, String) -> One logger
  2723 + )=
  2724 + ($State s) |->
  2725 + with time_stamp = now+timeout,
  2726 + to_be_saved = (time_stamp,s),
  2727 + state_name = to_ascii(sha1(s)),
  2728 + //println("make_save_state_function " + state_directory+"/s"+state_name);
  2729 + if save(to_be_saved,state_directory+"/s"+state_name) is ok then
  2730 + state_name
  2731 + else
  2732 + logger(logError, "Cannot create state file in '"+state_directory+"'.\n");
  2733 + ""
  2734 +.
  2735 +
  2736 +
  2737 + When a request arrives, we need to retrieve the previous state from the server's
  2738 + disk. We receive the name of that state. If the state is out of date, the state file is
  2739 + kept 3 days, and then deleted.
  2740 +
  2741 +type PreviousState($State):
  2742 + not_found, // cannot retrieve the previous state
  2743 + out_of_date($State), // the previous state is out of date
  2744 + still_valid($State). // the previous state is still valid
  2745 +
  2746 +define (String state_name) -> PreviousState($State)
  2747 + make_retrieve_state_function
  2748 + (
  2749 + String state_directory
  2750 + ) =
  2751 + (String state_name) |->
  2752 + with file_path = state_directory+"/s"+state_name,
  2753 + if (RetrieveResult((Int,$State)))retrieve(file_path) is ok(d)
  2754 + then (
  2755 + if d is (time_stamp,s) then
  2756 + if time_stamp < now
  2757 + then (
  2758 + forget(remove(file_path));
  2759 + out_of_date(s)
  2760 + )
  2761 + else still_valid(s) // state has been successfully retrieved
  2762 + )
  2763 + else
  2764 + forget(remove(file_path));
  2765 + not_found.
  2766 +
  2767 +
  2768 +
  2769 + *** [1.2] Deleting out of date states.
  2770 +
  2771 + We also need to delete states which are out of date and which will never be deleted by
  2772 + the above method. This may be performed by a machine doing this periodically (say once
  2773 + per states life time period).
  2774 +
  2775 +define (List(String) file_names) -> One
  2776 + make_delete_out_of_date_states_function
  2777 + (
  2778 + Maybe($State) dummy,
  2779 + String state_directory
  2780 + )=
  2781 + (List(String) file_names) |-df->
  2782 + if file_names is
  2783 + {
  2784 + [ ] then unique,
  2785 + [h . t] then
  2786 + //we can't delete the "." and ".." file. So go to next file in the list
  2787 + if h = "." | h = ".." then
  2788 + df(t)
  2789 + else
  2790 + with file_path = state_directory+"/"+h,
  2791 + if (RetrieveResult((Int,$State)))retrieve(file_path) is ok(d)
  2792 + then (
  2793 + if d is (time_stamp,data) then
  2794 + if time_stamp < now
  2795 + then (forget(remove(file_path)); df(t))
  2796 + else df(t)
  2797 + )
  2798 + else (forget(remove(file_path)); df(t))
  2799 + }
  2800 +.
  2801 +
  2802 +
  2803 + The 'labelled arrow' |-df-> is documented in 'documentation/en/anubis_doc.txt'.
  2804 +
  2805 + Note: The argument 'dummy' (of type Maybe($State)) is not used in the body of the
  2806 + function (hence its name). Nevertheless, it is required. Indeed, the Anubis compiler
  2807 + does not accept a parameter in the body of a function (here the parameter is required
  2808 + by the use of 'retrieve') if this parameter does not appear in the type of the
  2809 + function. This is because this would create ambiguities that no explicit typing may
  2810 + ever resolve. If you put a double slash in front of the declaration of 'dummy' above,
  2811 + and if you compile this file, you will get a message like this one:
  2812 +
  2813 + Error in 'making_a_web_site.anubis', line 1300, column 7:
  2814 + A definition may not contain parameters which are not present
  2815 + in the declaration part (hidden parameters):
  2816 + $State
  2817 +
  2818 + The type of the function constructed by 'make_delete_out_of_date_states_function' is
  2819 + independant of the parameter $State. This is important because this allows to create
  2820 + the list of such functions for all web sites. From this list, it is possible to call
  2821 + the functions one after the other, so deleting out of date states for all web
  2822 + sites. Actually, the next function receives a list of pairs (state_directory,function),
  2823 + one for each web site.
  2824 +
  2825 +define One
  2826 + delete_out_of_date_states // for all web sites
  2827 + (
  2828 + List((String, List(String) -> One)) directories_and_functions
  2829 + ) =
  2830 + if directories_and_functions is
  2831 + {
  2832 + [ ] then unique,
  2833 + [h . t] then if h is (state_directory,function) then
  2834 + function(directory_list(state_directory,"*"));
  2835 + delete_out_of_date_states(t)
  2836 + }.
  2837 +
  2838 +
  2839 + The above function must be called periodically in a separate virtual machine. The
  2840 + period we have choosen is (rather logically) the life time of states itself. This may
  2841 + be achieved by an 'infinite' loop, using a 'sleep(timeout)'. However, the loop must not
  2842 + be really infinite, because the servers may be shutdown. Hence, our loop must test
  2843 + (rather frequently; say every second) if the servers are down. If they are, the loop
  2844 + must be exited.
  2845 +
  2846 +define One
  2847 + delete_states_loop
  2848 + (
  2849 + List((String,List(String) -> One)) directories_and_functions,
  2850 + Int timeout,
  2851 + Int next_time,
  2852 + Server http_server,
  2853 + Server https_server,
  2854 + (One) -> Bool shutdown_required
  2855 + ) =
  2856 + if shutdown_required(unique)
  2857 + then (shutdown(http_server); shutdown(https_server))
  2858 + else unique;
  2859 + if (is_down(http_server) & is_down(https_server))
  2860 + then unique
  2861 + else if now > next_time
  2862 + then
  2863 + (
  2864 + delete_out_of_date_states(directories_and_functions);
  2865 + delete_states_loop(directories_and_functions,
  2866 + timeout,
  2867 + now+timeout,
  2868 + http_server,
  2869 + https_server,
  2870 + shutdown_required)
  2871 + )
  2872 + else
  2873 + (
  2874 + sleep(1000); // sleep just one second and try again
  2875 + delete_states_loop(directories_and_functions,
  2876 + timeout,
  2877 + next_time,
  2878 + http_server,
  2879 + https_server,
  2880 + shutdown_required)
  2881 + ).
  2882 +
  2883 + The above loop must be run in a separate virtual machine. This will be done just after
  2884 + the two servers are started.
  2885 +
  2886 +
  2887 +
  2888 +
  2889 +
  2890 + *** [2] Tools.
  2891 +
  2892 + *** [2.1] Directories.
  2893 + *** [2.2] Secondary documents.
  2894 +
  2895 + Some HTML elements (like '<object>', '<frame>') cannot receive their content directly
  2896 + from the current document, but only through an URL. For this reason, we implement a
  2897 + mecanism for creating secondary documents on the fly. To that end we use the 'private
  2898 + download' mecanism.
  2899 +
  2900 + A secondary document is formated by the same functions as the main document itself. The
  2901 + next function takes an 'off form' element, creates the file containing the secondary
  2902 + document in HTML format, and returns the URL at which the document will be available.
  2903 +
  2904 +define String
  2905 + create_secondary_document
  2906 + (
  2907 + String sd, // site directory
  2908 + String as, // authorization_secret
  2909 + $T -> Printable_tree format_element,
  2910 + $T content,
  2911 + HTML_Size width
  2912 + ) =
  2913 + with private_download_directory = sd+"/private_download",
  2914 + hash = web_arg_encode(sha1(content)),
  2915 + file_content = (Printable_tree)
  2916 + [doctype_w3c_header,
  2917 + "<html><body><table ",
  2918 + if width is
  2919 + {
  2920 + absolute(w) then ["width=\"",w-25],
  2921 + percentage(w) then ["width=\"95%\""]
  2922 + },"\"><tbody><tr><td align=right>",
  2923 + format_element(content),
  2924 + "</td></tr></tbody></table></body></html>"
  2925 + ],
  2926 + file_name = "sd"+hash+".html",
  2927 + file_path = private_download_directory+"/"+file_name,
  2928 + if write_to_file(file_path,file_content) is
  2929 + {
  2930 + cannot_open_file then print("Cannot open file '"+file_path+"'.\n"); "",
  2931 + write_error(n) then print("Error writing file '"+file_path+"'.\n"); "",
  2932 + ok then file_name+"?zauth="+
  2933 + make_authorization(sd,as,private_download_directory+"/"+file_name)
  2934 + }.
  2935 +
  2936 +
  2937 +
  2938 +
  2939 + *** [2.3] Generating unique ids.
  2940 +
  2941 + In order to uniquely name object for JavaScript we generate unique ids from a counter.
  2942 +
  2943 +define Int
  2944 + new_idnum
  2945 + (
  2946 + Var(Int) ic_v // 'idnum' counter variable
  2947 + ) =
  2948 + protect
  2949 + with result = *ic_v+1,
  2950 + ic_v <- result;
  2951 + result.
  2952 +
  2953 +
  2954 +
  2955 +
  2956 +
  2957 +
  2958 + *** [3] Managing web arguments.
  2959 +
  2960 + Web arguments are those pairs 'name=value' which are transmitted through the HTTP
  2961 + protocol. We need precise naming conventions for these web arguments.
  2962 +
  2963 +
  2964 +
  2965 + *** [3.2] Separating web arguments.
  2966 +
  2967 + When a new request arrives, we need to separate the web arguments, that is to say:
  2968 +
  2969 + - find the value of "s", and recover the corresponding state,
  2970 + - find the value of "a", which is the name of the action to be performed,
  2971 + - get the list of all the remaining web arguments (operands of the action).
  2972 +
  2973 + We must also determine if the previous state may be recovered. If it is not the case
  2974 + (either because the previous state name is invalid, or the previous state is out of
  2975 + date), we must check if there is an action name. Indeed, the presence of an action name
  2976 + indicates that the user has clicked on one of our buttons or links. If on the contrary
  2977 + there is no action name the user has just entered our address in his browser. In this
  2978 + last case, we must send the first page of our site (maybe a 'login' page), but if there
  2979 + is an action, we must send a page just saying that the session ticket has expired. If
  2980 + the previous state is recovered and there is no action, the new state is the same as
  2981 + the previous state.
  2982 +
  2983 + The result of the separation of the web arguments is of type:
  2984 +
  2985 +type Separated_Web_Args($State):
  2986 + swa(PreviousState($State) previous_state,
  2987 + Maybe(String) action_name,
  2988 + List(Web_arg) operands).
  2989 +
  2990 +
  2991 +
  2992 + The next function constructs the function which separates the web arguments.
  2993 +
  2994 +define (List(Web_arg) lwa, HTTP_Info info) -> Separated_Web_Args($State)
  2995 + make_separate_web_args_function
  2996 + (
  2997 + String state_directory,
  2998 + String -> PreviousState($State) retrieve_state,
  2999 + String website_name
  3000 + ) =
  3001 + (List(Web_arg) lwa, HTTP_Info info) |-swaf->
  3002 + if lwa is
  3003 + {
  3004 + [ ] then
  3005 + //
  3006 + // no web arg found => no previous state and no action
  3007 + //
  3008 + //println("find_cookie(\"state_"+website_name+"\", ...");
  3009 + if find_cookie("state_"+website_name, server_get_cookies(http_headers(info))) is
  3010 + {
  3011 + failure then
  3012 + //println("find_cookie(\"state_"+website_name+"\" failure");
  3013 + swa(not_found,failure,[]),
  3014 +
  3015 + success(cookie) then
  3016 + //println("find_cookie(\"state_"+website_name+"\" success");
  3017 + swa(retrieve_state(value(cookie)),failure,[])
  3018 + },
  3019 +
  3020 + //swa(failure,failure,[]),
  3021 +
  3022 + [wa_1 . wa_others] then
  3023 + //
  3024 + // at least one web arg =>
  3025 + // separate other web args, and insert the first one as needed
  3026 + //
  3027 + if (Separated_Web_Args($State))swaf(wa_others, info) is
  3028 + {
  3029 + swa(ps1, // possible previous state
  3030 + an1, // maybe an action name
  3031 + op1) // operands so far
  3032 + then
  3033 + if wa_1 is
  3034 + {
  3035 + web_arg(n, value) then
  3036 + with name = if substr(n,0,4) = "amp;" then substr(n, 4, length(n) - 4) else n,
  3037 + if name = "a" then
  3038 + swa(ps1,success(value),op1)
  3039 + else if name = "aws_action" | name = "aws_a" then
  3040 + swa(ps1,success(value),op1)
  3041 + //else if name = "t" then
  3042 + // swa(ps1,an1,[web_arg("target",value) . op1])
  3043 + else
  3044 + swa(ps1,an1,[web_arg(name,value) . op1]),
  3045 +
  3046 + upload(n,v,t) then
  3047 + swa(ps1,an1,[wa_1 . op1])
  3048 + }
  3049 + }
  3050 + }.
  3051 +
  3052 + *** [3.3] Applying an action.
  3053 +
  3054 + When the web arguments are separated (and their names cleaned up from prefixes), we may
  3055 + apply the action to the operands and the current state. We search for the action to be
  3056 + applied in the list of actions. If no action is found, the new state is the same as
  3057 + the previous state. Also, we deny the application of an HTTP action if the request
  3058 + arrives through the HTTPS channel and conversely.
  3059 +
  3060 +define ($State previous,
  3061 + String action_name,
  3062 + HTTP_Info http_info,
  3063 + List(Web_arg) lwa,
  3064 + Bool is_https) -> $State
  3065 + make_apply_action_function
  3066 + (
  3067 + List(Web_Action($State)) actions_list,
  3068 + (LogLevel, String) -> One logger //logger
  3069 + )=
  3070 + with f =
  3071 + ($State previous,
  3072 + String action_name,
  3073 + HTTP_Info http_info,
  3074 + List(Web_arg) lwa,
  3075 + Bool is_https,
  3076 + List(Web_Action($State)) actions) |-f->
  3077 + //println("Looking for action ["+action_name+"]");
  3078 + if actions is
  3079 + {
  3080 + [ ] then
  3081 + logger(logError, "action '"+action_name+"' not found.\n"); previous,
  3082 + [ac1 . others] then if ac1 is
  3083 + {
  3084 + //check for http action
  3085 + http_action(an, allow, do_it) then
  3086 +
  3087 + //Action name found
  3088 + if an = action_name then
  3089 + if is_https then
  3090 + (logger(logError, "HTTP action '"+an+"' called through HTTPS (denied).\n"); previous)
  3091 + else
  3092 + if allow(previous) then
  3093 + do_it(http_info,lwa,previous)
  3094 + else
  3095 + previous
  3096 + else
  3097 + f(previous,action_name,http_info,lwa,is_https,others),
  3098 + //check https action
  3099 + https_action(an,allow,do_it) then
  3100 + if an = action_name
  3101 + then if is_https
  3102 + then if allow(previous)
  3103 + then do_it(http_info,lwa,previous)
  3104 + else previous
  3105 + else (logger(logError, "HTTPS action '"+an+"' called through HTTP (denied).\n");
  3106 + previous)
  3107 + else f(previous,action_name,http_info,lwa,is_https,others),
  3108 +
  3109 + http_https_action(an,allow,do_it) then
  3110 + if an = action_name then
  3111 + println("Action ["+action_name+"] found");
  3112 + if allow(previous)
  3113 + then do_it(http_info,lwa,previous)
  3114 + else
  3115 + println("user not allowed to execute that Action ["+action_name+"]");
  3116 + previous
  3117 + else f(previous,action_name,http_info,lwa,is_https,others),
  3118 +
  3119 + }
  3120 + },
  3121 + ($State previous,
  3122 + String action_name,
  3123 + HTTP_Info http_info,
  3124 + List(Web_arg) lwa,
  3125 + Bool is_https) |->
  3126 + f(previous, action_name, http_info, lwa, is_https, actions_list).
  3127 +
  3128 + *** [4] Web site descriptions and the 'awp handlers'.
  3129 +
  3130 + *** [4.1] The type 'Web_Site'.
  3131 +
  3132 + The type 'Web_Site_Description' is defined in 'web/multihost_http_server.anubis'. We
  3133 + need another one, because, we have some extra informations to record for each site.
  3134 +
  3135 +public type Web_Site:
  3136 + web_site((Word32,Word32) -> Web_Site_Description description,
  3137 + List(String) -> One delete_out_of_date).
  3138 +
  3139 +
  3140 +
  3141 +
  3142 + *** [4.2] Making a web site description.
  3143 +
  3144 + Below is the function which creates a web site description. It first creates (if
  3145 + needed) the directories for the site, then constructs the tool functions for the site,
  3146 + and the site handler. Finally, it constructs the web site description.
  3147 +
  3148 + We gather common (constant) informations in the following type:
  3149 +
  3150 +public type CommonInfo:
  3151 + info(String common_name,
  3152 + Word32 http_port,
  3153 + Word32 https_port,
  3154 + String site_directory,
  3155 + String authorization_secret
  3156 + ).
  3157 +
  3158 + We need a forward declaration.
  3159 +
  3160 +public define AWP_Handler_Answer
  3161 + format
  3162 + (
  3163 + CommonInfo cinfo,
  3164 + List(HTTP_header) headers,
  3165 + HTTP_Answer page,
  3166 + Bool is_https,
  3167 + String charset
  3168 + ).
  3169 +
  3170 +
  3171 +define Printable_tree
  3172 + format
  3173 + (
  3174 + HTML_Size s
  3175 + ) =
  3176 + if s is
  3177 + {
  3178 + absolute(x) then ["\"",x,"\""],
  3179 + percentage(x) then ["\"",x,"%\""]
  3180 + }.
  3181 +
  3182 +define List(HTTP_header)
  3183 + make_state_cookie_headers
  3184 + (
  3185 + String website_name,
  3186 + String state_name
  3187 + )
  3188 + =
  3189 + //println("Set-Cookie state_"+website_name+"="+state_name);
  3190 + [
  3191 + http_header("Set-Cookie", "state_"+website_name+"="+state_name)
  3192 + ]
  3193 + .
  3194 +
  3195 +
  3196 +public define Web_Site
  3197 + make_web_site_description
  3198 + (
  3199 + String website_name, // site_UID
  3200 + List(String) common_names, // for example: ["www.our-business.com"]
  3201 + String site_directory,
  3202 + String state_directory,
  3203 + One -> One init,
  3204 + (HTTP_Info,
  3205 + List(Web_arg),
  3206 + Bool is_https) -> $State initial_state,
  3207 + ($State expired,
  3208 + Maybe(String),
  3209 + HTTP_Info,
  3210 + List(Web_arg),
  3211 + Bool is_https) -> $State ticket_expired_state,
  3212 + (Maybe(String),
  3213 + HTTP_Info,
  3214 + List(Web_arg),
  3215 + Bool is_https) -> $State ticket_lost_state,
  3216 + List(Web_Action($State)) actions,
  3217 + $State -> HTTP_Answer compute_page,
  3218 + $State -> List(HTTP_header) additional_headers,
  3219 + List(HTTP_header) constant_additional_headers,
  3220 + Int timeout,
  3221 + Redirections redirections,
  3222 + String charset,
  3223 + List(String) journal_extensions,
  3224 + List(String) journal_headers,
  3225 + (LogLevel, String) -> One logger, //logger
  3226 + String secret,
  3227 + List(MIME) known_mime_types,
  3228 + (String action_name,
  3229 + List(Web_arg) args) -> One before_send_file
  3230 + )=
  3231 + init(unique);
  3232 +
  3233 +
  3234 + //
  3235 + // make required directories (if needed)
  3236 + //
  3237 + with //web_sites_directory = (String) make_directory(my_anubis_directory+"/web_sites"),
  3238 + base_directory = (String) make_directory(site_directory),
  3239 + // state_directory = make_directory(site_directory+"/states"),
  3240 + forget((String)make_directory(site_directory+"/public"));
  3241 + //
  3242 + // construct tool functions
  3243 + // TODO 'make_separate_web_args_function' must retrieve state_cookies before parsing web_args if using_state_cookies is true
  3244 + with save_state = make_save_state_function(timeout, state_directory, logger),
  3245 + retrieve_state = make_retrieve_state_function(state_directory),
  3246 + separate_web_args = make_separate_web_args_function(state_directory, retrieve_state, website_name),
  3247 + apply_action = make_apply_action_function(actions, logger),
  3248 + //
  3249 + // construct the site handler
  3250 + //
  3251 + site_handler = (Word32 http_port, Word32 https_port) |->
  3252 + ((String host_name,
  3253 + HTTP_Info http_info,
  3254 + List(Web_arg) lwa,
  3255 + Bool is_https) |->
  3256 + //println(dump_web_arg_values(lwa));
  3257 + since separate_web_args(lwa, http_info) is swa(mb_previous_state, mb_action_name, operands),
  3258 + with new_state = if mb_previous_state is
  3259 + {
  3260 + not_found then
  3261 + //println("previous state not found");
  3262 + if mb_action_name is
  3263 + {
  3264 + failure then initial_state(http_info, operands, is_https),
  3265 + success(_) then
  3266 + ticket_lost_state(mb_action_name, http_info,operands,is_https)
  3267 + },
  3268 +
  3269 + out_of_date(state) then
  3270 + //println("previous out_of_date");
  3271 + ticket_expired_state(state, mb_action_name, http_info,operands,is_https),
  3272 +
  3273 + still_valid(state) then
  3274 + //println("previous still_valid");
  3275 + if mb_action_name is
  3276 + {
  3277 + failure then state,
  3278 + success(action_name) then
  3279 + apply_action(state,action_name,http_info,operands,is_https)
  3280 + }
  3281 + },
  3282 + //if state_and_headers is (session_ticket, mb_new_state, headers) then
  3283 + with state_name = save_state(new_state),
  3284 + //println("Cookie new STATE NAME "+state_name);
  3285 + with cookie_headers = if mb_action_name is
  3286 + {
  3287 + failure then
  3288 + make_state_cookie_headers(website_name, state_name),
  3289 + success(action_name) then
  3290 + if action_name = "none" then
  3291 + []
  3292 + else if substr(action_name, 0, 5)="ajax_" then
  3293 + []
  3294 + else
  3295 + make_state_cookie_headers(website_name, state_name)
  3296 + },
  3297 +
  3298 + format(info(host_name, http_port, https_port, site_directory, secret),
  3299 + additional_headers(new_state) + cookie_headers,
  3300 + compute_page(new_state),
  3301 + is_https,
  3302 + charset)
  3303 + ),
  3304 + //
  3305 + // make the delete_out_of_date function
  3306 + //
  3307 + delete_out_of_date =
  3308 + make_delete_out_of_date_states_function((Maybe($State))failure,
  3309 + site_directory+"/states"),
  3310 + //
  3311 + // construct the web site description
  3312 + //
  3313 + web_site((Word32 http_port, Word32 https_port) |->
  3314 + web_site_description(common_names,
  3315 + site_directory,
  3316 + redirections,
  3317 + charset,
  3318 + journal_extensions,
  3319 + journal_headers,
  3320 + logger,
  3321 + secret,
  3322 + known_mime_types,
  3323 + site_handler(http_port, https_port),
  3324 + constant_additional_headers,
  3325 + (HTTP_Info http_info, List(Web_arg) lwa) |-> if separate_web_args(lwa, http_info ) is
  3326 + swa(mb_previous_state,mb_action_name,operands) then
  3327 + if mb_action_name is
  3328 + {
  3329 + failure then unique
  3330 + success(an) then before_send_file(an,operands)
  3331 + }
  3332 + //using_state_cookies
  3333 + ),
  3334 + delete_out_of_date).
  3335 +
  3336 + public type WEB_Controller:
  3337 + web_controller(
  3338 + String name, //controller name
  3339 + (HTTP_Info http_info,
  3340 + List(Web_arg) lwa,
  3341 + Bool is_https
  3342 + ) -> HTTP_Answer view //view renderer
  3343 + )
  3344 +
  3345 +
  3346 +
  3347 +
  3348 +public define JsonValue to_html_ajax_content(Printable_tree content_HTML, String additional_script).
  3349 +public define JsonValue to_html_ajax_content(HTML_Partial_Content content_HTML, CommonInfo cinfo, String additional_script).
  3350 +
  3351 +
  3352 +
  3353 +define String
  3354 + get_site_uid
  3355 + (
  3356 + String site_path,
  3357 + (LogLevel, String) -> One logger //logger
  3358 + )=
  3359 + with file_name = site_path+"/site_UID",
  3360 + if read_from_file(file_name) is
  3361 + {
  3362 + cannot_find_file then
  3363 + logger(logInfo,"site UID doesn't exists. Generating one now");
  3364 + with uid = generate_random_string(9),
  3365 + if write_to_file(file_name, to_byte_array(uid)) is
  3366 + {
  3367 + cannot_open_file then logger(logError, "Can't create site UID here "+file_name);"",
  3368 + write_error(_) then logger(logError, "Can't write site UID here "+file_name);"",
  3369 + ok then uid
  3370 + }
  3371 + read_error(_) then
  3372 + logger(logError, "cannot read site UID from "+file_name);""
  3373 + ok(ba) then to_string(ba)
  3374 + }
  3375 + .
  3376 +
  3377 +// Compatibility function for older websites
  3378 + public define Web_Site
  3379 + make_web_site_description
  3380 + (
  3381 + List(String) common_names, // for example: ["www.our-business.com"]
  3382 + String site_directory,
  3383 + String state_directory,
  3384 + One -> One init,
  3385 + (HTTP_Info,
  3386 + List(Web_arg),
  3387 + Bool is_https) -> $State initial_state,
  3388 + ($State expired,
  3389 + Maybe(String),
  3390 + HTTP_Info,
  3391 + List(Web_arg),
  3392 + Bool is_https) -> $State ticket_expired_state,
  3393 + (Maybe(String),
  3394 + HTTP_Info,
  3395 + List(Web_arg),
  3396 + Bool is_https) -> $State ticket_lost_state,
  3397 + List(Web_Action($State)) actions,
  3398 + $State -> HTTP_Answer compute_page,
  3399 + $State -> List(HTTP_header) additional_headers,
  3400 + List(HTTP_header) constant_additional_headers,
  3401 + Int timeout,
  3402 + Redirections redirections,
  3403 + String charset,
  3404 + List(String) journal_extensions,
  3405 + List(String) journal_headers,
  3406 + (LogLevel, String) -> One logger, //logger
  3407 + String secret,
  3408 + List(MIME) known_mime_types,
  3409 + (String action_name,
  3410 + List(Web_arg) args) -> One before_send_file
  3411 + //Bool using_state_cookies
  3412 + )
  3413 + =
  3414 + //generate an unique ID if doesn't exist in root of site_directory
  3415 + with site_UID = get_site_uid(site_directory, logger),
  3416 + make_web_site_description(site_UID, common_names, site_directory, state_directory, init, initial_state, ticket_expired_state, ticket_lost_state, actions, compute_page, additional_headers, constant_additional_headers, timeout, redirections, charset, journal_extensions, journal_headers, logger, secret, known_mime_types, before_send_file)
  3417 +.
  3418 +
  3419 +
  3420 +
  3421 + *** [4.3] Starting the servers.
  3422 +
  3423 +public define Start_Web_Sites_Result
  3424 + start_web_sites
  3425 + (
  3426 + Word32 ip_address, // the IP address shared by the web sites
  3427 + Word32 http_port, // usually: 80
  3428 + Word32 https_port, // usually: 443
  3429 + String ssl_certificate_common_name,
  3430 + List(Web_Site) web_sites, // web sites to be started
  3431 + (One) -> Bool shutdown_required
  3432 + ) =
  3433 + with get_description = (Web_Site ws) |-> description(ws)(http_port,https_port),
  3434 + with http_server_r =
  3435 + start_http_server(ip_address,http_port,
  3436 + map(get_description,web_sites),
  3437 + //load_denial_of_service_info,
  3438 + shutdown_required),
  3439 + with https_server_r =
  3440 + start_https_server(ip_address,https_port,
  3441 + ssl_certificate_common_name,
  3442 + map(get_description,web_sites),
  3443 + shutdown_required),
  3444 + if http_server_r is ok(http_server)
  3445 + then
  3446 + (
  3447 + if https_server_r is ok(https_server)
  3448 + then
  3449 + (
  3450 + start_http_servers_tasks(map(get_description,web_sites),
  3451 + [http_server,https_server],
  3452 + 600); // period of 10 minutes
  3453 + delegate
  3454 + delete_states_loop(
  3455 + map((Web_Site ws) |->
  3456 + (site_directory(description(ws)(http_port,https_port))+
  3457 + "/states",delete_out_of_date(ws)),
  3458 + web_sites),
  3459 + 3600*24*3, // keep out of date states 3 days
  3460 + now,
  3461 + http_server,
  3462 + https_server,
  3463 + shutdown_required),
  3464 + ok(http_server,https_server)
  3465 + )
  3466 + else cannot_bind_to_port(https_port)
  3467 + )
  3468 + else
  3469 + (
  3470 + if https_server_r is ok(https_server)
  3471 + then cannot_bind_to_port(http_port)
  3472 + else cannot_bind_to_port(http_port,https_port)
  3473 + ).
  3474 +
  3475 +
  3476 +public define One
  3477 + start_web_sites
  3478 + (
  3479 + Word32 ip_address, // the IP address shared by the web sites
  3480 + Word32 http_port, // usually: 80
  3481 + Word32 https_port, // usually: 443
  3482 + String ssl_certificate_common_name,
  3483 + List(Web_Site) web_sites, // web sites to be started
  3484 + (One) -> Bool shutdown_required,
  3485 + (LogLevel, String) -> One logger //logger where to report the error
  3486 + )=
  3487 + if (Start_Web_Sites_Result)start_web_sites(ip_address,
  3488 + http_port,
  3489 + https_port,
  3490 + ssl_certificate_common_name,
  3491 + web_sites,
  3492 + shutdown_required) is
  3493 + {
  3494 + cannot_bind_to_port(n) then logger(logError, "Cannot bind to port: "+n),
  3495 + cannot_bind_to_port(n,m) then logger(logError, "Cannot bind to ports: "+n+", "+m),
  3496 + ok(s1,s2) then logger(logInfo, "Servers started on ports "+http_port+" (HTTP) and "+https_port+" (HTTPS).")
  3497 + }.
  3498 +
  3499 +
  3500 +
  3501 +
  3502 +
  3503 + *** [5] HTML Formating.
  3504 +
  3505 + We need to translate HTML elements as defined above into actual HTML text.
  3506 +
  3507 + Actioners require special informations, which must be transmitted when needed by the
  3508 + 'format' functions:
  3509 +
  3510 + - the 'common name', which is used for URLs,
  3511 + - the HTTP/HTTPS port number,
  3512 + - the 'state name', which must be transmitted when the actioner is clicked upon,
  3513 + - the 'form name' (if any) to which the actioner refers.
  3514 +
  3515 + If the actioner is off form, and if it refers to a form, the name of that form is
  3516 + already known by the actioner. On the contrary, if the actioner is 'in form', it refers
  3517 + implicitly to the form containing it. The name of that form is transmitted to the
  3518 + 'format' functions called from within the formating of that form.
  3519 +
  3520 +
  3521 +
  3522 +
  3523 + *** [5.1] The type 'HTML_Any($T)'.
  3524 +
  3525 + The type 'HTML_Any($T)' gathers elements which may be put anywhere in the page. The
  3526 + parameter $T becomes either 'HTML_Off_Form' or 'HTML_In_Form'.
  3527 +
  3528 +type HTML_Any($T):
  3529 + any_text (List(CoreAttrs), String the_text),
  3530 + any_preformated (List(Text_Option), String),
  3531 + any_paragraph (List(Text_Option), List($T) content),
  3532 + any_image (List(CoreAttrs), String url, String alternate),
  3533 + any_image (List(CoreAttrs), String url, String alternate, Int width, Int height),
  3534 + any_table (List(Table_Option), HTML_Header_Row($T), List(HTML_Row($T)), HTML_Footer_Row($T)),
  3535 + any_center ($T),
  3536 + any_mail_to (String email, $T element),
  3537 + any_scroller (Int width, Int height,
  3538 + Int content_width, Int content_height,
  3539 + $T content),
  3540 + any_fixed_size (HTML_Size width, HTML_Size height, $T content),
  3541 + any_fixed_size_2 (HTML_Size width, HTML_Size height, String name_of_HTML_file),
  3542 + any_actioner (Actioner_Connection,
  3543 + Actioner_Target,
  3544 + Actioner_Aspect,
  3545 + WEB_Action_Name action,
  3546 + List((String,String)) extra_ops,
  3547 + List(Actioner_Local_Action),
  3548 + Maybe(String) form_name),
  3549 + any_foreign_link_new (Actioner_Target, Actioner_Aspect, String url),
  3550 + any_foreign_link (List(Text_Option), String url),
  3551 + any_foreign_link (List(Text_Option), String url, String name),
  3552 + any_private_download (String abs_path, String name, String extra_ext,
  3553 + Maybe((String,List((String,String))))),
  3554 + any_div (List(CoreAttrs), List($T) element),
  3555 + any_div_empty (List(CoreAttrs)),
  3556 + any_coreattrs (List(CoreAttrs)),
  3557 + any_ol (List(CoreAttrs), List($T) content),
  3558 + any_ul (List(CoreAttrs), List($T) content),
  3559 + any_li (List(CoreAttrs), List($T) content),
  3560 + any_button (List(CoreAttrs), List($T) element),
  3561 + any_i (List(CoreAttrs), String text),
  3562 + any_span (List(CoreAttrs), String text),
  3563 + any_hr (List(CoreAttrs))
  3564 +.
  3565 +
  3566 +
  3567 +
  3568 + *** [5.2] Formating a color.
  3569 +
  3570 + RGB colors are formatted as '#rrggbb' where rr, gg and bb are two characters
  3571 + hexadecimal values.
  3572 +
  3573 +define String
  3574 + html_format
  3575 + (
  3576 + RGB color
  3577 + ) =
  3578 + if color is rgb(r,g,b) then
  3579 + "#" + to_hexa(r)
  3580 + + to_hexa(g)
  3581 + + to_hexa(b).
  3582 +
  3583 +
  3584 + The following is a very arbitrary definition of the opposite color. The thing which is
  3585 + important is that it is far from the original, so that characters in 'opposite' color
  3586 + are clearly visible over the original.
  3587 +
  3588 +define RGB
  3589 + opposite
  3590 + (
  3591 + RGB color
  3592 + ) =
  3593 + if color is rgb(r,g,b) then
  3594 + rgb(255-r,
  3595 + 255-g,
  3596 + 255-b).
  3597 +
  3598 + Converting RGB to RGBA.
  3599 +
  3600 +define RGBA
  3601 + to_rgba
  3602 + (
  3603 + RGB color
  3604 + ) =
  3605 + if color is rgb(r,g,b) then rgba(r,g,b,255).
  3606 +
  3607 +
  3608 + *** [5.4] Formating an actioner.
  3609 +
  3610 + An actioner works as follows. Assume first that it refers to a form. When it is clicked
  3611 + upon, the actioner puts (via 'onMouseDown') the URL into the 'action' attribute of the
  3612 + form, and submits the form, using the JavaScript command 'form_name.submit()'. If the
  3613 + actioner does not refer to a form, it fires the URL directly via 'href', because in
  3614 + that case, the actioner is always an <a> tag.
  3615 +
  3616 + The URL itself is composed using the connection sort (same, http or https), the common
  3617 + name and port number (if needed), the state name, the action name, and the extra
  3618 + operands, which are put into a query string. It may look like this:
  3619 +
  3620 + http://common_name:port/?s=state_name&a=action_name&oname=value...
  3621 +
  3622 + Each extra operand is a pair of strings: (name,value). It is formated as:
  3623 +
  3624 + &oname=value
  3625 +
  3626 +public define String
  3627 + format_attrs
  3628 + (
  3629 + List(CoreAttrs) attributs
  3630 + ).
  3631 +
  3632 +//public define String
  3633 +// format_extra_operands
  3634 +// (
  3635 +// List((String,String)) l
  3636 +// ) =
  3637 +// if l is
  3638 +// {
  3639 +// [ ] then "",
  3640 +// [h . t] then if h is (n,v) then
  3641 +// "&amp;"+n+"="+v+format_extra_operands(t)
  3642 +// }
  3643 +//.
  3644 +
  3645 +
  3646 + It seams that the standard requires "&amp;" instead of "&" !
  3647 +
  3648 + In case the target is another window, we need to format the options for this window.
  3649 +
  3650 +define String
  3651 + format
  3652 + (
  3653 + List(Other_Window_Option) l
  3654 + ) =
  3655 + if l is
  3656 + {
  3657 + [ ] then "",
  3658 + [h . t] then if h is
  3659 + {
  3660 + resizable then "resizable",
  3661 + scrollbars then "scrollbars",
  3662 + width(w) then "width="+w,
  3663 + height(h2) then "height="+h2
  3664 + } + if t is [ ] then "" else (","+format(t))
  3665 + }
  3666 +.
  3667 +
  3668 +
  3669 +
  3670 + Formating choices for a <select> tag.
  3671 +
  3672 +public define Printable_tree
  3673 + format_choices
  3674 + (
  3675 + List(String) l
  3676 + ) =
  3677 + if l is
  3678 + {
  3679 + [ ] then [ ],
  3680 + [h . t] then ["<option>", h, "</option>\n" . format_choices(t)]
  3681 + }.
  3682 +
  3683 +
  3684 +public define Printable_tree
  3685 + format_choices
  3686 + (
  3687 + List(String) l,
  3688 + InitialValue selected
  3689 + ) =
  3690 + if l is
  3691 + {
  3692 + [ ] then [ ],
  3693 + [h . t] then if h = selected.value
  3694 + then ["<option selected=\"selected\">", h, "</option>\n" . format_choices(t)]
  3695 + else ["<option>", h, "</option>\n" . format_choices(t,selected)]
  3696 + }.
  3697 +
  3698 +
  3699 +public define Printable_tree
  3700 + format_choices
  3701 + (
  3702 + List((List(CoreAttrs),WebArgValue,String)) l
  3703 + ) =
  3704 + if l is
  3705 + {
  3706 + [ ] then [ ],
  3707 + [h . t] then
  3708 + if h is (attrs,val,item)
  3709 + then ["<option value=\""+encode_HTML_entities(val.value)+"\" "+format_attrs(attrs)+">", item, "</option>\n" . format_choices(t)]
  3710 + }.
  3711 +
  3712 +public define Printable_tree
  3713 + format_choices
  3714 + (
  3715 + List((List(CoreAttrs),WebArgValue,String)) l,
  3716 + InitialValue selected
  3717 + ) =
  3718 + if l is
  3719 + {
  3720 + [ ] then [ ],
  3721 + [h . t] then
  3722 + if h is (attrs,val,item) then
  3723 + if val.value = selected.value
  3724 + then ["<option value=\""+encode_HTML_entities(val.value)+"\" "+format_attrs(attrs)+" selected=\"selected\">", item, "</option>\n" . format_choices(t)]
  3725 + else ["<option value=\""+encode_HTML_entities(val.value)+"\" "+format_attrs(attrs)+" >", item, "</option>\n" . format_choices(t,selected)]
  3726 + }.
  3727 +
  3728 +
  3729 +
  3730 + Note: this counter is private to the virtual machine, hence there is one counter by
  3731 + client and by page : it seems that a new VM (simply a delegate) is started for each request.
  3732 +
  3733 +define Int
  3734 + new_count
  3735 + (
  3736 + Var(Int) count
  3737 + )
  3738 + =
  3739 + count <- *count+1;
  3740 + *count.
  3741 +
  3742 +
  3743 + The next function composes the URL. It is a JavaScript URL when the target is another
  3744 + window.
  3745 +
  3746 +//public define String
  3747 +// format_web_action_name
  3748 +// (
  3749 +// WEB_Action_Name action
  3750 +// )=
  3751 +// if action is
  3752 +// {
  3753 +// no_action then "",
  3754 +// controller_action(controller, action_name) then "?aws_controller="+controller+"&amp;aws_action="+action_name,
  3755 +// action_name(action_name) then "?aws_action="+action_name,
  3756 +// url(url) then url
  3757 +// }
  3758 +//.
  3759 +//
  3760 +//public define String
  3761 +// format_web_action_name
  3762 +// (
  3763 +// WEB_Action_Name action,
  3764 +// List((String,String)) extra_ops,
  3765 +// )=
  3766 +// format_web_action_name(action)
  3767 +// +
  3768 +// format_extra_operands(extra_ops)
  3769 +//.
  3770 +
  3771 +define String
  3772 + make_actioner_url
  3773 + (
  3774 + CommonInfo cinfo,
  3775 + Actioner_Connection connection,
  3776 + Actioner_Target target,
  3777 + WEB_Action_Name action,
  3778 + List((String,String)) extra_ops,
  3779 + Bool is_https
  3780 + ) =
  3781 + if cinfo is info(common_name,http_port,https_port,site_directory,secret) then
  3782 + with strict_url =
  3783 + if connection is
  3784 + {
  3785 + same then "/",
  3786 + http then
  3787 + if http_port = 80 then
  3788 + "http://"+common_name+"/"
  3789 + else
  3790 + "http://"+common_name+":"+http_port+"/",
  3791 + https then
  3792 + if https_port = 443 then
  3793 + "https://"+common_name+"/"
  3794 + else
  3795 + "https://"+common_name+":"+https_port+"/",
  3796 + } +
  3797 + //with action_string =
  3798 + format_web_action_name(action, extra_ops),
  3799 + if target is
  3800 + {
  3801 + same then strict_url,
  3802 + same(label) then strict_url+"#"+label,
  3803 + other(wn,ops) then
  3804 +
  3805 + "javascript:void window.open('"+strict_url+"&amp;t="+wn+"','"+
  3806 + "w"+to_ascii(sha1(wn))+"','"+format(ops)+"')"
  3807 + }.
  3808 +
  3809 +define String
  3810 + make_foreign_link_url
  3811 + (
  3812 + Actioner_Target target,
  3813 + String url
  3814 + ) =
  3815 + if target is
  3816 + {
  3817 + same then "/",
  3818 + same(label) then "/#"+label,
  3819 + other(wn,ops) then
  3820 +
  3821 + "javascript:void window.open('"+url+"','"+
  3822 + "w"+to_ascii(sha1(wn))+"','"+format(ops)+"')"
  3823 + }.
  3824 +
  3825 +
  3826 + Depending on the fact that the actioner refers to a form or not, the URL is used in two
  3827 + different ways. If the actioner does not refer to a form, it is realized by a '<a>'
  3828 + tag, with a 'href' attribute. If it refers to a form, it is still realized by a '<a>'
  3829 + tag, but with no href attribute. In this case, we use the 'onMouseDown' or 'onChange'
  3830 + event handler. The handler calls a JavaScript function which puts the URL as the value
  3831 + of the 'action' attribute of the form, and submits the form.
  3832 +
  3833 +type URL_or_JavaScript:
  3834 + url (String),
  3835 + javascript (Printable_tree script, Printable_tree handler).
  3836 +
  3837 +
  3838 + It was as shown below, in order to allow submission of a form from outside the form,
  3839 + but this makes problems:
  3840 +
  3841 +define URL_or_JavaScript
  3842 + format_action
  3843 + (
  3844 + String the_url,
  3845 + Actioner_Aspect aspect,
  3846 + Maybe(String) mb_id,
  3847 + Maybe(String) mb_form_name,
  3848 + Var(Int) action_count
  3849 + ) =
  3850 + if mb_form_name is
  3851 + {
  3852 + failure then
  3853 + url(the_url),
  3854 + success(form_name) then
  3855 + with n = new_count(action_count),
  3856 + fn_name = "pfu_" + if mb_id is
  3857 + {
  3858 + failure then form_name + "_" + n,
  3859 + success(id) then id,
  3860 + },
  3861 + javascript(
  3862 + [
  3863 + "<script type=\"text/javascript\" language =\"JavaScript\">\n",
  3864 + "function ", fn_name, "() {\n",
  3865 + " var fa = document.forms.",form_name,";\n",
  3866 + " var u = \"",the_url,"\";\n",
  3867 + " fa.action = u;",
  3868 + if aspect is submit(_, _) then " }\n"
  3869 + else "\n fa.submit(); }\n",
  3870 + "</script>\n"
  3871 + ],
  3872 + [fn_name,"();"]
  3873 + )
  3874 + }.
  3875 +
  3876 + Now, we format the actioner according to its aspect.
  3877 +
  3878 +define List(Text_Option)
  3879 + get_text_options
  3880 + (
  3881 + List(Text_Option) l
  3882 + )
  3883 + =
  3884 + if l is
  3885 + {
  3886 + [] then [],
  3887 + [h . t ] then
  3888 + if h is class(_) then
  3889 + get_text_options(t)
  3890 + else if h is id(_) then
  3891 + get_text_options(t)
  3892 + else if h is style(_) then
  3893 + get_text_options(t)
  3894 + else if h is title(_) then
  3895 + get_text_options(t)
  3896 + else if h is core_attrs(_) then
  3897 + get_text_options(t)
  3898 + else
  3899 + [ h . get_text_options(t) ]
  3900 +
  3901 + }.
  3902 +
  3903 + /**
  3904 + * Extract the CSS class list from the list of Text_Option
  3905 + */
  3906 +define List(CoreAttrs)
  3907 + get_css_class
  3908 + (
  3909 + List(Text_Option) l
  3910 + )
  3911 + =
  3912 + if l is
  3913 + {
  3914 + [] then [],
  3915 + [h . t ] then
  3916 +
  3917 +
  3918 + if h is class(name) then
  3919 + [ class(name) . get_css_class(t) ]
  3920 + else if h is id(name) then
  3921 + [ id(name) . get_css_class(t) ]
  3922 + else if h is style(the_style) then
  3923 + [ style(the_style) . get_css_class(t) ]
  3924 + else if h is title(name) then
  3925 + [ tooltip(name) . get_css_class(t) ]
  3926 + else if h is attr(name, value) then
  3927 + [ attr(name, value) . get_css_class(t) ]
  3928 + else
  3929 + get_css_class(t)
  3930 + }
  3931 + .
  3932 +
  3933 +
  3934 +define List(CoreAttrs)
  3935 + get_core_attrs
  3936 + (
  3937 + List(Text_Option) l
  3938 + )
  3939 + =
  3940 + if l is
  3941 + {
  3942 + [] then [],
  3943 + [h . t ] then
  3944 + if h is core_attrs(attrs) then
  3945 + attrs + get_core_attrs(t)
  3946 + else
  3947 + get_core_attrs(t)
  3948 + }
  3949 + .
  3950 +
  3951 +define Printable_tree
  3952 + format
  3953 + (
  3954 + List(Actioner_Local_Action) l
  3955 + ) =
  3956 + if l is
  3957 + {
  3958 + [ ] then [ ],
  3959 + [h . t] then [if h is
  3960 + {
  3961 + close_window then [" window.close(); "]
  3962 + }
  3963 + . format(t)]
  3964 + }.
  3965 +
  3966 +
  3967 +define String
  3968 + format_attrs
  3969 + (
  3970 + List(InputAttrs) attributs,
  3971 + List(String) classes,
  3972 + List(String) styles
  3973 + )=
  3974 + if attributs is
  3975 + {
  3976 + [] then
  3977 + if length(classes) = 0 then "" else " class=\""+join(" ",classes)+"\""+
  3978 + if length(styles) = 0 then "" else " style=\""+join(";",styles)+"\"",
  3979 + [h . t] then
  3980 + with new_classes = if h is class(class_name) then [class_name. classes] else classes,
  3981 + new_styles = if h is style(style_string) then [style_string . styles] else styles,
  3982 + current = if h is
  3983 + {
  3984 + id(id_name) then
  3985 + " id=\"" + id_name + "\"",
  3986 + class(class_name) then "",
  3987 + style(style_string) then "",
  3988 + title(title_string) then
  3989 + " title=\"" + title_string + "\"",
  3990 +
  3991 + lang(lang) then
  3992 + " xml:lang=" + lang,
  3993 + dir(reading_Way) then
  3994 + if reading_Way is
  3995 + {
  3996 + ltr then " dir=ltr",
  3997 + rtl then " dir=rtl"
  3998 + },
  3999 +
  4000 + accesskey(key) then
  4001 + " accesskey=\"" + key + "\"",
  4002 + tabindex(index) then
  4003 + " tabindex=\"" + index + "\"",
  4004 +
  4005 + attr(name, value) then
  4006 + " " + name + "=\"" + value + "\"",
  4007 +
  4008 + event(e, value) then
  4009 + " " + event_name(e) + "=\"" + value + "\"",
  4010 + data(name, value) then
  4011 + " data-" + to_lower(name) + "=\"" + value + "\"",
  4012 + },
  4013 + current + format_attrs(t, classes, styles)
  4014 + }.
  4015 +
  4016 +public define List(CoreAttrs) extract_attributes(HTML_tooltip htt).
  4017 +
  4018 +define String
  4019 + format_attrs
  4020 + (
  4021 + List(CoreAttrs) attributs,
  4022 + List(String) classes, //class accumulator
  4023 + List(String) styles //styles accumulator
  4024 + )=
  4025 + if attributs is
  4026 + {
  4027 + [] then
  4028 + //concat all accumulated classes and styles
  4029 + (if length(classes) = 0 then "" else " class=\""+join(" ",classes)+"\"")+
  4030 + if length(styles) = 0 then "" else " style=\""+join(";",styles)+"\"",
  4031 + [h . t] then
  4032 + with new_classes = if h is class(class_name) then [class_name. classes] else classes,
  4033 + new_styles = if h is style(style_string) then [style_string . styles] else styles,
  4034 + new_attrs = if h is tooltip(tt) then extract_attributes(tt) else [],
  4035 +
  4036 + current = if h is
  4037 + {
  4038 + empty then "",
  4039 + id(id_name) then
  4040 + " id=\"" + id_name + "\"",
  4041 + class(class_name) then "", //do nothing here, because we accumulate the class until we have some other attributes
  4042 + style(style_string) then "", //do nothing here, because we accumulate the style until we have some other attributes
  4043 + title(title_string) then
  4044 + " title=\"" + title_string + "\"",
  4045 +
  4046 + lang(lang) then
  4047 + " xml:lang=" + lang,
  4048 + dir(reading_Way) then
  4049 + if reading_Way is
  4050 + {
  4051 + ltr then " dir=ltr",
  4052 + rtl then " dir=rtl"
  4053 + },
  4054 +
  4055 + accesskey(key) then
  4056 + " accesskey=\"" + key + "\"",
  4057 + tabindex(index) then
  4058 + " tabindex=\"" + index + "\"",
  4059 + attr(name, value) then
  4060 + " " + name + "=\"" + value + "\"",
  4061 + bool_attr(bool, value)then
  4062 + if bool then " "+value+" " else "",
  4063 + event(e, value) then
  4064 + " " + event_name(e) + "=\"" + value + "\"",
  4065 + tooltip(_) then "", //do nothing here, because we extract attributes at first in new_attrs
  4066 + data(name, value) then
  4067 + " data-" + to_lower(name) + "=\"" + value + "\"",
  4068 +
  4069 + contenteditable(value)then //boolean value
  4070 + " contenteditable=\""+ to_String(value)+ "\""
  4071 +
  4072 + contextmenu(id_name) then //ID value
  4073 + " contextmenu=\"" + id_name + "\"",
  4074 +
  4075 + draggable(value) then //boolean value
  4076 + " draggable=\""+ to_String(value)+ "\"",
  4077 +
  4078 + enterkeyhint(value) then
  4079 + " enterkeyhint=\""+ value + "\"",
  4080 +
  4081 + hidden(value) then //boolean value
  4082 + " hidden=\""+ (if value then "hidden" else "") + "\"",
  4083 +
  4084 + inert then
  4085 + " inert",
  4086 +
  4087 + inputmode(value) then
  4088 + " inputmode =\"" + value + "\"",
  4089 +
  4090 + popover then
  4091 + " popover",
  4092 +
  4093 + spellcheck(value) then //boolean value
  4094 + " spellcheck=\""+ to_String(value)+ "\""
  4095 +
  4096 + translate(value) then
  4097 + " translate=\"" + if value then "yes\"" else "no\""
  4098 + },
  4099 + current + format_attrs(t + new_attrs, new_classes, new_styles)
  4100 + }.
  4101 +
  4102 +define String
  4103 + format_attrs
  4104 + (
  4105 + List(InputAttrs) attributs
  4106 + )=
  4107 + format_attrs(attributs, [], []).
  4108 +
  4109 +public define String
  4110 + format_attrs
  4111 + (
  4112 + List(CoreAttrs) attributs
  4113 + )=
  4114 + format_attrs(attributs, [], []).
  4115 +
  4116 +define String
  4117 + format_text_options
  4118 + (
  4119 + List(Text_Option) l
  4120 + )
  4121 + =
  4122 + with text_options = get_text_options(l),
  4123 + core_attrs = get_css_class(l) + get_core_attrs(l),
  4124 + (if length(text_options)= 0 then "" else " style=\"" + format(text_options) + "\" ")
  4125 + +
  4126 + (if length(core_attrs) = 0 then "" else format_attrs(core_attrs))
  4127 + .
  4128 +
  4129 +define Printable_tree
  4130 + format_div_option
  4131 + (
  4132 + List(CoreAttrs) options
  4133 + )=
  4134 + ["<div" + format_attrs(options) + ">"]
  4135 +.
  4136 +
  4137 +define Maybe(String)
  4138 + extract_id
  4139 + (
  4140 + List(CoreAttrs) attrbs
  4141 + ) =
  4142 + if attrbs is
  4143 + {
  4144 + [] then failure,
  4145 + [h . t] then
  4146 + if h is id(value) then success(value)
  4147 + else extract_id(t)
  4148 + }
  4149 +.
  4150 +
  4151 +define Maybe(String)
  4152 + extract_id
  4153 + (
  4154 + Actioner_Aspect aspect
  4155 + ) =
  4156 + if aspect is
  4157 + {
  4158 + link(_,_,_) then failure,
  4159 + img_link(_,_,_) then failure,
  4160 + push_button(opts,_) then extract_id(opts),
  4161 + button(_,_) then failure,
  4162 + button(_,_,_,_) then failure,
  4163 + submit(opts,_) then extract_id(opts),
  4164 + //immediate_selector(_,_,_,_) then failure,
  4165 + immediate_selector(_,_,_,_,_,_) then failure,
  4166 + html(_, _) then failure,
  4167 + }.
  4168 +
  4169 +to do Complete format_foreign_link
  4170 +//TODO Complete format_foreign_link
  4171 +
  4172 + CommonInfo cinfo,
  4173 + String state_name,
  4174 + Var(Int) action_count,
  4175 + Var(Int) ic_v // 'idnum' counter variable
  4176 +
  4177 +define Printable_tree
  4178 + format_foreign_link
  4179 + (
  4180 +// CommonInfo cinfo,
  4181 + Actioner_Target target,
  4182 + Actioner_Aspect aspect,
  4183 + String url,
  4184 + Bool is_https,
  4185 + CommonInfo cinfo,
  4186 +// String state_name,
  4187 + Var(Int) action_count,
  4188 + Var(Int) ic_v, // 'idnum' counter variable
  4189 + Var(List(HTML_Head_Tag)) head_tags
  4190 + ) =
  4191 + //if cinfo is info(common_name,http_port,https_port,site_dir,secret) then
  4192 + with full_url = make_foreign_link_url(target,url),
  4193 +// with action = format_action(full_url, aspect, extract_id(aspect), mb_form_name),
  4194 + if aspect is
  4195 + {
  4196 +
  4197 + link(opt, text, mb_name) then
  4198 + with name_tag = if mb_name is success(n) then " name=\"" + n + "\"" else "",
  4199 + [
  4200 + "<a href=\"", full_url, "\"", format_text_options(opt), name_tag, ">",
  4201 + text,
  4202 + "</a>"
  4203 + ],
  4204 + img_link(opt, img, alt_text) then
  4205 + [
  4206 + "<a href=\"", full_url ,"\"", format_attrs(opt),"><img src=\"", img,
  4207 + "\" alt=\"" + alt_text + "\" border=\"0\"></a>"
  4208 + ],
  4209 + push_button(options, text) then
  4210 + ["<a href=\"",full_url,"\"", format_attrs(options), ">",
  4211 + text, "</a>"
  4212 + ],
  4213 + button(url_off,url_on) then
  4214 + [ ],
  4215 +
  4216 + button(url_off,url_on,w,h) then
  4217 + [ ],
  4218 +
  4219 + submit(options, text) then
  4220 + [ ],
  4221 +
  4222 + //immediate_selector(opt,name,size,choices) then
  4223 + // [ ],
  4224 + immediate_selector(opt,name,size,choices,selected,function) then
  4225 + [ ],
  4226 + html(options, html_off_form) then
  4227 + [
  4228 + "<a href=\"", full_url,"\"", format_attrs(options), ">",
  4229 + format(cinfo, ic_v, html_off_form, is_https, action_count, head_tags),
  4230 + "</a>"
  4231 + ]
  4232 + }.
  4233 +
  4234 +define Printable_tree
  4235 + format_actioner
  4236 + (
  4237 + CommonInfo cinfo,
  4238 + Actioner_Connection connection,
  4239 + Actioner_Target target,
  4240 + Actioner_Aspect aspect,
  4241 + WEB_Action_Name action,
  4242 + List((String,String)) extra_ops,
  4243 + List(Actioner_Local_Action) local_actions,
  4244 + Maybe(String) mb_form_name,
  4245 + Bool is_https,
  4246 + Var(Int) action_count,
  4247 + Var(Int) ic_v, // 'idnum' counter variable
  4248 + Var(List(HTML_Head_Tag)) head_tags
  4249 +
  4250 + ) =
  4251 +
  4252 + if cinfo is info(common_name,http_port,https_port,site_dir,secret) then
  4253 + with url = make_actioner_url(cinfo,connection,target,
  4254 + action,extra_ops,is_https),
  4255 + with formatted_action = format_action(url, aspect, extract_id(aspect), mb_form_name, action_count),
  4256 + if aspect is
  4257 + {
  4258 +
  4259 + link(opt, text, mb_name) then
  4260 + with name_tag = if mb_name is success(n) then " name=\"" + n + "\"" else "",
  4261 + with action_name = if action is {
  4262 + no_action then ""
  4263 + controller_action(_, an) then an,
  4264 + action_name(an) then an,
  4265 + url(_) then ""
  4266 + },
  4267 + if action_name = "" then
  4268 + ["<a ", format_text_options(opt), name_tag, ">", text, "</a>" ]
  4269 + else
  4270 + ["<a href=\"",url,"\"",
  4271 + format_text_options(opt), name_tag, ">",
  4272 + text,
  4273 + "</a>"
  4274 + ],
  4275 + img_link(options, img, alt_text) then
  4276 + //if action name is empty, format options on image because maybe there onclick action
  4277 + with action_name = if action is {
  4278 + no_action then ""
  4279 + controller_action(_, an) then an,
  4280 + action_name(an) then an,
  4281 + url(_) then ""
  4282 + },
  4283 + if action_name ="" then
  4284 + [
  4285 + "<img src=\"", img,"\"",
  4286 + format_attrs(options)," alt=\"" + alt_text + "\" border=\"0\">"
  4287 + ]
  4288 + else
  4289 + [
  4290 + "<a href=\"", url,"\"", format_attrs(options),"><img src=\"", img,
  4291 + "\" alt=\"" + alt_text + "\" border=\"0\"></a>"
  4292 + ],
  4293 + push_button(options, text) then
  4294 + [
  4295 + if formatted_action is
  4296 + {
  4297 + url(u) then ["<a href=\"",u,"\"", format_attrs(options), ">",
  4298 + text, "</a>"
  4299 + ],
  4300 + javascript(s,h) then
  4301 + with action_name =
  4302 + if action is
  4303 + {
  4304 + no_action then "",
  4305 + controller_action(_, an) then an,
  4306 + action_name(an) then an,
  4307 + url(_) then ""
  4308 + },
  4309 + if action_name = "" then
  4310 + ["<input type=\"button\" value=\"",encode_HTML_entities(text),"\"", format_attrs(options), " />"]
  4311 + else
  4312 + [s,"<input type=\"button\" value=\"",encode_HTML_entities(text),"\"", format_attrs(options), " onclick=\"",h,"\" />"]
  4313 + }
  4314 + ],
  4315 + button(url_off,url_on) then
  4316 + [ if formatted_action is
  4317 + {
  4318 + url(u) then ["<a href=\"",u],
  4319 + javascript(s,h) then [s,"<a onMouseDown=\"",h]
  4320 + },
  4321 + "\" style=\"text-decoration:none\">",
  4322 + "<img alt=\"",url_off,"\" src=\"",url_off,"\" border=0",
  4323 + " onMouseOver=\"this.src='",url_on,"'\" ",
  4324 + " onMouseOut=\"this.src='",url_off,"'\">",
  4325 + "</a>"
  4326 + ],
  4327 +
  4328 + button(url_off,url_on,w,h) then
  4329 + [ if formatted_action is
  4330 + {
  4331 + url(u) then ["<a href=\"",u],
  4332 + javascript(s,h2) then [s,"<a onMouseDown=\"",h2]
  4333 + },
  4334 + "\" style=\"text-decoration:none\">",
  4335 + "<img width=",w," height=",h," alt=\"",url_off,"\" src=\"",url_off,"\" border=0",
  4336 + " onMouseOver=\"this.src='",url_on,"'\" ",
  4337 + " onMouseOut=\"this.src='",url_off,"'\">",
  4338 + "</a>"
  4339 + ],
  4340 +
  4341 + submit(options, text) then
  4342 + [
  4343 + if formatted_action is
  4344 + {
  4345 + url(u) then ["<a href=\"",u,"\"", format_attrs(options), ">",
  4346 + text, "</a>"
  4347 + ],
  4348 + javascript(s,h) then
  4349 + with action_name = if action is {
  4350 + no_action then "",
  4351 + controller_action(_, an) then an,
  4352 + action_name(an) then an,
  4353 + url(_) then ""
  4354 + },
  4355 + if action_name = "" then // special case where URL (so the action_name) is provided by the form itself
  4356 + // so javascript isn't needed. This is the standard HMTL way.
  4357 + ["<input type=\"submit\" value=\"",text,"\"", format_attrs(options), " />"]
  4358 + else
  4359 + [s,"<input type=\"submit\" value=\"",text,"\"", format_attrs(options), " onclick=\"",h,"\" />"]
  4360 + }
  4361 + ],
  4362 +
  4363 +// immediate_selector(options,name,size,choices) then
  4364 +// [ if action is
  4365 +// {
  4366 +// url(u) then ["<select href=\"",u]
  4367 +// javascript(s,h) then [s,"<select onchange=\"",h]
  4368 +// },
  4369 +// "\" name=\"",name,"\" size=\"",size,"\"", format_attrs(options), ">",
  4370 +// format_choices(choices),"</select>"
  4371 +// ],
  4372 + immediate_selector(options, name, size, choices, mb_selected, custom_function_name) then
  4373 + [
  4374 + //if custom function name is provided, that name is used instead of autogenerated js function
  4375 + if custom_function_name = "" then
  4376 + if formatted_action is
  4377 + {
  4378 + url(u) then ["<select href=\"",u]
  4379 + javascript(s,h) then [s,"<select onchange=\"",h]
  4380 + }
  4381 + else
  4382 + ["<select onchange=\"",custom_function_name],
  4383 +
  4384 + "\" name=\"",name,"\" size=\"",size,"\"", format_attrs(options), ">",
  4385 + if mb_selected is success(selected) then format_choices(choices, selected) else format_choices(choices),"</select>"
  4386 + ],
  4387 + html(options, html_off_form) then
  4388 + [
  4389 + "<a href=\"", url,"\"", format_attrs(options), ">",
  4390 + format(cinfo, ic_v, html_off_form, is_https, action_count, head_tags),
  4391 + "</a>"
  4392 + ]
  4393 + }.
  4394 +
  4395 +
  4396 +
  4397 +
  4398 +
  4399 +
  4400 + *** [5.5] Formating a private download link.
  4401 +
  4402 + We get the absolute path of the file to be downloaded, and the name under which it
  4403 + should appear to the client. The function 'format_private_download' creates an
  4404 + hypertext link for downloading the file. The secured mecanism of private download is
  4405 + used. This function is called by the function which formats HTML_Any($T) elements.
  4406 +
  4407 +
  4408 +define Printable_tree
  4409 + format_private_download
  4410 + (
  4411 + CommonInfo cinfo,
  4412 + String abs_path, // absolute file path on server
  4413 + String name, // name of file as it appears in the browser
  4414 + String extra, // extra extension
  4415 + Maybe((String,List((String,String)))) action
  4416 + ) =
  4417 + if cinfo is info(common_name,http_port,https_port,site_directory,secret) then
  4418 + with private_download_directory = site_directory+"/private_download",
  4419 + with auth = make_authorization(site_directory,secret,abs_path),
  4420 + [
  4421 + "<a href=\"",name,extra,"?zauth=",auth,
  4422 + if action is
  4423 + {
  4424 + failure then [ ]
  4425 + success(a) then if a is (an,args) then
  4426 + ["&a=",an,format_extra_operands(args)]
  4427 + },
  4428 + "\">",
  4429 + name,
  4430 + "</a>"
  4431 + ].
  4432 +
  4433 + *** [5.6] Formating rows and cells in a table.
  4434 +
  4435 +define Int
  4436 + percent
  4437 + (
  4438 + Int p
  4439 + ) =
  4440 + if p < 0 then 0 else if p > 100 then 100 else p.
  4441 +
  4442 +
  4443 +
  4444 +
  4445 + Formating cell options.
  4446 +
  4447 +
  4448 +
  4449 +define String
  4450 + format
  4451 + (
  4452 + BackgroundOption o
  4453 + ) =
  4454 + if o is
  4455 + {
  4456 + repeat then "",
  4457 + repeat_horizontal then "; background-repeat: repeat-x",
  4458 + repeat_vertical then "; background-repeat: repeat-y",
  4459 + no_repeat then "; background-repeat: no-repeat",
  4460 + center then "; background-position: center top"
  4461 + }.
  4462 +
  4463 +define String
  4464 + format
  4465 + (
  4466 + List(BackgroundOption) l
  4467 + ) =
  4468 + if l is
  4469 + {
  4470 + [ ] then "",
  4471 + [h . t] then format(h)+format(t)
  4472 + }.
  4473 +
  4474 +
  4475 +define String
  4476 + format
  4477 + (
  4478 + List(Cell_Option) options
  4479 + ) =
  4480 + if options is
  4481 + {
  4482 + [ ] then "",
  4483 + [h . t] then
  4484 + if h is
  4485 + {
  4486 + core_attrs(core_attr_list) then format_attrs(core_attr_list),
  4487 + left then " align=\"left\"",
  4488 + h_center then " align=\"center\"",
  4489 + right then " align=\"right\"",
  4490 + top then " valign=\"top\"",
  4491 + v_center then " valign=\"middle\"",
  4492 + bottom then " valign=\"bottom\"",
  4493 + base_line then " valign=\"baseline\"",
  4494 + background_color(c) then " bgcolor=\""+html_format(c)+"\"",
  4495 + background_image(n,o) then " style=\"background: url("+n+")"+format(o)+"\"",
  4496 + width(w) then " width=\""+w+"\"",
  4497 + percentage_width(n) then " width=\""+percent(n)+"%\"",
  4498 + height(h2) then " height=\""+h2+"\"",
  4499 + columns(n) then " colspan=\""+n+"\"",
  4500 + rows(n) then " rowspan=\""+n+"\"",
  4501 + nowrap then " nowrap",
  4502 + style(style_string) then " style=\"" + style_string + "\"",
  4503 + class(class_name) then " class=\""+class_name+"\""
  4504 + }
  4505 + + format(t)
  4506 + }.
  4507 +
  4508 +
  4509 + Normalizing a list of cell options (horizontal position must be specified; the default
  4510 + is 'left').
  4511 +
  4512 + Formating cells in a row.
  4513 +
  4514 +define Printable_tree
  4515 + format
  4516 + (
  4517 + List(HTML_Cell($T)) cells,
  4518 + $T -> Printable_tree format_element
  4519 + ) =
  4520 + if cells is
  4521 + {
  4522 + [ ] then [ ],
  4523 + [h . t] then if h is cell(options,element) then
  4524 + ["<td",format(reverse(options)),">",
  4525 + format_element(element),
  4526 + "</td>"
  4527 + . format(t,format_element)]
  4528 + }.
  4529 +
  4530 +define Printable_tree
  4531 + format
  4532 + (
  4533 + List(HTML_Header_Cell($T)) cells,
  4534 + $T -> Printable_tree format_element
  4535 + ) =
  4536 + if cells is
  4537 + {
  4538 + [ ] then [ ],
  4539 + [h . t] then if h is header_cell(options,element) then
  4540 + ["<th ",format(reverse(options)),">",
  4541 + format_element(element),
  4542 + "</th>"
  4543 + . format(t,format_element)]
  4544 + }.
  4545 +
  4546 + Formating the rows in a table.
  4547 +
  4548 +define Printable_tree
  4549 + format
  4550 + (
  4551 + List(HTML_Row($T)) rows,
  4552 + $T -> Printable_tree format_element,
  4553 + )=
  4554 + if rows is
  4555 + {
  4556 + [ ] then [ ],
  4557 + [h . t] then
  4558 + if h is
  4559 + {
  4560 + empty then format(t, format_element),
  4561 + row(options, cells) then
  4562 + ["<tr",format(reverse(options)),">", format(cells, format_element), "</tr>\n"
  4563 + . format(t, format_element)]
  4564 + }
  4565 + }
  4566 +.
  4567 +
  4568 +define Printable_tree
  4569 + format
  4570 + (
  4571 + HTML_Header_Row($T) row,
  4572 + $T -> Printable_tree format_element
  4573 + ) =
  4574 + if row is
  4575 + {
  4576 + empty then [ ],
  4577 + header_row(options,cells) then
  4578 + ["<thead> <tr",format(reverse(options)),">",
  4579 + format(cells,format_element),
  4580 + "</tr> </thead>\n"
  4581 + ]
  4582 + }.
  4583 +
  4584 +define Printable_tree
  4585 + format
  4586 + (
  4587 + HTML_Footer_Row($T) row,
  4588 + $T -> Printable_tree format_element
  4589 + ) =
  4590 + if row is
  4591 + {
  4592 + empty then [ ],
  4593 + footer_row(options,cells) then
  4594 + ["<tfoot> <tr",format(reverse(options)),">",
  4595 + format(cells,format_element),
  4596 + "</tr> </tfoot>\n"
  4597 + ]
  4598 + }.
  4599 +
  4600 +define Printable_tree
  4601 + format1
  4602 + (
  4603 + List(TextAreaOption) l
  4604 + ) =
  4605 + if l is
  4606 + {
  4607 + [] then [],
  4608 + [h . t] then if h is
  4609 + {
  4610 + input_attrs(input_attr_list) then [format_attrs(input_attr_list) . format1(t)],
  4611 + disabled then [" disabled=\"disabled\" " . format1(t)]
  4612 + read_only then [" readonly=\"readonly\" " . format1(t)]
  4613 + wrap_lines then [" wrap=\"wrap\" " . format1(t)]
  4614 + }
  4615 + }.
  4616 +
  4617 +define Printable_tree
  4618 + format
  4619 + (
  4620 + List(TextAreaOption) l
  4621 + )=
  4622 + if member(l, wrap_lines) then
  4623 + format1(l)
  4624 + else
  4625 + [" wrap=\"off\" " . format1(l)]
  4626 +.
  4627 +
  4628 +
  4629 + *** [5.7] Formating elements which may be put anywhere.
  4630 +
  4631 + The function below involves the parameter $T which is later instantiated as
  4632 + 'HTML_In_Form' or as 'HTML_Off_Form'. Now, since there are dictinct 'format' functions
  4633 + for these two types, and because formating of tables requires recursive calls of such
  4634 + functions, it is necessary to provide the 'format' function to be called recursively as
  4635 + an argument. Putting naively a call to 'format' will not work, because the compiler
  4636 + will look for a function able to format data of type $T (which is at that time distinct
  4637 + from any other type, including our two types). Such a function does not exist. Hence
  4638 + the function to be called for formating elements must be passed as a functional
  4639 + argument (called 'format_element' below). Actually, what we pass is a function taking
  4640 + a unique argument of type $T. Other informations (like the name of the state) are
  4641 + already in the function by way of full functionality.
  4642 +
  4643 +
  4644 + Formating text options. They are formated in CSS syntax, to be used within a
  4645 + 'style=...'.
  4646 +
  4647 +define String
  4648 + format
  4649 + (
  4650 + List(Text_Option) l
  4651 + ) =
  4652 + if l is
  4653 + {
  4654 + [ ] then "",
  4655 + [h . t] then if h is
  4656 + {
  4657 + core_attrs(core_attr_list) then format_attrs(core_attr_list),
  4658 + size(n) then "font-size:"+n+"pt",
  4659 + font(fn) then "font-family:"+fn,
  4660 + color(c) then if c is rgb(r,g,b) then
  4661 + "color:rgb("+to_decimal(r)+","+to_decimal(g)+","+to_decimal(b)+")",
  4662 + italic then "font-style:italic",
  4663 + oblique then "font-style:oblique",
  4664 + small_capitals then "font-variant:small-caps",
  4665 + bold then "font-weight:bold",
  4666 + underlined then "text-decoration:underline",
  4667 + left_justified then "text-align:left",
  4668 + right_justified then "text-align:right",
  4669 + justified then "text-align:justify",
  4670 + line_through then "text-decoration:line-through",
  4671 + nowrap then "white-space:nowrap",
  4672 + class(class_name)then " class=\"" + class_name +"\"",
  4673 + id(id_name) then " id=\"" + id_name +"\"",
  4674 + style(style_string) then " style=\"" + style_string + "\"",
  4675 + title(s) then " title=\"" + s +"\""
  4676 + attr(n,v) then " " + n + "=\"" + v +"\""
  4677 + } + if t is [ ] then "" else ("; "+format(t))
  4678 + }.
  4679 +
  4680 +
  4681 +
  4682 + Formating table options.
  4683 +
  4684 +define String
  4685 + format
  4686 + (
  4687 + List(Table_Option) l,
  4688 + Bool border_seen
  4689 + ) =
  4690 + if l is
  4691 + {
  4692 + [ ] then if border_seen then "" else " border=\"0\" cellspacing=\"0\" cellpadding=\"0\"",
  4693 + [h . t] then if h is
  4694 + {
  4695 + core_attrs(core_attr_list) then format_attrs(core_attr_list),
  4696 + background_color(c) then " bgcolor=\""+html_format(c)+"\""+format(t,border_seen),
  4697 + background_image(url) then " background="+url+format(t,border_seen),
  4698 + border(o,top,i,c) then " border=\""+o+"\" cellspacing=\""+top+"\" cellpadding=\""+i+"\""+
  4699 + //" bordercolor="+format(c)+
  4700 + format(t,true),
  4701 + width(w) then " width=\""+w+"\""+format(t,border_seen),
  4702 + percentage_width(p) then " width=\""+percent(p)+"%\""+format(t,border_seen),
  4703 + attr(name, value) then " " + name + "=\"" + value + "\"" +format(t,border_seen),
  4704 + class(name) then " class=\""+name+"\""
  4705 + }
  4706 + }.
  4707 +
  4708 +
  4709 +
  4710 +
  4711 +
  4712 +define Printable_tree
  4713 + format_scroller
  4714 + (
  4715 + Int width,
  4716 + Int height,
  4717 + Int content_width,
  4718 + Int content_height,
  4719 + Int idnum, // identifying the scroller
  4720 + $T content,
  4721 + $T -> Printable_tree format_element
  4722 + ) =
  4723 + [
  4724 + "<script type = \"text/javascript\" language=\"JavaScript\">",
  4725 + "function doscroll_",idnum,"(dx,dy) {\n",
  4726 + " if (document.layers) { var c_",idnum," = eval(document.cs_",idnum,"); } else\n",
  4727 + " if (document.getElementById) {var c_",idnum," = eval(\"document.getElementById('cs_",
  4728 + idnum,"').style\"); } else\n",
  4729 + " if (document.all) { var c_",idnum," = eval(document.all.cs_",idnum,".style); };\n",
  4730 + " var x_",idnum," = parseInt(c_",idnum,".left);\n",
  4731 + " var y_",idnum," = parseInt(c_",idnum,".top);\n",
  4732 + " if ((x_",idnum,"+dx <= 0) && (x_",idnum,"+dx > ",width-content_width,"))\n",
  4733 + " { x_",idnum," += dx; }\n",
  4734 + " if ((y_",idnum,"+dy <= 0) && (y_",idnum,"+dy > ",height-content_height,"))\n",
  4735 + " { y_",idnum," += dy; }\n",
  4736 + " c_",idnum,".left = x_",idnum,";\n",
  4737 + " c_",idnum,".top = y_",idnum,";\n",
  4738 + " }\n",
  4739 + "</script>\n",
  4740 + "<table>",
  4741 + "<tbody>",
  4742 + "<tr>",
  4743 + "<td align=left valign=top",
  4744 + " width=",width,
  4745 + " height=",height,
  4746 + ">",
  4747 + "<div id=\"ws_",idnum,"\" style=\"position:absolute; width:",width,"px; height:",height,"px;",
  4748 + " clip:rect(0px ",width,"px ",height,"px 0px)\">",
  4749 + "<div id=\"cs_",idnum,"\" style=\"position:absolute; left:0px; top:0px\">",
  4750 + format_element(content),
  4751 + "</div>",
  4752 + "</div>",
  4753 + "</td>",
  4754 + "<td valign=bottom>",
  4755 + "<table>",
  4756 + "<tbody>",
  4757 + "<tr><td><img alt=\"sroll up\" src=\"scrollup.gif\" onmousedown=\"doscroll_", idnum,"(0,20);\"></td></tr>",
  4758 + "<tr><td><img alt=\"scroll down\" src=\"scrolldown.gif\" onmousedown=\"doscroll_", idnum,"(0,-20);\"></td></tr>",
  4759 + "</tbody>",
  4760 + "</table>",
  4761 + "</td>",
  4762 + "</tr>",
  4763 + (if content_width > width then
  4764 + [
  4765 + "<tr>",
  4766 + "<td align=right>",
  4767 + "<table>",
  4768 + "<tbody>",
  4769 + "<tr>",
  4770 + "<td><img alt=\"scroll left\" src=\"scrollleft.gif\" onmousedown=\"doscroll_", idnum,"(20,0);\"></td>",
  4771 + "<td><img alt=\"scroll right\" src=\"scrollright.gif\" onmousedown=\"doscroll_", idnum,"(-20,0);\"></td>",
  4772 + "</tr>",
  4773 + "</tbody>",
  4774 + "</table>",
  4775 + "</td>",
  4776 + "</tr>",
  4777 + ] else [ ]),
  4778 + "</tbody>",
  4779 + "</table>"
  4780 + ].
  4781 +
  4782 +
  4783 +
  4784 +
  4785 +define Printable_tree
  4786 + add_css_files
  4787 + (
  4788 + List(CSS_File) l
  4789 + ) =
  4790 + if l is
  4791 + {
  4792 + [ ] then [ ],
  4793 + [h . t] then
  4794 + since h is css_file(file_name, media),
  4795 + [ ["<link rel=\"stylesheet\" type=\"text/css\" href=\"" + file_name + "\" media=\""+to_String(media)+"\"/>\n" ]
  4796 + . add_css_files(t)]
  4797 + }.
  4798 +
  4799 +
  4800 +define Printable_tree
  4801 + add_css_styles
  4802 + (
  4803 + List(CSS_Style) css_styles
  4804 + ) =
  4805 +
  4806 + if css_styles is
  4807 + {
  4808 + [] then [],
  4809 + [_ . _] then [ "<style type=\"text/css\"><!--\n",
  4810 + format_css_styles(css_styles),
  4811 + " --></style>\n"
  4812 + ]
  4813 + }.
  4814 +
  4815 +
  4816 + // The function below formats a datum of type 'HTML_Any($T)'.
  4817 +
  4818 +define Printable_tree
  4819 + format
  4820 + (
  4821 + CommonInfo cinfo,
  4822 + Var(Int) ic_v,
  4823 + HTML_Any($T) element,
  4824 + $T -> Printable_tree format_element, // able to format a datum of type $T
  4825 + Bool is_https,
  4826 + Var(Int) action_count,
  4827 + Var(List(HTML_Head_Tag)) head_tags
  4828 + ) =
  4829 + if cinfo is info(common_name,http_port,https_port,site_directory,secret) then
  4830 + if element is
  4831 + {
  4832 + any_text(opts , t) then
  4833 + if opts is
  4834 + {
  4835 + [] then [t],
  4836 + [_ . _] then ["<span", format_attrs(opts), ">",t,"</span>"]
  4837 + },
  4838 + any_preformated(opts,s) then
  4839 + ["<span", format_text_options(opts), "><pre>",s,"</pre></span>"],
  4840 + //["<pre>",s,"</pre>"],
  4841 + any_paragraph(opts,l) then
  4842 + ["<p", format_text_options(opts), ">", flat(map(($T e) |-> format_element(e), l)),"</p>\n"],
  4843 + any_image(opts, url, _alt) then
  4844 + with alt = if _alt = "" then "" else "alt=\""+_alt+"\"",
  4845 + ["<img ",alt," src=\"",url,"\" ", format_attrs(opts)," />"],
  4846 + any_image(opts, url, alt, w, h) then
  4847 + ["<img alt=\"",alt,"\" src=\"",url,"\" width=\"",w,"\" height=\"",h,"\" ", format_attrs(opts)," />"],
  4848 + any_table(opts,h_row, rows, f_row) then
  4849 + ["<table",format(reverse(opts),false),">",
  4850 + format(h_row, format_element),
  4851 + "<tbody>",format(rows,format_element),"</tbody>",
  4852 + format(f_row, format_element),
  4853 + "</table>\n"],
  4854 + any_center(e) then
  4855 + ["<center>",format_element(e),"</center>"],
  4856 + any_mail_to(email,elem) then
  4857 + ["<a href=\"mailto:",email,"\">",format_element(elem),"</a>"],
  4858 + any_scroller(w,h,cw,ch,c) then
  4859 + format_scroller(w,h,cw,ch,new_idnum(ic_v),c,format_element),
  4860 + any_fixed_size(w,h,c) then
  4861 + with url = create_secondary_document(site_directory,secret,format_element,c,w),
  4862 + ["<object data=\"",url,"\" type=\"text/html\" width=\"",format(w),"\" height=\"",format(h),"\" >",
  4863 + "secondary document",
  4864 + "</object>"],
  4865 + any_fixed_size_2(w,h,fn) then
  4866 + with url = fn+"?zauth="+make_authorization(site_directory,secret,
  4867 + fn),
  4868 + ["<object data=\"",url,"\" type=\"text/html\" width=\"",format(w),"\" height=\"",format(h),"\" >",
  4869 + "secondary document",
  4870 + "</object>"],
  4871 + any_actioner(c,t,a,an,eo,ja,fn) then
  4872 + format_actioner(cinfo,c,t,a,an,eo,ja,fn,is_https, action_count, ic_v, head_tags),
  4873 +
  4874 + any_foreign_link_new(target, aspect, url) then
  4875 + format_foreign_link(target, aspect, url, is_https, cinfo, action_count, ic_v, head_tags),
  4876 +
  4877 + any_foreign_link(options,url) then
  4878 + ["<a href=\"",url,"\" ", format_text_options(options), "></a>"], // IE7 doesn't support the form <a href="..." />
  4879 + any_foreign_link(options,url,name) then
  4880 + ["<a href=\"",url,"\"><span ", format_text_options(options), ">",name,"</span></a>"],
  4881 + any_private_download(url,name,extra_ext,action) then
  4882 + format_private_download(cinfo,url,name,extra_ext,action),
  4883 + any_div(options, l) then
  4884 + [format_div_option(options), flat(map(($T e) |-> format_element(e), l)),"</div>\n"],
  4885 + any_div_empty(options) then
  4886 + [format_div_option(options), "</div>\n"],
  4887 + any_coreattrs(attributs) then
  4888 + [format_attrs(attributs)],
  4889 + any_ol(opts, l) then
  4890 + ["<ol", format_attrs(opts), ">", flat(map(($T e) |-> format_element(e), l)),"</ol>\n"],
  4891 + any_ul(opts, l) then
  4892 + ["<ul", format_attrs(opts), ">", flat(map(($T e) |-> format_element(e), l)),"</ul>\n"],
  4893 + any_li(opts, l) then
  4894 + ["<li", format_attrs(opts), ">", flat(map(($T e) |-> format_element(e), l)),"</li>\n"],
  4895 + any_button(options, l) then
  4896 + [["<button" + format_attrs(options) + ">"], flat(map(($T e) |-> format_element(e), l)),"</button>\n"],
  4897 + any_i(opts,t) then
  4898 + if t = "" then
  4899 + ["<i", format_attrs(opts), "></i>\n"]
  4900 + else
  4901 + ["<i", format_attrs(opts), ">",t,"</i>\n"],
  4902 + any_span(opts , t) then
  4903 + ["<span", format_attrs(opts), ">",t,"</span>"]
  4904 + any_hr(opts) then
  4905 + ["<hr", format_attrs(opts),">"]
  4906 + }
  4907 +.
  4908 +
  4909 +
  4910 +
  4911 + // *** [5.8] Formating 'in form' elements.
  4912 +
  4913 +
  4914 +//public define Printable_tree
  4915 +// format
  4916 +// (
  4917 +// HTML_tooltip tooltip
  4918 +// )=
  4919 +// if tooltip is
  4920 +// {
  4921 +// html_tooltip(title, keyword, width) then
  4922 +// ["<a id=\"help_",keyword,"\" class=\"jTipu jTip_help\" name=\"",title,"\" href=\"/?a=ajax_show_tooltip&amp;tooltip_id=",keyword,(if width > 0 then ["&width=",width,"\""] else ["\""]), "></a>"],
  4923 +//
  4924 +// html_tooltip_ext(title, extend_type, class_suffix, ext_args) then
  4925 +// with extra_args = format_extra_operands(ext_args),
  4926 +// ["<a id=\"jTip\" class=\"jTipu jTip_",class_suffix,"\" name=\"",title,"\" href=\"/?a=ajax_show_tooltip&amp;tooltip_ext=",extend_type+extra_args,"\"></a>"]
  4927 +// }.
  4928 +
  4929 +public define List(CoreAttrs)
  4930 + extract_attributes
  4931 + (
  4932 + HTML_tooltip tooltip
  4933 + )=
  4934 + if tooltip is
  4935 + {
  4936 + html_tooltip(title, keyword, width) then //TODO
  4937 + []
  4938 + //["<a id=\"help_",keyword,"\" class=\"jTipu \" name=\"",title,"\" href=\"/?a=ajax_show_tooltip&tooltip_id=",keyword,(if width > 0 then ["&width=",width,"\""] else ["\""]), "><i class=\"fa fa-info\" aria-hidden=\"true\" style=\"color:#2e6da4\"></i></a>"],
  4939 +
  4940 + html_tooltip_ext(title, extend_type, class_suffix, ext_args) then //TODO
  4941 + //[]
  4942 + with extra_args = format_extra_operands(ext_args),
  4943 + [id("jTip"), class("jTipu jTip_"+class_suffix), data("name",title), data("href", "/?a=ajax_show_tooltip&tooltip_ext="+extend_type+extra_args)]
  4944 +
  4945 + html_tooltip_ext(title, extend_type, ext_args) then //TODO
  4946 + with extra_args = format_extra_operands(ext_args),
  4947 + [id("jTip"), class("jTipu"), data("name",title), data("href", "/?a=ajax_show_tooltip&tooltip_ext="+extend_type+extra_args)]
  4948 +// []
  4949 + //with extra_args = format_extra_operands(ext_args),
  4950 + //["<a id=\"jTip\" class=\"jTipu \" name=\"",title,"\" href=\"/?a=ajax_show_tooltip&tooltip_ext=",extend_type+extra_args,"\"><i class=\"fa fa-info\" aria-hidden=\"true\" style=\"color:#2e6da4\"></i></a>"],
  4951 +
  4952 + html_tooltip(title, web_action, extra_args) then
  4953 + [ id("jTip"), class("jTipu"), data("name", title), data("href", "/"+format_web_action_name(web_action, extra_args))
  4954 + ]
  4955 +
  4956 + //["<a id=\"jTip\" class=\"jTipu \" name=\"",title,"\" href=\"/", format_web_action_name(web_action, extra_args) ,"\"><i class=\"fa fa-info\" aria-hidden=\"true\" style=\"color:#2e6da4\"></i></a>"],
  4957 +
  4958 + }
  4959 +.
  4960 +
  4961 + literal_pt(["<span id=\"jTip\" class=\"jTipu\" data-name=\"",title,"\" data-href=\"/", format_web_action_name(web_action, extra_args) ,"\">"]),
  4962 +
  4963 +
  4964 +public define Printable_tree
  4965 + format
  4966 + (
  4967 + HTML_tooltip tooltip
  4968 + )=
  4969 + if tooltip is
  4970 + {
  4971 + html_tooltip(title, keyword, width) then
  4972 + ["<a id=\"help_",keyword,"\" class=\"jTipu \" data-name=\"",title,"\" data-href=\"/?a=ajax_show_tooltip&tooltip_id=",keyword,(if width > 0 then ["&width=",width,"\""] else ["\""]), "><i class=\"fa fa-info\" aria-hidden=\"true\" style=\"color:#2e6da4\"></i></a>"],
  4973 +
  4974 + html_tooltip_ext(title, extend_type, class_suffix, ext_args) then
  4975 + with extra_args = format_extra_operands(ext_args),
  4976 + ["<a id=\"jTip\" class=\"jTipu jTip_",class_suffix,"\" data-name=\"",title,"\" data-href=\"/?a=ajax_show_tooltip&tooltip_ext=",extend_type+extra_args,"\"></a>"]
  4977 +
  4978 + html_tooltip_ext(title, extend_type, ext_args) then
  4979 + with extra_args = format_extra_operands(ext_args),
  4980 + ["<a id=\"jTip\" class=\"jTipu \" data-name=\"",title,"\" data-href=\"/?a=ajax_show_tooltip&tooltip_ext=",extend_type+extra_args,"\"><i class=\"fa fa-info\" aria-hidden=\"true\" style=\"color:#2e6da4\"></i></a>"],
  4981 + html_tooltip(title, web_action, extra_args) then
  4982 + ["<a id=\"jTip\" class=\"jTipu \" data-name=\"",title,"\" data-href=\"/", format_web_action_name(web_action, extra_args) ,"\"><i class=\"fa fa-info\" aria-hidden=\"true\" style=\"color:#2e6da4\"></i></a>"],
  4983 +
  4984 + }
  4985 +.
  4986 +
  4987 +public define HTML_Off_Form
  4988 + html_tooltip
  4989 + (
  4990 + String title,
  4991 + WEB_Action_Name web_action,
  4992 + List((String,String)) extra_args,
  4993 + HTML_Off_Form html_element,
  4994 + )=
  4995 + span([id("jTip"), class("jTipu"), data("name", title), data("href", "/"+format_web_action_name(web_action, extra_args))], html_element)
  4996 +.
  4997 +
  4998 +public define HTML_Off_Form
  4999 + html_tooltip
  5000 + (
  5001 + String title,
  5002 + String keyword,
  5003 + ) =
  5004 + literal_pt(format(html_tooltip(title, keyword, 0))).
  5005 +
  5006 +public define HTML_In_Form
  5007 + html_tooltip
  5008 + (
  5009 + String title,
  5010 + String keyword,
  5011 + ) =
  5012 + literal_pt(format(html_tooltip(title, keyword, 0))).
  5013 +
  5014 +public define HTML_Off_Form
  5015 + html_tooltip
  5016 + (
  5017 + String keyword,
  5018 + Int size,
  5019 + ) =
  5020 + literal_pt(format(html_tooltip("", keyword, size))).
  5021 +
  5022 +public define HTML_In_Form
  5023 + html_tooltip
  5024 + (
  5025 + String keyword,
  5026 + Int size,
  5027 + ) =
  5028 + literal_pt(format(html_tooltip("", keyword, size))).
  5029 +
  5030 +public define Printable_tree
  5031 + format_help
  5032 + (
  5033 + Printable_tree label,
  5034 + HTML_Help _help
  5035 + ) =
  5036 + if _help is
  5037 + {
  5038 + no_help then label,
  5039 + tooltip(html_tooltip, position) then
  5040 + if position is
  5041 + {
  5042 + left then pt_pt(format(html_tooltip),label),
  5043 + right then pt_pt(label, format(html_tooltip))
  5044 + }
  5045 + }.
  5046 +
  5047 +
  5048 +
  5049 +public define HTML_Label
  5050 + label
  5051 + (
  5052 + String text
  5053 + )=
  5054 + label(text, no_help).
  5055 +
  5056 +
  5057 +
  5058 +
  5059 +define Printable_tree
  5060 + format
  5061 + (
  5062 + CommonInfo cinfo,
  5063 + String fn, // form_name
  5064 + Var(Int) ic_v, // idnum counter variable
  5065 + HTML_In_Form element,
  5066 + Bool is_https,
  5067 + Var(Int) action_count,
  5068 + Var(List(HTML_Head_Tag)) head_tags
  5069 + ) =
  5070 + if cinfo is info(common_name,http_port,https_port,site_directory,secret) then
  5071 + with format_element = (HTML_In_Form e) |-> format(cinfo, fn, ic_v, e, is_https, action_count, head_tags),
  5072 + if element is
  5073 + {
  5074 + empty then [],
  5075 + literal_pt(t) then t,
  5076 + literal(t) then [t],
  5077 + sequence(l) then flat(map(format_element,l))
  5078 + text(opts,t) then
  5079 + format(cinfo,ic_v,any_text(opts,t),format_element,is_https, action_count, head_tags),
  5080 + preformated(o,s) then
  5081 + format(cinfo,ic_v,any_preformated(o,s),format_element,is_https, action_count, head_tags),
  5082 + paragraph(opts,t) then
  5083 + format(cinfo,ic_v,any_paragraph(opts,t),format_element,is_https, action_count, head_tags),
  5084 + image(opts, url, alt) then
  5085 + format(cinfo,ic_v,any_image(opts, url, alt),format_element,is_https, action_count, head_tags),
  5086 + image(opts, url, alt, w, h) then
  5087 + format(cinfo,ic_v,any_image(opts, url, alt, w, h),format_element,is_https, action_count, head_tags),
  5088 + table(opts,header_row,rows,footer_row) then
  5089 + format(cinfo,ic_v,any_table(opts, header_row, rows, footer_row),format_element,is_https, action_count, head_tags),
  5090 + center(e) then
  5091 + format(cinfo,ic_v,any_center(e),format_element,is_https, action_count, head_tags),
  5092 + mail_to(a,e) then
  5093 + format(cinfo,ic_v,any_mail_to(a,e),format_element,is_https, action_count, head_tags),
  5094 + scroller(w,h,cw,ch,c) then
  5095 + format(cinfo,ic_v,any_scroller(w,h,cw,ch,c),format_element,is_https, action_count, head_tags),
  5096 + actioner(c,t,a,an,eo,ja) then
  5097 + format(cinfo,ic_v,any_actioner(c,t,a,an,eo,ja,success(fn)),format_element,is_https, action_count, head_tags),
  5098 +
  5099 + foreign_link_new(target, aspect, url) then
  5100 + format(cinfo,ic_v,any_foreign_link_new(target,aspect,url),format_element,is_https, action_count, head_tags),
  5101 +
  5102 + foreign_link(options,url) then
  5103 + format(cinfo,ic_v,any_foreign_link(options,url),format_element,is_https, action_count, head_tags),
  5104 + foreign_link(options,url,name) then
  5105 + format(cinfo,ic_v,any_foreign_link(options,url,name),format_element,is_https, action_count, head_tags),
  5106 + private_download(url,name,extra,action) then
  5107 + format(cinfo,ic_v,any_private_download(url,name,extra,action),format_element,is_https, action_count, head_tags),
  5108 + text_input(options, label_text, id, name, init, w) then
  5109 + [ format_label(label_text, id),
  5110 + "<input type=\"text\" name=\"",name,"\" id=\"",id,"\" size=\"",w,"\" value=\"",encode_HTML_entities(init.value),"\"",format_attrs([class("in") . options])," />"],
  5111 + text_input_ro(options, label_text, id, name, init, w) then
  5112 + [ format_label(label_text, id),
  5113 + "<input readonly=\"readonly\" type=\"text\" name=\"",name,"\" id=\"",id,"\" size=\"",w,"\" value=\"",encode_HTML_entities(init.value),"\"",format_attrs([class("in") . options])," />"],
  5114 + password_input(options, label_text, id, name, init, w) then
  5115 + [ format_label(label_text, id),
  5116 + "<input type=\"password\" name=\"",name,"\" id=\"",id,"\" size=\"",w,"\" value=\"",encode_HTML_entities(init.value),"\"",format_attrs([class("in") . options])," />"],
  5117 + text_area(options,label_text, id, n, init, w, h) then
  5118 + [ format_label(label_text, id), "<textarea ",format(options)," id=\"",id,"\" name=\"",n,"\" cols=\"",w,"\" rows=\"",h,"\">",encode_HTML_entities(init.value),"</textarea>"],
  5119 + file_upload(options, label, id, n, w) then
  5120 + [ format_label(label, id),
  5121 + "<input type=\"file\" id=\"",id,"\" size=\"",w,"\" name=\"",n,"\"",format_attrs([class("in") . options])," />"],
  5122 + selector(options, label, id, n,s,cs) then
  5123 + [ format_label(label, id),
  5124 + "<select id=\"",id,"\" name=\"",n,"\" size=\"",s,"\" ",format_attrs([class("in") . options]),">",format_choices(cs),"</select>"],
  5125 + selector(options, label, id, n,s,cs,sd) then
  5126 + [ format_label(label, id),
  5127 + "<select id=\"",id,"\" name=\"",n,"\" size=\"",s,"\" ",format_attrs([class("in") . options]),">",format_choices(cs,sd),"</select>"],
  5128 + selector_c(options, label, id, n,s,cs) then
  5129 + [ format_label(label, id),
  5130 + "<select id=\"",id,"\" name=\"",n,"\" size=\"",s,"\" ",format_attrs([class("in") . options]),">",format_choices(cs),"</select>"],
  5131 + selector_c(options, label, id, n,s,cs,sd) then
  5132 + [ format_label(label, id),
  5133 + "<select id=\"",id,"\" name=\"",n,"\" size=\"",s,"\" ",format_attrs([class("in") . options]),">",format_choices(cs,sd),"</select>"],
  5134 +
  5135 + radio_button(options, label, id, n, value, c) then
  5136 + [ format_label(label, id),
  5137 + "<input type=\"radio\" name=\"",n,"\" id=\"",id,"\" value=\"",value,"\"",(if c then " checked=\"checked\"" else ""),format_attrs([class("in") . options])," />"],
  5138 + radio_button_r(options, label, id, n, value, c) then
  5139 + [ "<input type=\"radio\" name=\"",n,"\" id=\"",id,"\" value=\"",value,"\"",(if c then " checked=\"checked\"" else ""),format_attrs([class("in") . options])," />",
  5140 + format_label(label, id)],
  5141 + check_box(options, label, id, n, c) then
  5142 + [ format_label(label, id),
  5143 + "<input type=\"hidden\" name=\"~",n,"\" value=\"~true\" /><input type=\"checkbox\" name=\"",n,"\" id=\"",id,"\" value=\"true\"",(if c then " checked=\"checked\" " else ""),format_attrs([class("in") . options])," />"]
  5144 + check_box_r(options, label, id, n, c) then
  5145 + [ "<input type=\"hidden\" name=\"~",n,"\" value=\"~true\" /><input type=\"checkbox\" name=\"",n,"\" id=\"",id,"\" value=\"true\"",(if c then " checked=\"checked\" " else ""),format_attrs([class("in") . options])," />",
  5146 + format_label(label, id)]
  5147 + div(options, e) then
  5148 + format(cinfo,ic_v,any_div(options, e),format_element,is_https, action_count, head_tags),
  5149 + div_empty(options) then
  5150 + format(cinfo,ic_v,any_div_empty(options),format_element,is_https, action_count, head_tags),
  5151 + hidden(_id, name, init) then
  5152 + since _id is html_Id(id),
  5153 + ["<input type=\"hidden\"",(if id = "" then "" else " id=\""+id+"\"")," name=\"",name,"\" value=\"",encode_HTML_entities(init.value),"\" />"],
  5154 + partial(p_content) then
  5155 + if p_content is partial_content(tags, html_elements) then
  5156 + head_tags <- *head_tags + tags;
  5157 +
  5158 + format(cinfo, ic_v, html_elements, is_https, action_count, head_tags),
  5159 + br then ["<br>"],
  5160 + progress(options, value, max) then ["<progress max=\"",value,"\" value=\"",max,"\"",format_attrs(options),"></progress>"],
  5161 + ol(opts, t) then
  5162 + format(cinfo,ic_v,any_ol(opts,t),format_element,is_https, action_count, head_tags),
  5163 + ul(opts, t) then
  5164 + format(cinfo,ic_v,any_ul(opts,t),format_element,is_https, action_count, head_tags),
  5165 + li(opts, t) then
  5166 + format(cinfo,ic_v,any_li(opts,t),format_element,is_https, action_count, head_tags),
  5167 + button(options, e) then
  5168 + format(cinfo,ic_v,any_button(options, e),format_element,is_https, action_count, head_tags),
  5169 + i(opts, t) then
  5170 + format(cinfo,ic_v,any_i(opts,t),format_element,is_https, action_count, head_tags),
  5171 + span(opts,t) then
  5172 + format(cinfo,ic_v,any_span(opts,t),format_element,is_https, action_count, head_tags)
  5173 + hr(opts) then
  5174 + format(cinfo,ic_v,any_hr(opts),format_element,is_https, action_count, head_tags)
  5175 + }.
  5176 +
  5177 +
  5178 +
  5179 +
  5180 +
  5181 +
  5182 + *** [5.9] Formating 'off form' elements.
  5183 +
  5184 + The encryption type 'multipart/form-data' is required for a form containing an upload.
  5185 +
  5186 +
  5187 +define Bool
  5188 + contains_an_upload
  5189 + (
  5190 + HTML_In_Form form_content
  5191 + ).
  5192 +
  5193 +define Bool
  5194 + contains_an_upload
  5195 + (
  5196 + HTML_Row(HTML_In_Form) row
  5197 + ) =
  5198 + if row is
  5199 + {
  5200 + empty then false,
  5201 + row(_, cells) then
  5202 + mapor(contains_an_upload,
  5203 + map(content, cells))
  5204 + }
  5205 +.
  5206 +
  5207 +define Bool
  5208 + contains_an_upload
  5209 + (
  5210 + HTML_Footer_Row(HTML_In_Form) row
  5211 + )=
  5212 + if row is
  5213 + {
  5214 + empty then false,
  5215 + footer_row(_, cells) then
  5216 + mapor(contains_an_upload,
  5217 + map(content,cells))
  5218 + }.
  5219 +
  5220 +define Bool
  5221 + contains_an_upload
  5222 + (
  5223 + HTML_In_Form form_content
  5224 + ) =
  5225 + if form_content is
  5226 + {
  5227 + empty then false,
  5228 + literal_pt(t) then false,
  5229 + literal(t) then false,
  5230 + sequence(l) then mapor(contains_an_upload,l),
  5231 + text(o,t) then false,
  5232 + preformated(o,s) then false,
  5233 + paragraph(o,l) then mapor(contains_an_upload,l),
  5234 + image(o,u,a) then false,
  5235 + image(o,u,a,w,h) then false,
  5236 + table(o,_,rows,f_row) then if mapor(contains_an_upload,rows) then true
  5237 + else contains_an_upload(f_row),
  5238 + center(e) then contains_an_upload(e),
  5239 + mail_to(m,e) then false, // 'e' may but should not contain an upload
  5240 + scroller(w,h,cw,ch,e) then contains_an_upload(e),
  5241 + actioner(c,t,a,an,eo,ja) then false,
  5242 + foreign_link_new(_,_,_) then false,
  5243 + foreign_link(o,u) then false,
  5244 + foreign_link(o,u,n) then false,
  5245 + private_download(p,n,e,a) then false,
  5246 + text_input(o,lt,l,n,i,w) then false,
  5247 + text_input_ro(o,lt,l,n,i,w) then false,
  5248 + password_input(o,lt,l,n,i,w) then false,
  5249 + text_area(o,lt,id,n,i,w,h) then false,
  5250 + file_upload(o,l,i,n,w) then true,
  5251 + selector(o,l,i,n,s,c) then false,
  5252 + selector(o,l,i,n,s,c,p) then false,
  5253 + selector_c(o,l,i,n,s,c) then false,
  5254 + selector_c(o,l,i,n,s,c,p) then false,
  5255 + radio_button(o,_,_,n,v,c) then false,
  5256 + radio_button_r(o,_,_,n,v,c) then false,
  5257 + check_box(o,_,_,n,c) then false,
  5258 + check_box_r(o,_,_,n,c) then false,
  5259 + div(o,l) then mapor(contains_an_upload,l), //contains_an_upload(c),
  5260 + div_empty(o) then false,
  5261 + hidden(_,_,_) then false,
  5262 + partial(_) then false,
  5263 + br then false,
  5264 + progress(_,_,_) then false,
  5265 + ol(_,l) then mapor(contains_an_upload,l),
  5266 + ul(_,l) then mapor(contains_an_upload,l),
  5267 + li(_,l) then mapor(contains_an_upload,l),
  5268 + button(_,_) then false,
  5269 + i(_,_) then false,
  5270 + span(_,_) then false,
  5271 + hr(_) then false
  5272 + }
  5273 +.
  5274 +
  5275 +define String
  5276 + enctype
  5277 + (
  5278 + List(HTML_In_Form) form_contents
  5279 + )=
  5280 + if mapor(contains_an_upload, form_contents) then
  5281 + " enctype=\"multipart/form-data\""
  5282 + else
  5283 + ""
  5284 +.
  5285 +
  5286 +define Printable_tree
  5287 + format_href
  5288 + (
  5289 + A_href _href
  5290 + )=
  5291 + if _href is
  5292 + {
  5293 + href(str) then if str = "" then [] else [" href=\"", str, "\""],
  5294 + href(action, extra) then [" href=\"",format_web_action_name(action, extra), "\""]
  5295 + }
  5296 +.
  5297 +
  5298 +define Printable_tree
  5299 + format_target
  5300 + (
  5301 + A_target _target
  5302 + )=
  5303 + [" target=\"",
  5304 + if _target is
  5305 + {
  5306 + _blank then "_blank",
  5307 + _self then "_self",
  5308 + _parent then "_parent",
  5309 + _top then "_top",
  5310 + framename(name) then name
  5311 + },
  5312 + "\""]
  5313 +.
  5314 +
  5315 +define Printable_tree
  5316 + format
  5317 + (
  5318 + CommonInfo cinfo,
  5319 + Var(Int) ic_v, // 'idnum' counter variable
  5320 + List(HTML_Off_Form) elements,
  5321 + Bool is_https,
  5322 + Var(Int) action_count,
  5323 + Var(List(HTML_Head_Tag)) head_tags
  5324 + ).
  5325 +
  5326 +define Printable_tree
  5327 + format
  5328 + (
  5329 + CommonInfo cinfo,
  5330 + Var(Int) ic_v, // 'idnum' counter variable
  5331 + HTML_Off_Form element,
  5332 + Bool is_https,
  5333 + Var(Int) action_count,
  5334 + Var(List(HTML_Head_Tag)) head_tags
  5335 + ) =
  5336 + if cinfo is info(common_name,http_port,https_port,site_directory,secret) then
  5337 + with format_element = (HTML_Off_Form e) |-> format(cinfo, ic_v, e, is_https, action_count, head_tags),
  5338 + if element is
  5339 + {
  5340 + a(opts, _href, _target, l) then ["<a ", format_attrs(opts), format_href(_href), format_target(_target), ">",flat(map(format_element,l)),"</a>\n"],
  5341 + empty then [],
  5342 + literal_pt(t) then t,
  5343 + literal(t) then [t],
  5344 + sequence(l) then flat(map(format_element,l)),
  5345 + text(opts,t) then
  5346 + format(cinfo,ic_v,any_text(opts,t),format_element,is_https, action_count, head_tags),
  5347 +// table(opts,header_row, rows, footer_row) then
  5348 +// format(cinfo,ic_v,any_table(opts,header_row, rows, footer_row),format_element,is_https, action_count, head_tags),
  5349 + actioner(c,t,a,an,eo,ja) then
  5350 + format(cinfo,ic_v,any_actioner(c,t,a,an,eo,ja,failure),format_element,is_https, action_count, head_tags),
  5351 + actioner(c,t,a,an,eo,ja,fn) then
  5352 + format(cinfo,ic_v,any_actioner(c,t,a,an,eo,ja,success(fn)),format_element,is_https, action_count, head_tags),
  5353 + foreign_link_new(target, aspect, url) then
  5354 + format(cinfo,ic_v,any_foreign_link_new(target,aspect,url),format_element,is_https, action_count, head_tags),
  5355 +// foreign_link(options,url) then
  5356 +// format(cinfo,ic_v,any_foreign_link(options,url),format_element,is_https, action_count, head_tags),
  5357 + foreign_link(options,url,name) then
  5358 + format(cinfo,ic_v,any_foreign_link(options,url,name),format_element,is_https, action_count, head_tags),
  5359 + private_download(url,name,extra,action) then
  5360 + format(cinfo,ic_v,any_private_download(url,name,extra,action),format_element,is_https, action_count, head_tags),
  5361 +// form(fn, attributs, l) then
  5362 +// [
  5363 +// "<form id=\"",fn,"\"",
  5364 +// format(cinfo,ic_v,any_coreattrs(attributs),format_element,is_https, action_count, head_tags),
  5365 +// " method=\"post\"",
  5366 +// enctype(l),
  5367 +// " action=\"http",(
  5368 +// if is_https then "s" else "",
  5369 +// "://",common_name,":",to_decimal(http_port),"/\">",
  5370 +// // action is set dynamically by
  5371 +// // the actioner using JavaScript
  5372 +// if fn is html_Id(id) then
  5373 +// flat(map((HTML_In_Form e) |-> format(cinfo,id,ic_v,e,is_https, action_count, head_tags), l)),
  5374 +// "</form>"
  5375 +// ]
  5376 +// form(fn,attributs, action, extra_ops, l) then
  5377 +// with url = make_actioner_url(cinfo, same, same,
  5378 +// action, extra_ops, is_https),
  5379 +// [
  5380 +// "<form id=\"",fn,"\"",
  5381 +// format(cinfo,ic_v, any_coreattrs(attributs),format_element,is_https, action_count, head_tags),
  5382 +// " method=\"post\"",
  5383 +// enctype(l),
  5384 +// " action=\"" + url + "\">",
  5385 +//// " action=\"http",
  5386 +//// if is_https then "s" else "",
  5387 +//// "://",common_name,":",http_port,"/\">",
  5388 +// // action is set dynamically by
  5389 +// // the actioner using JavaScript
  5390 +// if fn is html_Id(id) then
  5391 +// flat(map((HTML_In_Form e) |-> format(cinfo,id,ic_v,e,is_https, action_count, head_tags),l)),
  5392 +// "</form>"
  5393 +// ],
  5394 +// in_form(fn, content) then
  5395 +// if fn is html_Id(id) then
  5396 +// format(cinfo,id,ic_v, content,is_https, action_count, head_tags),
  5397 + div(options, p_content) then
  5398 + with html_elements = map((HTML_Partial_Content pc) |-> since pc is partial_content(tags, html_elem), head_tags <- *head_tags +tags; html_elem, p_content),
  5399 +
  5400 + format(cinfo, ic_v, any_div(options, html_elements), format_element, is_https, action_count, head_tags),
  5401 + iframe(options, css_styles, css_files, js_files, body) then
  5402 + println("formating iframe");
  5403 + if body is body(body_options,elem) then
  5404 + [ "<iframe", format_attrs(options), " srcdoc=\"\n",
  5405 +
  5406 + encode_HTML_quote(to_String([
  5407 + "<html style=\"margin: 0pt; padding: 0pt;\">\n",
  5408 + "<head>\n",
  5409 + add_css_styles(css_styles),
  5410 + add_css_files(css_files),
  5411 + add_js_files(js_files),
  5412 + "</head>\n",
  5413 + "<body ", format_attrs(body_options), ">\n", // format body options
  5414 + format(cinfo,ic_v, elem ,is_https, action_count, head_tags),
  5415 + "</body>\n",
  5416 + "</html>\n",])),
  5417 +
  5418 + "\"></iframe>\n",
  5419 + ],
  5420 + partial(p_content) then
  5421 + if p_content is partial_content(tags, html_elements) then
  5422 + head_tags <- *head_tags + tags;
  5423 + format(cinfo, ic_v, html_elements, is_https, action_count, head_tags),
  5424 +// i(opts, t) then
  5425 +// format(cinfo,ic_v,any_i(opts,t),format_element,is_https, action_count, head_tags),
  5426 + html_tag(tag_name, opts, l) then ["<",tag_name, format_attrs(opts), ">", flat(map(format_element,l)), "</",tag_name,">\n"],
  5427 + html_void_tag(tag_name, opts) then ["<",tag_name, format_attrs(opts), ">"],
  5428 + }.
  5429 +
  5430 +define Printable_tree
  5431 + format
  5432 + (
  5433 + CommonInfo cinfo,
  5434 + Var(Int) ic_v, // 'idnum' counter variable
  5435 + List(HTML_Off_Form) elements,
  5436 + Bool is_https,
  5437 + Var(Int) action_count,
  5438 + Var(List(HTML_Head_Tag)) head_tags
  5439 + ) =
  5440 + if cinfo is info(common_name,http_port,https_port,site_directory,secret) then
  5441 + flat(map((HTML_Off_Form element) |->
  5442 + format(cinfo, ic_v, element, is_https, action_count, head_tags),
  5443 + elements))
  5444 +.
  5445 +
  5446 + *** [5.10] Formating meta-tags.
  5447 +
  5448 +define Printable_tree
  5449 + format_keywords
  5450 + (
  5451 + List(String) l
  5452 + ) =
  5453 + if l is
  5454 + {
  5455 + [] then [ ],
  5456 + [h . t] then if t is []
  5457 + then [h]
  5458 + else [h , ", " . format_keywords(t)]
  5459 + }.
  5460 +
  5461 +
  5462 +define Printable_tree
  5463 + format
  5464 + (
  5465 + CommonInfo cinfo,
  5466 + HTML_Meta m,
  5467 + Bool is_https
  5468 + ) =
  5469 + if m is
  5470 + {
  5471 + keywords(l) then ["<meta name=\"keywords\" content=\"",format_keywords(l),"\" />\n"],
  5472 + refresh(co,ta,an,delay) then
  5473 + ["<meta http-equiv=\"Refresh\" content=\"",delay,"; URL=",
  5474 + make_actioner_url(cinfo,co,ta,an,[],is_https),"\" />\n"],
  5475 + refresh(url,delay) then
  5476 + ["<meta http-equiv=\"Refresh\" content=\"",delay,"; URL=",url,"\" />\n"],
  5477 + meta(n,c) then ["<meta name=\"",n,"\" content=\"",c,"\" />\n"],
  5478 + http_equiv(n,c) then ["<meta http-equiv=\"",n,"\" content=\"",c,"\" />\n"],
  5479 + generic_meta(l) then ["<meta ",
  5480 + flat(map(((String,String) p) |-> if p is (n,v) then [n,"=\"",v,"\" "],
  5481 + l)),
  5482 + " />\n"],
  5483 + literal(s) then [s]
  5484 + }
  5485 +.
  5486 +
  5487 +define Printable_tree // c'est le nôtre et c'est meilleur
  5488 + format
  5489 + (
  5490 + HTML_Meta m,
  5491 + ) =
  5492 + if m is
  5493 + {
  5494 + keywords(l) then ["<meta name=\"keywords\" content=\"",format_keywords(l),"\" />\n"],
  5495 + refresh(co,ta,an,delay) then
  5496 + ["<!-- TODO refresh(co,ta,an,delay) --> "], // TODO
  5497 + refresh(url,delay) then
  5498 + ["<meta http-equiv=\"Refresh\" content=\"",delay,"; URL=",url,"\" />\n"],
  5499 + meta(n,c) then ["<meta name=\"",n,"\" content=\"",c,"\" />\n"],
  5500 + http_equiv(n,c) then ["<meta http-equiv=\"",n,"\" content=\"",c,"\" />\n"],
  5501 + generic_meta(l) then ["<meta ",
  5502 + flat(map(((String,String) p) |-> if p is (n,v) then [n,"=\"",v,"\" "],
  5503 + l)),
  5504 + " />\n"],
  5505 + literal(s) then [s]
  5506 + }.
  5507 +
  5508 +
  5509 +define Printable_tree
  5510 + format
  5511 + (
  5512 + CommonInfo cinfo,
  5513 + List(HTML_Meta) metas,
  5514 + Bool is_https,
  5515 + String charset
  5516 + ) =
  5517 + if metas is
  5518 + {
  5519 + [] then [format(cinfo,http_equiv("content-type",
  5520 + "text/html; charset="+charset),is_https)],
  5521 + [h . t] then [format(cinfo,h,is_https)
  5522 + . format(cinfo,t,is_https,charset)]
  5523 + }.
  5524 +
  5525 + define List(HTML_Head_Tag)
  5526 + rebuild_html_head_tags
  5527 + (
  5528 + List(HTML_Head_Tag) lwf,
  5529 + List(HTML_Head_Tag) so_far
  5530 + ) =
  5531 + if lwf is
  5532 + {
  5533 + [] then so_far,
  5534 + [h . t] then
  5535 + rebuild_html_head_tags(t, append_once(so_far, h))
  5536 + }.
  5537 +
  5538 +define Printable_tree
  5539 + _format_html_head
  5540 + (
  5541 + List(HTML_Head_Tag) lwf,
  5542 + Printable_tree so_far,
  5543 + Dictionary(String, Word32) js_dict
  5544 + )
  5545 + =
  5546 + //with lwf_ = rebuild_html_head_tags(lwf, []),
  5547 + if lwf is
  5548 + {
  5549 + [] then reverse(so_far),
  5550 + [ h . t] then
  5551 + if h is
  5552 + {
  5553 + meta(meta) then
  5554 + [format(meta) . _format_html_head(t, so_far, js_dict)],
  5555 + title(title) then
  5556 + ["<title>"+title+"</title>\n" . _format_html_head(t, so_far, js_dict)],
  5557 + js(jsf) then
  5558 + since jsf is js_file(filename, _),
  5559 + if js_dict.get(filename) is
  5560 + {
  5561 + failure then
  5562 + forget(js_dict.insert(filename, 0));
  5563 + [add_js_files([jsf]) . _format_html_head(t, so_far, js_dict)],
  5564 +
  5565 + success(_) then
  5566 + _format_html_head(t, so_far, js_dict),
  5567 + }
  5568 + js_inline(jsi) then
  5569 + if jsi is
  5570 + {
  5571 + script(type, _) then
  5572 + ["<script type=\"" + type + "\">"+content(jsi)+"</script>\n" . _format_html_head(t, so_far, js_dict)],
  5573 + }
  5574 + css(cssf) then
  5575 + since cssf is css_file(file_name, media),
  5576 + ["<link rel=\"stylesheet\" type=\"text/css\" href=\""+file_name+"\" media=\""+to_String(media)+"\" />\n" . _format_html_head(t, so_far, js_dict)],
  5577 +
  5578 + css_inline(cssi) then
  5579 + ["<style>"+cssi+"</style>\n" . _format_html_head(t, so_far, js_dict)]
  5580 +
  5581 + link(link_attrs) then
  5582 + ["<link " + to_String(link_attrs) + " />\n" . _format_html_head(t, so_far, js_dict)]
  5583 + }
  5584 + }
  5585 +.
  5586 +
  5587 +public define Printable_tree
  5588 + format_html_head
  5589 + (
  5590 + List(HTML_Head_Tag) lwf,
  5591 + String charset
  5592 + )
  5593 + =
  5594 + _format_html_head((List(HTML_Head_Tag))[ meta(http_equiv("content-type", "text/html; charset="+charset)) . lwf], [], make_dictionary((Word32)0, dictionaryComparerString)).
  5595 +
  5596 +public define Printable_tree
  5597 + format_html_head
  5598 + (
  5599 + List(HTML_Head_Tag) lwf
  5600 + )
  5601 + =
  5602 + _format_html_head(lwf, [], make_dictionary((Word32)0, dictionaryComparerString)).
  5603 +
  5604 +
  5605 +public type HTML_ajax_content:
  5606 + html_ajax_content( String html_body, String script, List(String) js_file, List(String) css_file).
  5607 +
  5608 +public define HTML_ajax_content
  5609 + sort_head_tag
  5610 + (
  5611 + List(HTML_Head_Tag) lwf,
  5612 + String script,
  5613 + List(String) js_file,
  5614 + List(String) css_file
  5615 + )=
  5616 + if lwf is
  5617 + {
  5618 + [] then html_ajax_content("", script, reverse(js_file), reverse(css_file)),
  5619 + [ h . t ] then
  5620 + if h is
  5621 + {
  5622 + meta(meta) then sort_head_tag(t, script, js_file, css_file),
  5623 + title(title) then sort_head_tag(t, script, js_file, css_file),
  5624 + js(jsf) then /*println("sort_head_tag jsf["+jsf.file_name+"]");*/sort_head_tag(t, script, [file_name(jsf) . js_file], css_file),
  5625 + js_inline(jsi) then /*println("sort_head_tag jsi["+jsi.content+"]");*/sort_head_tag(t, script + content(jsi), js_file, css_file),
  5626 + css(cssf) then sort_head_tag(t, script, js_file, [file_name(cssf) . css_file]),
  5627 + css_inline(cssi) then sort_head_tag(t, script, js_file, css_file),
  5628 + link(_) then sort_head_tag(t, script, js_file, css_file),
  5629 + }
  5630 + }.
  5631 +
  5632 +public define HTML_ajax_content
  5633 + to_html_ajax_content
  5634 + (
  5635 + HTML_Off_Form content_HTML,
  5636 + CommonInfo cinfo
  5637 + )=
  5638 + //println("to_html_ajax_content(content_HTML, cinfo)");
  5639 + with p_content_head_tags = var((List(HTML_Head_Tag))[]),
  5640 + with content = format(cinfo, var((Int)0), content_HTML, false, var(0), p_content_head_tags),
  5641 + if sort_head_tag(*p_content_head_tags, "", [], []) is html_ajax_content(_, script, js_file, css_file) then
  5642 + html_ajax_content(to_String(content), script, js_file, css_file).
  5643 +
  5644 +public define String
  5645 + to_String
  5646 + (
  5647 + HTML_Off_Form content_HTML,
  5648 + CommonInfo cinfo
  5649 + )=
  5650 + //println("to_html_ajax_content(content_HTML, cinfo)");
  5651 + with p_content_head_tags = var((List(HTML_Head_Tag))[]),
  5652 + with content = format(cinfo, var((Int)0), content_HTML, false, var(0), p_content_head_tags),
  5653 + to_String(content)
  5654 +.
  5655 +
  5656 +
  5657 +public define JsonValue
  5658 + to_html_ajax_content
  5659 + (
  5660 + HTML_Partial_Content content_HTML,
  5661 + CommonInfo cinfo,
  5662 + String additional_script
  5663 + )=
  5664 + //println("to_html_ajax_content(content_HTML, cinfo, additional_script)");
  5665 + //println("additional_script"+additional_script);
  5666 + since to_html_ajax_content(partial(content_HTML), cinfo) is html_ajax_content(html, script, js_files, css_files),
  5667 + json_object([
  5668 + json_member("html", json_string(html)),
  5669 + json_member("js_files", to_json_array(js_files)),
  5670 + json_member("css_files", to_json_array(css_files)),
  5671 + json_member("script", json_string(additional_script+script)),
  5672 + ])
  5673 +.
  5674 +
  5675 +public define JsonValue
  5676 + to_html_ajax_content
  5677 + (
  5678 + HTML_Partial_Content content_HTML,
  5679 + CommonInfo cinfo
  5680 + )= to_html_ajax_content(content_HTML, cinfo, "").
  5681 +
  5682 +public define JsonValue
  5683 + to_html_ajax_content
  5684 + (
  5685 + Printable_tree content_HTML,
  5686 + String additional_script
  5687 + )=
  5688 + //since to_html_ajax_content(partial(content_HTML), cinfo) is html_ajax_content(html, script, js_files, css_files),
  5689 + json_object([
  5690 + json_member("html", json_string(to_String(content_HTML))),
  5691 + json_member("js_files", to_json_array([])),
  5692 + json_member("css_files", to_json_array([])),
  5693 + json_member("script", json_string(additional_script)),
  5694 + ])
  5695 +.
  5696 +
  5697 +public define AWP_Handler_Answer //Printable_tree
  5698 + format
  5699 + (
  5700 + CommonInfo cinfo,
  5701 + List(HTTP_header) additional_headers,
  5702 + HTTP_Answer page,
  5703 + Bool is_https,
  5704 + String charset
  5705 + )=
  5706 + if cinfo is info(common_name,http_port,https_port,site_directory,secret) then
  5707 + with ic_v = var((Int)0),
  5708 + p_content_head_tags = var((List(HTML_Head_Tag))[]), //list of heat_tags extracted from partial_content during format of body content
  5709 + if page is
  5710 + {
  5711 + html_page(status, head_tags, body) then
  5712 + if body is body(options,element) then
  5713 + if format(status) is (status_string, status_headers) then
  5714 + with
  5715 + answer_body_body = (Printable_tree)
  5716 + [ "<body ", format_attrs(options), ">", // format body options
  5717 + format(cinfo,ic_v,element,is_https, var(0), p_content_head_tags),
  5718 + "</body>\n",
  5719 +
  5720 + "</html>"],
  5721 + answer_body_header =
  5722 + [doctype_w3c_header,
  5723 + // html_header,
  5724 +
  5725 + "<head>\n", format_html_head(head_tags + *p_content_head_tags, charset),"</head>\n",
  5726 + ],
  5727 + printable_tree([
  5728 + "HTTP/1.1 " + status_string, crlf,
  5729 + format_headers(standard_headers),
  5730 + format_headers(standard_headers_for("text/html", length(answer_body_header) + length(answer_body_body), success(charset))),
  5731 + format_headers(status_headers),
  5732 + format_headers(additional_headers),
  5733 + crlf,
  5734 + answer_body_header .
  5735 + answer_body_body
  5736 + ]),
  5737 +
  5738 + html_page(status, title, head_tags, css_styles, css_files, js_files, script, body) then
  5739 + if body is body(options,element) then
  5740 + if format(status) is (status_string, status_headers) then
  5741 + with
  5742 + answer_body_body = (Printable_tree)
  5743 + [ "<body ", format_attrs(options), ">", // format body options
  5744 + format(cinfo,ic_v,element,is_https, var(0), p_content_head_tags),
  5745 + "</body>\n",
  5746 + "</html>"
  5747 + ],
  5748 + answer_body_header =
  5749 + [ doctype_w3c_header,
  5750 + //html_header,
  5751 + "<head>\n",
  5752 + add_css_styles(css_styles),
  5753 + add_css_files(css_files),
  5754 + add_js_files(js_files),
  5755 + add_script(script),
  5756 + "<link rel=\"shortcut icon\" href=\"favicon.ico\" />\n",
  5757 + "<script type = \"text/javascript\" language=\"JavaScript\">",
  5758 + " function show_local_popup(divname,stvname) {",
  5759 + " if (document.layers) { var d = eval(document.divname); } else\n",
  5760 + " if (document.getElementById) { var d = eval(\"document.getElementById(divname)\"); } else\n",
  5761 + " if (document.all) { var d = eval(document.all.divname.style)};\n",
  5762 + // " alert(typeof(eval(stvname))); ",
  5763 + " var s = eval(stvname); ",
  5764 + " if (s[0]==0) ",
  5765 + " { s[0]=1; d.style.visibility = 'visible'; d.zIndex = 100; } else\n",
  5766 + " { s[0]=0; d.style.visibility = 'hidden'; }; }",
  5767 + "</script>\n",
  5768 + "<title>",title,"</title>\n", // put title
  5769 + //format(cinfo,metas,is_https,charset), // format the metas
  5770 + format_html_head(head_tags + *p_content_head_tags, charset),
  5771 + "</head>\n"
  5772 + ],
  5773 + printable_tree([
  5774 + "HTTP/1.1 " + status_string, crlf,
  5775 + format_headers(standard_headers),
  5776 + format_headers(standard_headers_for("text/html", length(answer_body_header) + length(answer_body_body), success(charset))),
  5777 + format_headers(status_headers),
  5778 + format_headers(additional_headers),
  5779 + crlf,
  5780 + answer_body_header .
  5781 + answer_body_body
  5782 + ]),
  5783 +
  5784 + plain_text (HTTP_Status status, String text) then
  5785 + if format(status) is (status_string, status_headers) then
  5786 + printable_tree([
  5787 + "HTTP/1.1 " + status_string, crlf,
  5788 + format_headers(standard_headers),
  5789 + format_headers(standard_headers_for("text/plain", length(text), success(charset))),
  5790 + format_headers(status_headers),
  5791 + format_headers(additional_headers),
  5792 + crlf,
  5793 + text . (Printable_tree)[]
  5794 + ]),
  5795 +
  5796 + custom_text(HTTP_Status status, mime_type, String content) then
  5797 + if format(status) is (status_string, status_headers) then
  5798 + printable_tree([
  5799 + "HTTP/1.1 " + status_string, crlf,
  5800 + format_headers(standard_headers),
  5801 + format_headers(standard_headers_for(to_String(mime_type), length(content), success(charset))),
  5802 + format_headers(status_headers),
  5803 + format_headers(additional_headers),
  5804 + crlf,
  5805 + content . (Printable_tree)[]
  5806 + ]),
  5807 +
  5808 + custom_binary(HTTP_Status status, mime_type, ByteArray content, List(HTTP_header) other_headers) then
  5809 + if format(status) is (status_string, status_headers) then
  5810 + printable_tree([
  5811 + "HTTP/1.1 " + status_string, crlf,
  5812 + format_headers(status_headers),
  5813 + format_headers(standard_headers_for(to_String(mime_type), length(content), failure)),
  5814 + format_headers(status_headers),
  5815 + format_headers(other_headers),
  5816 + format_headers(additional_headers),
  5817 + crlf,
  5818 + content . (Printable_tree)[]
  5819 + ]),
  5820 +
  5821 + custom_tree(HTTP_Status status, mime_type, Printable_tree content) then
  5822 + if format(status) is (status_string, status_headers) then
  5823 + printable_tree([
  5824 + "HTTP/1.1 " + status_string, crlf,
  5825 + format_headers(standard_headers),
  5826 + format_headers(standard_headers_for(to_String(mime_type), length(content), success(charset))),
  5827 + format_headers(status_headers),
  5828 + format_headers(additional_headers),
  5829 + crlf .
  5830 + content
  5831 + ]),
  5832 +
  5833 + json(HTTP_Status status, JsonValue json_content) then
  5834 + //with start = unow,
  5835 + with content = (Printable_tree)format_json(json_content),
  5836 + //println(show_duration_string("HTTP json format json object ", start));
  5837 + if format(status) is (status_string, status_headers) then
  5838 + printable_tree([
  5839 + "HTTP/1.1 " + status_string, crlf,
  5840 + format_headers(standard_headers),
  5841 + format_headers(standard_headers_for(to_String(mime_application_json), length(content), success(charset))),
  5842 + format_headers(status_headers),
  5843 + format_headers(additional_headers),
  5844 + crlf .
  5845 + content
  5846 + ])
  5847 + ,
  5848 + send_file(file_path, c_disposition) then
  5849 + send_file(file_path, c_disposition),
  5850 +
  5851 + http_raw(Printable_tree content) then
  5852 + printable_tree(content),
  5853 +
  5854 + html_content(HTTP_Status status, HTML_Off_Form content_HTML) then
  5855 + if format(status) is (status_string, status_headers) then
  5856 + with content = format(cinfo, ic_v, content_HTML, is_https, var(0), p_content_head_tags),
  5857 + printable_tree([
  5858 + "HTTP/1.1 " + status_string, crlf,
  5859 + format_headers(standard_headers),
  5860 + format_headers(standard_headers_for("text/html", length(content), success(charset))),
  5861 + format_headers(status_headers),
  5862 + format_headers(additional_headers),
  5863 + crlf .
  5864 + content
  5865 + ]),
  5866 + //HMTL content with some header
  5867 + html_partial_content(HTTP_Status status, HTML_Partial_Content p_content) then
  5868 +
  5869 + since p_content is partial_content(head_tags, html_content),
  5870 + since format(status) is (status_string, status_headers),
  5871 + with
  5872 + answer_body = (Printable_tree)
  5873 + [
  5874 + format(cinfo, ic_v, html_content, is_https, var(0), p_content_head_tags),
  5875 + ],
  5876 + answer_header = (Printable_tree)
  5877 + [
  5878 + // html_header,
  5879 + format_html_head(head_tags + *p_content_head_tags),
  5880 + ],
  5881 + printable_tree([
  5882 + "HTTP/1.1 " + status_string, crlf,
  5883 + format_headers(standard_headers),
  5884 + format_headers(standard_headers_for("text/html", length(answer_header) + length(answer_body), success(charset))),
  5885 + format_headers(status_headers),
  5886 + format_headers(additional_headers),
  5887 + crlf,
  5888 + answer_header .
  5889 + answer_body
  5890 + ]),
  5891 + }.
  5892 +
web/page_message.anubis
@@ -150,19 +150,19 @@ define List(CoreAttrs) @@ -150,19 +150,19 @@ define List(CoreAttrs)
150 right then [class(html_class), style("margin-left: auto;")] 150 right then [class(html_class), style("margin-left: auto;")]
151 }. 151 }.
152 152
153 -public define HTML_Off_Form hide_info_line_btn = div([event(onclick, "this.parentNode.style.display=&quot;none&quot;;"), style("width: 16px; height: 16px; background: transparent url(&quot;"+icn16_cross+"&quot;) no-repeat scroll center center; float: right; display: inline; cursor: pointer;")], literal("")). 153 +public define HTML hide_info_line_btn = div([event(onclick, "this.parentNode.style.display=&quot;none&quot;;"), style("width: 16px; height: 16px; background: transparent url(&quot;"+icn16_cross+"&quot;) no-repeat scroll center center; float: right; display: inline; cursor: pointer;")], literal("")).
154 154
155 -public define HTML_In_Form  
156 - display_info_line  
157 - (  
158 - String html_id,  
159 - String html_class,  
160 - String txt,  
161 - Alignment align  
162 - ) =  
163 - div(get_info_line_attrbs(html_class, align), [partial(partial_content(hide_info_line_btn)), partial(partial_content(literal(txt)))]). 155 +//public define HTML_In_Form
  156 +// display_info_line
  157 +// (
  158 +// String html_id,
  159 +// String html_class,
  160 +// String txt,
  161 +// Alignment align
  162 +// ) =
  163 +// div(get_info_line_attrbs(html_class, align), [partial(partial_content(hide_info_line_btn)), partial(partial_content(literal(txt)))]).
164 164
165 -public define HTML_Off_Form 165 +public define HTML
166 display_info_line 166 display_info_line
167 ( 167 (
168 String html_id, 168 String html_id,
@@ -170,9 +170,9 @@ public define HTML_Off_Form @@ -170,9 +170,9 @@ public define HTML_Off_Form
170 String txt, 170 String txt,
171 Alignment align 171 Alignment align
172 ) = 172 ) =
173 - div(get_info_line_attrbs(html_class, align), sequence([hide_info_line_btn, partial(partial_content(literal(txt)))])). 173 + div(get_info_line_attrbs(html_class, align), sequence([hide_info_line_btn, text(txt)])).
174 174
175 -public define HTML_Off_Form 175 +public define HTML
176 display_main_info_line 176 display_main_info_line
177 ( 177 (
178 String html_class, 178 String html_class,
@@ -181,7 +181,7 @@ public define HTML_Off_Form @@ -181,7 +181,7 @@ public define HTML_Off_Form
181 ) = 181 ) =
182 display_info_line("informations", html_class, txt, align). 182 display_info_line("informations", html_class, txt, align).
183 183
184 -public define HTML_Off_Form 184 +public define HTML
185 display_main_info_line 185 display_main_info_line
186 ( 186 (
187 String html_class, 187 String html_class,
@@ -189,7 +189,7 @@ public define HTML_Off_Form @@ -189,7 +189,7 @@ public define HTML_Off_Form
189 ) = 189 ) =
190 display_info_line("informations", html_class, txt, left). 190 display_info_line("informations", html_class, txt, left).
191 191
192 -public define HTML_Off_Form 192 +public define HTML
193 show_page_message 193 show_page_message
194 ( 194 (
195 Page_Message page_message 195 Page_Message page_message
web/plugin/plugin.anubis
@@ -23,7 +23,7 @@ public type WEB_Plugin: @@ -23,7 +23,7 @@ public type WEB_Plugin:
23 String date, 23 String date,
24 //version 24 //version
25 (SQLite3DataBase db, HK_Database hk_db, VTM _vtm, (LogLevel, String) -> One logger) -> List(WEB_Controller) get_controller, 25 (SQLite3DataBase db, HK_Database hk_db, VTM _vtm, (LogLevel, String) -> One logger) -> List(WEB_Controller) get_controller,
26 - (SQLite3DataBase db, WEB_Session, String type) -> Maybe(HTML_Partial_Content) get_typed_content 26 + (SQLite3DataBase db, WEB_Session, String type) -> Maybe(HTML) get_typed_content
27 // (One dummy) -> Plugin_Left_Menu get_plugin_left_menu 27 // (One dummy) -> Plugin_Left_Menu get_plugin_left_menu
28 // (One dummy) -> Message get_API, 28 // (One dummy) -> Message get_API,
29 // (Message message) -> Message call_API 29 // (Message message) -> Message call_API
web/types/controllers_web_site.anubis
@@ -40,7 +40,7 @@ public type WEB_Controller_Result: @@ -40,7 +40,7 @@ public type WEB_Controller_Result:
40 ), 40 ),
41 ajax( 41 ajax(
42 Maybe(WEB_Session) mb_session, //modified session if success else failure 42 Maybe(WEB_Session) mb_session, //modified session if success else failure
43 - HTML_Partial_Content content, 43 + HTML content,
44 String additional_script 44 String additional_script
45 ), 45 ),
46 ajax( 46 ajax(
@@ -56,12 +56,12 @@ public type WEB_Controller_Result: @@ -56,12 +56,12 @@ public type WEB_Controller_Result:
56 Maybe(WEB_Session) mb_session, //modified session if success else failure 56 Maybe(WEB_Session) mb_session, //modified session if success else failure
57 //String title, 57 //String title,
58 //Left_Menu left_menu, 58 //Left_Menu left_menu,
59 - HTML_Partial_Content content 59 + HTML content
60 ) 60 )
61 //redraw with the current renderer, the given content 61 //redraw with the current renderer, the given content
62 // redraw( 62 // redraw(
63 // Maybe(WEB_Session) mb_session, //modified session if success else failure 63 // Maybe(WEB_Session) mb_session, //modified session if success else failure
64 -// HTML_Partial_Content content 64 +// HTML content
65 // ) 65 // )
66 . 66 .
67 67
web/types/making_a_web_site.anubis
@@ -310,38 +310,11 @@ public define JS_File js_file(String file_name) = js_file(file_name, []). @@ -310,38 +310,11 @@ public define JS_File js_file(String file_name) = js_file(file_name, []).
310 public define CSS_File css_file(String file_name)= css_file(file_name, all). 310 public define CSS_File css_file(String file_name)= css_file(file_name, all).
311 311
312 public type CoreAttrs:... 312 public type CoreAttrs:...
313 -public type HTML_Partial_Content:...  
314 public type HTML_Body:... 313 public type HTML_Body:...
315 -public type HTML_Off_Form:... 314 +public type HTML:...
316 public type HTML_tooltip:... 315 public type HTML_tooltip:...
317 public type HTTP_Answer:... 316 public type HTTP_Answer:...
318 -  
319 -  
320 -public type Text_Option:  
321 - core_attrs(List(CoreAttrs)),  
322 - size(Int), // size of character font to use  
323 - font(String), // name of character font to use (such as "helvetica",...)  
324 - color(RGB), // color to be used for characters  
325 - italic,  
326 - oblique,  
327 - small_capitals,  
328 - bold,  
329 - underlined,  
330 - left_justified,  
331 - right_justified,  
332 - justified, // justified on both sides  
333 - line_through,  
334 - nowrap,  
335 - class(String), //CSS class  
336 - id(String),  
337 - style(String),  
338 - title(String),  
339 - attr(String, String).  
340 -  
341 -public type CSS_Style:  
342 - text_options(List(Text_Option)).  
343 -  
344 -// Following types are define to prohib any arguments order error 317 +public type HTML_Head_Tag:...
345 318
346 /** 319 /**
347 * String value for 'id' attribut 320 * String value for 'id' attribut
@@ -392,27 +365,6 @@ public type HTML_Label: @@ -392,27 +365,6 @@ public type HTML_Label:
392 ) 365 )
393 . 366 .
394 367
395 -public type InputAttrs:  
396 - id (String),  
397 - class (String),  
398 - style (String),  
399 - title (String),  
400 - lang (String),  
401 - dir (Reading_Way),  
402 - accesskey (Word8),  
403 - tabindex (Int),  
404 - attr (String, String),  
405 - event (HtmlEvents, String),  
406 - //HTML5  
407 - data (String name, String value).  
408 -  
409 -public type TextAreaOption:  
410 - input_attrs(List(InputAttrs)),  
411 - disabled,  
412 - read_only,  
413 - wrap_lines  
414 -.  
415 -  
416 public type Actioner_Local_Action: 368 public type Actioner_Local_Action:
417 close_window. 369 close_window.
418 370
@@ -433,131 +385,16 @@ public type Actioner_Target: @@ -433,131 +385,16 @@ public type Actioner_Target:
433 other(String window_name, List(Other_Window_Option)). 385 other(String window_name, List(Other_Window_Option)).
434 386
435 public type Actioner_Aspect: 387 public type Actioner_Aspect:
436 - link (List(Text_Option), String text, Maybe(String) name),// hypertext link 388 + link (List(CoreAttrs), String text, Maybe(String) name),// hypertext link
437 img_link (List(CoreAttrs),String img_url, String alt_text), 389 img_link (List(CoreAttrs),String img_url, String alt_text),
438 push_button (List(CoreAttrs),String text), 390 push_button (List(CoreAttrs),String text),
439 button (String url_off, String url_on), // rollover button 391 button (String url_off, String url_on), // rollover button
440 button (String url_off, String url_on, Int w, Int h), // idem with size 392 button (String url_off, String url_on, Int w, Int h), // idem with size
441 submit (List(CoreAttrs),String text), 393 submit (List(CoreAttrs),String text),
442 immediate_selector (List(CoreAttrs),WebArgName name, Int size, List((List(CoreAttrs),WebArgValue,String)) choices, Maybe(InitialValue) selected, String onchange_fn), 394 immediate_selector (List(CoreAttrs),WebArgName name, Int size, List((List(CoreAttrs),WebArgValue,String)) choices, Maybe(InitialValue) selected, String onchange_fn),
443 - html (List(CoreAttrs), HTML_Off_Form).  
444 -  
445 -public define Actioner_Aspect html(HTML_Off_Form content) = html([], content).  
446 -  
447 -public type BackgroundOption:  
448 - repeat, // repeat the background in both directions  
449 - repeat_horizontal, // repeat the background only horizontally  
450 - repeat_vertical, // repeat the background only verticall  
451 - no_repeat, // don't repeat the background  
452 - center.  
453 -  
454 -public type Cell_Option:  
455 - core_attrs(List(CoreAttrs)),  
456 - left, // put the content of the cell on the left  
457 - h_center, // center the content of the cell horizontally  
458 - right, // put the content of the cell on the right  
459 - top, // put the content of the cell upwards  
460 - v_center, // center the content of tye cell vertically,  
461 - bottom, // put the content of the cell downwards  
462 - base_line, // align the content vertically according to base lines  
463 - background_color(RGB),  
464 - background_image(String url, BackgroundOption),  
465 - width(Int), // sets a minimal width for the cell  
466 - percentage_width(Int),  
467 - height(Int), // sets a minimal height for the cell  
468 - columns(Int), // lets the cell span over several columns  
469 - rows(Int), // lets the cell span over several rows  
470 - nowrap, // do not allow text wrapping within the cell  
471 - style(String), // in case nothing above is suitable  
472 - class(String class_name).  
473 -  
474 -public type HTML_Cell($T):  
475 - cell(List(Cell_Option) options, $T content).  
476 -  
477 -public type HTML_Footer_Row($T):  
478 - empty,  
479 - footer_row(List(Cell_Option) options, List(HTML_Cell($T)) cells).  
480 -  
481 -public type HTML_Row($T):  
482 - empty,  
483 - row(List(Cell_Option) options, List(HTML_Cell($T)) cells).  
484 -  
485 -public type HTML_Header_Cell($T):  
486 - header_cell(List(Cell_Option) options, $T content).  
487 -  
488 -public type HTML_Header_Row($T):  
489 - empty,  
490 - header_row(List(Cell_Option) options, List(HTML_Header_Cell($T)) cells).  
491 -  
492 -  
493 -public type Table_Option:  
494 - core_attrs(List(CoreAttrs)),  
495 - background_color(RGB), // applied to all cells in the table  
496 - background_image(String url),  
497 - border(Int width_of_outer_edge, // if not present, all values are 0  
498 - Int width_of_top_of_relief,  
499 - Int width_of_inner_edge,  
500 - RGB border_color),  
501 - width(Int), // sets a minimal width for the table  
502 - percentage_width(Int),  
503 - attr(String name, String value),  
504 - class(String class_name).  
505 - 395 + html (List(CoreAttrs), HTML).
506 396
507 -public type HTML_In_Form:  
508 - empty,  
509 - literal_pt (Printable_tree),  
510 - literal (String),  
511 - sequence (List(HTML_In_Form) items),  
512 - text (List(CoreAttrs), String the_text),  
513 - preformated (List(Text_Option), String),  
514 - paragraph (List(Text_Option), List(HTML_In_Form) content),  
515 - image (List(CoreAttrs), String url, String alternate),  
516 - image (List(CoreAttrs), String url, String alternate, Int width, Int height),  
517 - table (List(Table_Option), HTML_Header_Row(HTML_In_Form), List(HTML_Row(HTML_In_Form)), HTML_Footer_Row(HTML_In_Form)),  
518 - center (HTML_In_Form),  
519 - mail_to (String email, HTML_In_Form element),  
520 - scroller (Int width, Int height,  
521 - Int content_width, Int content_height,  
522 - HTML_In_Form content),  
523 - actioner (Actioner_Connection, Actioner_Target, Actioner_Aspect,  
524 - WEB_Action_Name action_name, List((String,String)) extra_ops,  
525 - List(Actioner_Local_Action)),  
526 - foreign_link_new (Actioner_Target, Actioner_Aspect, String url),  
527 - foreign_link (List(Text_Option), String url),  
528 - foreign_link (List(Text_Option), String url, String name),  
529 - private_download (String abs_path, String name, String extra_ext,  
530 - Maybe((String,List((String,String)))) action),  
531 - text_input (List(CoreAttrs), HTML_Label label, HTML_Id id, WebArgName name, InitialValue init, Int width),  
532 - text_input_ro (List(CoreAttrs), HTML_Label label, HTML_Id id, WebArgName name, InitialValue init, Int width),  
533 - password_input (List(CoreAttrs), HTML_Label label, HTML_Id id, WebArgName name, InitialValue init, Int width),  
534 - text_area (List(TextAreaOption), HTML_Label label, HTML_Id id, WebArgName name, InitialValue init, Int width, Int height),  
535 - file_upload (List(CoreAttrs), HTML_Label label, HTML_Id id, WebArgName name, Int width),  
536 - selector (List(CoreAttrs), HTML_Label label, HTML_Id id, WebArgName name, Int size, List(String) choices),  
537 - selector (List(CoreAttrs), HTML_Label label, HTML_Id id, WebArgName name, Int size, List(String) choices, InitialValue selected),  
538 - // List((String,String)) = List((code,name)) where :  
539 - // code is the web-arg value  
540 - // name appears in selector  
541 - selector_c (List(CoreAttrs), HTML_Label label, HTML_Id id, WebArgName name, Int size, List((List(CoreAttrs),WebArgValue,String)) choices),  
542 - selector_c (List(CoreAttrs), HTML_Label label, HTML_Id id, WebArgName name, Int size, List((List(CoreAttrs),WebArgValue,String)) choices, InitialValue selected),  
543 - radio_button (List(CoreAttrs), HTML_Label label, HTML_Id id, WebArgName name, WebArgValue value, Bool checked),  
544 - radio_button_r (List(CoreAttrs), HTML_Label label, HTML_Id id, WebArgName name, WebArgValue value, Bool checked),  
545 - check_box (List(CoreAttrs), HTML_Label label, HTML_Id id, WebArgName name, Bool checked),  
546 - check_box_r (List(CoreAttrs), HTML_Label label, HTML_Id id, WebArgName name, Bool checked),  
547 - div (List(CoreAttrs), List(HTML_In_Form) content),  
548 - div_empty (List(CoreAttrs)),  
549 - hidden (HTML_Id id, WebArgName name, WebArgValue value),  
550 - partial (HTML_Partial_Content),  
551 - br,  
552 - progress (List(CoreAttrs), Int value, Int max),  
553 - ol (List(CoreAttrs), List(HTML_In_Form) content),  
554 - ul (List(CoreAttrs), List(HTML_In_Form) content),  
555 - li (List(CoreAttrs), List(HTML_In_Form) content),  
556 - button (List(CoreAttrs), List(HTML_In_Form) content),  
557 - i (List(CoreAttrs), String text),  
558 - span (List(CoreAttrs), String text),  
559 - hr (List(CoreAttrs))  
560 -. 397 +public define Actioner_Aspect html(HTML content) = html([], content).
561 398
562 public type HTML_Size: 399 public type HTML_Size:
563 absolute(Int), // in pixels 400 absolute(Int), // in pixels
@@ -586,16 +423,14 @@ public type A_target: @@ -586,16 +423,14 @@ public type A_target:
586 . 423 .
587 424
588 425
589 -public type HTML_Off_Form:  
590 - a (List(CoreAttrs), A_href, A_target, List(HTML_Off_Form) content), 426 +public type HTML:
  427 + a (List(CoreAttrs), A_href, A_target, List(HTML) content),
591 empty, 428 empty,
592 literal_pt (Printable_tree), 429 literal_pt (Printable_tree),
593 literal (String), 430 literal (String),
594 - sequence (List(HTML_Off_Form) items), 431 + sequence (List(HTML) items),
595 text (List(CoreAttrs), String the_text), 432 text (List(CoreAttrs), String the_text),
596 433
597 - table (List(Table_Option), HTML_Header_Row(HTML_Off_Form), List(HTML_Row(HTML_Off_Form)), HTML_Footer_Row(HTML_Off_Form)),  
598 -  
599 actioner (Actioner_Connection, Actioner_Target, Actioner_Aspect, 434 actioner (Actioner_Connection, Actioner_Target, Actioner_Aspect,
600 WEB_Action_Name action_name, List((String,String)) extra_ops, 435 WEB_Action_Name action_name, List((String,String)) extra_ops,
601 List(Actioner_Local_Action)), 436 List(Actioner_Local_Action)),
@@ -603,29 +438,21 @@ public type HTML_Off_Form: @@ -603,29 +438,21 @@ public type HTML_Off_Form:
603 WEB_Action_Name action_name, List((String,String)) extra_ops, 438 WEB_Action_Name action_name, List((String,String)) extra_ops,
604 List(Actioner_Local_Action), String form_name), 439 List(Actioner_Local_Action), String form_name),
605 foreign_link_new (Actioner_Target, Actioner_Aspect, String url), 440 foreign_link_new (Actioner_Target, Actioner_Aspect, String url),
606 - foreign_link (List(Text_Option), String url),  
607 - foreign_link (List(Text_Option), String url, String name), 441 + //foreign_link (List(Text_Option), String url),
  442 + //foreign_link (List(CoreAttrs), String url, String name),
608 private_download (String abs_path, String name, String extra_ext, 443 private_download (String abs_path, String name, String extra_ext,
609 Maybe((String,List((String,String)))) action), 444 Maybe((String,List((String,String)))) action),
610 - //label (String name),  
611 - form (HTML_Id form_id, List(CoreAttrs), List(HTML_In_Form) content),  
612 - form (HTML_Id form_id, List(CoreAttrs),  
613 - WEB_Action_Name action, List((String,String)) extra_ops,  
614 - List(HTML_In_Form) content),  
615 - in_form (HTML_Id form_id, HTML_In_Form content),  
616 - div (List(CoreAttrs), List(HTML_Partial_Content) p_content),  
617 - iframe (List(CoreAttrs),  
618 - List(CSS_Style) /*styles*/,  
619 - List(CSS_File) /*css_files*/,  
620 - List(JS_File) /*js_files*/,  
621 - HTML_Body /*body*/),  
622 - partial (HTML_Partial_Content),  
623 - //progress (List(CoreAttrs), Int value, Int max),  
624 - //i (List(CoreAttrs), String text),  
625 - html_tag (String tag_name, List(CoreAttrs), List(HTML_Off_Form) content), 445 + head_tags (List(HTML_Head_Tag) heads, List(HTML) content),
  446 + html_tag (String tag_name, List(CoreAttrs), List(HTML) content),
626 html_void_tag (String tag_name, List(CoreAttrs)) 447 html_void_tag (String tag_name, List(CoreAttrs))
627 . 448 .
628 449
  450 +public define HTML head_tags(List(HTML_Head_Tag) heads, HTML content) = head_tags(heads, [content]).
  451 +public define HTML head_tags(HTML_Head_Tag head, List(HTML) contents) = head_tags([head], contents).
  452 +public define HTML head_tags(HTML_Head_Tag head, HTML content) = head_tags([head], [content]).
  453 +public define HTML head_tags(List(HTML_Head_Tag) heads) = head_tags(heads, []).
  454 +public define HTML head_tags(HTML_Head_Tag head) = head_tags([head], []).
  455 +
629 456
630 public type Rel_attr: 457 public type Rel_attr:
631 alternate, 458 alternate,
@@ -737,22 +564,22 @@ public type HTML_Head_Tag: @@ -737,22 +564,22 @@ public type HTML_Head_Tag:
737 link(List(Link_attr) link_attrs) 564 link(List(Link_attr) link_attrs)
738 . 565 .
739 566
740 -public type HTML_Partial_Content:  
741 - partial_content  
742 - (  
743 - List(HTML_Head_Tag),  
744 - HTML_Off_Form  
745 - )  
746 -. 567 +//public type HTML:
  568 +// partial_content
  569 +// (
  570 +// List(HTML_Head_Tag),
  571 +// HTML
  572 +// )
  573 +//.
747 574
748 public type HTML_Body: 575 public type HTML_Body:
749 - body(List(CoreAttrs) attrs, List(HTML_Off_Form) content). 576 + body(List(CoreAttrs) attrs, List(HTML) content).
750 577
751 public define HTML_Body 578 public define HTML_Body
752 body 579 body
753 ( 580 (
754 List(CoreAttrs) attrs, 581 List(CoreAttrs) attrs,
755 - HTML_Off_Form content 582 + HTML content
756 )= 583 )=
757 body(attrs, [content]) 584 body(attrs, [content])
758 . 585 .
@@ -761,7 +588,7 @@ public define HTML_Body @@ -761,7 +588,7 @@ public define HTML_Body
761 body 588 body
762 ( 589 (
763 CoreAttrs attr, 590 CoreAttrs attr,
764 - HTML_Off_Form content 591 + HTML content
765 )= 592 )=
766 body([attr], [content]) 593 body([attr], [content])
767 . 594 .
@@ -770,7 +597,7 @@ public define HTML_Body @@ -770,7 +597,7 @@ public define HTML_Body
770 body 597 body
771 ( 598 (
772 CoreAttrs attr, 599 CoreAttrs attr,
773 - List(HTML_Off_Form) content 600 + List(HTML) content
774 )= 601 )=
775 body([attr], content) 602 body([attr], content)
776 . 603 .
@@ -778,7 +605,7 @@ public define HTML_Body @@ -778,7 +605,7 @@ public define HTML_Body
778 public define HTML_Body 605 public define HTML_Body
779 body 606 body
780 ( 607 (
781 - HTML_Off_Form content 608 + HTML content
782 )= 609 )=
783 body([], [content]) 610 body([], [content])
784 . 611 .
@@ -849,20 +676,15 @@ public type CoreAttrs: @@ -849,20 +676,15 @@ public type CoreAttrs:
849 676
850 public define CoreAttrs colspan(Int value) = attr("colspan", to_String(value)). 677 public define CoreAttrs colspan(Int value) = attr("colspan", to_String(value)).
851 public define CoreAttrs rowspan(Int value) = attr("rowspan", to_String(value)). 678 public define CoreAttrs rowspan(Int value) = attr("rowspan", to_String(value)).
  679 +public define CoreAttrs headers(String header_id) = attr("headers", header_id).
852 public define CoreAttrs width(Int value) = attr("width", to_String(value)). 680 public define CoreAttrs width(Int value) = attr("width", to_String(value)).
853 public define CoreAttrs height(Int value) = attr("height", to_String(value)). 681 public define CoreAttrs height(Int value) = attr("height", to_String(value)).
854 public define CoreAttrs width_px(Int value) = attr("width", to_String(value)+"px"). 682 public define CoreAttrs width_px(Int value) = attr("width", to_String(value)+"px").
855 public define CoreAttrs height_px(Int value) = attr("height", to_String(value)+"px"). 683 public define CoreAttrs height_px(Int value) = attr("height", to_String(value)+"px").
856 public define CoreAttrs alt(String value) = attr("alt", value). 684 public define CoreAttrs alt(String value) = attr("alt", value).
857 public define CoreAttrs size(Int value) = attr("size", to_String(value)). 685 public define CoreAttrs size(Int value) = attr("size", to_String(value)).
858 -  
859 -public define CoreAttrs  
860 - boolean  
861 - (  
862 - String name  
863 - )=  
864 - attr(name, name)  
865 -. 686 +public define CoreAttrs aria(String key, String value) = attr("aria-"+key, value).
  687 +public define CoreAttrs boolean(String name) = attr(name, name).
866 688
867 public type HTTP_Answer: 689 public type HTTP_Answer:
868 html_page (HTTP_Status /*http_status*/, 690 html_page (HTTP_Status /*http_status*/,
@@ -871,7 +693,7 @@ public type HTTP_Answer: @@ -871,7 +693,7 @@ public type HTTP_Answer:
871 html_page (HTTP_Status /*http_status*/, 693 html_page (HTTP_Status /*http_status*/,
872 String /*title*/, 694 String /*title*/,
873 List(HTML_Head_Tag) /*meta_tags*/, 695 List(HTML_Head_Tag) /*meta_tags*/,
874 - List(CSS_Style) /*styles*/, 696 + //List(CSS_Style) /*styles*/,
875 List(CSS_File) /*css_files*/, 697 List(CSS_File) /*css_files*/,
876 List(JS_File) /*js_files*/, 698 List(JS_File) /*js_files*/,
877 List(Script) /*script*/, 699 List(Script) /*script*/,
@@ -894,9 +716,7 @@ public type HTTP_Answer: @@ -894,9 +716,7 @@ public type HTTP_Answer:
894 Content_Disposition c_disposition), 716 Content_Disposition c_disposition),
895 http_raw (Printable_tree), 717 http_raw (Printable_tree),
896 html_content (HTTP_Status /*http_status*/, 718 html_content (HTTP_Status /*http_status*/,
897 - HTML_Off_Form),  
898 - html_partial_content (HTTP_Status /*http_status*/,  
899 - HTML_Partial_Content) 719 + HTML)
900 . 720 .
901 721
902 public define HTTP_Answer 722 public define HTTP_Answer
web/types/making_a_web_site.anubis.bak 0 → 100644
  1 +/*
  2 + * Created by PyramIDE.
  3 + * User: フランスのトトロ aka (David RENÉ)
  4 + * Date: 29/05/2019
  5 + * Time: 18:41
  6 + * © David RENÉ
  7 + */
  8 +transmit xlib/web/types/web_action_name.anubis
  9 +transmit xlib/web/common.anubis
  10 +
  11 +transmit xlib/web/multihost_http_server.anubis
  12 +transmit xlib/web/json.anubis
  13 +transmit xlib/web/widgets/left_menu.anubis
  14 +read web/mime.anubis
  15 +read tools/printable_tree.anubis
  16 +
  17 +public type WEB_Action_Allowed_Protocol:
  18 + http,
  19 + https,
  20 + http_https
  21 +.
  22 +
  23 +public type Web_Action($State):
  24 + http_action (String name, // name of action
  25 + ($State) -> Bool allow, // true if action allowed
  26 + (HTTP_Info http_info,
  27 + List(Web_arg) web_args, // actually only 'operands' web arguments
  28 + $State state) -> $State do_it),
  29 + https_action (String name, // name of action
  30 + ($State) -> Bool allow, // true if action allowed
  31 + (HTTP_Info http_info,
  32 + List(Web_arg) web_args, // actually only 'operands' web arguments
  33 + $State state) -> $State do_it),
  34 + http_https_action (String name,
  35 + ($State) -> Bool allow,
  36 + (HTTP_Info http_info,
  37 + List(Web_arg) web_args,
  38 + $State state) -> $State do_it)
  39 +.
  40 +
  41 + This indicate the way of reading text.
  42 +public type Reading_Way:
  43 + ltr, //the text is readable from "Left To Right" like english
  44 + rtl //the text is readable from "Right To Left" like arabic
  45 +.
  46 +
  47 +public type CSS_File_Media:
  48 + screen, //Intended for non-paged computer screens.
  49 + tty, //Intended for media using a fixed-pitch character grid, such as teletypes, terminals, or portable devices with limited display capabilities.
  50 + tv, //Intended for television-type devices (low resolution, color, limited scrollability).
  51 + projection, //Intended for projectors.
  52 + handheld, //Intended for handheld devices (small screen, monochrome, bitmapped graphics, limited bandwidth).
  53 + print, //Intended for paged, opaque material and for documents viewed on screen in print preview mode.
  54 + braille, //Intended for braille tactile feedback devices.
  55 + aural, //Intended for speech synthesizers.
  56 + all. //Suitable for all devices.
  57 +
  58 +public type HtmlEvents:
  59 + // Window Event Attributes
  60 + onafterprint, //HTML5 Script to be run after the document is printed
  61 + onbeforeprint, //HTML5 Script to be run before the document is printed
  62 + onbeforeunload, //HTML5 Script to be run when the document is about to be unloaded
  63 + onerror, //HTML5 Script to be run when an error occurs
  64 + onhashchange, //HTML5 Script to be run when there has been changes to the anchor part of the a URL
  65 + onload, // Fires after the page is finished loading
  66 + onmessage, //HTML5 Script to be run when the message is triggered
  67 + onoffline, //HTML5 Script to be run when the browser starts to work offline
  68 + ononline, //HTML5 Script to be run when the browser starts to work online
  69 + onpagehide, //HTML5 Script to be run when a user navigates away from a page
  70 + onpageshow, //HTML5 Script to be run when a user navigates to a page
  71 + onpopstate, //HTML5 Script to be run when the window's history changes
  72 + onresize, //HTML5 Fires when the browser window is resized
  73 + onstorage, //HTML5 Script to be run when a Web Storage area is updated
  74 + onunload, // Fires once a page has unloaded (or the browser window has been closed)
  75 + // Form element events
  76 + onblur, // Fires the moment that the element loses focus
  77 + onchange, // Fires the moment when the value of the element is changed
  78 + oncontextmenu, //HTML5 Script to be run when a context menu is triggered
  79 + onfocus, // Fires the moment when the element gets focus
  80 + oninput, //HTML5 Script to be run when an element gets user input
  81 + oninvalid, //HTML5 Script to be run when an element is invalid
  82 + onreset, // Fires when the Reset button in a form is clicked
  83 + onsearch, // Fires when the user writes something in a search field (for <input="search">)
  84 + onselect, // Fires after some text has been selected in an element
  85 + onsubmit, // Fires when a form is submitted
  86 + // Keyboard events (Not valid in base, bdo, br, frame, frameset, head, html, iframe, meta, param, script, style, and title elements.)
  87 + onkeydown, // Fires when a user is pressing a key
  88 + onkeypress, // Fires when a user presses a key
  89 + onkeyup, // Fires when a user releases a key
  90 + // Mouse events (Not valid in base, bdo, br, frame, frameset, head, html, iframe, meta, param, script, style, and title elements.)
  91 + onclick, // Fires on a mouse click on the element
  92 + ondblclick, // Fires on a mouse double-click on the element
  93 + onmousedown, // Fires when a mouse button is pressed down on an element
  94 + onmousemove, // Fires when the mouse pointer is moving while it is over an element
  95 + onmouseout, // Fires when the mouse pointer moves out of an element
  96 + onmouseover, // Fires when the mouse pointer moves over an element
  97 + onmouseup, // Fires when a mouse button is released over an element
  98 + onwheel, //HTML5 Fires when the mouse wheel rolls up or down over an element
  99 + //Drag Events
  100 + ondrag, //HMTL5 Script to be run when an element is dragged
  101 + ondragend, //HTML5 Script to be run at the end of a drag operation
  102 + ondragenter, //HTML5 Script to be run when an element has been dragged to a valid drop target
  103 + ondragleave, //HTML5 Script to be run when an element leaves a valid drop target
  104 + ondragover, //HTML5 Script to be run when an element is being dragged over a valid drop target
  105 + ondragstart, //HTML5 Script to be run at the start of a drag operation
  106 + ondrop, //HTML5 Script to be run when dragged element is being dropped
  107 + onscroll, //HTML5 Script to be run when an element's scrollbar is being scrolled
  108 + //Clipboard Events
  109 + oncopy, //HTML5 Fires when the user copies the content of an element
  110 + oncut, //HTML5 Fires when the user cuts the content of an element
  111 + onpaste, //HTML5 Fires when the user pastes some content in an element
  112 + //Media Events
  113 + onabort, //HTML5 Script to be run on abort
  114 + oncanplay, //HTML5 Script to be run when a file is ready to start playing (when it has buffered enough to begin)
  115 + oncanplaythrough, //HTML5 Script to be run when a file can be played all the way to the end without pausing for buffering
  116 + oncuechange, //HTML5 Script to be run when the cue changes in a <track> element
  117 + ondurationchange, //HTML5 Script to be run when the length of the media changes
  118 + onemptied, //HTML5 Script to be run when something bad happens and the file is suddenly unavailable (like unexpectedly disconnects)
  119 + onended, //HTML5 Script to be run when the media has reach the end (a useful event for messages like "thanks for listening")
  120 + onerror, //HTML5 Script to be run when an error occurs when the file is being loaded
  121 + onloadeddata, //HTML5 Script to be run when media data is loaded
  122 + onloadedmetadata, //HTML5 Script to be run when meta data (like dimensions and duration) are loaded
  123 + onloadstart, //HTML5 Script to be run just as the file begins to load before anything is actually loaded
  124 + onpause, //HTML5 Script to be run when the media is paused either by the user or programmatically
  125 + onplay, //HTML5 Script to be run when the media is ready to start playing
  126 + onplaying, //HTML5 Script to be run when the media actually has started playing
  127 + onprogress, //HTML5 Script to be run when the browser is in the process of getting the media data
  128 + onratechange, //HTML5 Script to be run each time the playback rate changes (like when a user switches to a slow motion or fast forward mode)
  129 + onseeked, //HTML5 Script to be run when the seeking attribute is set to false indicating that seeking has ended
  130 + onseeking, //HTML5 Script to be run when the seeking attribute is set to true indicating that seeking is active
  131 + onstalled, //HTML5 Script to be run when the browser is unable to fetch the media data for whatever reason
  132 + onsuspend, //HTML5 Script to be run when fetching the media data is stopped before it is completely loaded for whatever reason
  133 + ontimeupdate, //HTML5 Script to be run when the playing position has changed (like when the user fast forwards to a different point in the media)
  134 + onvolumechange, //HTML5 Script to be run each time the volume is changed which (includes setting the volume to "mute")
  135 + onwaiting, //HTML5 Script to be run when the media has paused but is expected to resume (like when the media pauses to buffer more data)
  136 + //Misc Events
  137 + onshow, //HTML5 Fires when a <menu> element is shown as a context menu
  138 + ontoggle. //HTML5 Fires when the user opens or closes the <details> element
  139 +
  140 +public define String
  141 + to_String
  142 + (
  143 + HtmlEvents e
  144 + ) =
  145 + if e is
  146 + {
  147 + onafterprint then "onafterprint", //HTML5 Script to be run after the document is printed
  148 + onbeforeprint then "onbeforeprint", //HTML5 Script to be run before the document is printed
  149 + onbeforeunload then "onbeforeunload", //HTML5 Script to be run when the document is about to be unloaded
  150 + onerror then "onerror", //HTML5 Script to be run when an error occurs
  151 + onhashchange then "onhashchange", //HTML5 Script to be run when there has been changes to the anchor part of the a URL
  152 + onload then "onload", // Fires after the page is finished loading
  153 + onmessage then "onmessage", //HTML5 Script to be run when the message is triggered
  154 + onoffline then "onoffline", //HTML5 Script to be run when the browser starts to work offline
  155 + ononline then "ononline", //HTML5 Script to be run when the browser starts to work online
  156 + onpagehide then "onpagehide", //HTML5 Script to be run when a user navigates away from a page
  157 + onpageshow then "onpageshow", //HTML5 Script to be run when a user navigates to a page
  158 + onpopstate then "onpopstate", //HTML5 Script to be run when the window's history changes
  159 + onresize then "onresize", //HTML5 Fires when the browser window is resized
  160 + onstorage then "onstorage", //HTML5 Script to be run when a Web Storage area is updated
  161 + onunload then "onunload", // Fires once a page has unloaded (or the browser window has been closed)
  162 + // Form element events
  163 + onblur then "onblur", // Fires the moment that the element loses focus
  164 + onchange then "onchange", // Fires the moment when the value of the element is changed
  165 + oncontextmenu then "oncontextmenu", //HTML5 Script to be run when a context menu is triggered
  166 + onfocus then "onfocus", // Fires the moment when the element gets focus
  167 + oninput then "oninput", //HTML5 Script to be run when an element gets user input
  168 + oninvalid then "oninvalid", //HTML5 Script to be run when an element is invalid
  169 + onreset then "onreset", // Fires when the Reset button in a form is clicked
  170 + onsearch then "onsearch", // Fires when the user writes something in a search field (for <input="search">)
  171 + onselect then "onselect", // Fires after some text has been selected in an element
  172 + onsubmit then "onsubmit", // Fires when a form is submitted
  173 + // Keyboard events (Not valid in base, bdo, br, frame, frameset, head, html, iframe, meta, param, script, style, and title elements.)
  174 + onkeydown then "onkeydown", // Fires when a user is pressing a key
  175 + onkeypress then "onkeypress", // Fires when a user presses a key
  176 + onkeyup then "onkeyup", // Fires when a user releases a key
  177 + // Mouse events (Not valid in base, bdo, br, frame, frameset, head, html, iframe, meta, param, script, style, and title elements.)
  178 + onclick then "onclick", // Fires on a mouse click on the element
  179 + ondblclick then "ondblclick", // Fires on a mouse double-click on the element
  180 + onmousedown then "onmousedown", // Fires when a mouse button is pressed down on an element
  181 + onmousemove then "onmousemove", // Fires when the mouse pointer is moving while it is over an element
  182 + onmouseout then "onmouseout", // Fires when the mouse pointer moves out of an element
  183 + onmouseover then "onmouseover", // Fires when the mouse pointer moves over an element
  184 + onmouseup then "onmouseup", // Fires when a mouse button is released over an element
  185 + onwheel then "onwheel", //HTML5 Fires when the mouse wheel rolls up or down over an element
  186 + //Drag Events
  187 + ondrag then "ondrag", //HMTL5 Script to be run when an element is dragged
  188 + ondragend then "ondragend", //HTML5 Script to be run at the end of a drag operation
  189 + ondragenter then "ondragenter", //HTML5 Script to be run when an element has been dragged to a valid drop target
  190 + ondragleave then "ondragleave", //HTML5 Script to be run when an element leaves a valid drop target
  191 + ondragover then "ondragover", //HTML5 Script to be run when an element is being dragged over a valid drop target
  192 + ondragstart then "ondragstart", //HTML5 Script to be run at the start of a drag operation
  193 + ondrop then "ondrop", //HTML5 Script to be run when dragged element is being dropped
  194 + onscroll then "onscroll", //HTML5 Script to be run when an element's scrollbar is being scrolled
  195 + //Clipboard Events
  196 + oncopy then "oncopy", //HTML5 Fires when the user copies the content of an element
  197 + oncut then "oncut", //HTML5 Fires when the user cuts the content of an element
  198 + onpaste then "onpaste", //HTML5 Fires when the user pastes some content in an element
  199 + //Media Events
  200 + onabort then "onabort", //HTML5 Script to be run on abort
  201 + oncanplay then "oncanplay", //HTML5 Script to be run when a file is ready to start playing (when it has buffered enough to begin)
  202 + oncanplaythrough then "oncanplaythrough", //HTML5 Script to be run when a file can be played all the way to the end without pausing for buffering
  203 + oncuechange then "oncuechange", //HTML5 Script to be run when the cue changes in a <track> element
  204 + ondurationchange then "ondurationchange", //HTML5 Script to be run when the length of the media changes
  205 + onemptied then "onemptied", //HTML5 Script to be run when something bad happens and the file is suddenly unavailable (like unexpectedly disconnects)
  206 + onended then "onended", //HTML5 Script to be run when the media has reach the end (a useful event for messages like "thanks for listening")
  207 + onerror then "onerror", //HTML5 Script to be run when an error occurs when the file is being loaded
  208 + onloadeddata then "onloadeddata", //HTML5 Script to be run when media data is loaded
  209 + onloadedmetadata then "onloadedmetadata", //HTML5 Script to be run when meta data (like dimensions and duration) are loaded
  210 + onloadstart then "onloadstart", //HTML5 Script to be run just as the file begins to load before anything is actually loaded
  211 + onpause then "onpause", //HTML5 Script to be run when the media is paused either by the user or programmatically
  212 + onplay then "onplay", //HTML5 Script to be run when the media is ready to start playing
  213 + onplaying then "onplaying", //HTML5 Script to be run when the media actually has started playing
  214 + onprogress then "onprogress", //HTML5 Script to be run when the browser is in the process of getting the media data
  215 + onratechange then "onratechange", //HTML5 Script to be run each time the playback rate changes (like when a user switches to a slow motion or fast forward mode)
  216 + onseeked then "onseeked", //HTML5 Script to be run when the seeking attribute is set to false indicating that seeking has ended
  217 + onseeking then "onseeking", //HTML5 Script to be run when the seeking attribute is set to true indicating that seeking is active
  218 + onstalled then "onstalled", //HTML5 Script to be run when the browser is unable to fetch the media data for whatever reason
  219 + onsuspend then "onsuspend", //HTML5 Script to be run when fetching the media data is stopped before it is completely loaded for whatever reason
  220 + ontimeupdate then "ontimeupdate", //HTML5 Script to be run when the playing position has changed (like when the user fast forwards to a different point in the media)
  221 + onvolumechange then "onvolumechange", //HTML5 Script to be run each time the volume is changed which (includes setting the volume to "mute")
  222 + onwaiting then "onwaiting", //HTML5 Script to be run when the media has paused but is expected to resume (like when the media pauses to buffer more data)
  223 + //Misc Events
  224 + onshow then "onshow", //HTML5 Fires when a <menu> element is shown as a context menu
  225 + ontoggle then "ontoggle"
  226 + }.
  227 +
  228 +public type Cross_origin:
  229 + anonymous,
  230 + use_credentials
  231 +.
  232 +
  233 +public define String
  234 + to_String
  235 + (
  236 + Cross_origin c_origin
  237 + )=
  238 + if c_origin is
  239 + {
  240 + anonymous then "anonymous",
  241 + use_credentials then "use-credentials"
  242 + }
  243 +.
  244 +
  245 +public type Referrer_policy:
  246 + no_referrer,
  247 + no_referrer_when_downgrade,
  248 + origin,
  249 + origin_when_cross_origin,
  250 + unsafe_url
  251 +.
  252 +
  253 +public define String
  254 + to_String
  255 + (
  256 + Referrer_policy r_policy
  257 + )=
  258 + if r_policy is
  259 + {
  260 + no_referrer then "no-referrer",
  261 + no_referrer_when_downgrade then "no-referrer-when-downgrade",
  262 + origin then "origin",
  263 + origin_when_cross_origin then "origin-when-cross-origin",
  264 + unsafe_url then "unsafe-url"
  265 + }
  266 +.
  267 +
  268 +public type CSS_File:
  269 + css_file(String file_name, CSS_File_Media).
  270 +
  271 +public type JS_Attribute:
  272 + async,
  273 + crossorigin(Cross_origin), //Specifies how the element handles cross-origin requests
  274 + defer, //Specifies the location of the linked document
  275 + integrity(String),
  276 + nomodule(Bool),
  277 + referrerpolicy(Referrer_policy), //Specifies which referrer to use when fetching the resource
  278 +// src(String), //Specifies on what device the linked document will be displayed
  279 + type(String),
  280 + attr(String, String).
  281 +
  282 +public define String
  283 + to_String
  284 + (
  285 + JS_Attribute attr
  286 + )=
  287 + if attr is
  288 + {
  289 + async then "async",
  290 + crossorigin(c_org) then "crossorigin=\""+to_String(c_org)+"\"", //Specifies how the element handles cross-origin requests
  291 + defer then "defer", //Specifies the location of the linked document
  292 + integrity(filehash) then "integrity=\""+filehash+"\"",
  293 + nomodule(value) then "nomodule=\""+if value then "True\"" else "False\"",
  294 + referrerpolicy(r_pol) then "referrerpolicy=\""+ to_String(r_pol)+ "\"", //Specifies which referrer to use when fetching the resource
  295 + //src(url) then "src=\""+url+"\"", //Specifies on what device the linked document will be displayed
  296 + type(_type) then "type=\""+_type+"\"",
  297 + attr(key, value) then key+"=\""+value+"\""
  298 + }
  299 +.
  300 +
  301 +public type JS_File:
  302 + js_file(String file_name,
  303 + List(JS_Attribute) attributes).
  304 +
  305 +public type Script:
  306 + script( String script_type,
  307 + String content).
  308 +
  309 +public define JS_File js_file(String file_name) = js_file(file_name, []).
  310 +public define CSS_File css_file(String file_name)= css_file(file_name, all).
  311 +
  312 +public type CoreAttrs:...
  313 +public type HTML_Partial_Content:...
  314 +public type HTML_Body:...
  315 +public type HTML_Off_Form:...
  316 +public type HTML_tooltip:...
  317 +public type HTTP_Answer:...
  318 +
  319 +
  320 +public type Text_Option:
  321 + core_attrs(List(CoreAttrs)),
  322 + size(Int), // size of character font to use
  323 + font(String), // name of character font to use (such as "helvetica",...)
  324 + color(RGB), // color to be used for characters
  325 + italic,
  326 + oblique,
  327 + small_capitals,
  328 + bold,
  329 + underlined,
  330 + left_justified,
  331 + right_justified,
  332 + justified, // justified on both sides
  333 + line_through,
  334 + nowrap,
  335 + class(String), //CSS class
  336 + id(String),
  337 + style(String),
  338 + title(String),
  339 + attr(String, String).
  340 +
  341 +public type CSS_Style:
  342 + text_options(List(Text_Option)).
  343 +
  344 +// Following types are define to prohib any arguments order error
  345 +
  346 +/**
  347 + * String value for 'id' attribut
  348 + */
  349 +public type HTML_Id:
  350 + html_Id(String id).
  351 +
  352 +/**
  353 + * String value for 'class' attribut
  354 + */
  355 +public type HtmlClass:
  356 + htmlClass(String class).
  357 +
  358 +/**
  359 + * Name used in arguments list when form is submitted.
  360 + */
  361 +public type WebArgName:
  362 + wan(String name).
  363 +
  364 +/**
  365 + * Value passed to arguments list when form is submitted (for RadioButton and CheckBox).
  366 + */
  367 +public type WebArgValue:
  368 + wav(String value).
  369 +
  370 +/**
  371 + * Initial value of an input field.
  372 + */
  373 +public type InitialValue:
  374 + init(String value).
  375 +
  376 +public type HTML_Help_Position:
  377 + left,
  378 + right
  379 +.
  380 +
  381 +public type HTML_Help:
  382 + no_help, //no help text available
  383 + tooltip(HTML_tooltip,
  384 + HTML_Help_Position)
  385 +.
  386 +
  387 +public type HTML_Label:
  388 + no_label,
  389 + label(
  390 + String text, //label to show
  391 + HTML_Help help //HTML help (tooltip with ajax call or not)
  392 + )
  393 +.
  394 +
  395 +public type InputAttrs:
  396 + id (String),
  397 + class (String),
  398 + style (String),
  399 + title (String),
  400 + lang (String),
  401 + dir (Reading_Way),
  402 + accesskey (Word8),
  403 + tabindex (Int),
  404 + attr (String, String),
  405 + event (HtmlEvents, String),
  406 + //HTML5
  407 + data (String name, String value).
  408 +
  409 +public type TextAreaOption:
  410 + input_attrs(List(InputAttrs)),
  411 + disabled,
  412 + read_only,
  413 + wrap_lines
  414 +.
  415 +
  416 +public type Actioner_Local_Action:
  417 + close_window.
  418 +
  419 +public type Actioner_Connection:
  420 + same, // use same type of connection as current page
  421 + http, // use non secured connection
  422 + https. // use secured connection
  423 +
  424 +public type Other_Window_Option:
  425 + resizable, // the new window may be resized by the client
  426 + scrollbars, // the new window has scrollbars
  427 + width(Int), // the new window has the specified width
  428 + height(Int). // the new window has the specified height
  429 +
  430 +public type Actioner_Target:
  431 + same,
  432 + same (String label),
  433 + other(String window_name, List(Other_Window_Option)).
  434 +
  435 +public type Actioner_Aspect:
  436 + link (List(Text_Option), String text, Maybe(String) name),// hypertext link
  437 + img_link (List(CoreAttrs),String img_url, String alt_text),
  438 + push_button (List(CoreAttrs),String text),
  439 + button (String url_off, String url_on), // rollover button
  440 + button (String url_off, String url_on, Int w, Int h), // idem with size
  441 + submit (List(CoreAttrs),String text),
  442 + immediate_selector (List(CoreAttrs), String name, Int size, List((List(CoreAttrs),WebArgValue,String)) choices, Maybe(InitialValue) selected, String onchange_fn),
  443 + html (List(CoreAttrs), HTML_Off_Form).
  444 +
  445 +public define Actioner_Aspect html(HTML_Off_Form content) = html([], content).
  446 +
  447 +public type BackgroundOption:
  448 + repeat, // repeat the background in both directions
  449 + repeat_horizontal, // repeat the background only horizontally
  450 + repeat_vertical, // repeat the background only verticall
  451 + no_repeat, // don't repeat the background
  452 + center.
  453 +
  454 +public type Cell_Option:
  455 + core_attrs(List(CoreAttrs)),
  456 + left, // put the content of the cell on the left
  457 + h_center, // center the content of the cell horizontally
  458 + right, // put the content of the cell on the right
  459 + top, // put the content of the cell upwards
  460 + v_center, // center the content of tye cell vertically,
  461 + bottom, // put the content of the cell downwards
  462 + base_line, // align the content vertically according to base lines
  463 + background_color(RGB),
  464 + background_image(String url, BackgroundOption),
  465 + width(Int), // sets a minimal width for the cell
  466 + percentage_width(Int),
  467 + height(Int), // sets a minimal height for the cell
  468 + columns(Int), // lets the cell span over several columns
  469 + rows(Int), // lets the cell span over several rows
  470 + nowrap, // do not allow text wrapping within the cell
  471 + style(String), // in case nothing above is suitable
  472 + class(String class_name).
  473 +
  474 +public type HTML_Cell($T):
  475 + cell(List(Cell_Option) options, $T content).
  476 +
  477 +public type HTML_Footer_Row($T):
  478 + empty,
  479 + footer_row(List(Cell_Option) options, List(HTML_Cell($T)) cells).
  480 +
  481 +public type HTML_Row($T):
  482 + empty,
  483 + row(List(Cell_Option) options, List(HTML_Cell($T)) cells).
  484 +
  485 +public type HTML_Header_Cell($T):
  486 + header_cell(List(Cell_Option) options, $T content).
  487 +
  488 +public type HTML_Header_Row($T):
  489 + empty,
  490 + header_row(List(Cell_Option) options, List(HTML_Header_Cell($T)) cells).
  491 +
  492 +
  493 +public type Table_Option:
  494 + core_attrs(List(CoreAttrs)),
  495 + background_color(RGB), // applied to all cells in the table
  496 + background_image(String url),
  497 + border(Int width_of_outer_edge, // if not present, all values are 0
  498 + Int width_of_top_of_relief,
  499 + Int width_of_inner_edge,
  500 + RGB border_color),
  501 + width(Int), // sets a minimal width for the table
  502 + percentage_width(Int),
  503 + attr(String name, String value),
  504 + class(String class_name).
  505 +
  506 +
  507 +public type HTML_In_Form:
  508 + empty,
  509 + literal_pt (Printable_tree),
  510 + literal (String),
  511 + sequence (List(HTML_In_Form) items),
  512 + text (List(CoreAttrs), String the_text),
  513 + preformated (List(Text_Option), String),
  514 + paragraph (List(Text_Option), List(HTML_In_Form) content),
  515 + image (List(CoreAttrs), String url, String alternate),
  516 + image (List(CoreAttrs), String url, String alternate, Int width, Int height),
  517 + table (List(Table_Option), HTML_Header_Row(HTML_In_Form), List(HTML_Row(HTML_In_Form)), HTML_Footer_Row(HTML_In_Form)),
  518 + center (HTML_In_Form),
  519 + mail_to (String email, HTML_In_Form element),
  520 + scroller (Int width, Int height,
  521 + Int content_width, Int content_height,
  522 + HTML_In_Form content),
  523 + actioner (Actioner_Connection, Actioner_Target, Actioner_Aspect,
  524 + WEB_Action_Name action_name, List((String,String)) extra_ops,
  525 + List(Actioner_Local_Action)),
  526 + foreign_link_new (Actioner_Target, Actioner_Aspect, String url),
  527 + foreign_link (List(Text_Option), String url),
  528 + foreign_link (List(Text_Option), String url, String name),
  529 + private_download (String abs_path, String name, String extra_ext,
  530 + Maybe((String,List((String,String)))) action),
  531 + text_input (List(CoreAttrs), HTML_Label label, HTML_Id id, WebArgName name, InitialValue init, Int width),
  532 + text_input_ro (List(CoreAttrs), HTML_Label label, HTML_Id id, WebArgName name, InitialValue init, Int width),
  533 + password_input (List(CoreAttrs), HTML_Label label, HTML_Id id, WebArgName name, InitialValue init, Int width),
  534 + text_area (List(TextAreaOption), HTML_Label label, HTML_Id id, WebArgName name, InitialValue init, Int width, Int height),
  535 + file_upload (List(CoreAttrs), HTML_Label label, HTML_Id id, WebArgName name, Int width),
  536 + selector (List(CoreAttrs), HTML_Label label, HTML_Id id, WebArgName name, Int size, List(String) choices),
  537 + selector (List(CoreAttrs), HTML_Label label, HTML_Id id, WebArgName name, Int size, List(String) choices, InitialValue selected),
  538 + // List((String,String)) = List((code,name)) where :
  539 + // code is the web-arg value
  540 + // name appears in selector
  541 + selector_c (List(CoreAttrs), HTML_Label label, HTML_Id id, WebArgName name, Int size, List((List(CoreAttrs),WebArgValue,String)) choices),
  542 + selector_c (List(CoreAttrs), HTML_Label label, HTML_Id id, WebArgName name, Int size, List((List(CoreAttrs),WebArgValue,String)) choices, InitialValue selected),
  543 + radio_button (List(CoreAttrs), HTML_Label label, HTML_Id id, WebArgName name, WebArgValue value, Bool checked),
  544 + radio_button_r (List(CoreAttrs), HTML_Label label, HTML_Id id, WebArgName name, WebArgValue value, Bool checked),
  545 + check_box (List(CoreAttrs), HTML_Label label, HTML_Id id, WebArgName name, Bool checked),
  546 + check_box_r (List(CoreAttrs), HTML_Label label, HTML_Id id, WebArgName name, Bool checked),
  547 + div (List(CoreAttrs), List(HTML_In_Form) content),
  548 + div_empty (List(CoreAttrs)),
  549 + hidden (HTML_Id id, WebArgName name, WebArgValue value),
  550 + partial (HTML_Partial_Content),
  551 + br,
  552 + progress (List(CoreAttrs), Int value, Int max),
  553 + ol (List(CoreAttrs), List(HTML_In_Form) content),
  554 + ul (List(CoreAttrs), List(HTML_In_Form) content),
  555 + li (List(CoreAttrs), List(HTML_In_Form) content),
  556 + button (List(CoreAttrs), List(HTML_In_Form) content),
  557 + i (List(CoreAttrs), String text),
  558 + span (List(CoreAttrs), String text),
  559 + hr (List(CoreAttrs))
  560 +.
  561 +
  562 +public type HTML_Size:
  563 + absolute(Int), // in pixels
  564 + percentage(Int).
  565 +
  566 +public type A_href:
  567 + href(String href),
  568 + href(WEB_Action_Name action, List((String,String)) extra_ops)
  569 +.
  570 +
  571 +public define A_href
  572 + href
  573 + (
  574 + WEB_Action_Name action,
  575 + (String,String) extra_ops
  576 + )=
  577 + href(action, [extra_ops])
  578 +.
  579 +
  580 +public type A_target:
  581 + _blank,
  582 + _self,
  583 + _parent,
  584 + _top,
  585 + framename(String name)
  586 +.
  587 +
  588 +
  589 +public type HTML_Off_Form:
  590 + a (List(CoreAttrs), A_href, A_target, List(HTML_Off_Form) content),
  591 + empty,
  592 + literal_pt (Printable_tree),
  593 + literal (String),
  594 + sequence (List(HTML_Off_Form) items),
  595 + text (List(CoreAttrs), String the_text),
  596 +
  597 + //table (List(Table_Option), HTML_Header_Row(HTML_Off_Form), List(HTML_Row(HTML_Off_Form)), HTML_Footer_Row(HTML_Off_Form)),
  598 +
  599 + actioner (Actioner_Connection, Actioner_Target, Actioner_Aspect,
  600 + WEB_Action_Name action_name, List((String,String)) extra_ops,
  601 + List(Actioner_Local_Action)),
  602 + actioner (Actioner_Connection, Actioner_Target, Actioner_Aspect,
  603 + WEB_Action_Name action_name, List((String,String)) extra_ops,
  604 + List(Actioner_Local_Action), String form_name),
  605 + foreign_link_new (Actioner_Target, Actioner_Aspect, String url),
  606 + //foreign_link (List(Text_Option), String url),
  607 + foreign_link (List(Text_Option), String url, String name),
  608 + private_download (String abs_path, String name, String extra_ext,
  609 + Maybe((String,List((String,String)))) action),
  610 + //label (String name),
  611 + //form (HTML_Id form_id, List(CoreAttrs), List(HTML_In_Form) content),
  612 +// form (HTML_Id form_id, List(CoreAttrs),
  613 +// WEB_Action_Name action, List((String,String)) extra_ops,
  614 +// List(HTML_In_Form) content),
  615 + //in_form (HTML_Id form_id, HTML_In_Form content),
  616 + div (List(CoreAttrs), List(HTML_Partial_Content) p_content),
  617 + iframe (List(CoreAttrs),
  618 + List(CSS_Style) /*styles*/,
  619 + List(CSS_File) /*css_files*/,
  620 + List(JS_File) /*js_files*/,
  621 + HTML_Body /*body*/),
  622 + partial (HTML_Partial_Content),
  623 + //progress (List(CoreAttrs), Int value, Int max),
  624 + //i (List(CoreAttrs), String text),
  625 + html_tag (String tag_name, List(CoreAttrs), List(HTML_Off_Form) content),
  626 + html_void_tag (String tag_name, List(CoreAttrs))
  627 +.
  628 +
  629 +
  630 +public type Rel_attr:
  631 + alternate,
  632 + author,
  633 + dns_prefetch,
  634 + help,
  635 + icon,
  636 + license,
  637 + next,
  638 + pingback,
  639 + preconnect,
  640 + prefetch,
  641 + preload,
  642 + prerender,
  643 + prev,
  644 + search,
  645 + stylesheet
  646 +.
  647 +
  648 +public define String
  649 + to_String
  650 + (
  651 + Rel_attr r_attr
  652 + )=
  653 + if r_attr is
  654 + {
  655 + alternate then "alternate",
  656 + author then "author",
  657 + dns_prefetch then "dns_prefetch",
  658 + help then "help",
  659 + icon then "icon",
  660 + license then "license",
  661 + next then "next",
  662 + pingback then "pingback",
  663 + preconnect then "preconnect",
  664 + prefetch then "prefetch",
  665 + preload then "preload",
  666 + prerender then "prerender",
  667 + prev then "prev",
  668 + search then "search",
  669 + stylesheet then "stylesheet"
  670 + }
  671 +.
  672 +
  673 +public type Link_attr:
  674 + crossorigin(Cross_origin), //Specifies how the element handles cross-origin requests
  675 + href(String), //Specifies the location of the linked document
  676 + media(String), //Specifies on what device the linked document will be displayed
  677 + referrerpolicy(Referrer_policy), //Specifies which referrer to use when fetching the resource
  678 + rel(Rel_attr),
  679 + sizes(String),
  680 + type(String),
  681 + as(String),
  682 + integrity(String),
  683 + event(HtmlEvents, String)
  684 +.
  685 +
  686 +public define String
  687 + to_String
  688 + (
  689 + Link_attr attr
  690 + )=
  691 + if attr is
  692 + {
  693 + crossorigin(c_origin) then "crossorigin=\""+to_String(c_origin)+"\"",
  694 + href(url) then "href=\""+url+"\"",
  695 + media(media) then "media=\""+media+"\"",
  696 + referrerpolicy(r_policy) then "referrerpolicy=\""+to_String(r_policy)+"\"",
  697 + rel(rel_attr) then "rel=\""+to_String(rel_attr)+"\"",
  698 + sizes(_sizes) then "sizes=\""+_sizes+"\"",
  699 + type(_type) then "type=\""+_type+"\"",
  700 + as(_as) then "as=\""+_as+"\"",
  701 + integrity(_integrity) then "integrity=\""+_integrity+"\"",
  702 + event(_event, code) then to_String(_event)+"=\""+code+"\"",
  703 + }
  704 +.
  705 +
  706 +public define String
  707 + to_String
  708 + (
  709 + List(Link_attr) attrs
  710 + )=
  711 + join(" ", map((Link_attr attr) |->
  712 + to_String(attr),
  713 + attrs))
  714 +.
  715 +
  716 +
  717 +
  718 +public type HTML_Meta:
  719 + keywords (List(String)),
  720 + refresh (Actioner_Connection connection,
  721 + Actioner_Target target,
  722 + WEB_Action_Name action,
  723 + Int delay), // in seconds
  724 + refresh (String url, Int delay), // in seconds
  725 + meta (String name, String content),
  726 + http_equiv (String name, String content),
  727 + generic_meta (List((String,String))),
  728 + literal (String).
  729 +
  730 +public type HTML_Head_Tag:
  731 + meta(HTML_Meta),
  732 + title(String),
  733 + js(JS_File),
  734 + js_inline(Script),
  735 + css(CSS_File),
  736 + css_inline(String css_styles), /* Note: <style> and </style> tags are not necessaries */
  737 + link(List(Link_attr) link_attrs)
  738 +.
  739 +
  740 +public type HTML_Partial_Content:
  741 + partial_content
  742 + (
  743 + List(HTML_Head_Tag),
  744 + HTML_Off_Form
  745 + )
  746 +.
  747 +
  748 +public type HTML_Body:
  749 + body(List(CoreAttrs) attrs, List(HTML_Off_Form) content).
  750 +
  751 +public define HTML_Body
  752 + body
  753 + (
  754 + List(CoreAttrs) attrs,
  755 + HTML_Off_Form content
  756 + )=
  757 + body(attrs, [content])
  758 +.
  759 +
  760 +public define HTML_Body
  761 + body
  762 + (
  763 + CoreAttrs attr,
  764 + HTML_Off_Form content
  765 + )=
  766 + body([attr], [content])
  767 +.
  768 +
  769 +public define HTML_Body
  770 + body
  771 + (
  772 + CoreAttrs attr,
  773 + List(HTML_Off_Form) content
  774 + )=
  775 + body([attr], content)
  776 +.
  777 +
  778 +public define HTML_Body
  779 + body
  780 + (
  781 + HTML_Off_Form content
  782 + )=
  783 + body([], [content])
  784 +.
  785 +
  786 +
  787 +public type HTML_tooltip:
  788 + html_tooltip
  789 + (
  790 + String title,
  791 + String keyword,
  792 + Int width,
  793 + ),
  794 + html_tooltip_ext
  795 + (
  796 + String title,
  797 + String extend_type,
  798 + String class_suffix,
  799 + List((String, String)) ext_args
  800 + ),
  801 + html_tooltip_ext //same without class suffix. This means we use awesome font
  802 + (
  803 + String title,
  804 + String extend_type,
  805 + List((String, String)) ext_args
  806 + ),
  807 + html_tooltip
  808 + (
  809 + String title,
  810 + WEB_Action_Name wan,
  811 + List((String, String)) ext_args
  812 + ).
  813 +
  814 +
  815 +
  816 +public type CoreAttrs:
  817 + empty,
  818 + id (String), //A unique identifier for the element.
  819 + //There must not be multiple elements in a document that have the same id value.
  820 + class (String), //A name of a classification, or list of names of classifications, to which the element belongs
  821 + style (String), //Specifies zero or more CSS declarations that apply to the element [CSS].
  822 + title (String), //Advisory information associated with the element.
  823 + lang (String), //Specifies the primary language for the contents of the element and for any of the element’s attributes that contain text.
  824 + dir (Reading_Way), //Specifies the element’s text directionality.
  825 + accesskey (Word8), //A key label or list of key labels with which to associate the element; each key label represents
  826 + //a keyboard shortcut which UAs can use to activate the element or give focus to the element.
  827 + tabindex (Int), //Specifies whether the element represents an element that is is focusable (that is, an element which is part of the
  828 + //sequence of focusable elements in the document), and the relative order of the element in the sequence of focusable
  829 + //elements in the document.
  830 + //Anubis specific
  831 + attr (String, String), //intended to provide unknown attritute
  832 + bool_attr (Bool, String), //like checked in checkbox the attribute 'checked' is here if true else nothing
  833 + event (HtmlEvents, String),
  834 + tooltip (HTML_tooltip),
  835 +
  836 + //HTML5
  837 + data (String name, String value),
  838 + contenteditable(Bool), //Specifies whether the contents of the element are editable
  839 + contextmenu(String), //Identifies a menu with which to associate the element as a context menu.
  840 + draggable(Bool), //Specifies whether the element is draggable.
  841 + enterkeyhint(String), //Specifies the text of the enter-key on a virtual keyboard
  842 + hidden(Bool), //Specifies that the element represents an element that is not yet, or is no longer, relevant.
  843 + inert, //Specifies that the browser should ignore this section
  844 + inputmode(String), //Specifies the mode of a virtual keyboard
  845 + popover, //Specifies a popover element
  846 + spellcheck(Bool), //Specifies whether the element represents an element whose contents are subject to spell checking and grammar checking.
  847 + translate(Bool) //Specifies whether the content of an element should be translated or not
  848 +.
  849 +
  850 +public define CoreAttrs colspan(Int value) = attr("colspan", to_String(value)).
  851 +public define CoreAttrs rowspan(Int value) = attr("rowspan", to_String(value)).
  852 +public define CoreAttrs headers(String header_id) = attr("headers", header_id).
  853 +public define CoreAttrs width(Int value) = attr("width", to_String(value)).
  854 +public define CoreAttrs height(Int value) = attr("height", to_String(value)).
  855 +public define CoreAttrs width_px(Int value) = attr("width", to_String(value)+"px").
  856 +public define CoreAttrs height_px(Int value) = attr("height", to_String(value)+"px").
  857 +public define CoreAttrs alt(String value) = attr("alt", value).
  858 +public define CoreAttrs size(Int value) = attr("size", to_String(value)).
  859 +
  860 +public define CoreAttrs boolean(String name) = attr(name, name).
  861 +
  862 +public type HTTP_Answer:
  863 + html_page (HTTP_Status /*http_status*/,
  864 + List(HTML_Head_Tag) /*html <head> tags*/,
  865 + HTML_Body /*body*/),
  866 + html_page (HTTP_Status /*http_status*/,
  867 + String /*title*/,
  868 + List(HTML_Head_Tag) /*meta_tags*/,
  869 + List(CSS_Style) /*styles*/,
  870 + List(CSS_File) /*css_files*/,
  871 + List(JS_File) /*js_files*/,
  872 + List(Script) /*script*/,
  873 + HTML_Body /*body*/),
  874 + plain_text (HTTP_Status /*http_status*/,
  875 + String /*text*/),
  876 + custom_text (HTTP_Status /*http_status*/,
  877 + MIME /*mime_type*/,
  878 + String /*content*/),
  879 + custom_binary(HTTP_Status /*http_status*/,
  880 + MIME /*mime_type*/,
  881 + ByteArray /*content*/,
  882 + List(HTTP_header)/*other headers*/),
  883 + custom_tree (HTTP_Status /*http_status*/,
  884 + MIME /*mime_type*/,
  885 + Printable_tree /*content*/),
  886 + json (HTTP_Status, /*http_status*/
  887 + JsonValue), /*json value*/
  888 + send_file ( String file_path, //file to send to client. //TODO add call back for before, during, after send
  889 + Content_Disposition c_disposition),
  890 + http_raw (Printable_tree),
  891 + html_content (HTTP_Status /*http_status*/,
  892 + HTML_Off_Form),
  893 + html_partial_content (HTTP_Status /*http_status*/,
  894 + HTML_Partial_Content)
  895 +.
  896 +
  897 +public define HTTP_Answer
  898 + no_content
  899 + =
  900 + plain_text(http_no_content, "")
  901 +.
  902 +
  903 +
web/types/web_stepper.anubis
@@ -71,8 +71,8 @@ public type WEB_Step: @@ -71,8 +71,8 @@ public type WEB_Step:
71 String thread, //thread name like general, VoIP, etc. 71 String thread, //thread name like general, VoIP, etc.
72 List(WEB_Step) childs, 72 List(WEB_Step) childs,
73 (WEB_Step_Session stp_session) -> WEB_Step_Status status, //return the step status 73 (WEB_Step_Session stp_session) -> WEB_Step_Status status, //return the step status
74 - (WEB_Step_Session stp_session, (String)->String _T) -> HTML_Partial_Content view, //return the view according to WEB_Step_Session  
75 - (WEB_Step_Session stp_session, (String)->String _T) -> HTML_Partial_Content buttons, 74 + (WEB_Step_Session stp_session, (String)->String _T) -> HTML view, //return the view according to WEB_Step_Session
  75 + (WEB_Step_Session stp_session, (String)->String _T) -> HTML buttons,
76 (WEB_Step_Session stp_session, WEB_Session web_session) -> WEB_Step_Session submit, 76 (WEB_Step_Session stp_session, WEB_Session web_session) -> WEB_Step_Session submit,
77 ) 77 )
78 . 78 .
web/web_stepper.anubis
@@ -85,7 +85,7 @@ public define Maybe(WEB_Step) @@ -85,7 +85,7 @@ public define Maybe(WEB_Step)
85 } 85 }
86 . 86 .
87 87
88 -public define HTML_Partial_Content 88 +public define HTML
89 web_stepper_button 89 web_stepper_button
90 ( 90 (
91 WEB_Step _step, 91 WEB_Step _step,
@@ -97,7 +97,7 @@ public define HTML_Partial_Content @@ -97,7 +97,7 @@ public define HTML_Partial_Content
97 _step.buttons(stp_session, _T))) 97 _step.buttons(stp_session, _T)))
98 . 98 .
99 99
100 -public define HTML_Partial_Content 100 +public define HTML
101 web_stepper_main_view 101 web_stepper_main_view
102 ( 102 (
103 WEB_Step _step, 103 WEB_Step _step,
@@ -109,7 +109,7 @@ public define HTML_Partial_Content @@ -109,7 +109,7 @@ public define HTML_Partial_Content
109 _step.view(stp_session, _T))) 109 _step.view(stp_session, _T)))
110 . 110 .
111 111
112 -public define HTML_Partial_Content 112 +public define HTML
113 web_stepper_message 113 web_stepper_message
114 ( 114 (
115 WEB_Step_Session stp_session, 115 WEB_Step_Session stp_session,
@@ -125,7 +125,7 @@ public define HTML_Partial_Content @@ -125,7 +125,7 @@ public define HTML_Partial_Content
125 show_page_message(page_msg))) 125 show_page_message(page_msg)))
126 . 126 .
127 127
128 -public define HTML_Partial_Content 128 +public define HTML
129 web_stepper_full_description 129 web_stepper_full_description
130 ( 130 (
131 WEB_Step current_step, 131 WEB_Step current_step,
@@ -157,7 +157,7 @@ public define Bool @@ -157,7 +157,7 @@ public define Bool
157 step.index < current_step.index 157 step.index < current_step.index
158 . 158 .
159 159
160 -public define HTML_Partial_Content 160 +public define HTML
161 web_stepper_crumble 161 web_stepper_crumble
162 ( 162 (
163 WEB_Stepper _stepper, 163 WEB_Stepper _stepper,
@@ -196,7 +196,7 @@ public define HTML_Partial_Content @@ -196,7 +196,7 @@ public define HTML_Partial_Content
196 ) 196 )
197 . 197 .
198 198
199 -public define HTML_Partial_Content 199 +public define HTML
200 web_stepper_view 200 web_stepper_view
201 ( 201 (
202 WEB_Stepper _stepper, 202 WEB_Stepper _stepper,
@@ -227,7 +227,7 @@ public define HTML_Partial_Content @@ -227,7 +227,7 @@ public define HTML_Partial_Content
227 227
228 . 228 .
229 229
230 -public define HTML_Partial_Content 230 +public define HTML
231 web_stepper_view 231 web_stepper_view
232 ( 232 (
233 WEB_Stepper stepper, 233 WEB_Stepper stepper,
@@ -316,7 +316,7 @@ public define WEB_Controller_Result @@ -316,7 +316,7 @@ public define WEB_Controller_Result
316 } 316 }
317 . 317 .
318 318
319 -public define HTML_Partial_Content 319 +public define HTML
320 stepper_submit_button 320 stepper_submit_button
321 ( 321 (
322 String label, 322 String label,
@@ -328,7 +328,7 @@ public define HTML_Partial_Content @@ -328,7 +328,7 @@ public define HTML_Partial_Content
328 jquery_button(jquery_img_button(icn16_check, label, "", jQuery_actioner(same, jqscript("stepper_submit("+url+");")), left)) 328 jquery_button(jquery_img_button(icn16_check, label, "", jQuery_actioner(same, jqscript("stepper_submit("+url+");")), left))
329 . 329 .
330 330
331 -public define HTML_Partial_Content 331 +public define HTML
332 stepper_submit_button 332 stepper_submit_button
333 ( 333 (
334 String label, 334 String label,
web/widgets.anubis
@@ -11,7 +11,7 @@ read tools/basis.anubis @@ -11,7 +11,7 @@ read tools/basis.anubis
11 11
12 read xlib/web/making_a_web_site.anubis 12 read xlib/web/making_a_web_site.anubis
13 13
14 -public define HTML_In_Form 14 +public define HTML
15 ip_input 15 ip_input
16 ( 16 (
17 HTML_Id the_id, 17 HTML_Id the_id,
@@ -36,7 +36,7 @@ public define HTML_In_Form @@ -36,7 +36,7 @@ public define HTML_In_Form
36 36
37 // --------------------------------------------------------------------------- 37 // ---------------------------------------------------------------------------
38 38
39 -public define HTML_In_Form 39 +public define HTML
40 partial_ip_input 40 partial_ip_input
41 ( 41 (
42 HTML_Id the_id, 42 HTML_Id the_id,
web/widgets/button.anubis
@@ -18,7 +18,7 @@ read tools/printable_tree.anubis @@ -18,7 +18,7 @@ read tools/printable_tree.anubis
18 18
19 19
20 20
21 -public define HTML_Partial_Content 21 +public define HTML
22 img_button_flink 22 img_button_flink
23 ( 23 (
24 String img_path, 24 String img_path,
@@ -26,9 +26,9 @@ public define HTML_Partial_Content @@ -26,9 +26,9 @@ public define HTML_Partial_Content
26 Actioner_Target target, 26 Actioner_Target target,
27 String url 27 String url
28 )= 28 )=
29 - partial_content(foreign_link_new(target, img_link(core_attrs, img_path, ""), url)). 29 + foreign_link_new(target, img_link(core_attrs, img_path, ""), url).
30 30
31 -public define HTML_Partial_Content 31 +public define HTML
32 img_button_flink 32 img_button_flink
33 ( 33 (
34 String img_path, 34 String img_path,
@@ -37,7 +37,7 @@ public define HTML_Partial_Content @@ -37,7 +37,7 @@ public define HTML_Partial_Content
37 )= 37 )=
38 img_button_flink(img_path, [], target, url). 38 img_button_flink(img_path, [], target, url).
39 39
40 -public define HTML_Partial_Content 40 +public define HTML
41 img_button_flink 41 img_button_flink
42 ( 42 (
43 String img_path, 43 String img_path,
@@ -45,7 +45,7 @@ public define HTML_Partial_Content @@ -45,7 +45,7 @@ public define HTML_Partial_Content
45 )= 45 )=
46 img_button_flink(img_path, [], same, url). 46 img_button_flink(img_path, [], same, url).
47 47
48 -public define HTML_Partial_Content 48 +public define HTML
49 img_button 49 img_button
50 ( 50 (
51 String img_path, 51 String img_path,
@@ -54,10 +54,10 @@ public define HTML_Partial_Content @@ -54,10 +54,10 @@ public define HTML_Partial_Content
54 WEB_Action_Name url, 54 WEB_Action_Name url,
55 List((String, String)) extra_ops 55 List((String, String)) extra_ops
56 )= 56 )=
57 - partial_content(actioner(same, target, img_link(core_attrs+[style("cursor: pointer")], img_path, ""), url, extra_ops)). 57 + actioner(same, target, img_link(core_attrs+[style("cursor: pointer")], img_path, ""), url, extra_ops).
58 58
59 59
60 -public define HTML_Partial_Content 60 +public define HTML
61 img_button 61 img_button
62 ( 62 (
63 String img_path, 63 String img_path,
@@ -66,9 +66,9 @@ public define HTML_Partial_Content @@ -66,9 +66,9 @@ public define HTML_Partial_Content
66 String url, 66 String url,
67 List((String, String)) extra_ops 67 List((String, String)) extra_ops
68 )= 68 )=
69 - partial_content(actioner(same, target, img_link(core_attrs+[style("cursor: pointer")], img_path, ""), action_name(url), extra_ops)). 69 + actioner(same, target, img_link(core_attrs+[style("cursor: pointer")], img_path, ""), action_name(url), extra_ops).
70 70
71 -public define HTML_Partial_Content 71 +public define HTML
72 img_button 72 img_button
73 ( 73 (
74 String img_path, 74 String img_path,
@@ -76,7 +76,7 @@ public define HTML_Partial_Content @@ -76,7 +76,7 @@ public define HTML_Partial_Content
76 )= 76 )=
77 img_button(img_path, [], same, url, []). 77 img_button(img_path, [], same, url, []).
78 78
79 -public define HTML_Partial_Content 79 +public define HTML
80 img_button_ajax 80 img_button_ajax
81 ( 81 (
82 String img_path, 82 String img_path,
@@ -85,10 +85,10 @@ public define HTML_Partial_Content @@ -85,10 +85,10 @@ public define HTML_Partial_Content
85 )= 85 )=
86 86
87 with event_click = (CoreAttrs)event(onclick, "Xlib.jq_query("+format_web_action_name_to_js(web_action, extra_ops)+")"), 87 with event_click = (CoreAttrs)event(onclick, "Xlib.jq_query("+format_web_action_name_to_js(web_action, extra_ops)+")"),
88 - partial_content(img([event_click, style("cursor: pointer")], img_path)) 88 + img([event_click, style("cursor: pointer")], img_path)
89 . 89 .
90 90
91 -public define HTML_Partial_Content 91 +public define HTML
92 img_button_load_page 92 img_button_load_page
93 ( 93 (
94 String img_path, 94 String img_path,
@@ -96,13 +96,13 @@ public define HTML_Partial_Content @@ -96,13 +96,13 @@ public define HTML_Partial_Content
96 WEB_Action_Name web_action, 96 WEB_Action_Name web_action,
97 List((String, String)) extra_args 97 List((String, String)) extra_args
98 )= 98 )=
99 - partial_content( 99 +
100 img([ event(onclick, load_page(web_action, extra_args)), 100 img([ event(onclick, load_page(web_action, extra_args)),
101 style("cursor: pointer") . core_attrs 101 style("cursor: pointer") . core_attrs
102 - ], img_path)) 102 + ], img_path)
103 . 103 .
104 104
105 -public define HTML_Partial_Content 105 +public define HTML
106 img_button_load_page 106 img_button_load_page
107 ( 107 (
108 String img_path, 108 String img_path,
@@ -112,7 +112,7 @@ public define HTML_Partial_Content @@ -112,7 +112,7 @@ public define HTML_Partial_Content
112 img_button_load_page(img_path, [], web_action, extra_args) 112 img_button_load_page(img_path, [], web_action, extra_args)
113 . 113 .
114 114
115 -public define HTML_Partial_Content 115 +public define HTML
116 img_button_load_page 116 img_button_load_page
117 ( 117 (
118 String img_path, 118 String img_path,
@@ -122,7 +122,7 @@ public define HTML_Partial_Content @@ -122,7 +122,7 @@ public define HTML_Partial_Content
122 img_button_load_page(img_path, core_attrs, web_action, []) 122 img_button_load_page(img_path, core_attrs, web_action, [])
123 . 123 .
124 124
125 -public define HTML_Partial_Content 125 +public define HTML
126 img_button_load_page 126 img_button_load_page
127 ( 127 (
128 String img_path, 128 String img_path,
@@ -132,7 +132,7 @@ public define HTML_Partial_Content @@ -132,7 +132,7 @@ public define HTML_Partial_Content
132 . 132 .
133 133
134 134
135 -public define HTML_Partial_Content 135 +public define HTML
136 img_button 136 img_button
137 ( 137 (
138 String img_path, 138 String img_path,
@@ -143,13 +143,12 @@ public define HTML_Partial_Content @@ -143,13 +143,12 @@ public define HTML_Partial_Content
143 Bool replace, 143 Bool replace,
144 Bool overlay 144 Bool overlay
145 )= 145 )=
146 - partial_content(  
147 img([ event(onclick, load_content(target, web_action, extra_args, replace, overlay)), 146 img([ event(onclick, load_content(target, web_action, extra_args, replace, overlay)),
148 style("cursor: pointer") . core_attrs 147 style("cursor: pointer") . core_attrs
149 - ], img_path)) 148 + ], img_path)
150 . 149 .
151 150
152 -public define HTML_Partial_Content 151 +public define HTML
153 img_button 152 img_button
154 ( 153 (
155 String img_path, 154 String img_path,
@@ -161,7 +160,7 @@ public define HTML_Partial_Content @@ -161,7 +160,7 @@ public define HTML_Partial_Content
161 img_button(img_path, [], web_action, extra_args, target, replace, true) 160 img_button(img_path, [], web_action, extra_args, target, replace, true)
162 . 161 .
163 162
164 -public define HTML_Partial_Content 163 +public define HTML
165 img_button 164 img_button
166 ( 165 (
167 String img_path, 166 String img_path,
@@ -172,7 +171,7 @@ public define HTML_Partial_Content @@ -172,7 +171,7 @@ public define HTML_Partial_Content
172 img_button(img_path, [], web_action, extra_args, target, false, true) 171 img_button(img_path, [], web_action, extra_args, target, false, true)
173 . 172 .
174 173
175 -public define HTML_Partial_Content 174 +public define HTML
176 img_button 175 img_button
177 ( 176 (
178 String img_path, 177 String img_path,
@@ -181,7 +180,7 @@ public define HTML_Partial_Content @@ -181,7 +180,7 @@ public define HTML_Partial_Content
181 )= 180 )=
182 img_button(img_path, [], same, web_action, extra_ops). 181 img_button(img_path, [], same, web_action, extra_ops).
183 182
184 -public define HTML_Partial_Content 183 +public define HTML
185 img_button 184 img_button
186 ( 185 (
187 String img_path, 186 String img_path,
@@ -189,7 +188,7 @@ public define HTML_Partial_Content @@ -189,7 +188,7 @@ public define HTML_Partial_Content
189 )= 188 )=
190 img_button(img_path, [], same, web_action, []). 189 img_button(img_path, [], same, web_action, []).
191 190
192 -public define HTML_Partial_Content 191 +public define HTML
193 img_button 192 img_button
194 ( 193 (
195 String img_path, 194 String img_path,
@@ -198,7 +197,7 @@ public define HTML_Partial_Content @@ -198,7 +197,7 @@ public define HTML_Partial_Content
198 )= 197 )=
199 img_button(img_path, [], same, url, extra_ops). 198 img_button(img_path, [], same, url, extra_ops).
200 199
201 -public define HTML_Partial_Content 200 +public define HTML
202 img_button 201 img_button
203 ( 202 (
204 String img_path, 203 String img_path,
@@ -208,7 +207,7 @@ public define HTML_Partial_Content @@ -208,7 +207,7 @@ public define HTML_Partial_Content
208 )= 207 )=
209 img_button(img_path, core_attrs, same, url, extra_ops). 208 img_button(img_path, core_attrs, same, url, extra_ops).
210 209
211 -public define HTML_Partial_Content 210 +public define HTML
212 img_button_load_dialog 211 img_button_load_dialog
213 ( 212 (
214 String img_path, 213 String img_path,
@@ -264,7 +263,7 @@ define List(CoreAttrs) @@ -264,7 +263,7 @@ define List(CoreAttrs)
264 263
265 core_attrs + [id(uid), style("cursor: pointer"), event(onclick, "Xlib.make_confirm_dialog(this, "+ ok_action +");")]. 264 core_attrs + [id(uid), style("cursor: pointer"), event(onclick, "Xlib.make_confirm_dialog(this, "+ ok_action +");")].
266 265
267 -public define HTML_Partial_Content 266 +public define HTML
268 img_button_confirm 267 img_button_confirm
269 ( 268 (
270 String img_path, 269 String img_path,
@@ -277,10 +276,10 @@ public define HTML_Partial_Content @@ -277,10 +276,10 @@ public define HTML_Partial_Content
277 )= 276 )=
278 with uid = generate_random_string(20), 277 with uid = generate_random_string(20),
279 278
280 - partial_content([js(js_file("xlib/js/xlib.js")), js_inline(jquery_ready(img_button_confirm_js(uid, dlg_title, dlg_text, dlg_ok, dlg_cancel)))], 279 + head_tags([js(js_file("xlib/js/xlib.js")), js_inline(jquery_ready(img_button_confirm_js(uid, dlg_title, dlg_text, dlg_ok, dlg_cancel)))],
281 img(img_button_confirm_image_attrs(core_attrs, uid, actioner), img_path)). 280 img(img_button_confirm_image_attrs(core_attrs, uid, actioner), img_path)).
282 281
283 -public define HTML_Partial_Content 282 +public define HTML
284 img_button_confirm 283 img_button_confirm
285 ( 284 (
286 String img_path, 285 String img_path,
@@ -293,7 +292,7 @@ public define HTML_Partial_Content @@ -293,7 +292,7 @@ public define HTML_Partial_Content
293 img_button_confirm(img_path, [], dlg_title, dlg_text, dlg_ok, dlg_cancel, actioner). 292 img_button_confirm(img_path, [], dlg_title, dlg_text, dlg_ok, dlg_cancel, actioner).
294 293
295 public define String 294 public define String
296 - img_button_confirm 295 + img_button_confirm_string
297 ( 296 (
298 String img_path, 297 String img_path,
299 List(CoreAttrs) core_attrs, 298 List(CoreAttrs) core_attrs,
@@ -309,7 +308,7 @@ public define String @@ -309,7 +308,7 @@ public define String
309 "<img " + format_attrs(img_button_confirm_image_attrs(core_attrs, uid, actioner)) + " src=\"" + img_path + "\"></img>". 308 "<img " + format_attrs(img_button_confirm_image_attrs(core_attrs, uid, actioner)) + " src=\"" + img_path + "\"></img>".
310 309
311 public define String 310 public define String
312 - img_button_confirm 311 + img_button_confirm_string
313 ( 312 (
314 String img_path, 313 String img_path,
315 String inline_img_attrb, 314 String inline_img_attrb,
@@ -324,7 +323,7 @@ public define String @@ -324,7 +323,7 @@ public define String
324 "};});</script><img " + inline_img_attrb + " id=\"" + uid + "\" style=\"cursor:pointer\" onclick=\"Xlib.make_confirm_dialog(this," + dlg_ok_js_script + ");\" src=\"" + img_path + "\"></img>". 323 "};});</script><img " + inline_img_attrb + " id=\"" + uid + "\" style=\"cursor:pointer\" onclick=\"Xlib.make_confirm_dialog(this," + dlg_ok_js_script + ");\" src=\"" + img_path + "\"></img>".
325 324
326 public define String 325 public define String
327 - img_button_confirm 326 + img_button_confirm_string
328 ( 327 (
329 String img_path, 328 String img_path,
330 String dlg_title, 329 String dlg_title,
@@ -333,10 +332,10 @@ public define String @@ -333,10 +332,10 @@ public define String
333 String dlg_cancel, 332 String dlg_cancel,
334 JQuery_Actioner actioner 333 JQuery_Actioner actioner
335 )= 334 )=
336 - img_button_confirm(img_path, [], dlg_title, dlg_text, dlg_ok, dlg_cancel, actioner). 335 + img_button_confirm_string(img_path, [], dlg_title, dlg_text, dlg_ok, dlg_cancel, actioner).
337 336
338 337
339 -public define HTML_Partial_Content 338 +public define HTML
340 img_button_confirm 339 img_button_confirm
341 ( 340 (
342 String img_path, 341 String img_path,
@@ -353,11 +352,11 @@ public define HTML_Partial_Content @@ -353,11 +352,11 @@ public define HTML_Partial_Content
353 with uid = generate_random_string(20), 352 with uid = generate_random_string(20),
354 //with event_click = (CoreAttrs)event(onclick, "Xlib.jq_query("+format_web_action_name_to_js(web_action, extra_ops)+")"), 353 //with event_click = (CoreAttrs)event(onclick, "Xlib.jq_query("+format_web_action_name_to_js(web_action, extra_ops)+")"),
355 354
356 - partial_content([js(js_file("xlib/js/xlib.js")), js_inline(jquery_ready(img_button_confirm_js(uid, dlg_title, dlg_text, dlg_ok, dlg_cancel)))], 355 + head_tags([js(js_file("xlib/js/xlib.js")), js_inline(jquery_ready(img_button_confirm_js(uid, dlg_title, dlg_text, dlg_ok, dlg_cancel)))],
357 img(img_button_confirm_image_attrs(core_attrs, uid, web_action, extra_ops, load_content_target, call_back), img_path)) 356 img(img_button_confirm_image_attrs(core_attrs, uid, web_action, extra_ops, load_content_target, call_back), img_path))
358 . 357 .
359 358
360 -public define HTML_Partial_Content 359 +public define HTML
361 img_button_confirm 360 img_button_confirm
362 ( 361 (
363 String img_path, 362 String img_path,
web/widgets/css_helper.anubis
@@ -13,132 +13,75 @@ read xlib/web/making_a_web_site.anubis @@ -13,132 +13,75 @@ read xlib/web/making_a_web_site.anubis
13 13
14 /**** WAVE BOX ****/ 14 /**** WAVE BOX ****/
15 15
16 -public define HTML_Partial_Content 16 +public define HTML
17 html_wave_box 17 html_wave_box
18 ( 18 (
19 - List(CoreAttrs) attrs,  
20 - String legend,  
21 - List(HTML_Partial_Content) content 19 + List(CoreAttrs) attrs,
  20 + String legend,
  21 + List(HTML) content
22 )= 22 )=
23 - partial_content( 23 +
24 div(attrs, [ 24 div(attrs, [
25 - text([class("frame_wave")], legend), //legend  
26 - div([class("frame_blk")], content)  
27 - ]))  
28 -.  
29 -  
30 -public define HTML_Partial_Content  
31 - html_wave_box  
32 - (  
33 - List(CoreAttrs) attrs,  
34 - String legend,  
35 - List(HTML_Off_Form) content  
36 - )=  
37 - partial_content(  
38 - div(attrs,  
39 - [  
40 - text([class("frame_wave")], legend), //legend 25 + text(class("frame_wave"), legend), //legend
41 div([class("frame_blk")], content) 26 div([class("frame_blk")], content)
42 - ]))  
43 -.  
44 -  
45 -public define HTML_Off_Form  
46 - html_wave_box  
47 - (  
48 - List(CoreAttrs) attrs,  
49 - String legend,  
50 - List(HTML_Off_Form) content  
51 - )=  
52 - div(attrs,  
53 - [  
54 - text([class("frame_wave")], legend), //legend  
55 - div([class("frame_blk")], content)  
56 - ]) 27 + ])
57 . 28 .
58 29
59 -public define HTML_Off_Form 30 +public define HTML
60 html_wave_box 31 html_wave_box
61 ( 32 (
62 List(CoreAttrs) attrs, 33 List(CoreAttrs) attrs,
63 String legend, 34 String legend,
64 - HTML_Off_Form content 35 + HTML content
65 )= 36 )=
66 html_wave_box(attrs, legend, [content]) 37 html_wave_box(attrs, legend, [content])
67 . 38 .
68 39
69 40
70 -public define HTML_Off_Form 41 +public define HTML
71 html_wave_box 42 html_wave_box
72 ( 43 (
73 - String legend,  
74 - HTML_Off_Form content 44 + String legend,
  45 + HTML content
75 )= 46 )=
76 html_wave_box([class("frame")], legend, content) 47 html_wave_box([class("frame")], legend, content)
77 . 48 .
78 -  
79 -public define HTML_Partial_Content  
80 - html_wave_box  
81 - (  
82 - String legend,  
83 - HTML_Partial_Content content  
84 - )=  
85 - html_wave_box([class("frame")], legend, [content])  
86 -.  
87 -  
88 -public define HTML_Partial_Content  
89 - html_wave_box  
90 - (  
91 - List(CoreAttrs) attrs,  
92 - String legend,  
93 - HTML_Partial_Content content  
94 - )=  
95 - html_wave_box([class("frame") . attrs] , legend, [content])  
96 -.  
97 49
98 -public define HTML_Partial_Content  
99 - html_wave_box  
100 - (  
101 - String legend,  
102 - HTML_Off_Form content  
103 - )=  
104 - html_wave_box([class("frame")], legend, [content])  
105 -.  
106 -  
107 -public define HTML_Off_Form 50 +public define HTML
108 html_wave_box_custom_size 51 html_wave_box_custom_size
109 ( 52 (
110 - Int size,  
111 - String legend,  
112 - List(HTML_Off_Form) content, 53 + Int size,
  54 + String legend,
  55 + List(HTML) content,
113 )= 56 )=
114 - div([style("width: "+abs_to_decimal(size)+"px")], 57 + div(style("width: "+abs_to_decimal(size)+"px"),
115 [ 58 [
116 - text([class("frame_wave")], legend), //legend  
117 - div([class("frame_blk")], content) 59 + text(class("frame_wave"), legend), //legend
  60 + div(class("frame_blk"), content)
118 ]). 61 ]).
119 62
120 -public define HTML_Off_Form 63 +public define HTML
121 html_wave_box_wide 64 html_wave_box_wide
122 ( 65 (
123 - String legend,  
124 - HTML_Off_Form content 66 + String legend,
  67 + HTML content
125 )= 68 )=
126 html_wave_box([class("frame wide")], legend, [content]). 69 html_wave_box([class("frame wide")], legend, [content]).
127 70
128 -public define HTML_Partial_Content 71 +public define HTML
129 html_wave_box_wide 72 html_wave_box_wide
130 ( 73 (
131 - String legend,  
132 - HTML_Partial_Content content 74 + String legend,
  75 + List(HTML) content
133 )= 76 )=
134 - html_wave_box([class("frame wide")], legend, content, ). 77 + html_wave_box([class("frame wide")], legend, content).
135 78
136 /**** CHANGELIST ****/ 79 /**** CHANGELIST ****/
137 public type ChangeListItem: 80 public type ChangeListItem:
138 change_list_item( 81 change_list_item(
139 String icon, 82 String icon,
140 String label, 83 String label,
141 - HTML_Off_Form value). 84 + HTML value).
142 85
143 public define ChangeListItem 86 public define ChangeListItem
144 change_list_item 87 change_list_item
@@ -178,11 +121,11 @@ public define ChangeListItem @@ -178,11 +121,11 @@ public define ChangeListItem
178 change_list_item 121 change_list_item
179 ( 122 (
180 String label, 123 String label,
181 - HTML_Off_Form value 124 + HTML value
182 )= 125 )=
183 change_list_item("", label, value). 126 change_list_item("", label, value).
184 127
185 -define HTML_Off_Form 128 +define HTML
186 make_tr 129 make_tr
187 ( 130 (
188 ChangeListItem item, 131 ChangeListItem item,
@@ -203,11 +146,11 @@ define HTML_Off_Form @@ -203,11 +146,11 @@ define HTML_Off_Form
203 ) 146 )
204 . 147 .
205 148
206 -define List(HTML_Off_Form) 149 +define List(HTML)
207 make_changelist_rows 150 make_changelist_rows
208 ( 151 (
209 List(ChangeListItem) items, 152 List(ChangeListItem) items,
210 - List(HTML_Off_Form) so_far, 153 + List(HTML) so_far,
211 Int odd 154 Int odd
212 )= 155 )=
213 if items is 156 if items is
@@ -217,17 +160,17 @@ define List(HTML_Off_Form) @@ -217,17 +160,17 @@ define List(HTML_Off_Form)
217 make_changelist_rows(t, [ make_tr(h, odd) . so_far], 1 - odd) 160 make_changelist_rows(t, [ make_tr(h, odd) . so_far], 1 - odd)
218 }. 161 }.
219 162
220 -public define HTML_Partial_Content 163 +public define HTML
221 changelist_table 164 changelist_table
222 ( 165 (
223 List(ChangeListItem) items 166 List(ChangeListItem) items
224 )= 167 )=
225 - partial_content([css(css_file("xlib/css/changelists.css"))], 168 + head_tags([css(css_file("xlib/css/changelists.css"))],
226 div(class("changelist"), 169 div(class("changelist"),
227 table([/*class("module"), */ attr("cellspacing","0")], make_changelist_rows(items, [], 1)))) 170 table([/*class("module"), */ attr("cellspacing","0")], make_changelist_rows(items, [], 1))))
228 . 171 .
229 172
230 - public define HTML_Off_Form 173 + public define HTML
231 html_tooltip 174 html_tooltip
232 ( 175 (
233 String title, 176 String title,
@@ -237,32 +180,8 @@ public define HTML_Partial_Content @@ -237,32 +180,8 @@ public define HTML_Partial_Content
237 180
238 actioner(same,same, link([id("help_" + keyword), class("jTip jTip_help"), attr("target", "_blank")], " ", success(title)), "ajax_show_tooltip", [("tooltip_id", keyword)], []). 181 actioner(same,same, link([id("help_" + keyword), class("jTip jTip_help"), attr("target", "_blank")], " ", success(title)), "ajax_show_tooltip", [("tooltip_id", keyword)], []).
239 182
240 - public define HTML_Off_Form  
241 - html_tooltip  
242 - (  
243 - String title,  
244 - String keyword,  
245 - Int width  
246 - ) =  
247 - a([id("help_"+keyword), class("jTipu jTip_help"), data("name",title)], data("href",format_web_action_name(action_name("ajax_show_tooltip"), [("tooltip_id",keyword),("width",to_String(width))]))).  
248 -  
249 -// literal("<a id=\"help_"+keyword+"\" class=\"jTipu jTip_help\" name=\""+title+"\" href=\"/?a=ajax_show_tooltip&amp;tooltip_id="+keyword+"&width="+width+"\"></a>").  
250 -  
251 - actioner(same,same, link([id("help_" + keyword), class("jTip jTip_help"), attr("target", "_blank")], " ", success(title)), "ajax_show_tooltip", [("tooltip_id", keyword), ("width", to_decimal(width))], []).  
252 -  
253 - public define HTML_In_Form  
254 - html_tooltip  
255 - (  
256 - String title,  
257 - String keyword,  
258 - ) =  
259 - a([id("help_"+keyword), class("jTipu jTip_help"), attr("name",title)], href(action_name("ajax_show_tooltip"), [("tooltip_id",keyword)])).  
260 -  
261 - literal("<a id=\"help_"+keyword+"\" class=\"jTipu jTip_help\" name=\""+title+"\" href=\"/?a=ajax_show_tooltip&amp;tooltip_id="+keyword+"\"></a>").  
262 -  
263 - actioner(same,same, link([id("help_" + keyword), class("jTip jTip_help"), attr("target", "_blank")], " ", success(title)), "ajax_show_tooltip", [("tooltip_id", keyword)], []).  
264 183
265 -public define HTML_In_Form 184 +public define HTML
266 html_tooltip 185 html_tooltip
267 ( 186 (
268 String title, 187 String title,
@@ -273,7 +192,7 @@ public define HTML_In_Form @@ -273,7 +192,7 @@ public define HTML_In_Form
273 192
274 actioner(same,same, link([id("help_" + keyword), class("jTip jTip_help"), attr("target", "_blank")], " ", success(title)), "ajax_show_tooltip", [("tooltip_id", keyword), ("width", to_decimal(width))], []). 193 actioner(same,same, link([id("help_" + keyword), class("jTip jTip_help"), attr("target", "_blank")], " ", success(title)), "ajax_show_tooltip", [("tooltip_id", keyword), ("width", to_decimal(width))], []).
275 194
276 - public define HTML_Off_Form 195 + public define HTML
277 html_tooltip_ext 196 html_tooltip_ext
278 ( 197 (
279 String title, 198 String title,
@@ -282,7 +201,7 @@ public define HTML_In_Form @@ -282,7 +201,7 @@ public define HTML_In_Form
282 ) = 201 ) =
283 actioner(same,same, link([id("help_" + keyword), class("jTip jTip_"+class_suffix), attr("target", "_blank")], " ", success(title)), "ajax_show_tooltip", [("tooltip_ext", keyword)], []). 202 actioner(same,same, link([id("help_" + keyword), class("jTip jTip_"+class_suffix), attr("target", "_blank")], " ", success(title)), "ajax_show_tooltip", [("tooltip_ext", keyword)], []).
284 203
285 -public define HTML_Off_Form 204 +public define HTML
286 html_tooltip_ext 205 html_tooltip_ext
287 ( 206 (
288 String title, 207 String title,
@@ -304,18 +223,7 @@ public define HTML_Off_Form @@ -304,18 +223,7 @@ public define HTML_Off_Form
304 ) = 223 ) =
305 actioner(same,same, link([id("help_" + keyword), class("jTipu jTip_"+class_suffix), attr("target", "_blank")], " ", success(title)), "ajax_show_tooltip", [("tooltip_ext", keyword)], []). 224 actioner(same,same, link([id("help_" + keyword), class("jTipu jTip_"+class_suffix), attr("target", "_blank")], " ", success(title)), "ajax_show_tooltip", [("tooltip_ext", keyword)], []).
306 225
307 -public define HTML_In_Form  
308 - html_tooltip_ext  
309 - (  
310 - String title,  
311 - String keyword,  
312 - String class_suffix,  
313 - List((String, String)) ext_args  
314 - ) =  
315 - with extra_args = format_extra_operands(ext_args),  
316 226
317 - literal("<a id=\"help_"+keyword+"\" class=\"jTipu jTip_"+class_suffix+"\" data-name=\""+title+"\" data-href=\"/?a=ajax_show_tooltip&tooltip_ext="+keyword+extra_args+"\"></a>").  
318 -  
319 227
320 href=\"/?a=ajax_show_tooltip&amp;tooltip_id="+keyword+"\" id=\"help_"+keyword+HELP_HMS_MODE" class="jTip jTip_help" target="_blank" name="Aide sur la fonctionnalité 'No Limit'"> </a>"). 228 href=\"/?a=ajax_show_tooltip&amp;tooltip_id="+keyword+"\" id=\"help_"+keyword+HELP_HMS_MODE" class="jTip jTip_help" target="_blank" name="Aide sur la fonctionnalité 'No Limit'"> </a>").
321 229
web/widgets/dashboard.anubis
@@ -17,41 +17,45 @@ public type Dashboard_content: @@ -17,41 +17,45 @@ public type Dashboard_content:
17 none, 17 none,
18 content(List(ChangeListItem) content, String title). 18 content(List(ChangeListItem) content, String title).
19 19
20 -public define HTML_Off_Form 20 +public define HTML
21 dash_board 21 dash_board
22 ( 22 (
23 Dashboard_content left, 23 Dashboard_content left,
24 Dashboard_content right 24 Dashboard_content right
25 )= 25 )=
26 - table([class("container")],  
27 - [ row( [ cell([class("module_col left_col")],  
28 - if left is  
29 - {  
30 - none then literal(""),  
31 - content(list, title) then partial(html_wave_box_wide(title, changelist_table(list)))  
32 - }  
33 - ),  
34 - cell([class("module_col right_col")],  
35 - if right is  
36 - {  
37 - none then literal(""),  
38 - content(list, title) then partial(html_wave_box_wide(title, changelist_table(list)))  
39 - }  
40 - )  
41 - ])  
42 - ]). 26 + table(class("container"),
  27 + tr([
  28 + td(class("module_col left_col"),
  29 + if left is
  30 + {
  31 + none then empty,
  32 + content(list, title) then html_wave_box_wide(title, changelist_table(list))
  33 + }
  34 + ),
  35 + td(class("module_col right_col"),
  36 + if right is
  37 + {
  38 + none then empty,
  39 + content(list, title) then html_wave_box_wide(title, changelist_table(list))
  40 + }
  41 + )
  42 + ]) // </tr>
  43 + )
  44 +.
43 45
44 -public define HTML_Off_Form 46 +public define HTML
45 dash_board 47 dash_board
46 ( 48 (
47 Dashboard_content content 49 Dashboard_content content
48 )= 50 )=
49 - table([class("container")],  
50 - [ row( [ cell([class("module_col")],  
51 - if content is  
52 - {  
53 - none then literal(""),  
54 - content(list, title) then partial(html_wave_box_wide(title, changelist_table(list)))  
55 - }  
56 - )])]). 51 + table(class("container"),
  52 + tr(
  53 + td(class("module_col"),
  54 + if content is
  55 + {
  56 + none then empty,
  57 + content(list, title) then html_wave_box_wide(title, changelist_table(list))
  58 + }
  59 + )))
  60 +.
57 61
web/widgets/fisheye_menu.anubis
@@ -20,19 +20,19 @@ public type FisheyeEntry: @@ -20,19 +20,19 @@ public type FisheyeEntry:
20 String help_text //Help text to show 20 String help_text //Help text to show
21 ). 21 ).
22 22
23 -define List(HTML_Off_Form) 23 +define List(HTML)
24 make_fisheye_menu 24 make_fisheye_menu
25 ( 25 (
26 (String) -> String _T, //translator function 26 (String) -> String _T, //translator function
27 List(FisheyeEntry) entries, 27 List(FisheyeEntry) entries,
28 - List(HTML_Off_Form) so_far, 28 + List(HTML) so_far,
29 String selected_space //id of the selected space 29 String selected_space //id of the selected space
30 )= 30 )=
31 if entries is 31 if entries is
32 { 32 {
33 [] then reverse(so_far), //reverse to be in the right direction 33 [] then reverse(so_far), //reverse to be in the right direction
34 [h . t] then 34 [h . t] then
35 - with entry = (HTML_Off_Form)img( 35 + with entry = (HTML)img(
36 [ 36 [
37 id(h.id), 37 id(h.id),
38 class("menu_item"+if h.id = selected_space then " menu_selected" else ""), 38 class("menu_item"+if h.id = selected_space then " menu_selected" else ""),
@@ -46,7 +46,7 @@ define List(HTML_Off_Form) @@ -46,7 +46,7 @@ define List(HTML_Off_Form)
46 make_fisheye_menu(_T, t, [ entry . so_far], selected_space) 46 make_fisheye_menu(_T, t, [ entry . so_far], selected_space)
47 }. 47 }.
48 48
49 -public define HTML_Partial_Content 49 +public define HTML
50 make_fisheye_menu 50 make_fisheye_menu
51 ( 51 (
52 (String) -> String _T, //translator function 52 (String) -> String _T, //translator function
web/widgets/icon.anubis
@@ -28,7 +28,7 @@ public type Icon: @@ -28,7 +28,7 @@ public type Icon:
28 ) 28 )
29 . 29 .
30 30
31 -public define HTML_Off_Form 31 +public define HTML
32 to_HTML 32 to_HTML
33 ( 33 (
34 Icon icon 34 Icon icon
web/widgets/icons_set.anubis
@@ -67,4 +67,4 @@ public define String icn64_mime(String mimetype) = &quot;icons/64x64/mimetypes/&quot;+mim @@ -67,4 +67,4 @@ public define String icn64_mime(String mimetype) = &quot;icons/64x64/mimetypes/&quot;+mim
67 public define String icn64_mime(MIME mimetype) = "icons/64x64/mimetypes/"+mimetype.type+"-"+mimetype.subtype+".png". 67 public define String icn64_mime(MIME mimetype) = "icons/64x64/mimetypes/"+mimetype.type+"-"+mimetype.subtype+".png".
68 68
69 public define String to_Icon (Bool value) = if value then icn16_true else icn16_false. 69 public define String to_Icon (Bool value) = if value then icn16_true else icn16_false.
70 -public define HTML_Off_Form bool_to_img (Bool value) = img(to_Icon(value)). 70 +public define HTML bool_to_img (Bool value) = img(to_Icon(value)).
web/widgets/left_menu_html.anubis
@@ -11,13 +11,13 @@ read xlib/web/making_a_web_site.anubis @@ -11,13 +11,13 @@ read xlib/web/making_a_web_site.anubis
11 read xlib/web/web_action.anubis 11 read xlib/web/web_action.anubis
12 read xlib/web/load_content.anubis 12 read xlib/web/load_content.anubis
13 13
14 -define List(HTML_Off_Form) 14 +define List(HTML)
15 make_left_menu 15 make_left_menu
16 ( 16 (
17 (String) -> String _T, //translator function 17 (String) -> String _T, //translator function
18 List(Left_Menu_Entry) entries, 18 List(Left_Menu_Entry) entries,
19 String selected, 19 String selected,
20 - List(HTML_Off_Form) so_far 20 + List(HTML) so_far
21 )= 21 )=
22 if entries is 22 if entries is
23 { 23 {
@@ -48,7 +48,7 @@ define List(HTML_Off_Form) @@ -48,7 +48,7 @@ define List(HTML_Off_Form)
48 make_left_menu(_T, t, selected, [ entry . so_far]) 48 make_left_menu(_T, t, selected, [ entry . so_far])
49 }. 49 }.
50 50
51 -public define HTML_Partial_Content 51 +public define HTML
52 make_left_menu 52 make_left_menu
53 ( 53 (
54 (String) -> String _T, //translator function 54 (String) -> String _T, //translator function
@@ -56,10 +56,10 @@ public define HTML_Partial_Content @@ -56,10 +56,10 @@ public define HTML_Partial_Content
56 )= 56 )=
57 if l_menu is 57 if l_menu is
58 { 58 {
59 - no_left_menu then partial_empty, 59 + no_left_menu then empty,
60 left_menu(entries, selected) then 60 left_menu(entries, selected) then
61 - partial_content([css(css_file("/css/left_menu.css"))],  
62 - sequence(make_left_menu(_T, entries, selected, []))) 61 + head_tags([css(css_file("/css/left_menu.css"))],
  62 + make_left_menu(_T, entries, selected, []))
63 }. 63 }.
64 64
65 65
web/widgets/menu.anubis
@@ -30,7 +30,7 @@ public type Menu_Item: @@ -30,7 +30,7 @@ public type Menu_Item:
30 // List(String) classes //additional classes if need (change background color, font size, etc.) 30 // List(String) classes //additional classes if need (change background color, font size, etc.)
31 // ), 31 // ),
32 menu_item_content( 32 menu_item_content(
33 - HTML_Partial_Content content 33 + HTML content
34 ), 34 ),
35 menu_separator 35 menu_separator
36 . 36 .
@@ -130,12 +130,12 @@ public define Menu_Item @@ -130,12 +130,12 @@ public define Menu_Item
130 // )= 130 // )=
131 // menu_title(text, title_ids, []). 131 // menu_title(text, title_ids, []).
132 132
133 -define List(HTML_Off_Form) 133 +define List(HTML)
134 generate_menu 134 generate_menu
135 ( 135 (
136 (String) -> String _T, //translator function 136 (String) -> String _T, //translator function
137 List(Menu_Item) items, 137 List(Menu_Item) items,
138 - List(HTML_Off_Form) so_far, 138 + List(HTML) so_far,
139 Int level 139 Int level
140 )= 140 )=
141 if items is 141 if items is
@@ -150,9 +150,9 @@ define List(HTML_Off_Form) @@ -150,9 +150,9 @@ define List(HTML_Off_Form)
150 with classes = join(" ",[(if level = 0 then "maintab" else ""), 150 with classes = join(" ",[(if level = 0 then "maintab" else ""),
151 (if is_empty(_sub_menu) then "" else "has_submenu") . 151 (if is_empty(_sub_menu) then "" else "has_submenu") .
152 _classes]), 152 _classes]),
153 - with current_li = (HTML_Off_Form)li( [class(classes)], 153 + with current_li = li(class(classes),
154 //if _icon = "" then [] else [class(_icon+"_icon")], 154 //if _icon = "" then [] else [class(_icon+"_icon")],
155 - sequence([actioner(same, _target, 155 + [actioner(same, _target,
156 html(if level = 0 then [class("title")] else [], 156 html(if level = 0 then [class("title")] else [],
157 sequence([ 157 sequence([
158 //format the icon if need 158 //format the icon if need
@@ -168,17 +168,17 @@ define List(HTML_Off_Form) @@ -168,17 +168,17 @@ define List(HTML_Off_Form)
168 if is_empty(_sub_menu) then 168 if is_empty(_sub_menu) then
169 empty 169 empty
170 else 170 else
171 - (HTML_Off_Form)ul([class("submenu")], generate_menu(_T, _sub_menu, [], level+1))  
172 - ])), 171 + (HTML)ul([class("submenu")], generate_menu(_T, _sub_menu, [], level+1))
  172 + ]),
173 generate_menu(_T, t, [current_li . so_far], level), 173 generate_menu(_T, t, [current_li . so_far], level),
174 174
175 // menu_title(text, _ids, _classes) then 175 // menu_title(text, _ids, _classes) then
176 menu_item_content(_content) then 176 menu_item_content(_content) then
177 -// with current_li = (HTML_Off_Form)li([class("item "+_class+"_icon")],actioner(same,same, link(_T(_text)),_action,_extra)),  
178 - with current_li = (HTML_Off_Form)li([],partial(_content)), 177 +// with current_li = (HTML)li([class("item "+_class+"_icon")],actioner(same,same, link(_T(_text)),_action,_extra)),
  178 + with current_li = li(_content),
179 generate_menu(_T, t, [current_li . so_far], level), 179 generate_menu(_T, t, [current_li . so_far], level),
180 menu_separator then 180 menu_separator then
181 - with current_li = (HTML_Off_Form)li([class("cxm_menu_sep")],text("--- SEPARATOR ---")), 181 + with current_li = li(class("cxm_menu_sep"), text("--- SEPARATOR ---")),
182 generate_menu(_T, t, [current_li . so_far], level) 182 generate_menu(_T, t, [current_li . so_far], level)
183 183
184 } 184 }
@@ -188,18 +188,18 @@ define List(HTML_Off_Form) @@ -188,18 +188,18 @@ define List(HTML_Off_Form)
188 // 188 //
189 // hk_menu_list(_class, _action, _text, _extra, _entries) then 189 // hk_menu_list(_class, _action, _text, _extra, _entries) then
190 // with current_li = 190 // with current_li =
191 -// (HTML_Off_Form)li([class(_class+"_icon")], 191 +// (HTML)li([class(_class+"_icon")],
192 // sequence([ 192 // sequence([
193 //// actioner(same,same, link(_T(_text)),_action,_extra), 193 //// actioner(same,same, link(_T(_text)),_action,_extra),
194 // actioner(same,same, link(help_string(_text, _T)),_action,_extra), 194 // actioner(same,same, link(help_string(_text, _T)),_action,_extra),
195 // text([class(if level = 0 then "dropBottom" else "dropRight")], ""), 195 // text([class(if level = 0 then "dropBottom" else "dropRight")], ""),
196 -// (HTML_Off_Form)ul([], sequence(generate_hk_menu(_T, _entries, [], level+1)))])), 196 +// (HTML)ul([], sequence(generate_hk_menu(_T, _entries, [], level+1)))])),
197 // generate_hk_menu(_T, t, [current_li . so_far], level) 197 // generate_hk_menu(_T, t, [current_li . so_far], level)
198 // 198 //
199 // } 199 // }
200 // }. 200 // }.
201 201
202 -define HTML_Off_Form 202 +define HTML
203 make_menu 203 make_menu
204 ( 204 (
205 (String) -> String _T, //translator function 205 (String) -> String _T, //translator function
@@ -212,7 +212,7 @@ define HTML_Off_Form @@ -212,7 +212,7 @@ define HTML_Off_Form
212 ]) 212 ])
213 . 213 .
214 214
215 -public define HTML_Partial_Content 215 +public define HTML
216 make_menu 216 make_menu
217 ( 217 (
218 (String) -> String _T, //translator function 218 (String) -> String _T, //translator function
@@ -221,9 +221,9 @@ public define HTML_Partial_Content @@ -221,9 +221,9 @@ public define HTML_Partial_Content
221 )= 221 )=
222 if _menu is 222 if _menu is
223 { 223 {
224 - no_menu then partial_content(empty), 224 + no_menu then empty,
225 menu(items) then 225 menu(items) then
226 - partial_content([css(css_file("xlib/css/menu.css"))], 226 + head_tags([css(css_file("xlib/css/menu.css"))],
227 //partial_content([css(css_file("/css/admin_theme.css"))], 227 //partial_content([css(css_file("/css/admin_theme.css"))],
228 make_menu(_T, items, _direction)) 228 make_menu(_T, items, _direction))
229 } 229 }
web/widgets/pager.anubis
@@ -9,7 +9,7 @@ @@ -9,7 +9,7 @@
9 read xlib/web/making_a_web_site.anubis 9 read xlib/web/making_a_web_site.anubis
10 read xlib/web/web_session.anubis 10 read xlib/web/web_session.anubis
11 11
12 -public define HTML_Partial_Content 12 +public define HTML
13 control_panel_pager 13 control_panel_pager
14 ( 14 (
15 String pager_id, 15 String pager_id,
@@ -20,7 +20,7 @@ public define HTML_Partial_Content @@ -20,7 +20,7 @@ public define HTML_Partial_Content
20 String next 20 String next
21 ) 21 )
22 = 22 =
23 - partial_content([js(js_file("xlib/js/pager.js"))], 23 + head_tags([js(js_file("xlib/js/pager.js"))],
24 div(id(pager_id), [ 24 div(id(pager_id), [
25 text(class("o_pager_current_page"), current_page), 25 text(class("o_pager_current_page"), current_page),
26 text("/"), 26 text("/"),
@@ -34,7 +34,7 @@ public define HTML_Partial_Content @@ -34,7 +34,7 @@ public define HTML_Partial_Content
34 ])) 34 ]))
35 . 35 .
36 36
37 -public define HTML_Partial_Content 37 +public define HTML
38 control_panel_pager 38 control_panel_pager
39 ( 39 (
40 String pager_id, 40 String pager_id,
web/widgets/specialized_elements.anubis
@@ -29,7 +29,7 @@ public define String @@ -29,7 +29,7 @@ public define String
29 } 29 }
30 . 30 .
31 31
32 -public define HTML_Off_Form 32 +public define HTML
33 phone_icon 33 phone_icon
34 ( 34 (
35 List(CoreAttrs) attrs, 35 List(CoreAttrs) attrs,
@@ -66,7 +66,7 @@ public define HTML_Off_Form @@ -66,7 +66,7 @@ public define HTML_Off_Form
66 ]) 66 ])
67 . 67 .
68 68
69 -public define HTML_Off_Form 69 +public define HTML
70 phone_icon 70 phone_icon
71 ( 71 (
72 List(CoreAttrs) attrs, 72 List(CoreAttrs) attrs,
@@ -74,7 +74,7 @@ public define HTML_Off_Form @@ -74,7 +74,7 @@ public define HTML_Off_Form
74 Bool click_to_dial 74 Bool click_to_dial
75 )= phone_icon(attrs, phone_number, generic, true, click_to_dial). 75 )= phone_icon(attrs, phone_number, generic, true, click_to_dial).
76 76
77 -public define HTML_Off_Form 77 +public define HTML
78 phone_icon 78 phone_icon
79 ( 79 (
80 String phone_number, 80 String phone_number,
@@ -83,7 +83,7 @@ public define HTML_Off_Form @@ -83,7 +83,7 @@ public define HTML_Off_Form
83 phone_icon([], phone_number, generic, true, click_to_dial) 83 phone_icon([], phone_number, generic, true, click_to_dial)
84 . 84 .
85 85
86 -public define HTML_Off_Form 86 +public define HTML
87 phone_icon 87 phone_icon
88 ( 88 (
89 String phone_number, 89 String phone_number,
@@ -94,7 +94,7 @@ public define HTML_Off_Form @@ -94,7 +94,7 @@ public define HTML_Off_Form
94 phone_icon([], phone_number, phone_type, show_number, click_to_dial) 94 phone_icon([], phone_number, phone_type, show_number, click_to_dial)
95 . 95 .
96 96
97 -public define HTML_Off_Form 97 +public define HTML
98 phone_icon 98 phone_icon
99 ( 99 (
100 String phone_number, 100 String phone_number,
@@ -105,7 +105,7 @@ public define HTML_Off_Form @@ -105,7 +105,7 @@ public define HTML_Off_Form
105 . 105 .
106 106
107 107
108 -public define HTML_Off_Form 108 +public define HTML
109 email_icon 109 email_icon
110 ( 110 (
111 List(CoreAttrs) attrs, 111 List(CoreAttrs) attrs,
@@ -124,7 +124,7 @@ public define HTML_Off_Form @@ -124,7 +124,7 @@ public define HTML_Off_Form
124 ]) 124 ])
125 . 125 .
126 126
127 -public define HTML_Off_Form 127 +public define HTML
128 email_icon 128 email_icon
129 ( 129 (
130 String email_address, 130 String email_address,
@@ -133,7 +133,7 @@ public define HTML_Off_Form @@ -133,7 +133,7 @@ public define HTML_Off_Form
133 email_icon([], email_address, show_text) 133 email_icon([], email_address, show_text)
134 . 134 .
135 135
136 -public define HTML_Off_Form 136 +public define HTML
137 email_icon 137 email_icon
138 ( 138 (
139 String email_address 139 String email_address
@@ -141,7 +141,7 @@ public define HTML_Off_Form @@ -141,7 +141,7 @@ public define HTML_Off_Form
141 email_icon([], email_address, true) 141 email_icon([], email_address, true)
142 . 142 .
143 143
144 -public define HTML_Off_Form 144 +public define HTML
145 url_icon 145 url_icon
146 ( 146 (
147 List(CoreAttrs) attrs, 147 List(CoreAttrs) attrs,
@@ -160,7 +160,7 @@ public define HTML_Off_Form @@ -160,7 +160,7 @@ public define HTML_Off_Form
160 ]) 160 ])
161 . 161 .
162 162
163 -public define HTML_Off_Form 163 +public define HTML
164 url_icon 164 url_icon
165 ( 165 (
166 String url_string, //url to open 166 String url_string, //url to open
@@ -169,7 +169,7 @@ public define HTML_Off_Form @@ -169,7 +169,7 @@ public define HTML_Off_Form
169 url_icon([], url_string, show_text) 169 url_icon([], url_string, show_text)
170 . 170 .
171 171
172 -public define HTML_Off_Form 172 +public define HTML
173 url_icon 173 url_icon
174 ( 174 (
175 String url_string 175 String url_string
web_controllers/language/language_management.anubis
@@ -153,7 +153,7 @@ public define List((List(CoreAttrs),WebArgValue, String)) @@ -153,7 +153,7 @@ public define List((List(CoreAttrs),WebArgValue, String))
153 ) 153 )
154 . 154 .
155 155
156 -define HTML_Off_Form 156 +define HTML
157 language_line 157 language_line
158 ( 158 (
159 String language_code, 159 String language_code,
@@ -163,7 +163,7 @@ define HTML_Off_Form @@ -163,7 +163,7 @@ define HTML_Off_Form
163 event(onclick, "language_changed('"+language_code+"');")], text(language)) 163 event(onclick, "language_changed('"+language_code+"');")], text(language))
164 . 164 .
165 165
166 -define HTML_Off_Form 166 +define HTML
167 language_line 167 language_line
168 ( 168 (
169 String language_code, 169 String language_code,
@@ -176,7 +176,7 @@ define HTML_Off_Form @@ -176,7 +176,7 @@ define HTML_Off_Form
176 ]) 176 ])
177 . 177 .
178 178
179 -public define HTML_Partial_Content 179 +public define HTML
180 flags_menu 180 flags_menu
181 ( 181 (
182 String dictionary_collection_name, 182 String dictionary_collection_name,
@@ -190,32 +190,31 @@ public define HTML_Partial_Content @@ -190,32 +190,31 @@ public define HTML_Partial_Content
190 empty 190 empty
191 else 191 else
192 language_line(lang_code, self_name(lang_info)), 192 language_line(lang_code, self_name(lang_info)),
193 - partial_content([ 193 +
  194 + head_tags([
194 css(css_file("/xlib/css/flags_menu.css")), 195 css(css_file("/xlib/css/flags_menu.css")),
195 js(js_file("/xlib/js/xlib.js")) 196 js(js_file("/xlib/js/xlib.js"))
196 - ],  
197 - [ 197 + ],
198 dl([ 198 dl([
199 //literal("<dt style=\"background-image: url(../flags/"+lang+".png);\" onmouseover=\"javascript:montre('drapo1');\" onmouseout=\"javascript:montre();\">&nbsp;</dt>\n"), 199 //literal("<dt style=\"background-image: url(../flags/"+lang+".png);\" onmouseover=\"javascript:montre('drapo1');\" onmouseout=\"javascript:montre();\">&nbsp;</dt>\n"),
200 //literal("<img src=\"/xlib/flags/24x24/"+lang+".png\" onmouseover=\"javascript:montre('drapo1');\" onmouseout=\"javascript:montre();\">"), 200 //literal("<img src=\"/xlib/flags/24x24/"+lang+".png\" onmouseover=\"javascript:montre('drapo1');\" onmouseout=\"javascript:montre();\">"),
201 201
202 img([event(onmouseover, "showObject('l3-flag');"), event(onmouseout, "hideObject('l3-flag');")], "/xlib/flags/lang/24/"+lang+".png" ), 202 img([event(onmouseover, "showObject('l3-flag');"), event(onmouseout, "hideObject('l3-flag');")], "/xlib/flags/lang/24/"+lang+".png" ),
203 dd([style("display: none"),id("l3-flag"), event(onmouseover, "showObject('l3-flag');"), event(onmouseout, "hideObject('l3-flag');")], 203 dd([style("display: none"),id("l3-flag"), event(onmouseover, "showObject('l3-flag');"), event(onmouseout, "hideObject('l3-flag');")],
204 - ul(  
205 - map(make_line, l3_get_all_dicos(dictionary_collection_name))+  
206 - [ 204 + ul(
  205 + map(make_line, l3_get_all_dicos(dictionary_collection_name))+
  206 + [
207 if show_symbolic then 207 if show_symbolic then
208 language_line("symb", "symbolic") 208 language_line("symb", "symbolic")
209 else 209 else
210 empty 210 empty
211 - ]  
212 - )), 211 + ]
  212 + )),
213 ]) //!dl 213 ]) //!dl
214 - ]  
215 - ) 214 + )
216 . 215 .
217 216
218 -public define HTML_Partial_Content 217 +public define HTML
219 flags_menu 218 flags_menu
220 ( 219 (
221 WEB_Session _session, 220 WEB_Session _session,
@@ -229,7 +228,7 @@ public define HTML_Partial_Content @@ -229,7 +228,7 @@ public define HTML_Partial_Content
229 . 228 .
230 229
231 230
232 -public define HTML_Partial_Content 231 +public define HTML
233 choose_lang_dialog 232 choose_lang_dialog
234 ( 233 (
235 String dictionary_collection_name, 234 String dictionary_collection_name,
@@ -246,7 +245,7 @@ public define HTML_Partial_Content @@ -246,7 +245,7 @@ public define HTML_Partial_Content
246 else 245 else
247 language_line(lang_code, self_name(lang_info), action), 246 language_line(lang_code, self_name(lang_info), action),
248 247
249 - partial_content([ 248 + head_tags([
250 css(css_file("/xlib/css/flags_menu.css")), 249 css(css_file("/xlib/css/flags_menu.css")),
251 js(js_file("/xlib/js/xlib.js")) 250 js(js_file("/xlib/js/xlib.js"))
252 ], 251 ],
@@ -268,7 +267,7 @@ public define HTML_Partial_Content @@ -268,7 +267,7 @@ public define HTML_Partial_Content
268 ) 267 )
269 . 268 .
270 269
271 -public define HTML_Partial_Content 270 +public define HTML
272 choose_lang_dialog 271 choose_lang_dialog
273 ( 272 (
274 WEB_Session _session, 273 WEB_Session _session,
@@ -281,7 +280,7 @@ public define HTML_Partial_Content @@ -281,7 +280,7 @@ public define HTML_Partial_Content
281 choose_lang_dialog(app_dictionnary, action, show_symbolic, []) 280 choose_lang_dialog(app_dictionnary, action, show_symbolic, [])
282 . 281 .
283 282
284 -public define HTML_Partial_Content 283 +public define HTML
285 choose_lang_dialog 284 choose_lang_dialog
286 ( 285 (
287 WEB_Session _session, 286 WEB_Session _session,
@@ -294,7 +293,7 @@ public define HTML_Partial_Content @@ -294,7 +293,7 @@ public define HTML_Partial_Content
294 choose_lang_dialog(app_dictionnary, action, false, exclude_lang) 293 choose_lang_dialog(app_dictionnary, action, false, exclude_lang)
295 . 294 .
296 295
297 -public define HTML_Partial_Content 296 +public define HTML
298 choose_lang_dialog 297 choose_lang_dialog
299 ( 298 (
300 WEB_Session _session, 299 WEB_Session _session,
@@ -308,7 +307,7 @@ public define HTML_Partial_Content @@ -308,7 +307,7 @@ public define HTML_Partial_Content
308 307
309 /* DROPDOWN part */ 308 /* DROPDOWN part */
310 309
311 -define HTML_Off_Form 310 +define HTML
312 dd_language_line 311 dd_language_line
313 ( 312 (
314 String language_code, 313 String language_code,
@@ -321,7 +320,7 @@ define HTML_Off_Form @@ -321,7 +320,7 @@ define HTML_Off_Form
321 ]) 320 ])
322 . 321 .
323 322
324 -public define HTML_Partial_Content 323 +public define HTML
325 choose_lang_dropdown 324 choose_lang_dropdown
326 ( 325 (
327 String dictionary_collection_name, 326 String dictionary_collection_name,
@@ -341,7 +340,7 @@ public define HTML_Partial_Content @@ -341,7 +340,7 @@ public define HTML_Partial_Content
341 else 340 else
342 dd_language_line(lang_code, self_name(lang_info), action), 341 dd_language_line(lang_code, self_name(lang_info), action),
343 342
344 - partial_content([ 343 + head_tags([
345 css(css_file("/xlib/css/flags_menu.css")), 344 css(css_file("/xlib/css/flags_menu.css")),
346 js(js_file("/xlib/js/xlib.js")) 345 js(js_file("/xlib/js/xlib.js"))
347 ], 346 ],
@@ -360,7 +359,7 @@ public define HTML_Partial_Content @@ -360,7 +359,7 @@ public define HTML_Partial_Content
360 ) 359 )
361 . 360 .
362 361
363 -public define HTML_Partial_Content 362 +public define HTML
364 choose_lang_dropdown 363 choose_lang_dropdown
365 ( 364 (
366 WEB_Session _session, 365 WEB_Session _session,
@@ -375,7 +374,7 @@ public define HTML_Partial_Content @@ -375,7 +374,7 @@ public define HTML_Partial_Content
375 choose_lang_dropdown(app_dictionnary, action, image, on_click, show_symbolic, []) 374 choose_lang_dropdown(app_dictionnary, action, image, on_click, show_symbolic, [])
376 . 375 .
377 376
378 -public define HTML_Partial_Content 377 +public define HTML
379 choose_lang_dropdown 378 choose_lang_dropdown
380 ( 379 (
381 WEB_Session _session, 380 WEB_Session _session,
@@ -390,7 +389,7 @@ public define HTML_Partial_Content @@ -390,7 +389,7 @@ public define HTML_Partial_Content
390 choose_lang_dropdown(app_dictionnary, action, image, on_click, false, exclude_lang) 389 choose_lang_dropdown(app_dictionnary, action, image, on_click, false, exclude_lang)
391 . 390 .
392 391
393 -public define HTML_Partial_Content 392 +public define HTML
394 choose_lang_dropdown 393 choose_lang_dropdown
395 ( 394 (
396 WEB_Session _session, // 395 WEB_Session _session, //