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 @@
+