Redesign states and implement generated control_name

This commit is contained in:
YNH Webdev
2013-11-08 00:03:02 +01:00
parent c9102af0aa
commit 86339d8163
33 changed files with 433 additions and 153 deletions

View File

@@ -44,7 +44,7 @@ feature -- Change
local
li: WSF_MULTI_CONTROL [WSF_STATELESS_CONTROL]
do
create li.make_with_tag_name (control_name + "_item" + dropdown_menu.controls.count.out, "li")
create li.make_with_tag_name ("li")
li.add_control (c)
dropdown_menu.add_control (li)
end

View File

@@ -21,9 +21,9 @@ create
feature {NONE} -- Initialization
make (n: STRING; a_columns: ITERABLE [WSF_GRID_COLUMN]; a_datasource: WSF_DATASOURCE [G])
make (a_columns: ITERABLE [WSF_GRID_COLUMN]; a_datasource: WSF_DATASOURCE [G])
do
make_repeater (n, a_datasource)
make_repeater (a_datasource)
columns := a_columns
end

View File

@@ -19,9 +19,9 @@ create
feature {NONE}
make (n: STRING; ds: WSF_PAGABLE_DATASOURCE [G])
make (ds: WSF_PAGABLE_DATASOURCE [G])
do
make_control (n, "ul")
make_control ( "ul")
add_class ("pagination")
datasource := ds
datasource.set_on_update_page_agent (agent update)
@@ -48,10 +48,10 @@ feature {WSF_PAGE_CONTROL, WSF_CONTROL} -- State management
feature --Event handling
handle_callback (cname: STRING; event: STRING; event_parameter: detachable STRING)
handle_callback (cname: LIST[STRING]; event: STRING; event_parameter: detachable STRING)
-- Handle goto/next/prev events
do
if Current.control_name.same_string (cname) then
if Current.control_name.same_string (cname[1]) then
if event.same_string ("next") then
datasource.set_page (datasource.page + 1)
elseif event.same_string ("prev") then

View File

@@ -20,15 +20,15 @@ inherit
feature {NONE} -- Initialization
make (n: STRING; a_datasource: WSF_DATASOURCE [G])
make ( a_datasource: WSF_DATASOURCE [G])
local
p: WSF_PAGINATION_CONTROL [G]
do
make_multi_control (n)
make_multi_control
datasource := a_datasource
datasource.set_on_update_agent (agent update)
if attached {WSF_PAGABLE_DATASOURCE [G]} a_datasource as ds then
create p.make (n + "_paging", ds)
create p.make ( ds)
add_control (p)
pagination_control := p
end

View File

@@ -22,19 +22,19 @@ create
feature {NONE} -- Initialization
make (n: STRING; c: WSF_AUTOCOMPLETION)
make (c: WSF_AUTOCOMPLETION)
-- Initialize with specified name and autocompletion
do
make_with_agent (n, agent c.autocompletion)
make_with_agent ( agent c.autocompletion)
if attached c.template as t then
template := t
end
end
make_with_agent (n: STRING; c: FUNCTION [ANY, TUPLE [STRING], JSON_ARRAY])
make_with_agent (c: FUNCTION [ANY, TUPLE [STRING], JSON_ARRAY])
-- Initialize with specified name and autocompletion function
do
make_input (n, "")
make_input ( "")
create_json_list := c
template := "{{=value}}"
end
@@ -49,10 +49,10 @@ feature -- State
feature -- Callback
handle_callback (cname: STRING; event: STRING; event_parameter: detachable STRING)
handle_callback (cname: LIST[STRING]; event: STRING; event_parameter: detachable STRING)
do
Precursor {WSF_INPUT_CONTROL} (cname, event, event_parameter)
if cname.same_string (control_name) and event.same_string ("autocomplete") then
if cname[1].same_string (control_name) and event.same_string ("autocomplete") then
state_changes.put (create_json_list.item ([text]), "suggestions")
end
end

View File

