Commit 2956d18a255ba4803f9ad890f5b2464c63fd2eb2

Authored by Cédric RICARD
1 parent bd400dd2

Adding table footer row

Showing 1 changed file with 78 additions and 22 deletions   Show diff stats
calexium_lib/web/CXM_making_a_web_site.anubis
... ... @@ -864,6 +864,10 @@ public type HTML_Row($T):
864 864 public type HTML_Header_Row($T):
865 865 empty,
866 866 header_row(List(Cell_Option) options, List(HTML_Header_Cell($T)) cells).
  867 +
  868 +public type HTML_Footer_Row($T):
  869 + empty,
  870 + footer_row(List(Cell_Option) options, List(HTML_Cell($T)) cells).
867 871  
868 872 Same remark as for 'HTML_Cell($T)'. We define several convenience functions:
869 873  
... ... @@ -974,7 +978,7 @@ public type HTML_In_Form:
974 978 paragraph (List(Text_Option), HTML_In_Form content),
975 979 image (String url),
976 980 image (String url, Int32 width, Int32 height),
977   - table (List(Table_Option), HTML_Header_Row(HTML_In_Form), List(HTML_Row(HTML_In_Form))),
  981 + table (List(Table_Option), HTML_Header_Row(HTML_In_Form), List(HTML_Row(HTML_In_Form)), HTML_Footer_Row(HTML_In_Form)),
978 982 center (HTML_In_Form),
979 983 mail_to (String email, HTML_In_Form element),
980 984 scroller (Int32 width, Int32 height,
... ... @@ -1058,15 +1062,15 @@ public define HTML_In_Form
1058 1062 (
1059 1063 List(HTML_Row(HTML_In_Form)) rows
1060 1064 ) =
1061   - table([],empty,rows).
  1065 + table([],empty,rows,empty).
1062 1066  
1063 1067 public define HTML_In_Form
1064 1068 table
1065 1069 (
1066   - List(Table_Option) options,
1067   - List(HTML_Row(HTML_In_Form)) rows
  1070 + List(Table_Option) options,
  1071 + List(HTML_Row(HTML_In_Form)) rows
1068 1072 ) =
1069   - table(options,empty,rows).
  1073 + table(options,empty,rows,empty).
1070 1074  
1071 1075 public define HTML_In_Form
1072 1076 table
... ... @@ -1074,7 +1078,16 @@ public define HTML_In_Form
1074 1078 HTML_Header_Row(HTML_In_Form) h_row,
1075 1079 List(HTML_Row(HTML_In_Form)) rows
1076 1080 ) =
1077   - table([],h_row,rows).
  1081 + table([],h_row,rows,empty).
  1082 +
  1083 +public define HTML_In_Form
  1084 + table
  1085 + (
  1086 + List(Table_Option) options,
  1087 + HTML_Header_Row(HTML_In_Form) h_row,
  1088 + List(HTML_Row(HTML_In_Form)) rows
  1089 + ) =
  1090 + table(options,h_row,rows,empty).
1078 1091  
1079 1092 public define HTML_In_Form
1080 1093 private_download
... ... @@ -1133,7 +1146,7 @@ public type HTML_Off_Form:
1133 1146 paragraph (List(Text_Option), HTML_Off_Form content),
1134 1147 image (String url),
1135 1148 image (String url, Int32 width, Int32 height),
1136   - table (List(Table_Option), HTML_Header_Row(HTML_Off_Form), List(HTML_Row(HTML_Off_Form))),
  1149 + table (List(Table_Option), HTML_Header_Row(HTML_Off_Form), List(HTML_Row(HTML_Off_Form)), HTML_Footer_Row(HTML_Off_Form)),
