From 4e7e1e9c45f8c608d3f0bc0c5f8bbe22bb78afc8 Mon Sep 17 00:00:00 2001 From: severin Date: Wed, 19 Mar 2014 16:49:24 +0100 Subject: [PATCH] Added more comments and assertions to all classes; clean up --- draft/library/wsf_js_widget/README.md | 8 +++++ .../kernel/dropdown/wsf_dropdown_control.e | 11 +++++-- .../kernel/input/wsf_autocomplete_control.e | 20 +++++++----- .../kernel/input/wsf_checkbox_control.e | 26 +++++++++------- .../kernel/input/wsf_checkbox_list_control.e | 11 +++++-- .../kernel/input/wsf_codeview_control.e | 6 +++- .../kernel/input/wsf_file_control.e | 24 +++++++++++++- .../kernel/input/wsf_file_definition.e | 9 ++++-- .../kernel/input/wsf_input_control.e | 24 +++++++++++++- .../kernel/input/wsf_password_control.e | 5 ++- .../kernel/input/wsf_textarea_control.e | 6 +++- .../kernel/navbar/wsf_navbar_control.e | 13 +++++--- .../kernel/navlist/wsf_navlist_control.e | 5 +-- .../kernel/navlist/wsf_navlist_item_control.e | 11 +++++-- .../kernel/progressbar/wsf_progress_control.e | 31 ++++++++++++++----- .../kernel/slider/wsf_slider_control.e | 17 ++++++---- .../kernel/validator/wsf_agent_validator.e | 9 +++++- .../kernel/validator/wsf_email_validator.e | 7 +++-- .../kernel/validator/wsf_regexp_validator.e | 4 ++- .../kernel/validator/wsf_validator.e | 3 ++ .../kernel/webcontrol/wsf_control.e | 24 +++++++------- .../kernel/webcontrol/wsf_multi_control.e | 2 -- .../kernel/webcontrol/wsf_stateless_control.e | 24 +++++++------- .../webcontrol/wsf_stateless_multi_control.e | 1 - .../kernel/widgets/wsf_date_picker_control.e | 5 +++ 25 files changed, 223 insertions(+), 83 deletions(-) create mode 100644 draft/library/wsf_js_widget/README.md diff --git a/draft/library/wsf_js_widget/README.md b/draft/library/wsf_js_widget/README.md new file mode 100644 index 00000000..2e1340a1 --- /dev/null +++ b/draft/library/wsf_js_widget/README.md @@ -0,0 +1,8 @@ +# Eiffel Web Framework + + +## Overview + +## Dependencies + +* diff --git a/draft/library/wsf_js_widget/kernel/dropdown/wsf_dropdown_control.e b/draft/library/wsf_js_widget/kernel/dropdown/wsf_dropdown_control.e index 3f41ea2e..b1bfd317 100644 --- a/draft/library/wsf_js_widget/kernel/dropdown/wsf_dropdown_control.e +++ b/draft/library/wsf_js_widget/kernel/dropdown/wsf_dropdown_control.e @@ -29,10 +29,12 @@ feature {NONE} -- Initialization make_with_tag_name (title, "div") end - make_with_tag_name (title, t: STRING_32) + make_with_tag_name (title, tag: STRING_32) -- Make a dropdown control with specified tag name (such as li) and menu title + require + tag_not_empty: not tag.is_empty do - make_multi_control_with_tag_name (t) + make_multi_control_with_tag_name (tag) add_class ("dropdown") create {WSF_BASIC_CONTROL} dropdown_toggle.make_with_body_class ("a", "data-toggle=%"dropdown%" href=%"#%" type=%"button%" id=%"" + control_name + "_toggle%"", "dropdown-toggle", title + " ") create dropdown_menu.make_with_tag_name ("ul") @@ -45,6 +47,7 @@ feature {NONE} -- Initialization feature -- Change add_item (c: WSF_STATELESS_CONTROL) + -- Wrap the specified control into a
  • tag and add it to the menu local li: WSF_MULTI_CONTROL [WSF_STATELESS_CONTROL] do @@ -56,6 +59,7 @@ feature -- Change end add_link_item (label, link: STRING_32) + -- Add an item to the menu which redirects to the specified link local c: WSF_BASIC_CONTROL do @@ -64,6 +68,7 @@ feature -- Change end add_divider + -- Append a horizontal divider to the menu do dropdown_menu.add_control (create {WSF_BASIC_CONTROL}.make_with_body_class ("li", "role=%"menuitem%"", "divider", "")) end @@ -71,7 +76,9 @@ feature -- Change feature -- Properties dropdown_toggle: WSF_STATELESS_CONTROL + -- The dropdown toggle which causes the menu to pop up or dispose dropdown_menu: WSF_STATELESS_MULTI_CONTROL [WSF_STATELESS_CONTROL] + -- The dropdown menu which holds the single entries (controls and dividers) 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 2b42a747..c6390509 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 @@ -1,5 +1,9 @@ note - description: "Summary description for {WSF_AUTOCOMPLETE_CONTROL}." + description: "[ + A control that can be used for autocompletion. A customizable + template can be passed to this class in a WSF_AUTOCOMPLETION + instance. + ]" author: "" date: "$Date$" revision: "$Revision$" @@ -23,18 +27,18 @@ create feature {NONE} -- Initialization make (c: WSF_AUTOCOMPLETION) - -- Initialize with specified name and autocompletion + -- Initialize with specified autocompletion do - make_with_agent ( agent c.autocompletion) + make_with_agent (agent c.autocompletion) if attached c.template as t then template := t end end make_with_agent (c: FUNCTION [ANY, TUPLE [STRING_32], JSON_ARRAY]) - -- Initialize with specified name and autocompletion function + -- Initialize with autocompletion function do - make_input ( "") + make_input ("") create_json_list := c template := "{{=value}}" end @@ -49,10 +53,10 @@ feature -- State feature -- Callback - handle_callback (cname: LIST[STRING_32]; event: STRING_32; event_parameter: detachable ANY) + handle_callback (cname: LIST [STRING_32]; event: STRING_32; 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 + if cname [1].same_string (control_name) and event.same_string ("autocomplete") then state_changes.put (create_json_list.item ([text]), "suggestions") end end @@ -60,7 +64,9 @@ feature -- Callback feature -- Properties create_json_list: FUNCTION [ANY, TUPLE [STRING_32], JSON_ARRAY] + -- The function which is called to give a list of suggestions to a given user input template: STRING_32 + -- The template end 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 ab9a842c..8346cfbf 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 @@ -1,5 +1,7 @@ note - description: "Summary description for {WSF_CHECKBOX_CONTROL}." + description: "[ + Representation of an HTML checkbox. + ]" author: "" date: "$Date$" revision: "$Revision$" @@ -11,7 +13,9 @@ inherit WSF_VALUE_CONTROL [BOOLEAN] rename - make as make_value_control + make as make_value_control, + value as checked, + set_value as set_checked end create @@ -19,12 +23,14 @@ create feature {NONE} -- Initialization - make (l, c: STRING_32) - -- Initialize with specified control name, + make (l, value: STRING_32) + -- Initialize with specified label and value + require + value_not_empty: not value.is_empty do make_value_control ("input") label := l - checked_value := c + checked_value := value end feature {WSF_PAGE_CONTROL, WSF_CONTROL} -- State management @@ -76,12 +82,8 @@ feature -- Implementation Result := render_tag_with_tagname ("div", render_tag_with_tagname ("label", render_tag ("", attrs) + " " + label, "", ""), "", "checkbox") end - value: BOOLEAN - do - Result := checked - end - - set_value (v: BOOLEAN) + set_checked (v: BOOLEAN) + -- Set if the checkbox is checked do checked := v end @@ -95,7 +97,7 @@ feature -- Properties -- The checked value of the checkbox control checked_value: STRING_32 - -- String checked value + -- The value of this checkbox change_event: detachable PROCEDURE [ANY, TUPLE] -- Function to be executed on change diff --git a/draft/library/wsf_js_widget/kernel/input/wsf_checkbox_list_control.e b/draft/library/wsf_js_widget/kernel/input/wsf_checkbox_list_control.e index 6059a8de..40039b56 100644 --- a/draft/library/wsf_js_widget/kernel/input/wsf_checkbox_list_control.e +++ b/draft/library/wsf_js_widget/kernel/input/wsf_checkbox_list_control.e @@ -1,5 +1,7 @@ note - description: "Summary description for {WSF_CHECKBOX_LIST_CONTROL}." + description: "[ + Representation of a list of HTML checkboxes. + ]" author: "" date: "$Date$" revision: "$Revision$" @@ -37,23 +39,26 @@ feature {NONE} -- Initializaton feature -- Implementation value: LIST [STRING_32] + -- Returns the values of all selected checkboxes in this list do create {ARRAYED_LIST [STRING_32]} Result.make (0) across controls as c loop - if c.item.value then + if c.item.checked then Result.extend (c.item.checked_value) end end end set_value (v: LIST [STRING_32]) + -- Sets the checked state of each of the checkboxes in this list according to whether the value + -- of a checkbox occurs in the specified list or not do across controls as c loop - c.item.set_value (v.has (c.item.checked_value)) + c.item.set_checked (v.has (c.item.checked_value)) end end diff --git a/draft/library/wsf_js_widget/kernel/input/wsf_codeview_control.e b/draft/library/wsf_js_widget/kernel/input/wsf_codeview_control.e index bfb82bd5..80526b69 100644 --- a/draft/library/wsf_js_widget/kernel/input/wsf_codeview_control.e +++ b/draft/library/wsf_js_widget/kernel/input/wsf_codeview_control.e @@ -1,5 +1,9 @@ note - description: "Summary description for {WSF_CODEVIEW_CONTROL}." + description:"[ + This class is only used because the code viewer has a specific + mapping in javascript. The Eiffel class does not provide + special functionality itself. + ]" author: "" date: "$Date$" revision: "$Revision$" 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 0805c422..d1b84a13 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 @@ -1,5 +1,7 @@ note - description: "Summary description for {WSF_FILE_CONTROL}." + description: "[ + A control that represents a file upload. + ]" author: "" date: "$Date$" revision: "$Revision$" @@ -20,11 +22,13 @@ create feature {NONE} -- Initialization make + -- Initialize do make_value_control ("input") end make_with_image_preview + -- Initialize with image_preview set to true do make image_preview := True @@ -102,6 +106,7 @@ feature -- Event handling feature -- Upload start_upload + -- Add start upload command to action list which then executes the javascript function to start upload on client side local upload: WSF_JSON_OBJECT do @@ -137,39 +142,56 @@ feature -- Change -- Set text change event handle do change_event := e + ensure + change_event_set: change_event = e end set_upload_done_event (e: attached like upload_done_event) -- Set text change event handle do upload_done_event := e + ensure + upload_done_event_set: upload_done_event = e end set_upload_function (e: attached like upload_function) -- Set button click event handle do upload_function := e + ensure + upload_function_set: upload_function = e end set_disabled (b: BOOLEAN) + -- Set the disabled state of this file control do if disabled /= b then disabled := b state_changes.replace_with_boolean (disabled, "disabled") end + ensure + disabled_set: disabled = b + state_changes_registered: old disabled /= disabled implies state_changes.has_key ("disabled") end set_value (v: detachable WSF_FILE_DEFINITION) + -- Set the file definition of this file control do file := v + ensure then + file_set: file = v end set_image_preview (b: BOOLEAN) + -- Set if the image should be previewed in the control do if image_preview /= b then image_preview := b state_changes.replace_with_boolean (image_preview, "image_preview") end + ensure + image_preview_set: image_preview = b + state_changes_registered: old image_preview /= image_preview implies state_changes.has_key ("image_preview") end feature -- Properties diff --git a/draft/library/wsf_js_widget/kernel/input/wsf_file_definition.e b/draft/library/wsf_js_widget/kernel/input/wsf_file_definition.e index f2f11529..6166f2b7 100644 --- a/draft/library/wsf_js_widget/kernel/input/wsf_file_definition.e +++ b/draft/library/wsf_js_widget/kernel/input/wsf_file_definition.e @@ -1,5 +1,8 @@ note - description: "Summary description for {WSF_FILE_DEFINITION}." + description: "[ + A container to encapsulate file information which is used by + WSF_FILE_CONTROL, such as name or type of the file. + ]" author: "" date: "$Date$" revision: "$Revision$" @@ -20,9 +23,10 @@ feature {NONE} id := a_id end -feature +feature -- Change set_id (a_id: detachable STRING_32) + -- Set the id of this abstract file. do id := a_id end @@ -30,6 +34,7 @@ feature feature --Properties is_uploaded: BOOLEAN + -- Whether the file denoted by this abstract file has been uploaded. do Result := attached id end 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 8b82ae16..d723d0f9 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 @@ -1,5 +1,9 @@ note - description: "Summary description for {WSF_TEXT_CONTROL}." + description: "[ + The basic HTML element is represented by this control. + All controls that are used to gather some input from the user + basically can inherit from this class. + ]" author: "" date: "$Date$" revision: "$Revision$" @@ -25,6 +29,8 @@ feature {NONE} -- Initialization make_value_control ("input") type := "text" text := v + ensure + text_set: text = v end feature {WSF_PAGE_CONTROL, WSF_CONTROL} -- State management @@ -52,6 +58,8 @@ feature --Event handling -- Set text change event handle do change_event := e + ensure + change_event_set: change_event = e end handle_callback (cname: LIST [STRING_32]; event: STRING_32; event_parameter: detachable ANY) @@ -88,31 +96,45 @@ feature -- Change text := t state_changes.replace (create {JSON_STRING}.make_json (text), "text") end + ensure + text_same_string_as_t: text.same_string (t) + state_changes_registered: old text /= text implies state_changes.has_key ("text") end set_disabled (b: BOOLEAN) + -- Set the disabled state of this control do if disabled /= b then disabled := b state_changes.replace_with_boolean (disabled, "disabled") end + ensure + disabled_set: disabled = b + state_changes_registered: old b /= b implies state_changes.has_key ("disabled") end set_type (t: STRING_32) + -- Set the type of this input control (HTML 'type' attribute) do type := t + ensure + type_set: type = t end feature -- Implementation value: STRING_32 + -- The value of this input control do Result := text end set_value (v: STRING_32) + -- Set the value of this input control do text := v + ensure then + value_set: text = v end feature -- Properties diff --git a/draft/library/wsf_js_widget/kernel/input/wsf_password_control.e b/draft/library/wsf_js_widget/kernel/input/wsf_password_control.e index 1974c443..dd68aa27 100644 --- a/draft/library/wsf_js_widget/kernel/input/wsf_password_control.e +++ b/draft/library/wsf_js_widget/kernel/input/wsf_password_control.e @@ -1,5 +1,8 @@ note - description: "Summary description for {WSF_PASSWORD_CONTROL}." + description: "[ + This control represents an HTML input control with the 'type' + attribute set to 'password'. + ]" author: "" date: "$Date$" revision: "$Revision$" diff --git a/draft/library/wsf_js_widget/kernel/input/wsf_textarea_control.e b/draft/library/wsf_js_widget/kernel/input/wsf_textarea_control.e index 832e7240..37a744e6 100644 --- a/draft/library/wsf_js_widget/kernel/input/wsf_textarea_control.e +++ b/draft/library/wsf_js_widget/kernel/input/wsf_textarea_control.e @@ -1,5 +1,9 @@ note - description: "Summary description for {WSF_TEXT_CONTROL}." + description: "[ + This control represents a textarea (the HTML 'textarea' tag). + It basically just inherits the functionality of an input + control. + ]" author: "" date: "$Date$" revision: "$Revision$" diff --git a/draft/library/wsf_js_widget/kernel/navbar/wsf_navbar_control.e b/draft/library/wsf_js_widget/kernel/navbar/wsf_navbar_control.e index 82584c74..68657f83 100644 --- a/draft/library/wsf_js_widget/kernel/navbar/wsf_navbar_control.e +++ b/draft/library/wsf_js_widget/kernel/navbar/wsf_navbar_control.e @@ -1,8 +1,9 @@ note description: "[ - WSF_NAVBAR_CONTROL encapsulates the navbar provided by bootstrap. - Simple menu items as well as dropdown lists and panels can be added to this control - http://getbootstrap.com/components/#navbar + WSF_NAVBAR_CONTROL encapsulates the navbar provided by + bootstrap. Simple menu items as well as dropdown lists and + panels can be added to this control. + See http://getbootstrap.com/components/#navbar ]" author: "" date: "$Date$" @@ -44,6 +45,8 @@ feature {NONE} -- Initialization do make brand := b + ensure + brand_set: brand = b end feature -- Rendering @@ -72,7 +75,7 @@ feature -- Rendering feature -- Change set_active (tab: INTEGER) - -- Sets the given tab as current active tab + -- Sets the given tab as current active tab. This procedure must not be called more than once. require tab >= 1 and tab <= tab_count and not active_set do @@ -82,6 +85,8 @@ feature -- Change nav_right.controls.i_th (tab - nav.controls.count).add_class ("active") end active_set := true + ensure + active_set_set: active_set end add_list_element_right (l: WSF_STATELESS_CONTROL) diff --git a/draft/library/wsf_js_widget/kernel/navlist/wsf_navlist_control.e b/draft/library/wsf_js_widget/kernel/navlist/wsf_navlist_control.e index cc27de48..8cb32745 100644 --- a/draft/library/wsf_js_widget/kernel/navlist/wsf_navlist_control.e +++ b/draft/library/wsf_js_widget/kernel/navlist/wsf_navlist_control.e @@ -1,7 +1,7 @@ note description: "[ - WSF_NAVLIST_CONTROL encapsulates the linked items provided by bootstrap. - http://getbootstrap.com/components/#list-group-linked + This class encapsulates the linked items provided by bootstrap. + See http://getbootstrap.com/components/#list-group-linked ]" author: "" date: "$Date$" @@ -23,6 +23,7 @@ create feature {NONE} -- Initialization make + -- Initialize do make_multi_control add_class ("list-group") diff --git a/draft/library/wsf_js_widget/kernel/navlist/wsf_navlist_item_control.e b/draft/library/wsf_js_widget/kernel/navlist/wsf_navlist_item_control.e index 2723808d..685b3239 100644 --- a/draft/library/wsf_js_widget/kernel/navlist/wsf_navlist_item_control.e +++ b/draft/library/wsf_js_widget/kernel/navlist/wsf_navlist_item_control.e @@ -1,6 +1,6 @@ note description: "[ - WSF_NAVLIST_ITEM_CONTROL represents a menu item in WSF_NAVLIST_CONTROL + This class represents a menu item in WSF_NAVLIST_CONTROL. ]" author: "" date: "$Date$" @@ -25,11 +25,14 @@ create feature {NONE} -- Initialization make (link, t: STRING_32) + -- Initialize with the given link and text do make_control ("a") text := t attributes := "href=%"" + link + "%""; add_class ("list-group-item") + ensure + text_set: text = t end feature {WSF_PAGE_CONTROL, WSF_CONTROL} -- State management @@ -53,7 +56,7 @@ feature {WSF_PAGE_CONTROL, WSF_CONTROL} -- State management feature -- Change set_active (a: BOOLEAN) - -- Set text of that button + -- Set whether this item should be displayed as active or not do if active /= a then active := a @@ -64,10 +67,14 @@ feature -- Change end state_changes.replace (create {JSON_BOOLEAN}.make_boolean (a), "active") end + ensure + active_set: active = a + state_changes_registered: old active /= active implies state_changes.has_key ("active") end feature -- Properties active: BOOLEAN + -- The active state of this item end 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 40323c9a..732f51a3 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 @@ -1,8 +1,8 @@ note description: "[ - WSF_PROGRESS_CONTROL encapsulates the progress bar provided by bootstrap. - The value of the progress bar can either be set directly using set_progress - or it can be fetched from a progress source. + WSF_PROGRESS_CONTROL encapsulates the progress bar provided by bootstrap. + The value of the progress bar can either be set directly using set_progress + or it can be fetched from a progress source. ]" author: "" date: "$Date$" @@ -24,23 +24,27 @@ create feature {NONE} -- Initialization make - -- Initialize with specified control name + -- Initialize do make_control ("div") add_class ("progress") progress := 0 end - make_with_source ( p: WSF_PROGRESS_SOURCE) - -- Initialize with specified control name and progresssource + make_with_source (p: WSF_PROGRESS_SOURCE) + -- Initialize with specified progresssource do make progress_source := p + ensure + progress_source_set: progress_source = p end feature -- State handling set_state (new_state: JSON_OBJECT) + require else + progress_in_range: attached {JSON_NUMBER} new_state.item ("progress") as new_progress implies new_progress.item.to_integer >= 0 and new_progress.item.to_integer <= 100 do if attached {JSON_NUMBER} new_state.item ("progress") as new_progress then progress := new_progress.item.to_integer @@ -55,9 +59,9 @@ feature -- State handling feature -- Event handling - handle_callback (cname: LIST[STRING_32]; event: STRING_32; event_parameter: detachable ANY) + handle_callback (cname: LIST [STRING_32]; event: STRING_32; event_parameter: detachable ANY) do - if cname[1].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 @@ -83,22 +87,33 @@ feature -- Change do progress := p state_changes.put_integer (progress, "progress") + ensure + progress_set: progress = p + state_changes_registered: state_changes.has_key ("progress") end feature -- Implementation progress_value: INTEGER + -- The progress value of this progress control do Result := progress if attached progress_source as ps then Result := ps.progress end + ensure + result_in_range: Result >= 0 and Result <= 100 end feature -- Properties progress_source: detachable WSF_PROGRESS_SOURCE + -- The source which provides this progress control the progress value progress: INTEGER + -- The progress value of this progress control + +invariant + progress_in_range: progress >= 0 and progress <= 100 end 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 df1c54f4..7ada4dfb 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 @@ -1,5 +1,7 @@ note - description: "Summary description for {WSF_IMAGE_SLIDER_CONTROL}." + description: "[ + Represents the bootstraps's 'carousel'. + ]" author: "" date: "$Date$" revision: "$Revision$" @@ -20,11 +22,11 @@ create feature {NONE} -- Initialization make - -- Initialize with specified name + -- Initialize do - make_control ( "div") + make_control ("div") add_class ("carousel slide") - create list.make_with_tag_name ( "ol") + create list.make_with_tag_name ("ol") list.add_class ("carousel-indicators") create slide_wrapper.make_with_tag_name ("div") slide_wrapper.add_class ("carousel-inner") @@ -33,19 +35,21 @@ feature {NONE} -- Initialization feature -- State handling set_state (new_state: JSON_OBJECT) + -- Just implementation, nothing special to do here do end state: WSF_JSON_OBJECT + -- Just implementation, nothing special to do here do create Result.make end feature -- Callback - handle_callback (cname: LIST[STRING_32]; event: STRING_32; event_parameter: detachable ANY) + handle_callback (cname: LIST [STRING_32]; event: STRING_32; event_parameter: detachable ANY) + -- Just implementation, nothing special to do here do - -- Do nothing here end feature -- Rendering @@ -64,6 +68,7 @@ feature -- Rendering feature -- Change add_image_with_caption (src, alt, caption: STRING_32) + -- Add a new image to the slider with specified url, alternative text and caption local caption_control: detachable WSF_STATELESS_CONTROL do diff --git a/draft/library/wsf_js_widget/kernel/validator/wsf_agent_validator.e b/draft/library/wsf_js_widget/kernel/validator/wsf_agent_validator.e index 31482a0f..a1f73009 100644 --- a/draft/library/wsf_js_widget/kernel/validator/wsf_agent_validator.e +++ b/draft/library/wsf_js_widget/kernel/validator/wsf_agent_validator.e @@ -22,18 +22,25 @@ create feature {NONE} -- Initialization make (h: like handler; e: STRING_32) + -- Initialize with given validation function and error message do make_validator (e) handler := h + ensure + handler_set: handler = h end -feature +feature -- Implementation is_valid (input: G): BOOLEAN + -- Tests if given input is valid do Result := handler.item ([input]) end +feature -- Properties + handler: FUNCTION [ANY, TUPLE [G], BOOLEAN] + -- The function which is used to validate inputs end diff --git a/draft/library/wsf_js_widget/kernel/validator/wsf_email_validator.e b/draft/library/wsf_js_widget/kernel/validator/wsf_email_validator.e index 3ea459c6..3bbdac83 100644 --- a/draft/library/wsf_js_widget/kernel/validator/wsf_email_validator.e +++ b/draft/library/wsf_js_widget/kernel/validator/wsf_email_validator.e @@ -1,6 +1,9 @@ note description: "[ - Validator implementation which make sure that the input has a the format of an valid email address + Validator implementation which make sure that the input has + the format of an valid email address. This is just a very + basic implementation that tests if the given input contains + a '@'. ]" author: "" date: "$Date$" @@ -22,7 +25,7 @@ create feature {NONE} -- Initialization make (e: STRING_32) - -- Initialize with specified error message which will be displayed on validation failure + -- Initialize with specified error message do make_regexp_validator ("^.*@.*$", e) end diff --git a/draft/library/wsf_js_widget/kernel/validator/wsf_regexp_validator.e b/draft/library/wsf_js_widget/kernel/validator/wsf_regexp_validator.e index c5d27a89..c31d0cc3 100644 --- a/draft/library/wsf_js_widget/kernel/validator/wsf_regexp_validator.e +++ b/draft/library/wsf_js_widget/kernel/validator/wsf_regexp_validator.e @@ -29,6 +29,7 @@ feature {NONE} -- Initialization make_validator (e) regexp_string := r create regexp + ensure regexp_string_set: regexp_string = r end feature -- Implementation @@ -39,7 +40,6 @@ feature -- Implementation if not regexp.is_compiled then regexp.compile (regexp_string) end - Result := (not input.is_empty) and regexp.matches (input) end @@ -56,7 +56,9 @@ feature -- State feature -- Properties regexp_string: STRING_32 + -- The regexp in string representation regexp: REGULAR_EXPRESSION + -- The regexp of this validator end diff --git a/draft/library/wsf_js_widget/kernel/validator/wsf_validator.e b/draft/library/wsf_js_widget/kernel/validator/wsf_validator.e index 87f99266..7aef6e16 100644 --- a/draft/library/wsf_js_widget/kernel/validator/wsf_validator.e +++ b/draft/library/wsf_js_widget/kernel/validator/wsf_validator.e @@ -15,6 +15,8 @@ feature {NONE} -- Initialization -- Initialize with specified error message to be displayed on validation failure do error := e + ensure + error_set: error = e end feature -- Access @@ -35,5 +37,6 @@ feature -- Access feature -- Properties error: STRING_32 + -- The error message if validation fails end 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 953fa39f..227220b5 100644 --- a/draft/library/wsf_js_widget/kernel/webcontrol/wsf_control.e +++ b/draft/library/wsf_js_widget/kernel/webcontrol/wsf_control.e @@ -186,6 +186,18 @@ feature -- Change isolate := p end + set_control_name_prefix (p: STRING_32) + -- Set the control name prefix + do + control_name_prefix := p + end + + set_control_id (d: INTEGER) + -- Set the id of this control + do + control_id := d + end + feature -- Properties isolate: BOOLEAN @@ -197,12 +209,6 @@ feature -- Properties control_id: INTEGER assign set_control_id -- The id of this control - set_control_id (d: INTEGER) - -- Set the id of this control - do - control_id := d - end - control_name: STRING_32 -- The name of this control which is composed of the control name prefix and the id of the control do @@ -213,10 +219,4 @@ feature -- Properties -- Used to avoid name conflicts since the children stateful controls of stateless controls are appended to the parent -- control state and therefore could have the same name (Stateless multi controls do not add a hierarchy level) - set_control_name_prefix (p: STRING_32) - -- Set the control name prefix - do - control_name_prefix := p - end - 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 569c3ed1..632c2d90 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 @@ -194,8 +194,6 @@ feature feature -- Properties - stateless: BOOLEAN - controls: ARRAYED_LIST [G] -- List of current controls in this multi control diff --git a/draft/library/wsf_js_widget/kernel/webcontrol/wsf_stateless_control.e b/draft/library/wsf_js_widget/kernel/webcontrol/wsf_stateless_control.e index 4d73e8dc..0388ca06 100644 --- a/draft/library/wsf_js_widget/kernel/webcontrol/wsf_stateless_control.e +++ b/draft/library/wsf_js_widget/kernel/webcontrol/wsf_stateless_control.e @@ -21,19 +21,10 @@ feature {NONE} -- Initialization do tag_name := a_tag_name create css_classes.make (0) + ensure + tag_name_set: tag_name = a_tag_name end -feature -- Access - - tag_name: STRING_32 - -- The tag name - - css_classes: ARRAYED_LIST [STRING_32] - -- List of classes (appear in the "class" attribute) - - attributes: detachable STRING_32 - -- Attributes string (without classes) - feature -- Change add_class (c: STRING_32) @@ -121,6 +112,17 @@ feature -- Rendering deferred end +feature -- Properties + + tag_name: STRING_32 + -- The tag name + + css_classes: ARRAYED_LIST [STRING_32] + -- List of classes (appear in the "class" attribute) + + attributes: detachable STRING_32 + -- Attributes string (without classes) + invariant tag_name_not_empty: not tag_name.is_empty 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 4444f1eb..50f0a477 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 @@ -32,7 +32,6 @@ feature {NONE} -- Initialization -- Initialize do make_with_tag_name ("") - stateless := True end feature diff --git a/draft/library/wsf_js_widget/kernel/widgets/wsf_date_picker_control.e b/draft/library/wsf_js_widget/kernel/widgets/wsf_date_picker_control.e index 6029eb24..07e52d25 100644 --- a/draft/library/wsf_js_widget/kernel/widgets/wsf_date_picker_control.e +++ b/draft/library/wsf_js_widget/kernel/widgets/wsf_date_picker_control.e @@ -53,17 +53,22 @@ feature {NONE} -- Initialization feature -- Implementation value: STRING_32 + -- The current value do Result := input.value end set_value (v: STRING_32) + -- Set the current date (has to be in format dd-mm-yyyy) do input.set_value (v) + ensure then + value_set: input.value = v end feature -- Properties input: WSF_INPUT_CONTROL + -- The input control which is used to display the selected date end