@@ -19,10 +19,10 @@ create
feature {NONE} -- Initialization
make (n, l, c: STRING)
make (l, c: STRING)
-- Initialize with specified control name,
do
make_value_control (n, "input")
make_value_control ( "input")
label := l
checked_value := c
end
@@ -54,9 +54,9 @@ feature --Event handling
change_event := e
end
handle_callback (cname: STRING; event: STRING; event_parameter: detachable STRING)
handle_callback (cname: LIST[STRING]; event: STRING; event_parameter: detachable STRING)
do
if Current.control_name.same_string (cname) and attached change_event as cevent then
if Current.control_name.same_string (cname[1]) and attached change_event as cevent then
if event.same_string ("change") then
cevent.call (Void)
end

View File

@@ -28,10 +28,10 @@ create
feature {NONE} -- Initializaton
make (n: STRING)
make
-- Initialize with specified control name
do
make_multi_control (n)
make_multi_control
end
feature -- Implementation

View File

@@ -19,10 +19,10 @@ create
feature {NONE} -- Initialization
make (n, v: STRING)
make (v: STRING)
-- Initialize with specified name and value
do
make_value_control (n, "input")
make_value_control ( "input")
type := "text"
text := v
end
@@ -53,9 +53,9 @@ feature --Event handling
change_event := e
end
handle_callback (cname: STRING; event: STRING; event_parameter: detachable STRING)
do
if Current.control_name.same_string (cname) and attached change_event as cevent then
handle_callback (cname: LIST[STRING]; event: STRING; event_parameter: detachable STRING)
do
if Current.control_name.same_string (cname[1]) and attached change_event as cevent then
if event.same_string ("change") then
cevent.call (Void)
end

View File

@@ -19,10 +19,10 @@ create
feature {NONE} -- Initialization
make (n, v: STRING)
make (v: STRING)
-- Initialize with specified control name and text
do
make_input (n, v)
make_input (v)
type := "password"
end

View File

@@ -21,10 +21,10 @@ create
feature {NONE} -- Initialization
make (n, t: STRING)
make (t: STRING)
-- Initialize with specified control name and text to be displayed in this textarea
do
make_input (n, t)
make_input ( t)
tag_name := "textarea"
end

View File

@@ -21,10 +21,10 @@ create
feature {NONE} -- Initialization
make (n: STRING)
make
--Initialize
do
make_multi_control (n)
make_multi_control
active_set := false
add_class ("navbar navbar-inverse navbar-fixed-top")
create nav.make_with_tag_name ("ul")
@@ -35,10 +35,10 @@ feature {NONE} -- Initialization
nav_right.add_class ("nav navbar-nav navbar-right")
end
make_with_brand (n, b: STRING)
make_with_brand ( b: STRING)
-- Initialize with specified brand string
do
make (n)
make
brand := b
end
@@ -85,7 +85,7 @@ feature -- Change
local
li: WSF_MULTI_CONTROL [WSF_STATELESS_CONTROL]
do
create li.make_with_tag_name (control_name + "_link" + nav.controls.count.out, "li")
create li.make_with_tag_name ("li")
li.add_class ("dropdown")
li.add_control (l)
li.add_control (d)
@@ -97,7 +97,7 @@ feature -- Change
local
li: WSF_MULTI_CONTROL [WSF_STATELESS_CONTROL]
do
create li.make_with_tag_name (control_name + "_link" + nav.controls.count.out, "li")
create li.make_with_tag_name ("li")
li.add_class ("dropdown")
li.add_control (l)
li.add_control (d)
@@ -107,12 +107,9 @@ feature -- Change
add_list_element_right (l: WSF_STATELESS_CONTROL)
-- Add element in li tag to right aligned part of navbar
local
name: STRING
li: WSF_MULTI_CONTROL [WSF_STATELESS_CONTROL]
do
name := control_name + "_rightlink";
name := name + nav_right.controls.count.out
create li.make_with_tag_name (name, "li")
create li.make_with_tag_name ("li")
li.add_control (l)
add_element_right (li)
end
@@ -122,7 +119,7 @@ feature -- Change
local
li: WSF_MULTI_CONTROL [WSF_STATELESS_CONTROL]
do
create li.make_with_tag_name (control_name + "_link" + nav.controls.count.out, "li")
create li.make_with_tag_name ("li")
li.add_control (l)
add_element (li)
end