1137 1150 center (HTML_Off_Form),
1138 1151 mail_to (String email, HTML_Off_Form element),
1139 1152 scroller (Int32 width, Int32 height,
... ... @@ -1193,7 +1206,7 @@ public define HTML_Off_Form
1193 1206 (
1194 1207 List(HTML_Row(HTML_Off_Form)) rows
1195 1208 ) =
1196   - table([],empty,rows).
  1209 + table([],empty,rows,empty).
1197 1210  
1198 1211 public define HTML_Off_Form
1199 1212 table
... ... @@ -1201,15 +1214,24 @@ public define HTML_Off_Form
1201 1214 List(Table_Option) options,
1202 1215 List(HTML_Row(HTML_Off_Form)) rows
1203 1216 ) =
1204   - table(options,empty,rows).
  1217 + table(options,empty,rows,empty).
  1218 +
  1219 +public define HTML_Off_Form
  1220 + table
  1221 + (
  1222 + HTML_Header_Row(HTML_Off_Form) h_row,
  1223 + List(HTML_Row(HTML_Off_Form)) rows
  1224 + ) =
  1225 + table([],h_row,rows,empty).
1205 1226  
1206 1227 public define HTML_Off_Form
1207 1228 table
1208 1229 (
  1230 + List(Table_Option) options,
1209 1231 HTML_Header_Row(HTML_Off_Form) h_row,
1210 1232 List(HTML_Row(HTML_Off_Form)) rows
1211 1233 ) =
1212   - table([],h_row,rows).
  1234 + table(options,h_row,rows,empty).
1213 1235  
1214 1236 We add two convenience functions for 'row'. The reason why we add two functions, one
1215 1237 for 'HTML_In_Form' and one for 'HTML_Off_Form', is that adding a schema with an
... ... @@ -2364,7 +2386,7 @@ type HTML_Any($T):
2364 2386 any_paragraph (List(Text_Option), $T content),
2365 2387 any_image (String url),
2366 2388 any_image (String url, Int32 width, Int32 height),
2367   - any_table (List(Table_Option), HTML_Header_Row($T), List(HTML_Row($T))),
  2389 + any_table (List(Table_Option), HTML_Header_Row($T), List(HTML_Row($T)), HTML_Footer_Row($T)),
2368 2390 any_center ($T),
2369 2391 any_mail_to (String email, $T element),
2370 2392 any_scroller (Int32 width, Int32 height,
... ... @@ -2687,7 +2709,7 @@ public define Printable_tree
2687 2709 {
2688 2710 [ ] then [ ],
2689 2711 [h . t] then if h = selected.value
2690   - then ["<option selected>", h, "</option>\n" . format_choices(t)]
  2712 + then ["<option selected=\"selected\">", h, "</option>\n" . format_choices(t)]
2691 2713 else ["<option>", h, "</option>\n" . format_choices(t,selected)]
2692 2714 }.
2693 2715  
... ... @@ -3107,6 +3129,9 @@ define Printable_tree
3107 3129 text, "</a>"
3108 3130 ],
3109 3131 javascript(s,h) then
  3132 + if action_name = "" then
  3133 + ["<input type=\"button\" value=\"",text,"\"", format_attrs(options), " />"]
  3134 + else
3110 3135 [s,"<input type=\"button\" value=\"",text,"\"", format_attrs(options), " onclick=\"",h,"\" />"]
3111 3136 }
3112 3137 ],
... ... @@ -3350,7 +3375,7 @@ define Printable_tree
3350 3375 [h . t] then if h is row(options,cells) then
3351 3376 ["<tr ",format(reverse(options)),">",
3352 3377 format(cells,format_element),
3353   - "</tr>"
  3378 + "</tr>\n"
3354 3379 . format(t,format_element)]
3355 3380 }.
3356 3381  
... ... @@ -3366,7 +3391,23 @@ define Printable_tree
3366 3391 header_row(options,cells) then
3367 3392 ["<thead> <tr ",format(reverse(options)),">",
3368 3393 format(cells,format_element),
3369   - "</tr> </thead>"
  3394 + "</tr> </thead>\n"
  3395 + ]
  3396 + }.
  3397 +
  3398 +define Printable_tree
  3399 + format
  3400 + (
  3401 + HTML_Footer_Row($T) row,
  3402 + $T -> Printable_tree format_element
  3403 + ) =
  3404 + if row is
  3405 + {
  3406 + empty then [ ],
  3407 + footer_row(options,cells) then
  3408 + ["<tfoot> <tr ",format(reverse(options)),">",
  3409 + format(cells,format_element),
  3410 + "</tr> </tfoot>\n"
3370 3411 ]
3371 3412 }.
3372 3413  
... ... @@ -3572,10 +3613,12 @@ define Printable_tree
3572 3613 ["<img alt=\"",url,"\" src=\"",url,"\">"],
3573 3614 any_image(url,w,h) then
3574 3615 ["<img alt=\"",url,"\" src=\"",url,"\" width=",w," height=",h," />"],
3575   - any_table(opts,h_row, rows) then
  3616 + any_table(opts,h_row, rows, f_row) then
