From 74995101d19c2800479a2836418d86cbc88df573 Mon Sep 17 00:00:00 2001 From: YNH Webdev Date: Tue, 27 Aug 2013 15:58:56 +0200 Subject: [PATCH] Add a json state to each control --- .../wsf_html/webcontrol/wsf_button_control.e | 51 +++++++++++++++++++ .../server/wsf_html/webcontrol/wsf_control.e | 22 ++++++-- .../wsf_html/webcontrol/wsf_page_control.e | 5 ++ library/server/wsf_html/wsf_html-safe.ecf | 1 + 4 files changed, 76 insertions(+), 3 deletions(-) create mode 100644 library/server/wsf_html/webcontrol/wsf_button_control.e diff --git a/library/server/wsf_html/webcontrol/wsf_button_control.e b/library/server/wsf_html/webcontrol/wsf_button_control.e new file mode 100644 index 00000000..b286bc17 --- /dev/null +++ b/library/server/wsf_html/webcontrol/wsf_button_control.e @@ -0,0 +1,51 @@ +note + description: "Summary description for {WSF_BUTTON_CONTROL}." + author: "" + date: "$Date$" + revision: "$Revision$" + +class + WSF_BUTTON_CONTROL + +inherit + WSF_CONTROL +create + make +feature {NONE} + make (n:STRING; v:STRING) + do + make_control + control_name:=n + text:=v + click_event:= agent donothing + end +feature + + --UGLY HACK MUST BE REMOVED + donothing(p:WSF_PAGE_CONTROL) + do + + end + handle_callback(event: STRING ; cname: STRING ; page: WSF_PAGE_CONTROL) + do + if Current.control_name = cname and attached click_event then + click_event.call([page]) + end + end + + render:STRING + do + Result:="" + end + + state:JSON_OBJECT + do + create Result.make + Result.put (create {JSON_STRING}.make_json(text), create {JSON_STRING}.make_json("text")) + end + + +feature + text: STRING + click_event: PROCEDURE [ANY, TUPLE [WSF_PAGE_CONTROL]] +end diff --git a/library/server/wsf_html/webcontrol/wsf_control.e b/library/server/wsf_html/webcontrol/wsf_control.e index 6e7a01ea..5d027501 100644 --- a/library/server/wsf_html/webcontrol/wsf_control.e +++ b/library/server/wsf_html/webcontrol/wsf_control.e @@ -6,16 +6,32 @@ note deferred class WSF_CONTROL +feature {NONE} + make_control + do + control_name:="" + end + feature - name: STRING + control_name: STRING feature {WSF_PAGE_CONTROL} - handle_callback(event: STRING ; control_name: STRING ; page: WSF_PAGE_CONTROL) + handle_callback(event: STRING ; cname: STRING ; page: WSF_PAGE_CONTROL) deferred end - render:STRING + render: STRING deferred end + + state: JSON_OBJECT + deferred + end + + read_state(states:JSON_OBJECT) + do + states.put (state, create {JSON_STRING}.make_json(control_name)) + end + end diff --git a/library/server/wsf_html/webcontrol/wsf_page_control.e b/library/server/wsf_html/webcontrol/wsf_page_control.e index f4ed32f3..2d8fd33b 100644 --- a/library/server/wsf_html/webcontrol/wsf_page_control.e +++ b/library/server/wsf_html/webcontrol/wsf_page_control.e @@ -38,12 +38,17 @@ feature local event: detachable STRING control_name: detachable STRING + states:JSON_OBJECT do initialize_controls control_name := get_parameter("control_name") event := get_parameter("event") if attached event and attached control_name and attached control then control.handle_callback (control_name,event, Current) + create states.make + control.read_state(states) + response.put_header ({HTTP_STATUS_CODE}.ok, <<["Content-Type", "application/json"]>>) + response.put_string (states.representation) else process render diff --git a/library/server/wsf_html/wsf_html-safe.ecf b/library/server/wsf_html/wsf_html-safe.ecf index ee951503..e5aaeeb4 100644 --- a/library/server/wsf_html/wsf_html-safe.ecf +++ b/library/server/wsf_html/wsf_html-safe.ecf @@ -12,6 +12,7 @@ +