View File

@@ -9,7 +9,7 @@ class
inherit
WSF_MULTI_CONTROL [WSF_STATELESS_CONTROL]
WSF_MULTI_CONTROL [WSF_NAVLIST_ITEM_CONTROL]
rename
make as make_multi_control
end
@@ -19,9 +19,9 @@ create
feature {NONE} -- Initialization
make (n: STRING)
make
do
make_multi_control (n)
make_multi_control
add_class ("list-group")
end
@@ -31,7 +31,16 @@ feature -- Change
local
c: WSF_NAVLIST_ITEM_CONTROL
do
create c.make (control_name + "_item_" + controls.count.out, link, text)
create c.make (link, text)
add_control(c)
end
add_button (event:attached like {WSF_BUTTON_CONTROL}.click_event; text: STRING)
local
c: WSF_NAVLIST_ITEM_CONTROL
do
create c.make ("", text)
c.set_click_event(event)
add_control(c)
end

View File

@@ -12,6 +12,9 @@ inherit
WSF_BUTTON_CONTROL
rename
make as make_button
redefine
set_state,
state
end
create
@@ -19,12 +22,41 @@ create
feature {NONE} -- Initialization
make (n, link, t: STRING)
make ( link, t: STRING)
do
make_control (n, "a")
make_control ("a")
text := t
attributes := "href=%"" + link + "%"";
add_class ("list-group-item")
end
feature {WSF_PAGE_CONTROL, WSF_CONTROL} -- State management
set_state (new_state: JSON_OBJECT)
-- Restore text from json
do
Precursor {WSF_BUTTON_CONTROL}(new_state)
if attached {JSON_BOOLEAN} new_state.item ("active") as new_active then
active := new_active.item
end
end
state: WSF_JSON_OBJECT
-- Return state which contains the current text and if there is an event handle attached
do
Result := Precursor {WSF_BUTTON_CONTROL}
Result.put_boolean (true, "active")
end
feature -- Change
set_active (a: BOOLEAN)
-- Set text of that button
do
active := a
state_changes.replace (create {JSON_BOOLEAN}.make_boolean (a), "active")
end
feature -- Properties
active: BOOLEAN
end

View File

@@ -19,18 +19,18 @@ create
feature {NONE} -- Initialization
make (n: STRING)
make
-- Initialize with specified control name
do
make_control (n, "div")
make_control ("div")
add_class ("progress")
progress := 0
end
make_with_source (n: STRING; p: WSF_PROGRESSSOURCE)
make_with_source ( p: WSF_PROGRESSSOURCE)
-- Initialize with specified control name and progresssource
do
make (n)
make
progress_source := p
end
@@ -51,9 +51,9 @@ feature -- State handling
feature -- Event handling
handle_callback (cname: STRING; event: STRING; event_parameter: detachable STRING)
handle_callback (cname: LIST[STRING]; event: STRING; event_parameter: detachable STRING)
do
if cname.same_string (control_name) and event.same_string ("progress_fetch") then
if cname[1].same_string (control_name) and event.same_string ("progress_fetch") then
state_changes.put_integer (progress_value, "progress")
end
end

View File

@@ -19,10 +19,10 @@ create
feature {NONE} -- Initialization
make (n: STRING)
make
-- Initialize with specified name
do
make_control (n, "div")
make_control ( "div")
add_class ("carousel slide")
create list.make_with_tag_name ( "ol")
list.add_class ("carousel-indicators")
@@ -43,7 +43,7 @@ feature -- State handling
feature -- Callback
handle_callback (cname, event: STRING; event_parameter: detachable STRING)
handle_callback (cname: LIST[STRING]; event: STRING; event_parameter: detachable STRING)
do
-- Do nothing here
end
@@ -91,7 +91,7 @@ feature -- Change
cl: STRING
item: WSF_MULTI_CONTROL [WSF_STATELESS_CONTROL]
do
create item.make (control_name + "_item" + slide_wrapper.controls.count.out)
create item.make ()
item.add_class ("item")
item.add_control (c)
if attached caption as capt then

View File

