From 59a12dcac1bc404782f5a6d23d249720192d2666 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Severin=20M=C3=BCnger?= Date: Fri, 6 Sep 2013 01:20:41 +0200 Subject: [PATCH] Added checkbox list, modified form validation --- examples/widgetapp/widget.coffee | 1 + .../validators/wsf_email_validator.e | 2 +- .../webcontrol/wsf_checkbox_control.e | 5 +++- .../webcontrol/wsf_checkbox_list_control.e | 24 +++++++++++++++++++ .../wsf_html/webcontrol/wsf_form_control.e | 22 ++++++++++++++--- .../webcontrol/wsf_form_element_control.e | 7 +++++- .../wsf_html/webcontrol/wsf_multi_control.e | 9 +++---- 7 files changed, 60 insertions(+), 10 deletions(-) create mode 100644 library/server/wsf_html/webcontrol/wsf_checkbox_list_control.e diff --git a/examples/widgetapp/widget.coffee b/examples/widgetapp/widget.coffee index fc334f39..af353f20 100644 --- a/examples/widgetapp/widget.coffee +++ b/examples/widgetapp/widget.coffee @@ -75,6 +75,7 @@ typemap = "WSF_BUTTON_CONTROL":WSF_BUTTON_CONTROL "WSF_TEXT_CONTROL":WSF_TEXT_CONTROL "WSF_TEXTAREA_CONTROL":WSF_TEXTAREA_CONTROL + "WSF_FORM_CONTROL":WSF_FORM_CONTROL #create a js class for each control for name,state of window.states diff --git a/library/server/wsf_html/webcontrol/validators/wsf_email_validator.e b/library/server/wsf_html/webcontrol/validators/wsf_email_validator.e index a9578e12..68ff9360 100644 --- a/library/server/wsf_html/webcontrol/validators/wsf_email_validator.e +++ b/library/server/wsf_html/webcontrol/validators/wsf_email_validator.e @@ -14,7 +14,7 @@ inherit create make_email_validator -feature +feature{NONE} make_email_validator (e: STRING) do diff --git a/library/server/wsf_html/webcontrol/wsf_checkbox_control.e b/library/server/wsf_html/webcontrol/wsf_checkbox_control.e index 91c67778..bf40d944 100644 --- a/library/server/wsf_html/webcontrol/wsf_checkbox_control.e +++ b/library/server/wsf_html/webcontrol/wsf_checkbox_control.e @@ -6,8 +6,11 @@ note class WSF_CHECKBOX_CONTROL + inherit - WSF_VALUE_CONTROL[BOOLEAN] + + WSF_VALUE_CONTROL [BOOLEAN] + create make_checkbox diff --git a/library/server/wsf_html/webcontrol/wsf_checkbox_list_control.e b/library/server/wsf_html/webcontrol/wsf_checkbox_list_control.e new file mode 100644 index 00000000..9f9bd8e8 --- /dev/null +++ b/library/server/wsf_html/webcontrol/wsf_checkbox_list_control.e @@ -0,0 +1,24 @@ +note + description: "Summary description for {WSF_CHECKBOX_LIST_CONTROL}." + author: "" + date: "$Date$" + revision: "$Revision$" + +class + WSF_CHECKBOX_LIST_CONTROL + +inherit + + WSF_MULTI_CONTROL[WSF_CHECKBOX_CONTROL] + +create + make_checkbox_list_control + +feature {NONE} + + make_checkbox_list_control (n: STRING) + do + make_multi_control (n) + end + +end diff --git a/library/server/wsf_html/webcontrol/wsf_form_control.e b/library/server/wsf_html/webcontrol/wsf_form_control.e index 7008b2ff..dec7fa21 100644 --- a/library/server/wsf_html/webcontrol/wsf_form_control.e +++ b/library/server/wsf_html/webcontrol/wsf_form_control.e @@ -9,7 +9,7 @@ class inherit - WSF_MULTI_CONTROL + WSF_MULTI_CONTROL [WSF_CONTROL] create make_form_control @@ -22,8 +22,24 @@ feature {NONE} tag_name := "form" end -feature +feature -- Validation - + validate: BOOLEAN + do + Result := True + across + controls as c + until + Result = False + loop + -- TODO: Change generic parameter of elm from ANY to if something like that is available in Eiffel. + -- Otherwise, check separately for STRING, LIST... + if attached {WSF_FORM_ELEMENT_CONTROL[ANY]} c.item as elem then + if not elem.is_valid then + Result := False + end + end + end + end end diff --git a/library/server/wsf_html/webcontrol/wsf_form_element_control.e b/library/server/wsf_html/webcontrol/wsf_form_element_control.e index ea1bc5a9..52184072 100644 --- a/library/server/wsf_html/webcontrol/wsf_form_element_control.e +++ b/library/server/wsf_html/webcontrol/wsf_form_element_control.e @@ -37,12 +37,17 @@ feature {NONE} feature - is_valid (value: G): BOOLEAN + is_valid (): BOOLEAN do Result := True across validators as c + until + not Result loop + if not c.item.validate (value_control.value) then + Result := False + end end end diff --git a/library/server/wsf_html/webcontrol/wsf_multi_control.e b/library/server/wsf_html/webcontrol/wsf_multi_control.e index 9bdd5c24..20521e12 100644 --- a/library/server/wsf_html/webcontrol/wsf_multi_control.e +++ b/library/server/wsf_html/webcontrol/wsf_multi_control.e @@ -5,7 +5,7 @@ note revision: "$Revision$" class - WSF_MULTI_CONTROL + WSF_MULTI_CONTROL[G -> WSF_CONTROL] inherit @@ -18,14 +18,15 @@ inherit create make_multi_control + feature {NONE} - controls: LINKED_LIST [WSF_CONTROL] + controls: LINKED_LIST [G] make_multi_control (n: STRING) do make (n, "div") - controls := create {LINKED_LIST [WSF_CONTROL]}.make; + controls := create {LINKED_LIST [G]}.make; end feature {WSF_PAGE_CONTROL, WSF_CONTROL} -- STATE MANAGEMENT @@ -106,7 +107,7 @@ feature Result := render_tag (Result, "") end - add_control (c: WSF_CONTROL) + add_control (c: G) do controls.put_front (c) end