From deaeaa434ded472f791846038232eb8a746c6189 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Severin=20M=C3=BCnger?= Date: Thu, 5 Sep 2013 16:25:44 +0200 Subject: [PATCH] Implemented WSF_FORM_ELEMENT_CONTROL --- .../server/wsf_html/webcontrol/wsf_control.e | 29 +++++---- .../webcontrol/wsf_form_element_control.e | 61 ++++++++++++++++--- .../wsf_html/webcontrol/wsf_multi_control.e | 4 +- .../wsf_html/webcontrol/wsf_validator.e | 14 +++-- .../wsf_html/webcontrol/wsf_value_control.e | 4 ++ 5 files changed, 85 insertions(+), 27 deletions(-) diff --git a/library/server/wsf_html/webcontrol/wsf_control.e b/library/server/wsf_html/webcontrol/wsf_control.e index 47af1c05..16efe48d 100644 --- a/library/server/wsf_html/webcontrol/wsf_control.e +++ b/library/server/wsf_html/webcontrol/wsf_control.e @@ -13,7 +13,7 @@ feature tag_name: STRING - css_class: LINKED_LIST [STRING] + css_classes: LINKED_LIST [STRING] feature {NONE} @@ -21,11 +21,11 @@ feature {NONE} do control_name := n tag_name := a_tag_name - create css_class.make + create css_classes.make create state_changes.make ensure attached state_changes - attached css_class + attached css_classes end feature {WSF_PAGE_CONTROL, WSF_CONTROL} -- STATE MANAGEMENT @@ -73,20 +73,25 @@ feature --EVENT HANDLING feature - render_tag(body,attributes:STRING):STRING - local - css_class_string: STRING + add_class (c: STRING) do - css_class_string := "" + css_classes.extend (c) + end + + render_tag (body, attributes: STRING): STRING + local + css_classes_string: STRING + do + css_classes_string := "" across - css_class as c + css_classes as c loop - css_class_string := css_class_string + " " + c.item + css_classes_string := css_classes_string + " " + c.item end - if not css_class_string.is_empty then - css_class_string := " class=%"" + css_class_string + "%"" + if not css_classes_string.is_empty then + css_classes_string := " class=%"" + css_classes_string + "%"" end - Result:="<"+tag_name+" data-name=%"" + control_name + "%" data-type=%""+generator+"%" "+attributes+css_class_string + Result := "<" + tag_name + " data-name=%"" + control_name + "%" data-type=%"" + generator + "%" " + attributes + css_classes_string if not body.is_empty then Result := Result + " />" else 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 45fb8380..7f0d376a 100644 --- a/library/server/wsf_html/webcontrol/wsf_form_element_control.e +++ b/library/server/wsf_html/webcontrol/wsf_form_element_control.e @@ -11,24 +11,71 @@ inherit WSF_CONTROL +create + make_form_element + +feature {NONE} + + make_form_element (n: STRING; c: WSF_VALUE_CONTROL [G]; v: LINKED_LIST [WSF_VALIDATOR [G]]) + do + make (n, "div") + add_class ("form-group") + value_control := c + validators := v + label := "" + error := "" + end + feature is_valid (value: G): BOOLEAN do - if attached validate as v then - Result := v.item ([value]) - else - Result := True + Result := True + across + validators as c + loop end end +feature --Implementation + + set_state (new_state: JSON_OBJECT) + do + value_control.set_state (new_state) + end + + state: JSON_OBJECT + do + Result := value_control.state + end + + handle_callback (cname, event: STRING_8) + do + value_control.handle_callback (cname, event) + end + + render: STRING + local + body:STRING + do + body := "" + if not label.is_empty then + body := "" + end + body := body + "
" + body := body + value_control.render + body := body + "
" + Result := render_tag (body, "") + end feature - value_control: WSF_VALUE_CONTROL[G] + value_control: WSF_VALUE_CONTROL [G] - validate: detachable FUNCTION [ANY, TUPLE [G], BOOLEAN] + validators: LINKED_LIST [WSF_VALIDATOR [G]] - + label: STRING + + error: STRING end diff --git a/library/server/wsf_html/webcontrol/wsf_multi_control.e b/library/server/wsf_html/webcontrol/wsf_multi_control.e index d82611cc..9bdd5c24 100644 --- a/library/server/wsf_html/webcontrol/wsf_multi_control.e +++ b/library/server/wsf_html/webcontrol/wsf_multi_control.e @@ -80,7 +80,7 @@ feature {WSF_PAGE_CONTROL, WSF_CONTROL} -- STATE MANAGEMENT feature --EVENT HANDLING - handle_callback (event: STRING; cname: STRING) + handle_callback (cname: STRING; event: STRING) -- Pass callback to subcontrols do if equal (cname, control_name) then @@ -88,7 +88,7 @@ feature --EVENT HANDLING across controls as c loop - c.item.handle_callback (event, cname) + c.item.handle_callback (cname, event) end end end diff --git a/library/server/wsf_html/webcontrol/wsf_validator.e b/library/server/wsf_html/webcontrol/wsf_validator.e index f7988814..dd29be01 100644 --- a/library/server/wsf_html/webcontrol/wsf_validator.e +++ b/library/server/wsf_html/webcontrol/wsf_validator.e @@ -4,13 +4,15 @@ note date: "$Date$" revision: "$Revision$" -class - WSF_VALIDATOR +deferred class + WSF_VALIDATOR [G] -create - make +feature -feature {NONE} - + validate (input: G): BOOLEAN + deferred + end + + error: STRING end diff --git a/library/server/wsf_html/webcontrol/wsf_value_control.e b/library/server/wsf_html/webcontrol/wsf_value_control.e index 31e6cb99..12f664f0 100644 --- a/library/server/wsf_html/webcontrol/wsf_value_control.e +++ b/library/server/wsf_html/webcontrol/wsf_value_control.e @@ -7,6 +7,10 @@ note deferred class WSF_VALUE_CONTROL [G] +inherit + + WSF_CONTROL + feature value: G