diff --git a/draft/library/wsf_js_widget/kernel/grid/wsf_pagination_control.e b/draft/library/wsf_js_widget/kernel/grid/wsf_pagination_control.e index 1e377627..df09e443 100644 --- a/draft/library/wsf_js_widget/kernel/grid/wsf_pagination_control.e +++ b/draft/library/wsf_js_widget/kernel/grid/wsf_pagination_control.e @@ -48,7 +48,7 @@ feature {WSF_PAGE_CONTROL, WSF_CONTROL} -- State management feature --Event handling - handle_callback (cname: LIST[STRING]; event: STRING; event_parameter: detachable STRING) + handle_callback (cname: LIST[STRING]; event: STRING; event_parameter: detachable ANY) -- Handle goto/next/prev events do if Current.control_name.same_string (cname[1]) then @@ -57,7 +57,7 @@ feature --Event handling elseif event.same_string ("prev") then datasource.set_page (datasource.page - 1) elseif event.same_string ("goto") then - if attached event_parameter as p and then attached p.to_integer as i then + if attached {STRING}event_parameter as p and then attached p.to_integer as i then datasource.set_page (i) end end diff --git a/draft/library/wsf_js_widget/kernel/input/wsf_autocomplete_control.e b/draft/library/wsf_js_widget/kernel/input/wsf_autocomplete_control.e index f484947c..ae9de051 100644 --- a/draft/library/wsf_js_widget/kernel/input/wsf_autocomplete_control.e +++ b/draft/library/wsf_js_widget/kernel/input/wsf_autocomplete_control.e @@ -49,7 +49,7 @@ feature -- State feature -- Callback - handle_callback (cname: LIST[STRING]; event: STRING; event_parameter: detachable STRING) + handle_callback (cname: LIST[STRING]; event: STRING; event_parameter: detachable ANY) do Precursor {WSF_INPUT_CONTROL} (cname, event, event_parameter) if cname[1].same_string (control_name) and event.same_string ("autocomplete") then diff --git a/draft/library/wsf_js_widget/kernel/input/wsf_checkbox_control.e b/draft/library/wsf_js_widget/kernel/input/wsf_checkbox_control.e index 6afa3e6f..dbb35c61 100644 --- a/draft/library/wsf_js_widget/kernel/input/wsf_checkbox_control.e +++ b/draft/library/wsf_js_widget/kernel/input/wsf_checkbox_control.e @@ -54,7 +54,7 @@ feature --Event handling change_event := e end - handle_callback (cname: LIST[STRING]; event: STRING; event_parameter: detachable STRING) + handle_callback (cname: LIST[STRING]; event: STRING; event_parameter: detachable ANY) do if Current.control_name.same_string (cname[1]) and attached change_event as cevent then if event.same_string ("change") then diff --git a/draft/library/wsf_js_widget/kernel/input/wsf_file_control.e b/draft/library/wsf_js_widget/kernel/input/wsf_file_control.e index 4d2449c4..c1bef063 100644 --- a/draft/library/wsf_js_widget/kernel/input/wsf_file_control.e +++ b/draft/library/wsf_js_widget/kernel/input/wsf_file_control.e @@ -49,7 +49,7 @@ feature --Event handling change_event := e end - handle_callback (cname: LIST [STRING]; event: STRING; event_parameter: detachable STRING) + handle_callback (cname: LIST [STRING]; event: STRING; event_parameter: detachable ANY) do if Current.control_name.same_string (cname [1]) and attached change_event as cevent then if event.same_string ("change") then @@ -58,6 +58,17 @@ feature --Event handling end end +feature -- Upload + + start_upload + local + upload: WSF_JSON_OBJECT + do + create upload.make + upload.put_string ("start_upload", "type") + actions.add (upload) + end + feature -- Implementation value: detachable WSF_PENDING_FILE diff --git a/draft/library/wsf_js_widget/kernel/input/wsf_input_control.e b/draft/library/wsf_js_widget/kernel/input/wsf_input_control.e index e0511bb0..d243bd7d 100644 --- a/draft/library/wsf_js_widget/kernel/input/wsf_input_control.e +++ b/draft/library/wsf_js_widget/kernel/input/wsf_input_control.e @@ -53,7 +53,7 @@ feature --Event handling change_event := e end - handle_callback (cname: LIST[STRING]; event: STRING; event_parameter: detachable STRING) + handle_callback (cname: LIST[STRING]; event: STRING; event_parameter: detachable ANY) do if Current.control_name.same_string (cname[1]) and attached change_event as cevent then if event.same_string ("change") then diff --git a/draft/library/wsf_js_widget/kernel/progressbar/wsf_progress_control.e b/draft/library/wsf_js_widget/kernel/progressbar/wsf_progress_control.e index 2f772db6..07113ecf 100644 --- a/draft/library/wsf_js_widget/kernel/progressbar/wsf_progress_control.e +++ b/draft/library/wsf_js_widget/kernel/progressbar/wsf_progress_control.e @@ -51,7 +51,7 @@ feature -- State handling feature -- Event handling - handle_callback (cname: LIST[STRING]; event: STRING; event_parameter: detachable STRING) + handle_callback (cname: LIST[STRING]; event: STRING; event_parameter: detachable ANY) do if cname[1].same_string (control_name) and event.same_string ("progress_fetch") then state_changes.put_integer (progress_value, "progress") diff --git a/draft/library/wsf_js_widget/kernel/slider/wsf_slider_control.e b/draft/library/wsf_js_widget/kernel/slider/wsf_slider_control.e index 0e5263e1..c952977c 100644 --- a/draft/library/wsf_js_widget/kernel/slider/wsf_slider_control.e +++ b/draft/library/wsf_js_widget/kernel/slider/wsf_slider_control.e @@ -43,7 +43,7 @@ feature -- State handling feature -- Callback - handle_callback (cname: LIST[STRING]; event: STRING; event_parameter: detachable STRING) + handle_callback (cname: LIST[STRING]; event: STRING; event_parameter: detachable ANY) do -- Do nothing here end diff --git a/draft/library/wsf_js_widget/kernel/webcontrol/wsf_button_control.e b/draft/library/wsf_js_widget/kernel/webcontrol/wsf_button_control.e index dd06596f..3b49767e 100644 --- a/draft/library/wsf_js_widget/kernel/webcontrol/wsf_button_control.e +++ b/draft/library/wsf_js_widget/kernel/webcontrol/wsf_button_control.e @@ -54,7 +54,7 @@ feature --Event handling click_event := e end - handle_callback (cname: LIST[STRING]; event: STRING; event_parameter: detachable STRING) + handle_callback (cname: LIST[STRING]; event: STRING; event_parameter: detachable ANY) do if Current.control_name.same_string (cname[1]) and attached click_event as cevent then cevent.call (Void) diff --git a/draft/library/wsf_js_widget/kernel/webcontrol/wsf_control.e b/draft/library/wsf_js_widget/kernel/webcontrol/wsf_control.e index c7fffb10..102d8b5e 100644 --- a/draft/library/wsf_js_widget/kernel/webcontrol/wsf_control.e +++ b/draft/library/wsf_js_widget/kernel/webcontrol/wsf_control.e @@ -52,12 +52,12 @@ feature -- Actions show_alert (message: STRING) --Start a modal window containg an other or the same page local - modal: WSF_JSON_OBJECT + alert: WSF_JSON_OBJECT do - create modal.make - modal.put_string ("show_alert", "type") - modal.put_string (message, "message") - actions.add (modal) + create alert.make + alert.put_string ("show_alert", "type") + alert.put_string (message, "message") + actions.add (alert) end redirect (url: STRING) @@ -154,7 +154,7 @@ feature -- Rendering feature -- Event handling - handle_callback (cname: LIST [STRING]; event: STRING; event_parameter: detachable STRING) + handle_callback (cname: LIST [STRING]; event: STRING; event_parameter: detachable ANY) -- Method called if any callback received. In this method you can route the callback to the event handler deferred end diff --git a/draft/library/wsf_js_widget/kernel/webcontrol/wsf_form_element_control.e b/draft/library/wsf_js_widget/kernel/webcontrol/wsf_form_element_control.e index acd49e18..1c759e94 100644 --- a/draft/library/wsf_js_widget/kernel/webcontrol/wsf_form_element_control.e +++ b/draft/library/wsf_js_widget/kernel/webcontrol/wsf_form_element_control.e @@ -121,7 +121,7 @@ feature {WSF_PAGE_CONTROL, WSF_CONTROL} -- State management feature -- Event handling - handle_callback (cname: LIST [STRING]; event: STRING; event_parameter: detachable STRING) + handle_callback (cname: LIST [STRING]; event: STRING; event_parameter: detachable ANY) -- Pass callback to subcontrols do if cname [1].same_string (control_name) then diff --git a/draft/library/wsf_js_widget/kernel/webcontrol/wsf_html_control.e b/draft/library/wsf_js_widget/kernel/webcontrol/wsf_html_control.e index 11335fd4..59998e00 100644 --- a/draft/library/wsf_js_widget/kernel/webcontrol/wsf_html_control.e +++ b/draft/library/wsf_js_widget/kernel/webcontrol/wsf_html_control.e @@ -43,7 +43,7 @@ feature {WSF_PAGE_CONTROL, WSF_CONTROL} -- State management feature --Event handling - handle_callback (cname: LIST[STRING]; event: STRING; event_parameter: detachable STRING) + handle_callback (cname: LIST[STRING]; event: STRING; event_parameter: detachable ANY) do end diff --git a/draft/library/wsf_js_widget/kernel/webcontrol/wsf_multi_control.e b/draft/library/wsf_js_widget/kernel/webcontrol/wsf_multi_control.e index bf5ad890..44da1df7 100644 --- a/draft/library/wsf_js_widget/kernel/webcontrol/wsf_multi_control.e +++ b/draft/library/wsf_js_widget/kernel/webcontrol/wsf_multi_control.e @@ -132,7 +132,7 @@ feature {WSF_PAGE_CONTROL, WSF_CONTROL} -- State management feature -- Event handling - handle_callback (cname: LIST [STRING]; event: STRING; event_parameter: detachable STRING) + handle_callback (cname: LIST [STRING]; event: STRING; event_parameter: detachable ANY) -- Pass callback to subcontrols do if equal (cname [1], control_name) then diff --git a/draft/library/wsf_js_widget/kernel/webcontrol/wsf_page_control.e b/draft/library/wsf_js_widget/kernel/webcontrol/wsf_page_control.e index e4848ca9..9ec447df 100644 --- a/draft/library/wsf_js_widget/kernel/webcontrol/wsf_page_control.e +++ b/draft/library/wsf_js_widget/kernel/webcontrol/wsf_page_control.e @@ -59,7 +59,7 @@ feature -- Implementation -- If request is not a callback. Run process and render the html page local event: detachable STRING - event_parameter: detachable STRING + event_parameter: detachable ANY event_control_name: detachable STRING states: STRING states_changes: WSF_JSON_OBJECT @@ -74,6 +74,11 @@ feature -- Implementation create json_parser.make_parser (states) if attached {JSON_OBJECT} json_parser.parse_json as sp then set_state (sp) + else + if attached request.form_parameter ("file") as o then + response.put_string (o.name) + end + end handle_callback (event_control_name.split ('-'), event, event_parameter) create states_changes.make @@ -147,7 +152,7 @@ feature -- Implementation feature -- Event handling - handle_callback (cname: LIST[STRING]; event: STRING; event_parameter: detachable STRING) + handle_callback (cname: LIST[STRING]; event: STRING; event_parameter: detachable ANY) -- Forward callback to control do control.handle_callback (cname, event, event_parameter) diff --git a/draft/library/wsf_js_widget/kernel/webcontrol/wsf_stateless_multi_control.e b/draft/library/wsf_js_widget/kernel/webcontrol/wsf_stateless_multi_control.e index 7dba1109..9e3579cd 100644 --- a/draft/library/wsf_js_widget/kernel/webcontrol/wsf_stateless_multi_control.e +++ b/draft/library/wsf_js_widget/kernel/webcontrol/wsf_stateless_multi_control.e @@ -76,7 +76,7 @@ feature end feature -- Event handling - handle_callback (cname: LIST [STRING]; event: STRING; event_parameter: detachable STRING) + handle_callback (cname: LIST [STRING]; event: STRING; event_parameter: detachable ANY) -- Pass callback to subcontrols do across diff --git a/examples/widgetapp/assets/widget.coffee b/examples/widgetapp/assets/widget.coffee index 2bbb9686..6ee695ff 100644 --- a/examples/widgetapp/assets/widget.coffee +++ b/examples/widgetapp/assets/widget.coffee @@ -180,13 +180,21 @@ class WSF_CONTROL process_actions: (actions)-> for action in actions try - fn = eval(action.type) - fn(action) + fn = null + #Check if action exists in class then check global + if @[action.type]? + fn = @[action.type] + fn.call(@, action) + else + fn = eval(action.type) + fn(action) catch e console.log "Failed preforming action #{action.type}" process_update: (new_states)-> try + if new_states.actions? + @process_actions(new_states.actions) if new_states[@control_name]? @update(new_states[@control_name]) for control in @controls @@ -289,8 +297,6 @@ class WSF_PAGE_CONTROL extends WSF_CONTROL @load_subcontrols() process_update: (new_states)-> - if new_states.actions? - @process_actions(new_states.actions) for control in @controls if control? control.process_update(new_states) @@ -361,6 +367,50 @@ class WSF_INPUT_CONTROL extends WSF_CONTROL @$el.val(state.text) class WSF_FILE_CONTROL extends WSF_CONTROL + constructor: ()-> + super + @uploading = false + start_upload: ()-> + if @uploading + return + @uploading = true + @$el.hide() + @progressbar = $ """