Commit 986b3f3acce98f1c71ba1c9b2307ecf5602ffccc
1 parent
23f86e1b
Adding Json types
Adding http header to invalidate 'keep-alive' (mandatory by HTTP 1.1)
Showing
4 changed files
with
335 additions
and
139 deletions
Show diff stats
calexium_lib/web/CXM_dojo.anubis
| ... | ... | @@ -255,7 +255,22 @@ define String |
| 255 | 255 | right then "right" |
| 256 | 256 | }. |
| 257 | 257 | |
| 258 | +public type BorderContainerDesign: | |
| 259 | + headline, | |
| 260 | + sidebar. | |
| 258 | 261 | |
| 262 | +define String | |
| 263 | + to_String | |
| 264 | + ( | |
| 265 | + BorderContainerDesign design | |
| 266 | + )= | |
| 267 | + if design is | |
| 268 | + { | |
| 269 | + headline then "headline", | |
| 270 | + sidebar then "sidebar" | |
| 271 | + }. | |
| 272 | + | |
| 273 | + | |
| 259 | 274 | public define HTML_Off_Form |
| 260 | 275 | dojo_ContentPane |
| 261 | 276 | ( |
| ... | ... | @@ -268,18 +283,7 @@ public define HTML_Off_Form |
| 268 | 283 | attr("region", to_String(region)), |
| 269 | 284 | attr("splitter", if splitter then "true" else "false") . attributes ], |
| 270 | 285 | content). |
| 271 | -// sequence([ | |
| 272 | -// literal("<div id=\"" + id + "\" dojoType=\"dijit.layout.ContentPane\" region=\"" + to_String(region) + "\" splitter=\"" | |
| 273 | -// +( | |
| 274 | -// if splitter then "true" | |
| 275 | -// else "false" | |
| 276 | -// )+ | |
| 277 | -// // "\" style=\"overflow: auto;\""+ | |
| 278 | -// // "\" minSize=\"20em\""+ | |
| 279 | -// "\">"), | |
| 280 | -// content, | |
| 281 | -// literal("</div>") | |
| 282 | -// ]). | |
| 286 | + | |
| 283 | 287 | |
| 284 | 288 | public define HTML_Off_Form |
| 285 | 289 | dojo_TabContainer |
| ... | ... | @@ -289,25 +293,22 @@ public define HTML_Off_Form |
| 289 | 293 | ) = |
| 290 | 294 | div([attr("dojoType", "dijit.layout.TabContainer") . attributes ], |
| 291 | 295 | content). |
| 292 | -// sequence([ | |
| 293 | -// literal("<div id=\"" + id + "\" dojoType=\"dijit.layout.TabContainer\" style=\"width:70em;height:50em\">"), | |
| 294 | -// content, | |
| 295 | -// literal("</div>") | |
| 296 | -// ]). | |
| 296 | + | |
| 297 | 297 | |
| 298 | 298 | public define HTML_Off_Form |
| 299 | 299 | dojo_BorderContainer |
| 300 | 300 | ( |
| 301 | - List(CoreAttrs) attributes, | |
| 302 | - String the_title, | |
| 303 | - Bool live_splitter, | |
| 304 | - Bool persist, | |
| 305 | - Bool closable, | |
| 306 | - String container, | |
| 307 | - HTML_Off_Form content | |
| 301 | + List(CoreAttrs) attributes, | |
| 302 | + String the_title, | |
| 303 | + BorderContainerDesign design, | |
| 304 | + Bool live_splitter, | |
| 305 | + Bool persist, | |
| 306 | + Bool closable, | |
| 307 | + String container, | |
| 308 | + HTML_Off_Form content | |
| 308 | 309 | ) = |
| 309 | 310 | div([attr("dojoType", "dijit.layout.BorderContainer"), title(the_title), attr("dojoAttachPoint", container), |
| 310 | - attr("design", "sidebar"), attr("liveSplitters", live_splitter), attr("persist", persist), attr("closable",closable) . attributes ], | |
| 311 | + attr("design", to_String(design)), attr("liveSplitters", live_splitter), attr("persist", persist), attr("closable",closable) . attributes ], | |
| 311 | 312 | content). |
| 312 | 313 | |
| 313 | 314 | |
| ... | ... | @@ -317,7 +318,7 @@ public define HTML_Off_Form |
| 317 | 318 | List(CoreAttrs) attributes, |
| 318 | 319 | )= |
| 319 | 320 | div_empty(attributes). |
| 320 | -// literal("<div id=\"" + id + "\"</div>"). | |
| 321 | + | |
| 321 | 322 | |
| 322 | 323 | |
| 323 | 324 | public define HTML_Off_Form |
| ... | ... | @@ -328,11 +329,7 @@ public define HTML_Off_Form |
| 328 | 329 | )= |
| 329 | 330 | div([attr("dojoType", "dijit.Toolbar") . attributes ], |
| 330 | 331 | content). |
| 331 | -// sequence([ | |
| 332 | -// literal("<div dojoType=\"dijit.Toolbar\" region=\"top\" id =\"" + id + "\">"), | |
| 333 | -// content, | |
| 334 | -// literal("</div>") | |
| 335 | -// ]). | |
| 332 | + | |
| 336 | 333 | |
| 337 | 334 | |
| 338 | 335 | public define HTML_Off_Form |
| ... | ... | @@ -345,7 +342,12 @@ public define HTML_Off_Form |
| 345 | 342 | String execute, |
| 346 | 343 | )= |
| 347 | 344 | literal(" |
| 348 | - <button dojoType=\"dijit.form.Button\" id=\"" + html_id.id + "\" iconClass=\"" + iconclass + "\" onclick=\"" + execute + "\">" + name + "</button>" + | |
| 345 | + <button dojoType=\"dijit.form.Button\" id=\"" + html_id.id + "\" iconClass=\"" + iconclass + "\" >" | |
| 346 | + + name | |
| 347 | + + "<script type=\"dojo/method\" event=\"onClick\">" | |
| 348 | + + execute | |
| 349 | + + "</script>" | |
| 350 | + + "</button>" + | |
| 349 | 351 | if tip_msg is |
| 350 | 352 | { |
| 351 | 353 | failure then "", | ... | ... |
| 1 | +/* | |
| 2 | + * Created by PyramIDE. | |
| 3 | + * User: ricard | |
| 4 | + * Date: 18/08/2008 | |
| 5 | + * Time: 08:12 | |
| 6 | + * | |
| 7 | + * To change this template use Tools | Options | Coding | Edit Standard Headers. | |
| 8 | + */ | |
| 9 | + | |
| 10 | +read tools/basis.anubis | |
| 11 | + | |
| 12 | +public type JsonMember:... | |
| 13 | + | |
| 14 | + | |
| 15 | +public type JsonValue: | |
| 16 | + json_object(List(JsonMember)), | |
| 17 | + json_array(List(JsonValue)), | |
| 18 | + json_int(Int value), | |
| 19 | + json_float(Float value, Int precision), | |
| 20 | + json_string(String value), | |
| 21 | + json_bool(Bool value), | |
| 22 | + json_null. | |
| 23 | + | |
| 24 | + | |
| 25 | +public type JsonMember: | |
| 26 | + json_member(String name, | |
| 27 | + JsonValue value). | |
| 28 | + | |
| 29 | +//------------------------------- | |
| 30 | +// helpers | |
| 31 | + | |
| 32 | +public define JsonMember | |
| 33 | + json_member | |
| 34 | + ( | |
| 35 | + String name, | |
| 36 | + List(JsonMember) value, | |
| 37 | + ) = | |
| 38 | + json_member(name, json_object(value)). | |
| 39 | + | |
| 40 | + | |
| 41 | +public define JsonMember | |
| 42 | + json_member | |
| 43 | + ( | |
| 44 | + String name, | |
| 45 | + List(JsonValue) value, | |
| 46 | + ) = | |
| 47 | + json_member(name, json_array(value)). | |
| 48 | + | |
| 49 | +public define JsonMember | |
| 50 | + json_member | |
| 51 | + ( | |
| 52 | + String name, | |
| 53 | + Int value, | |
| 54 | + ) = | |
| 55 | + json_member(name, json_int(value)). | |
| 56 | + | |
| 57 | +public define JsonMember | |
| 58 | + json_member | |
| 59 | + ( | |
| 60 | + String name, | |
| 61 | + Float value, | |
| 62 | + Int precision, | |
| 63 | + ) = | |
| 64 | + json_member(name, json_float(value, precision)). | |
| 65 | + | |
| 66 | +public define JsonMember | |
| 67 | + json_member | |
| 68 | + ( | |
| 69 | + String name, | |
| 70 | + String value, | |
| 71 | + ) = | |
| 72 | + json_member(name, json_string(value)). | |
| 73 | + | |
| 74 | +public define JsonMember | |
| 75 | + json_member | |
| 76 | + ( | |
| 77 | + String name, | |
| 78 | + Bool value, | |
| 79 | + ) = | |
| 80 | + json_member(name, json_bool(value)). | |
| 81 | + | |
| 82 | +public define JsonMember | |
| 83 | + json_null | |
| 84 | + ( | |
| 85 | + String name, | |
| 86 | + ) = | |
| 87 | + json_member(name, json_null). | |
| 88 | + | |
| 89 | +//------------------------------------------- | |
| 90 | +// Outputing Json to Printable_tree | |
| 91 | + | |
| 92 | +define List(Word8) | |
| 93 | + _format_json_esc | |
| 94 | + ( | |
| 95 | + List(Word8) original, | |
| 96 | + List(Word8) new_string, | |
| 97 | + ) = | |
| 98 | + if original is | |
| 99 | + { | |
| 100 | + [] then new_string, | |
| 101 | + [h . t] then | |
| 102 | + if (h >=+ 32 & h +=< 33) | (h >=+ 35 & h +=< 38) |(h >=+ 40 & h +=< 91) | h >=+ 93 then // Allowed characters for JSON see RFC4627 + " ' " | |
| 103 | + _format_json_esc(t, [h . new_string]) | |
| 104 | + else | |
| 105 | + _format_json_esc(t, [h, '\\' . new_string]) | |
| 106 | + }. | |
| 107 | + | |
| 108 | +public define String | |
| 109 | + format_json_esc | |
| 110 | + ( | |
| 111 | + String original, | |
| 112 | + ) = | |
| 113 | + implode(reverse(_format_json_esc(explode(original), [],))). | |
| 114 | + | |
| 115 | + | |
| 116 | +public define Printable_tree | |
| 117 | + format_json | |
| 118 | + ( | |
| 119 | + JsonValue json | |
| 120 | + ). | |
| 121 | + | |
| 122 | +public define Printable_tree | |
| 123 | + format_json_member | |
| 124 | + ( | |
| 125 | + JsonMember member | |
| 126 | + ) = | |
| 127 | + if member is json_member(name, value) then | |
| 128 | + [ "'", name, "':" . format_json(value) ]. | |
| 129 | + | |
| 130 | + | |
| 131 | +define Printable_tree | |
| 132 | + format_json_object | |
| 133 | + ( | |
| 134 | + List(JsonMember) members | |
| 135 | + ) = | |
| 136 | + if members is | |
| 137 | + { | |
| 138 | + [] then [], | |
| 139 | + [h . t] then [ format_json_member(h), (if t is [] then "" else ",") . format_json_object(t) ] | |
| 140 | + }. | |
| 141 | + | |
| 142 | +define Printable_tree | |
| 143 | + format_json_array | |
| 144 | + ( | |
| 145 | + List(JsonValue) values | |
| 146 | + ) = | |
| 147 | + if values is | |
| 148 | + { | |
| 149 | + [] then [], | |
| 150 | + [h . t] then [ format_json(h), (if t is [] then "" else ",") . format_json_array(t) ] | |
| 151 | + }. | |
| 152 | + | |
| 153 | +public define Printable_tree | |
| 154 | + format_json | |
| 155 | + ( | |
| 156 | + JsonValue json | |
| 157 | + ) = | |
| 158 | + if json is | |
| 159 | + { | |
| 160 | + json_object(members) then [ "{", format_json_object(members), "}" . [] ], | |
| 161 | + json_array(values) then [ "[", format_json_array(values), "]" . [] ], | |
| 162 | + json_int(i) then int_pt(i, []), | |
| 163 | + json_float(f, p) then str_pt(float_to_string(f, p), []), | |
| 164 | + json_string(s) then str_pt("'" + format_json_esc(s) + "'", []), | |
| 165 | + json_bool(b) then str_pt(if b then "true" else "false", []), | |
| 166 | + json_null then str_pt("null", []) | |
| 167 | + }. | |
| 168 | + | ... | ... |
calexium_lib/web/CXM_making_a_web_site.anubis
| ... | ... | @@ -990,6 +990,27 @@ public type TextAreaOption: |
| 990 | 990 | disabled, |
| 991 | 991 | read_only, |
| 992 | 992 | wrap_lines. |
| 993 | + | |
| 994 | +public type CSS_Style: | |
| 995 | + text_options(List(Text_Option)). | |
| 996 | + | |
| 997 | +public type CSS_File: | |
| 998 | + css_file(String file_name). | |
| 999 | + | |
| 1000 | +public type JS_Attribute: | |
| 1001 | + attr (String, String). | |
| 1002 | + | |
| 1003 | +public type JS_File: | |
| 1004 | + js_file(String file_name, | |
| 1005 | + List(JS_Attribute) attributes). | |
| 1006 | + | |
| 1007 | +public define JS_File | |
| 1008 | + js_file | |
| 1009 | + ( | |
| 1010 | + String file_name | |
| 1011 | + ) = | |
| 1012 | + js_file(file_name, []). | |
| 1013 | + | |
| 993 | 1014 | |
| 994 | 1015 | public type HTML_In_Form: |
| 995 | 1016 | literal_pt (Printable_tree), |
| ... | ... | @@ -1174,6 +1195,7 @@ public define HTML_In_Form |
| 1174 | 1195 | file_upload (WebArgName name, Int width) |
| 1175 | 1196 | = file_upload([], "", htmlId(""), name, width). |
| 1176 | 1197 | |
| 1198 | +public type HTML_Body:... | |
| 1177 | 1199 | |
| 1178 | 1200 | public type HTML_Off_Form: |
| 1179 | 1201 | literal_pt (Printable_tree), |
| ... | ... | @@ -1209,7 +1231,12 @@ public type HTML_Off_Form: |
| 1209 | 1231 | String action_name, List((String,String)) extra_ops, |
| 1210 | 1232 | HTML_In_Form content), |
| 1211 | 1233 | div (List(CoreAttrs), HTML_Off_Form content), |
| 1212 | - div_empty (List(CoreAttrs)). | |
| 1234 | + div_empty (List(CoreAttrs)), | |
| 1235 | + iframe (List(CoreAttrs), | |
| 1236 | + List(CSS_Style) /*styles*/, | |
| 1237 | + List(CSS_File) /*css_files*/, | |
| 1238 | + List(JS_File) /*js_files*/, | |
| 1239 | + HTML_Body /*body*/). | |
| 1213 | 1240 | |
| 1214 | 1241 | 'HTML_Off_Form' defines all the elements you may put outside any form. |
| 1215 | 1242 | |
| ... | ... | @@ -1401,25 +1428,6 @@ public define HTML_Row(HTML_In_Form) |
| 1401 | 1428 | |
| 1402 | 1429 | |
| 1403 | 1430 | |
| 1404 | -public type CSS_Style: | |
| 1405 | - text_options(List(Text_Option)). | |
| 1406 | - | |
| 1407 | -public type CSS_File: | |
| 1408 | - css_file(String file_name). | |
| 1409 | - | |
| 1410 | -public type JS_Attribute: | |
| 1411 | - attr (String, String). | |
| 1412 | - | |
| 1413 | -public type JS_File: | |
| 1414 | - js_file(String file_name, | |
| 1415 | - List(JS_Attribute) attributes). | |
| 1416 | - | |
| 1417 | -public define JS_File | |
| 1418 | - js_file | |
| 1419 | - ( | |
| 1420 | - String file_name | |
| 1421 | - ) = | |
| 1422 | - js_file(file_name, []). | |
| 1423 | 1431 | |
| 1424 | 1432 | define String |
| 1425 | 1433 | format |
| ... | ... | @@ -3729,6 +3737,92 @@ define Printable_tree |
| 3729 | 3737 | ]. |
| 3730 | 3738 | |
| 3731 | 3739 | |
| 3740 | + | |
| 3741 | +define Printable_tree | |
| 3742 | + format | |
| 3743 | + ( | |
| 3744 | + Body_Option o | |
| 3745 | + ) = | |
| 3746 | + if o is | |
| 3747 | + { | |
| 3748 | + core_attrs(core_attr_list) then [" " + format_attrs(core_attr_list)], | |
| 3749 | + background_color(c) then [" bgcolor=\"" , (String)html_format(c), "\""], | |
| 3750 | + background_image(n) then [" background=", n], | |
| 3751 | + background_image(n,o2) then [" style=\"background: url(",n,")",format(o2),"\""] | |
| 3752 | + | |
| 3753 | + }. | |
| 3754 | + | |
| 3755 | + | |
| 3756 | + | |
| 3757 | +define Printable_tree | |
| 3758 | + format | |
| 3759 | + ( | |
| 3760 | + List(Body_Option) l | |
| 3761 | + ) = | |
| 3762 | + if l is | |
| 3763 | + { | |
| 3764 | + [ ] then [ ], | |
| 3765 | + [h . t] then [format(h) . format(t)] | |
| 3766 | + }. | |
| 3767 | + | |
| 3768 | +define Printable_tree | |
| 3769 | + add_css_files | |
| 3770 | + ( | |
| 3771 | + List(CSS_File) l | |
| 3772 | + ) = | |
| 3773 | + if l is | |
| 3774 | + { | |
| 3775 | + [ ] then [ ], | |
| 3776 | + [h . t] then | |
| 3777 | + [ ["<link rel=\"stylesheet\" type=\"text/css\" href=\"" + file_name(h) + "\" />\n" ] | |
| 3778 | + . add_css_files(t)] | |
| 3779 | + }. | |
| 3780 | + | |
| 3781 | +define Printable_tree | |
| 3782 | + add_js_files_attributes | |
| 3783 | + ( | |
| 3784 | + List(JS_Attribute) l | |
| 3785 | + ) = | |
| 3786 | + if l is | |
| 3787 | + { | |
| 3788 | + [ ] then [ ], | |
| 3789 | + [h . t] then | |
| 3790 | + if h is attr(name, value) then | |
| 3791 | + [ " " + name + "=\"" + value + "\"" | |
| 3792 | + . add_js_files_attributes(t)] | |
| 3793 | + }. | |
| 3794 | + | |
| 3795 | + | |
| 3796 | +define Printable_tree | |
| 3797 | + add_js_files | |
| 3798 | + ( | |
| 3799 | + List(JS_File) l | |
| 3800 | + ) = | |
| 3801 | + if l is | |
| 3802 | + { | |
| 3803 | + [ ] then [ ], | |
| 3804 | + [h . t] then | |
| 3805 | + [ ["<script src=\""+ file_name(h) +"\" type=\"text/javascript\"" | |
| 3806 | + . add_js_files_attributes(attributes(h)) ] | |
| 3807 | + . ["></script>\n" | |
| 3808 | + . add_js_files(t)] ] | |
| 3809 | + }. | |
| 3810 | + | |
| 3811 | +define Printable_tree | |
| 3812 | + add_css_styles | |
| 3813 | + ( | |
| 3814 | + List(CSS_Style) css_styles | |
| 3815 | + ) = | |
| 3816 | + | |
| 3817 | + if css_styles is | |
| 3818 | + { | |
| 3819 | + [] then [], | |
| 3820 | + [_ . _] then [ "<style type=\"text/css\"><!--\n", | |
| 3821 | + format_css_styles(css_styles), | |
| 3822 | + " --></style>\n" | |
| 3823 | + ] | |
| 3824 | + }. | |
| 3825 | + | |
| 3732 | 3826 | |
| 3733 | 3827 | // The function below formats a datum of type 'HTML_Any($T)'. |
| 3734 | 3828 | |
| ... | ... | @@ -4086,9 +4180,24 @@ define Printable_tree |
| 4086 | 4180 | "</form>" |
| 4087 | 4181 | ] |
| 4088 | 4182 | div(options, e) then |
| 4089 | - format(cinfo,sn,ic_v,any_div(options, e),format_element,is_https), | |
| 4183 | + format(cinfo,sn,ic_v,any_div(options, e),format_element,is_https), | |
| 4090 | 4184 | div_empty(options) then |
| 4091 | - format(cinfo,sn,ic_v,any_div_empty(options),format_element,is_https), | |
| 4185 | + format(cinfo,sn,ic_v,any_div_empty(options),format_element,is_https), | |
| 4186 | + iframe(options, css_styles, css_files, js_files, body) then | |
| 4187 | + if body is body(body_options,element) then | |
| 4188 | + [ "<iframe", format_attrs(options), ">\n", | |
| 4189 | + "<html style=\"margin: 0pt; padding: 0pt;\">\n", | |
| 4190 | + "<head>\n", | |
| 4191 | + add_css_styles(css_styles), | |
| 4192 | + add_css_files(css_files), | |
| 4193 | + add_js_files(js_files), | |
| 4194 | + "</head>\n", | |
| 4195 | + "<body ", format(body_options), ">\n", // format body options | |
| 4196 | + format(cinfo,sn,ic_v,element,is_https), | |
| 4197 | + "</body>\n", | |
| 4198 | + "</html>\n", | |
| 4199 | + "</iframe>\n", | |
| 4200 | + ], | |
| 4092 | 4201 | |
| 4093 | 4202 | }. |
| 4094 | 4203 | |
| ... | ... | @@ -4154,91 +4263,7 @@ define Printable_tree |
| 4154 | 4263 | . format(cinfo,state_name,t,is_https,charset)] |
| 4155 | 4264 | }. |
| 4156 | 4265 | |
| 4157 | - | |
| 4158 | -define Printable_tree | |
| 4159 | - format | |
| 4160 | - ( | |
| 4161 | - Body_Option o | |
| 4162 | - ) = | |
| 4163 | - if o is | |
| 4164 | - { | |
| 4165 | - core_attrs(core_attr_list) then [" " + format_attrs(core_attr_list)], | |
| 4166 | - background_color(c) then [" bgcolor=\"" , (String)html_format(c), "\""], | |
| 4167 | - background_image(n) then [" background=", n], | |
| 4168 | - background_image(n,o2) then [" style=\"background: url(",n,")",format(o2),"\""] | |
| 4169 | - | |
| 4170 | - }. | |
| 4171 | - | |
| 4172 | - | |
| 4173 | - | |
| 4174 | -define Printable_tree | |
| 4175 | - format | |
| 4176 | - ( | |
| 4177 | - List(Body_Option) l | |
| 4178 | - ) = | |
| 4179 | - if l is | |
| 4180 | - { | |
| 4181 | - [ ] then [ ], | |
| 4182 | - [h . t] then [format(h) . format(t)] | |
| 4183 | - }. | |
| 4184 | - | |
| 4185 | -define Printable_tree | |
| 4186 | - add_css_files | |
| 4187 | - ( | |
| 4188 | - List(CSS_File) l | |
| 4189 | - ) = | |
| 4190 | - if l is | |
| 4191 | - { | |
| 4192 | - [ ] then [ ], | |
| 4193 | - [h . t] then | |
| 4194 | - [ ["<link rel=\"stylesheet\" type=\"text/css\" href=\"" + file_name(h) + "\" />\n" ] | |
| 4195 | - . add_css_files(t)] | |
| 4196 | - }. | |
| 4197 | - | |
| 4198 | -define Printable_tree | |
| 4199 | - add_js_files_attributes | |
| 4200 | - ( | |
| 4201 | - List(JS_Attribute) l | |
| 4202 | - ) = | |
| 4203 | - if l is | |
| 4204 | - { | |
| 4205 | - [ ] then [ ], | |
| 4206 | - [h . t] then | |
| 4207 | - if h is attr(name, value) then | |
| 4208 | - [ " " + name + "=\"" + value + "\"" | |
| 4209 | - . add_js_files_attributes(t)] | |
| 4210 | - }. | |
| 4211 | - | |
| 4212 | 4266 | |
| 4213 | -define Printable_tree | |
| 4214 | - add_js_files | |
| 4215 | - ( | |
| 4216 | - List(JS_File) l | |
| 4217 | - ) = | |
| 4218 | - if l is | |
| 4219 | - { | |
| 4220 | - [ ] then [ ], | |
| 4221 | - [h . t] then | |
| 4222 | - [ ["<script src=\""+ file_name(h) +"\" type=\"text/javascript\"" | |
| 4223 | - . add_js_files_attributes(attributes(h)) ] | |
| 4224 | - . ["></script>\n" | |
| 4225 | - . add_js_files(t)] ] | |
| 4226 | - }. | |
| 4227 | - | |
| 4228 | -define Printable_tree | |
| 4229 | - add_css_styles | |
| 4230 | - ( | |
| 4231 | - List(CSS_Style) css_styles | |
| 4232 | - ) = | |
| 4233 | - | |
| 4234 | - if css_styles is | |
| 4235 | - { | |
| 4236 | - [] then [], | |
| 4237 | - [_ . _] then [ "<style type=\"text/css\"><!--\n", | |
| 4238 | - format_css_styles(css_styles), | |
| 4239 | - " --></style>\n" | |
| 4240 | - ] | |
| 4241 | - }. | |
| 4242 | 4267 | |
| 4243 | 4268 | define Printable_tree |
| 4244 | 4269 | format | ... | ... |
calexium_lib/web/CXM_multihost_http_server.anubis
| ... | ... | @@ -2306,7 +2306,8 @@ public define List(HTTP_header) |
| 2306 | 2306 | = |
| 2307 | 2307 | [ |
| 2308 | 2308 | http_header("Date", format_http_date(now)), |
| 2309 | - http_header("Server", "Anubis Embedded Server v" + major_version_number + "." + minor_version_number) | |
| 2309 | + http_header("Server", "Anubis Embedded Server v" + major_version_number + "." + minor_version_number), | |
| 2310 | + http_header("Connection", "close"), | |
| 2310 | 2311 | ]. |
| 2311 | 2312 | |
| 2312 | 2313 | public define List(HTTP_header) | ... | ... |