3576 3617 ["<table ",format(reverse(opts),false),">",
3577   - format(h_row,format_element),
3578   - "<tbody>",format(rows,format_element),"</tbody></table>\n"],
  3618 + format(h_row, format_element),
  3619 + "<tbody>",format(rows,format_element),"</tbody>",
  3620 + format(f_row, format_element),
  3621 + "</table>\n"],
3579 3622 any_center(e) then
3580 3623 ["<center>",format_element(e),"</center>"],
3581 3624 any_mail_to(email,elem) then
... ... @@ -3652,8 +3695,8 @@ define Printable_tree
3652 3695 format(cinfo,sn,ic_v,any_image(url),format_element,is_https),
3653 3696 image(url,w,h) then
3654 3697 format(cinfo,sn,ic_v,any_image(url,w,h),format_element,is_https),
3655   - table(opts,header_row,rows) then
3656   - format(cinfo,sn,ic_v,any_table(opts, header_row, rows),format_element,is_https),
  3698 + table(opts,header_row,rows,footer_row) then
  3699 + format(cinfo,sn,ic_v,any_table(opts, header_row, rows, footer_row),format_element,is_https),
3657 3700 center(e) then
3658 3701 format(cinfo,sn,ic_v,any_center(e),format_element,is_https),
3659 3702 mail_to(a,e) then
... ... @@ -3740,6 +3783,18 @@ define Bool
3740 3783 mapor(contains_an_upload,
3741 3784 map(content,cells(row))).
3742 3785  
  3786 +define Bool
  3787 + contains_an_upload
  3788 + (
  3789 + HTML_Footer_Row(HTML_In_Form) row
  3790 + ) =
  3791 + if row is
  3792 + {
  3793 + empty then false,
  3794 + footer_row(_, cells) then
  3795 + mapor(contains_an_upload,
  3796 + map(content,cells))
  3797 + }.
3743 3798  
3744 3799 define Bool
3745 3800 contains_an_upload
... ... @@ -3756,7 +3811,8 @@ define Bool
3756 3811 paragraph(o,t) then false,
3757 3812 image(u) then false,
3758 3813 image(u,w,h) then false,
3759   - table(o,_,rows) then mapor(contains_an_upload,rows),
  3814 + table(o,_,rows,f_row) then if mapor(contains_an_upload,rows) then true
  3815 + else contains_an_upload(f_row),
3760 3816 center(e) then contains_an_upload(e),
3761 3817 mail_to(m,e) then false, // 'e' may but should not contain an upload
3762 3818 scroller(w,h,cw,ch,e) then contains_an_upload(e),
... ... @@ -3819,8 +3875,8 @@ define Printable_tree
3819 3875 format(cinfo,sn,ic_v,any_image(url),format_element,is_https),
3820 3876 image(url,w,h) then
3821 3877 format(cinfo,sn,ic_v,any_image(url,w,h),format_element,is_https),
3822   - table(opts,header_row, rows) then
3823   - format(cinfo,sn,ic_v,any_table(opts,header_row, rows),format_element,is_https),
  3878 + table(opts,header_row, rows, footer_row) then
  3879 + format(cinfo,sn,ic_v,any_table(opts,header_row, rows, footer_row),format_element,is_https),
3824 3880 center(e) then
3825 3881 format(cinfo,sn,ic_v,any_center(e),format_element,is_https),
3826 3882 mail_to(a,e) then
... ...