Commit 8b4b368f40fb62c5583b14081d817309aa56337a
1 parent
5f98667f
add now for DB_date and DB_time
add parameter to specialized element phone to show only the image the get_mb_bool from web arg check the presence of the arg_name with prefixed '~'. If this ~name exists this means that comes from a form and the checkbox is not checked. I made this hack on web form which always create the hidden input with prefixed ~ name. This method allow to determine if the arg name was really sent or not. add more ajax possibilities in web_controller_result. the div can has list of partial_content
Showing
5 changed files
with
155 additions
and
35 deletions
Show diff stats
database/db_types.anubis
| ... | ... | @@ -186,7 +186,16 @@ public define DB_datetime |
| 186 | 186 | now |
| 187 | 187 | = |
| 188 | 188 | db_datetime(_Int_to_ISO_8601_datetime(now)). |
| 189 | - | |
| 189 | + | |
| 190 | +public define DB_date | |
| 191 | + now | |
| 192 | + = | |
| 193 | + db_date(_Int_to_ISO_8601_date(now)). | |
| 194 | + | |
| 195 | +public define DB_time | |
| 196 | + now | |
| 197 | + = | |
| 198 | + db_time(_Int_to_ISO_8601_time(now)). | |
| 190 | 199 | |
| 191 | 200 | public define DB_time |
| 192 | 201 | get_dummy_DB_time | ... | ... |
database/db_utils.anubis
| ... | ... | @@ -268,7 +268,14 @@ public define List(Int) |
| 268 | 268 | with s = (Int)db_integer(explorer)(0), |
| 269 | 269 | db_get_integer_list(table_cursor, [s . so_far]) |
| 270 | 270 | }. |
| 271 | - | |
| 271 | + | |
| 272 | +public define List(Int) | |
| 273 | + db_get_integer_list | |
| 274 | + ( | |
| 275 | + One -> SQLite3Row table_cursor | |
| 276 | + ) = | |
| 277 | + db_get_integer_list(table_cursor, []). | |
| 278 | + | |
| 272 | 279 | public define List(Int) |
| 273 | 280 | db_get_integer_list |
| 274 | 281 | ( |
| ... | ... | @@ -284,7 +291,14 @@ public define List(Int) |
| 284 | 291 | db_get_integer_list(table_cursor, [s . so_far]) |
| 285 | 292 | }. |
| 286 | 293 | |
| 287 | - | |
| 294 | +public define List(Int) | |
| 295 | + db_get_integer_list | |
| 296 | + ( | |
| 297 | + One -> DbRow table_cursor, | |
| 298 | + ) = | |
| 299 | + db_get_integer_list(table_cursor, []). | |
| 300 | + | |
| 301 | + | |
| 288 | 302 | Help to construct clause and a list of bind according to list of SQLite3_update_field. |
| 289 | 303 | This is useful when we want to construct a SQL query with only needs fields. |
| 290 | 304 | ... | ... |
web/CXM_making_a_web_site.anubis
| ... | ... | @@ -302,7 +302,7 @@ public type HTTP_Answer:... |
| 302 | 302 | taken from the data bases. |
| 303 | 303 | |
| 304 | 304 | |
| 305 | - | |
| 305 | +public type HTML_Partial_Content:... | |
| 306 | 306 | |
| 307 | 307 | |
| 308 | 308 | |
| ... | ... | @@ -332,9 +332,57 @@ public type WEB_Controller_Result: |
| 332 | 332 | ajax( |
| 333 | 333 | WEB_Session session, //modified session |
| 334 | 334 | HTTP_Answer http_answer //http answer |
| 335 | - ) | |
| 335 | + ), | |
| 336 | + ajax( | |
| 337 | + HTML_Partial_Content content, | |
| 338 | + String additional_script | |
| 339 | + ), | |
| 340 | + ajax( | |
| 341 | + WEB_Session session, //modified session | |
| 342 | + HTML_Partial_Content content, | |
| 343 | + String additional_script | |
| 344 | + ), | |
| 345 | + ajax( | |
| 346 | + Printable_tree content, | |
| 347 | + String additional_script | |
| 348 | + ), | |
| 349 | + ajax( | |
| 350 | + WEB_Session session, //modified session | |
| 351 | + Printable_tree content, | |
| 352 | + String additional_script | |
| 353 | + ) | |
| 336 | 354 | . |
| 337 | 355 | |
| 356 | +public define WEB_Controller_Result | |
| 357 | + ajax | |
| 358 | + ( | |
| 359 | + HTML_Partial_Content content | |
| 360 | + )= | |
| 361 | + ajax(content, ""). | |
| 362 | + | |
| 363 | +public define WEB_Controller_Result | |
| 364 | + ajax | |
| 365 | + ( | |
| 366 | + WEB_Session session, //modified session | |
| 367 | + HTML_Partial_Content content | |
| 368 | + )= | |
| 369 | + ajax(session, content, ""). | |
| 370 | + | |
| 371 | +public define WEB_Controller_Result | |
| 372 | + ajax | |
| 373 | + ( | |
| 374 | + Printable_tree content | |
| 375 | + )= | |
| 376 | + ajax(content, ""). | |
| 377 | + | |
| 378 | +public define WEB_Controller_Result | |
| 379 | + ajax | |
| 380 | + ( | |
| 381 | + WEB_Session session, //modified session | |
| 382 | + Printable_tree content | |
| 383 | + )= | |
| 384 | + ajax(session, content, ""). | |
| 385 | + | |
| 338 | 386 | public type WEB_Action_Allowed_Protocol: |
| 339 | 387 | http, |
| 340 | 388 | https, |
| ... | ... | @@ -1669,7 +1717,7 @@ public type HTML_Off_Form: |
| 1669 | 1717 | List(HTML_In_Form) content), |
| 1670 | 1718 | in_form (HTML_Id form_id, HTML_In_Form content), |
| 1671 | 1719 | div (List(CoreAttrs), List(HTML_Off_Form) content), |
| 1672 | - div (List(CoreAttrs), HTML_Partial_Content p_content), | |
| 1720 | + div (List(CoreAttrs), List(HTML_Partial_Content) p_content), | |
| 1673 | 1721 | div_empty (List(CoreAttrs)), |
| 1674 | 1722 | iframe (List(CoreAttrs), |
| 1675 | 1723 | List(CSS_Style) /*styles*/, |
| ... | ... | @@ -1977,6 +2025,30 @@ public define HTML_Off_Form |
| 1977 | 2025 | div([], elements) |
| 1978 | 2026 | . |
| 1979 | 2027 | |
| 2028 | +public define HTML_Off_Form | |
| 2029 | + div | |
| 2030 | + ( | |
| 2031 | + HTML_Partial_Content element | |
| 2032 | + )= | |
| 2033 | + div([], [element]) | |
| 2034 | +. | |
| 2035 | + | |
| 2036 | +public define HTML_Off_Form | |
| 2037 | + div | |
| 2038 | + ( | |
| 2039 | + List(CoreAttrs) attrs, | |
| 2040 | + HTML_Partial_Content element | |
| 2041 | + )= | |
| 2042 | + div(attrs, [element]) | |
| 2043 | +. | |
| 2044 | + | |
| 2045 | +public define HTML_Off_Form | |
| 2046 | + div | |
| 2047 | + ( | |
| 2048 | + List(HTML_Partial_Content) elements | |
| 2049 | + )= | |
| 2050 | + div([], elements) | |
| 2051 | +. | |
| 1980 | 2052 | |
| 1981 | 2053 | public define HTML_Off_Form |
| 1982 | 2054 | li |
| ... | ... | @@ -3354,18 +3426,22 @@ define Maybe(WEB_Controller) |
| 3354 | 3426 | failure, |
| 3355 | 3427 | [h . t] then |
| 3356 | 3428 | if h.name = controller_name then |
| 3357 | - println("Controller ["+controller_name+"] found"); | |
| 3429 | + //println("Controller ["+controller_name+"] found"); | |
| 3358 | 3430 | success(h) |
| 3359 | 3431 | else |
| 3360 | 3432 | get_controller(controller_name, t) |
| 3361 | 3433 | } |
| 3362 | 3434 | . |
| 3363 | 3435 | |
| 3436 | +public define JsonValue to_html_ajax_content(Printable_tree content_HTML, String additional_script). | |
| 3437 | +public define JsonValue to_html_ajax_content(HTML_Partial_Content content_HTML, CommonInfo cinfo, String additional_script). | |
| 3438 | + | |
| 3364 | 3439 | define (Maybe(WEB_Session), HTTP_Answer) |
| 3365 | 3440 | apply_controller_action |
| 3366 | 3441 | ( |
| 3367 | 3442 | WEB_Controller controller, |
| 3368 | 3443 | List(WEB_Controller) controllers, |
| 3444 | + CommonInfo cinfo, | |
| 3369 | 3445 | WEB_Session _session, |
| 3370 | 3446 | Maybe(String) _mb_action_name, |
| 3371 | 3447 | (HTTP_Info, |
| ... | ... | @@ -3388,7 +3464,7 @@ define (Maybe(WEB_Session), HTTP_Answer) |
| 3388 | 3464 | if get_controller(get_String(new_session.web_request.lwa, "aws_controller", "root"), controllers) is |
| 3389 | 3465 | { |
| 3390 | 3466 | failure then (failure, error_page(http_not_found, "Initial Session Controller not found", new_session)), |
| 3391 | - success(new_controller) then apply_controller_action(new_controller, controllers, new_session, failure, initial_session), | |
| 3467 | + success(new_controller) then apply_controller_action(new_controller, controllers, cinfo, new_session, failure, initial_session), | |
| 3392 | 3468 | }, |
| 3393 | 3469 | success(action_name) then |
| 3394 | 3470 | println("ACTION_NAME ["+action_name+"]"); |
| ... | ... | @@ -3400,7 +3476,7 @@ define (Maybe(WEB_Session), HTTP_Answer) |
| 3400 | 3476 | if get_controller(get_String(new_session.web_request.lwa, "aws_controller", "root"), controllers) is |
| 3401 | 3477 | { |
| 3402 | 3478 | failure then (failure, error_page(http_not_found, "Redirect Controller not found", new_session)), |
| 3403 | - success(new_controller) then apply_controller_action(new_controller, controllers, new_session, failure, initial_session), | |
| 3479 | + success(new_controller) then apply_controller_action(new_controller, controllers, cinfo, new_session, failure, initial_session), | |
| 3404 | 3480 | }, |
| 3405 | 3481 | |
| 3406 | 3482 | redirect(new_session, r_controller_name, r_action_name) then |
| ... | ... | @@ -3408,7 +3484,7 @@ define (Maybe(WEB_Session), HTTP_Answer) |
| 3408 | 3484 | { |
| 3409 | 3485 | failure then (failure, error_page(http_not_found, "Redirect Controller "+r_controller_name+" not found", new_session)), |
| 3410 | 3486 | success(new_controller) then |
| 3411 | - apply_controller_action(new_controller, controllers, new_session, success(r_action_name), initial_session), | |
| 3487 | + apply_controller_action(new_controller, controllers, cinfo, new_session, success(r_action_name), initial_session), | |
| 3412 | 3488 | }, |
| 3413 | 3489 | |
| 3414 | 3490 | redirect_to_previous then |
| ... | ... | @@ -3417,7 +3493,7 @@ define (Maybe(WEB_Session), HTTP_Answer) |
| 3417 | 3493 | failure then (failure, error_page(http_not_found, "Redirect to previous Controller not found", _session)), |
| 3418 | 3494 | success(new_controller) then |
| 3419 | 3495 | since _session is web_session(lang, entries, _, previous), |
| 3420 | - apply_controller_action(new_controller, controllers, web_session(lang, entries, previous, previous), failure, initial_session), | |
| 3496 | + apply_controller_action(new_controller, controllers, cinfo, web_session(lang, entries, previous, previous), failure, initial_session), | |
| 3421 | 3497 | }, |
| 3422 | 3498 | redirect_to_previous(entries) then |
| 3423 | 3499 | if get_controller(get_String(_session.previous_web_request.lwa, "aws_controller", "root"), controllers) is |
| ... | ... | @@ -3425,11 +3501,17 @@ define (Maybe(WEB_Session), HTTP_Answer) |
| 3425 | 3501 | failure then (failure, error_page(http_not_found, "Redirect to previous Controller not found", _session)), |
| 3426 | 3502 | success(new_controller) then |
| 3427 | 3503 | since _session is web_session(lang, _, _, previous), |
| 3428 | - apply_controller_action(new_controller, controllers, web_session(lang, entries, previous, previous), failure, initial_session), | |
| 3504 | + apply_controller_action(new_controller, controllers, cinfo, web_session(lang, entries, previous, previous), failure, initial_session), | |
| 3429 | 3505 | }, |
| 3430 | - ajax(answer) then (failure, answer), | |
| 3506 | + ajax(answer) then (failure, answer), | |
| 3431 | 3507 | //ajax with modified session that must be saved |
| 3432 | - ajax(session, answer) then (success(session), answer), | |
| 3508 | + ajax(session, answer) then (success(session), answer), | |
| 3509 | + | |
| 3510 | + ajax(content, additional_script) then (failure, json(http_ok, to_html_ajax_content(content, cinfo, additional_script))), | |
| 3511 | + ajax(session, content, additional_script) then (success(session), json(http_ok, to_html_ajax_content(content, cinfo, additional_script))), | |
| 3512 | + ajax(content, additional_script) then (failure, json(http_ok, to_html_ajax_content(content, additional_script))), | |
| 3513 | + ajax(session, content, additional_script) then (success(session), json(http_ok, to_html_ajax_content(content, additional_script))), | |
| 3514 | + | |
| 3433 | 3515 | } |
| 3434 | 3516 | } |
| 3435 | 3517 | . |
| ... | ... | @@ -3463,7 +3545,7 @@ public define Web_Site |
| 3463 | 3545 | )= |
| 3464 | 3546 | //call the initialization function |
| 3465 | 3547 | init(unique); |
| 3466 | - | |
| 3548 | + | |
| 3467 | 3549 | |
| 3468 | 3550 | // |
| 3469 | 3551 | // make required directories (if needed) |
| ... | ... | @@ -3471,7 +3553,8 @@ public define Web_Site |
| 3471 | 3553 | with //web_sites_directory = (String) make_directory(my_anubis_directory+"/web_sites"), |
| 3472 | 3554 | base_directory = (String) make_directory(site_directory), |
| 3473 | 3555 | // state_directory = make_directory(site_directory+"/states"), |
| 3474 | - forget((String)make_directory(site_directory+"/public")); | |
| 3556 | + forget((String)make_directory(site_directory+"/public")); | |
| 3557 | + | |
| 3475 | 3558 | // |
| 3476 | 3559 | // construct tool functions |
| 3477 | 3560 | // TODO 'make_separate_web_args_function' must retrieve state_cookies before parsing web_args if using_state_cookies is true |
| ... | ... | @@ -3492,7 +3575,7 @@ public define Web_Site |
| 3492 | 3575 | //println("host_name "+host_name); |
| 3493 | 3576 | //println(dump_http_info(http_info)); |
| 3494 | 3577 | println(dump_web_arg_values(_lwa)); |
| 3495 | - | |
| 3578 | + with cinfo = info(host_name, http_port, https_port, site_directory, secret), | |
| 3496 | 3579 | |
| 3497 | 3580 | //retrieve the previous session and determine the new one |
| 3498 | 3581 | with current_session = if retrieve_session(http_info, state_directory, website_name) is |
| ... | ... | @@ -3519,7 +3602,7 @@ public define Web_Site |
| 3519 | 3602 | (failure, error_page(http_not_found, "Controller not found", current_session)), |
| 3520 | 3603 | |
| 3521 | 3604 | success(new_controller) then |
| 3522 | - apply_controller_action(new_controller, *web_controllers, current_session, failure, initial_session), | |
| 3605 | + apply_controller_action(new_controller, *web_controllers, cinfo, current_session, failure, initial_session), | |
| 3523 | 3606 | } |
| 3524 | 3607 | is (mb_new_session, http_answer), |
| 3525 | 3608 | |
| ... | ... | @@ -3534,7 +3617,7 @@ public define Web_Site |
| 3534 | 3617 | }, |
| 3535 | 3618 | |
| 3536 | 3619 | //formatting and send http answer because this is the last function |
| 3537 | - format(info(host_name, http_port, https_port, site_directory, secret), | |
| 3620 | + format(cinfo, | |
| 3538 | 3621 | //state_name, |
| 3539 | 3622 | additional_headers(mb_new_session) + cookie_headers, |
| 3540 | 3623 | http_answer, |
| ... | ... | @@ -5428,9 +5511,9 @@ define Printable_tree |
| 5428 | 5511 | format_label(label, id)], |
| 5429 | 5512 | check_box(options, label, id, n, v, c) then |
| 5430 | 5513 | [ format_label(label, id), |
| 5431 | - "<input type=\"checkbox\" name=\"",n,"\" id=\"",id,"\" value=\"",v,"\"",(if c then " checked=\"checked\" " else ""),format_attrs([class("in") . options])," />"] | |
| 5514 | + "<input type=\"hidden\" name=\"~",n,"\" value=\"~",v,"\" /><input type=\"checkbox\" name=\"",n,"\" id=\"",id,"\" value=\"",v,"\"",(if c then " checked=\"checked\" " else ""),format_attrs([class("in") . options])," />"] | |
| 5432 | 5515 | check_box_r(options, label, id, n, v, c) then |
| 5433 | - [ "<input type=\"checkbox\" name=\"",n,"\" id=\"",id,"\" value=\"",v,"\"",(if c then " checked=\"checked\" " else ""),format_attrs([class("in") . options])," />", | |
| 5516 | + [ "<input type=\"hidden\" name=\"~",n,"\" value=\"~",v,"\" /><input type=\"checkbox\" name=\"",n,"\" id=\"",id,"\" value=\"",v,"\"",(if c then " checked=\"checked\" " else ""),format_attrs([class("in") . options])," />", | |
| 5434 | 5517 | format_label(label, id)] |
| 5435 | 5518 | div(options, e) then |
| 5436 | 5519 | format(cinfo,ic_v,any_div(options, e),format_element,is_https, action_count, head_tags), |
| ... | ... | @@ -5659,9 +5742,9 @@ define Printable_tree |
| 5659 | 5742 | div(options, e) then |
| 5660 | 5743 | format(cinfo, ic_v, any_div(options, e), format_element, is_https, action_count, head_tags), |
| 5661 | 5744 | div(options, p_content) then |
| 5662 | - if p_content is partial_content(tags, html_elements) then | |
| 5663 | - head_tags <- *head_tags +tags; | |
| 5664 | - format(cinfo, ic_v, any_div(options, [html_elements]), format_element, is_https, action_count, head_tags), | |
| 5745 | + 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), | |
| 5746 | + | |
| 5747 | + format(cinfo, ic_v, any_div(options, html_elements), format_element, is_https, action_count, head_tags), | |
| 5665 | 5748 | div_empty(options) then |
| 5666 | 5749 | format(cinfo, ic_v, any_div_empty(options), format_element, is_https, action_count, head_tags), |
| 5667 | 5750 | iframe(options, css_styles, css_files, js_files, body) then |
| ... | ... | @@ -5898,13 +5981,6 @@ public define HTML_ajax_content |
| 5898 | 5981 | html_ajax_content(to_String(content), script, js_file, css_file). |
| 5899 | 5982 | |
| 5900 | 5983 | |
| 5901 | -public define HTML_ajax_content | |
| 5902 | - to_html_ajax_content | |
| 5903 | - ( | |
| 5904 | - HTML_Partial_Content content_HTML, | |
| 5905 | - CommonInfo cinfo | |
| 5906 | - )= to_html_ajax_content(partial(content_HTML), cinfo). | |
| 5907 | - | |
| 5908 | 5984 | public define JsonValue |
| 5909 | 5985 | to_html_ajax_content |
| 5910 | 5986 | ( |
| ... | ... | @@ -5924,6 +6000,13 @@ public define JsonValue |
| 5924 | 6000 | public define JsonValue |
| 5925 | 6001 | to_html_ajax_content |
| 5926 | 6002 | ( |
| 6003 | + HTML_Partial_Content content_HTML, | |
| 6004 | + CommonInfo cinfo | |
| 6005 | + )= to_html_ajax_content(content_HTML, cinfo, ""). | |
| 6006 | + | |
| 6007 | +public define JsonValue | |
| 6008 | + to_html_ajax_content | |
| 6009 | + ( | |
| 5927 | 6010 | Printable_tree content_HTML, |
| 5928 | 6011 | String additional_script |
| 5929 | 6012 | )= | ... | ... |
web/CXM_web_arg_utils.anubis
| ... | ... | @@ -157,8 +157,13 @@ public define Maybe(Bool) |
| 157 | 157 | ) = |
| 158 | 158 | if web_arg_value(lwa, arg_name) is |
| 159 | 159 | { |
| 160 | - not_found then failure, | |
| 161 | - found(value) then success(to_Bool(value)) | |
| 160 | + not_found then | |
| 161 | + if web_arg_value(lwa, "~"+arg_name) is | |
| 162 | + { | |
| 163 | + not_found then failure, | |
| 164 | + found(_) then success(false) | |
| 165 | + }, | |
| 166 | + found(_) then success(true) | |
| 162 | 167 | }. |
| 163 | 168 | |
| 164 | 169 | public define Bool | ... | ... |
web/widgets/specialized_elements.anubis
| ... | ... | @@ -12,20 +12,29 @@ public define HTML_Off_Form |
| 12 | 12 | phone |
| 13 | 13 | ( |
| 14 | 14 | List(CoreAttrs) attrs, |
| 15 | - String phone_number | |
| 15 | + String phone_number, | |
| 16 | + Bool image_only | |
| 16 | 17 | )= |
| 17 | 18 | if phone_number = "" then empty |
| 18 | 19 | else |
| 19 | 20 | with _attrs = [data("phone-number", phone_number), event(onclick, "hk_phone_call(this)"), class("phone_click") . attrs], |
| 20 | 21 | div([ |
| 21 | 22 | image(_attrs, "/icons/16x16/phone.png"), |
| 22 | - text(_attrs, phone_number) | |
| 23 | + if image_only then empty else | |
| 24 | + text(_attrs, phone_number) | |
| 23 | 25 | ]) |
| 24 | 26 | . |
| 25 | 27 | |
| 26 | 28 | public define HTML_Off_Form |
| 27 | 29 | phone |
| 28 | 30 | ( |
| 31 | + List(CoreAttrs) attrs, | |
| 32 | + String phone_number | |
| 33 | + )= phone(attrs, phone_number, false). | |
| 34 | + | |
| 35 | +public define HTML_Off_Form | |
| 36 | + phone | |
| 37 | + ( | |
| 29 | 38 | String phone_number |
| 30 | 39 | )= |
| 31 | 40 | phone([], phone_number) | ... | ... |