@@ -19,13 +19,13 @@ create
feature {NONE} -- Initialization
make (n: STRING; t: STRING)
make (a_text: STRING)
-- Initialize with specified control name and text
do
make_control (n, "button")
make_control ("button")
add_class ("btn")
add_class ("btn-default")
text := t
text := a_text
end
feature {WSF_PAGE_CONTROL, WSF_CONTROL} -- State management
@@ -54,9 +54,9 @@ feature --Event handling
click_event := e
end
handle_callback (cname: STRING; event: STRING; event_parameter: detachable STRING)
handle_callback (cname: LIST[STRING]; event: STRING; event_parameter: detachable STRING)
do
if Current.control_name.same_string (cname) and attached click_event as cevent then
if Current.control_name.same_string (cname[1]) and attached click_event as cevent then
cevent.call (Void)
end
end

View File

@@ -18,14 +18,13 @@ inherit
feature {NONE} -- Initialization
make (n, a_tag_name: STRING)
make (a_tag_name: STRING)
-- Initialize with specified control name and tag
require
not n.is_empty
not a_tag_name.is_empty
do
make_stateless_control (a_tag_name)
control_name := n
create control_name_prefix.make_empty
create state_changes.make
create actions.make_array
ensure
@@ -140,7 +139,7 @@ feature -- Rendering
loop
css_classes_string := css_classes_string + " " + c.item
end
l_attributes := "id=%"" + control_name + "%" data-name=%"" + control_name + "%" data-type=%"" + a_generator + "%" "
l_attributes := " data-name=%"" + control_name + "%" data-type=%"" + a_generator + "%" "
if attached attrs as a then
l_attributes := l_attributes + a
end
@@ -152,7 +151,7 @@ feature -- Rendering
feature -- Event handling
handle_callback (cname: STRING; event: STRING; event_parameter: detachable STRING)
handle_callback (cname: LIST [STRING]; event: STRING; event_parameter: detachable STRING)
-- Method called if any callback received. In this method you can route the callback to the event handler
deferred
end
@@ -170,6 +169,24 @@ feature -- Properties
actions: JSON_ARRAY
control_id: INTEGER assign set_control_id
set_control_id (d: INTEGER)
do
control_id := d
end
control_name: STRING
do
Result := control_name_prefix + control_id.out
end
control_name_prefix: STRING assign set_control_name_prefix
set_control_name_prefix (p: STRING)
do
control_name_prefix := p
end
end

View File

@@ -21,10 +21,10 @@ create
feature {NONE} -- Initialization
make (n: STRING)
make
-- Initialize
do
make_multi_control (n)
make_multi_control
tag_name := "form"
end

View File

@@ -34,7 +34,7 @@ feature {NONE} -- Initialization
make_with_validators (a_label: STRING; c: WSF_VALUE_CONTROL [G]; v: LIST [WSF_VALIDATOR [G]])
-- Initialize form element control with a specific label, value control and list of validators
do
make_control (c.control_name + "_container", "div")
make_control ("div")
add_class ("form-group")
if attached {WSF_INPUT_CONTROL} c or attached {WSF_TEXTAREA_CONTROL} c then
c.add_class ("form-control")
@@ -100,14 +100,15 @@ feature {WSF_PAGE_CONTROL, WSF_CONTROL} -- State management
feature -- Event handling
handle_callback (cname: STRING; event: STRING; event_parameter: detachable STRING)
handle_callback (cname: LIST[STRING]; event: STRING; event_parameter: detachable STRING)
-- Pass callback to subcontrols
do
if cname.same_string (control_name) then
if cname[1].same_string (control_name) then
cname.go_i_th (1)
cname.remove
if event.same_string ("validate") then
validate
end
else
value_control.handle_callback (cname, event, event_parameter)
end
end

View File

@@ -17,10 +17,10 @@ create
feature {NONE} -- Initialization
make (n, t, v: STRING)
make (t, v: STRING)
-- Initialize
do
make_value_control (n, t)
make_value_control ( t)
html := v
end
@@ -43,7 +43,7 @@ feature {WSF_PAGE_CONTROL, WSF_CONTROL} -- State management
feature --Event handling
handle_callback (cname: STRING; event: STRING; event_parameter: detachable STRING)
handle_callback (cname: LIST[STRING]; event: STRING; event_parameter: detachable STRING)
do
end

