Commit 2956d18a255ba4803f9ad890f5b2464c63fd2eb2
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 | ... | ... |