View File

@@ -30,9 +30,9 @@ feature -- Add control
add_control_with_offset (c: WSF_STATELESS_CONTROL; span, offset: INTEGER)
local
div: WSF_MULTI_CONTROL [WSF_STATELESS_CONTROL]
div: WSF_STATELESS_MULTI_CONTROL [WSF_STATELESS_CONTROL]
do
create div.make (control_name + "_item_" + controls.count.out)
create div.make_with_tag_name ("div")
div.add_class ("col-md-" + span.out + " col-md-offset-" + offset.out)
div.add_control (c)
add_control_raw (div)
@@ -40,9 +40,9 @@ feature -- Add control
add_control (c: WSF_STATELESS_CONTROL; span: INTEGER)
local
div: WSF_MULTI_CONTROL [WSF_STATELESS_CONTROL]
div: WSF_STATELESS_MULTI_CONTROL [WSF_STATELESS_CONTROL]
do
create div.make (control_name + "_item_" + controls.count.out)
create div.make_with_tag_name ("div")
div.add_class ("col-md-" + span.out)
div.add_control (c)
add_control_raw (div)

View File

@@ -23,16 +23,16 @@ create
feature {NONE} -- Initialization
make (n: STRING)
make
-- Initialize with specified control name and default tag "div"
do
make_with_tag_name (n, "div")
make_with_tag_name ("div")
end
make_with_tag_name (n, t: STRING)
make_with_tag_name (t: STRING)
-- Initialize with specified control name and tag
do
make_control (n, t)
make_control (t)
controls := create {ARRAYED_LIST [G]}.make (5);
end
@@ -52,7 +52,7 @@ feature {WSF_PAGE_CONTROL, WSF_CONTROL} -- State management
across
controls as c
loop
if attached {WSF_STATELESS_MULTI_CONTROL[WSF_STATELESS_CONTROL]} c.item as cont then
if attached {WSF_STATELESS_MULTI_CONTROL [WSF_STATELESS_CONTROL]} c.item as cont then
cont.load_subcontrol_state (newstate)
elseif attached {WSF_CONTROL} c.item as cont then
if attached {JSON_OBJECT} newstate.item (cont.control_name) as value_state then
@@ -83,7 +83,7 @@ feature {WSF_PAGE_CONTROL, WSF_CONTROL} -- State management
across
controls as c
loop
if attached {WSF_STATELESS_MULTI_CONTROL[WSF_STATELESS_CONTROL]} c.item as mcont then
if attached {WSF_STATELESS_MULTI_CONTROL [WSF_STATELESS_CONTROL]} c.item as mcont then
mcont.read_subcontrol_state (controls_state)
elseif attached {WSF_CONTROL} c.item as cont then
controls_state.put (cont.full_state, cont.control_name)
@@ -93,12 +93,32 @@ feature {WSF_PAGE_CONTROL, WSF_CONTROL} -- State management
read_state_changes (states: WSF_JSON_OBJECT)
-- Read states_changes in subcontrols
local
sub_states: WSF_JSON_OBJECT
control_state: WSF_JSON_OBJECT
do
Precursor (states)
create sub_states.make
read_subcontrol_state_changes (sub_states)
if sub_states.count>0 then
if attached {JSON_OBJECT}states.item (control_name) as changes then
changes.put (sub_states, "controls")
else
create control_state.make
control_state.put (sub_states, "controls")
states.put (control_state, control_name)
end
end
end
read_subcontrol_state_changes (states: WSF_JSON_OBJECT)
do
across
controls as c
loop
if attached {WSF_CONTROL} c.item as cont then
if attached {WSF_STATELESS_MULTI_CONTROL [WSF_STATELESS_CONTROL]} c.item as cont then
cont.read_subcontrol_state_changes (states)
elseif attached {WSF_CONTROL} c.item as cont then
cont.read_state_changes (states)
end
end
@@ -112,11 +132,12 @@ feature {WSF_PAGE_CONTROL, WSF_CONTROL} -- State management
feature -- Event handling
handle_callback (cname: STRING; event: STRING; event_parameter: detachable STRING)
handle_callback (cname: LIST [STRING]; event: STRING; event_parameter: detachable STRING)
-- Pass callback to subcontrols
do
if equal (cname, control_name) then
else
if equal (cname [1], control_name) then
cname.go_i_th (1)
cname.remove
across
controls as c
loop
@@ -143,12 +164,15 @@ feature -- Rendering
end
end
feature -- Change
feature
add_control (c: G)
-- Add a control to this multi control
do
controls.extend (c)
if attached {WSF_CONTROL} c as d then
d.control_id := controls.count
end
end
feature -- Properties

View File

@@ -13,6 +13,7 @@ inherit
rename
make as make_control
redefine
control_name,
full_state,
read_state_changes
end
@@ -22,7 +23,8 @@ feature {NONE} -- Initialization
make (req: WSF_REQUEST; res: WSF_RESPONSE)
-- Initialize
do
make_control (req.request_time_stamp.out, "body")
control_name:=req.request_time_stamp.out
make_control ( "body")
request := req
response := res
initialize_controls
@@ -73,7 +75,7 @@ feature -- Implementation
if attached {JSON_OBJECT} json_parser.parse_json as sp then
set_state (sp)
end
handle_callback (event_control_name, event, event_parameter)
handle_callback (event_control_name.split ('-'), event, event_parameter)
create states_changes.make
read_state_changes (states_changes)
response.put_header ({HTTP_STATUS_CODE}.ok, <<["Content-Type", "application/json; charset=ISO-8859-1"]>>)
@@ -145,7 +147,7 @@ feature -- Implementation
feature -- Event handling
handle_callback (cname: STRING; event: STRING; event_parameter: detachable STRING)
handle_callback (cname: LIST[STRING]; event: STRING; event_parameter: detachable STRING)
-- Forward callback to control
do
control.handle_callback (cname, event, event_parameter)
@@ -178,6 +180,8 @@ feature {WSF_PAGE_CONTROL, WSF_CONTROL} -- State management
Result.put (controls_state, "controls")
Result.put (state, "state")
end
feature
control_name:STRING
feature {NONE} -- Root control

View File

@@ -37,6 +37,12 @@ feature -- Change
css_classes.force (c)
end
remove_class (cla: STRING)
-- Add a css class to this control
do
css_classes.prune (cla)
end
feature -- Rendering
render_tag (body: STRING; attrs: detachable STRING): STRING

View File

@@ -6,10 +6,17 @@ note
class
WSF_STATELESS_MULTI_CONTROL [G -> WSF_STATELESS_CONTROL]
inherit
WSF_MULTI_CONTROL [G]
rename
make_with_tag_name as make_with_tag_name_and_name
redefine
add_control,
set_control_name_prefix,
handle_callback,
set_control_id
end
create
@@ -17,15 +24,67 @@ create
feature {NONE} -- Initialization
make_with_tag_name(t:STRING)
do
make_with_tag_name_and_name("",t)
end
make_with_tag_name (t: STRING)
do
make_with_tag_name_and_name (t)
end
make_tag_less
do
make_with_tag_name_and_name ("", "")
make_with_tag_name_and_name ("")
stateless := True
end
feature
set_control_id (d: INTEGER)
do
control_id := d
set_subcontrol_prefixes
end
set_control_name_prefix (p: STRING)
do
control_name_prefix := p
set_subcontrol_prefixes
end
set_subcontrol_prefixes
do
across
controls as e
loop
if attached {WSF_CONTROL} e.item as el then
el.control_name_prefix := control_name_prefix + control_id.out + "_"
end
end
end
feature
add_control (c: G)
-- Add a control to this multi control
do
controls.extend (c)
if attached {WSF_CONTROL} c as d then
d.control_id := controls.count
d.control_name_prefix := control_name_prefix + control_id.out + "_"
end
end
feature -- Event handling
handle_callback (cname: LIST [STRING]; event: STRING; event_parameter: detachable STRING)
-- Pass callback to subcontrols
do
across
controls as c
loop
if attached {WSF_CONTROL} c.item as cont then
cont.handle_callback (cname, event, event_parameter)
end
end
end
end