diff --git a/web/CXM_form_field.anubis b/web/CXM_form_field.anubis
new file mode 100644
index 0000000..e1111cc
--- /dev/null
+++ b/web/CXM_form_field.anubis
@@ -0,0 +1,695 @@
+/*
+ * Created by PyramIDE.
+ * User: totoro
+ * Date: 24/07/2007
+ * Time: 21:09
+ *
+ */
+
+read tools/basis.anubis
+read system/lists.anubis
+read system/string.anubis
+read system_colors/rgb.anubis
+
+read calexium_lib/web/CXM_making_a_web_site.anubis
+read calexium_lib/web/CXM_multihost_http_server.anubis
+read calexium_lib/web/CXM_dojo.anubis
+
+read app_constants.anubis
+ read app_version.anubis
+read web_pages/common/language_management.anubis
+read web_pages/common/web_widgets.anubis
+read calexium_lib/web/widgets/css_helper.anubis
+read tools/base_tools.anubis
+read utils.anubis
+read types/app_web_types.anubis
+
+define Text_Option
+ menu_state_to_class
+ (
+ MenuState state
+ )
+ =
+ if state is
+ {
+ none then class("item_normal"),
+ highlight then class("item_highlight"),
+ sub then class("subitem"),
+ sub_and_highlight then class("subitem_highlight"),
+ disabled then class("item_disabled")
+ }.
+
+public define HTML_Off_Form
+ menu_title
+ (
+ String view_text
+ ) =
+ literal("
").
+
+public define HTML_Off_Form
+ menu_entry
+ (
+ String view_text,
+ String action,
+ MenuState state
+ )=
+ paragraph([id(action), menu_state_to_class(state)],
+ actioner( same, same,
+ link([], view_text),
+ action,
+ [])).
+
+public define HTML_Off_Form
+ menu_entry
+ (
+ String view_text,
+ String action,
+ $T val,
+ $T wanted
+ )=
+ if val = wanted then
+ menu_entry(view_text, action, highlight)
+ else
+ menu_entry(view_text, action, none).
+
+public define HTML_Off_Form
+ sub_menu_entry
+ (
+ String view_text,
+ String action,
+ $T val,
+ $T wanted
+ )=
+ if val = wanted then
+ menu_entry(view_text, action, sub_and_highlight)
+ else
+ menu_entry(view_text, action, sub).
+
+
+public define HTML_Off_Form
+ step_title
+ (
+ String view_text
+ ) =
+ literal("" + view_text + "
").
+
+public define HTML_Off_Form
+ step_entry
+ (
+ String view_text,
+ String action,
+ $T val,
+ $T wanted,
+ List($T) stepsDone
+ )=
+ if contains(stepsDone, wanted) | val = wanted then
+ with state = if val = wanted then highlight
+ else none,
+ paragraph([id(action), menu_state_to_class(state)],
+ actioner( same, same,
+ link([], view_text),
+ action,
+ []))
+ else
+ paragraph([id(action), class("item_disabled")],
+ literal(view_text))
+ .
+
+public define HTML_In_Form
+ display_info_line
+ (
+ String html_id,
+ String html_class,
+ String txt,
+ ) =
+ div([class(html_class)], literal(txt)).
+
+public define HTML_Off_Form
+ display_info_line
+ (
+ String html_id,
+ String html_class,
+ String txt,
+ ) =
+ div([class(html_class)], literal(txt)).
+
+public define HTML_Off_Form
+ display_main_info_line
+ (
+ String html_class,
+ String txt
+ ) =
+ display_info_line("informations", html_class, txt).
+
+// *************************************************************************************
+// *** Generic form
+// *************************************************************************************
+
+read calexium_lib/web/CXM_common.anubis
+
+public type Mandatory: // used to mark fields as mandatory.
+ mandatory,
+ non_mandatory.
+
+public type Width:
+ small,
+ narrow,
+ wide,
+ custom(Int).
+
+public type FormFieldWidth:
+ auto,
+ custom(Int).
+
+public type MF_FormTooltip:
+ tooltip(String title, String content, Int width).
+
+public type CXM_Form_Field:
+ no_field, // empty field
+
+ //--- title field ---------------------------------------------------------------------
+ title (String text),
+// title (Int text_size,
+// String text),
+// title_f (List(Text_Option) -> HTML_In_Form),
+
+ //--- message field -------------------------------------------------------------------
+ message (String text),
+
+ //--- text input field ----------------------------------------------------------------
+ input (List(InputAttrs) options,
+ String label,
+ HtmlId id,
+ WebArgName web_arg_name,
+ InitialValue init_value,
+ Width width,
+ Mandatory mandatory),
+ input_readonly (List(InputAttrs) options,
+ String label,
+ HtmlId id,
+ WebArgName web_arg_name,
+ InitialValue init_value,
+ Width width),
+
+ //--- text area field -----------------------------------------------------------------
+ text_area (List(TextAreaOption) options,
+ String label,
+ HtmlId id,
+ WebArgName web_arg_name,
+ InitialValue init_value,
+ Width width,
+ Int height,
+ Mandatory mandatory),
+
+ //--- password input field ------------------------------------------------------------
+ password_input (List(InputAttrs) options,
+ String label,
+ HtmlId id,
+ WebArgName web_arg_name,
+ InitialValue init_value,
+ Width width,
+ Mandatory mandatory),
+
+ //--- hidden field ------------------------------------------------------------
+ hidden (HtmlId id,
+ WebArgName web_arg_name,
+ InitialValue init_value),
+ //--- explanation field ---------------------------------------------------------------
+ explain (String text),
+
+ //--- selector field ------------------------------------------------------------------
+ selector (List(InputAttrs) options,
+ String label,
+ HtmlId id,
+ WebArgName web_arg_name,
+ Int size,
+ List(String) items,
+ Maybe(InitialValue) selected,
+ Mandatory mandatory),
+ selector_c (List(InputAttrs) options,
+ String label,
+ HtmlId id,
+ WebArgName web_arg_name,
+ Int size,
+ List((List(CoreAttrs),WebArgValue,String)) items,
+ Maybe(InitialValue) selected,
+ Mandatory mandatory),
+
+
+
+ //--- checkbox field ------------------------------------------------------------------
+ checkbox (List(InputAttrs) options,
+ String label,
+ HtmlId id,
+ WebArgName web_arg_name,
+ WebArgValue web_arg_value,
+ Bool checked,
+ Mandatory mandatory),
+ // the same one, but with the tag on the right of the checkbox
+ checkboxr (List(InputAttrs) options,
+ String label,
+ HtmlId id,
+ WebArgName web_arg_name,
+ WebArgValue web_arg_value,
+ Bool checked,
+ Mandatory mandatory),
+
+ //--- radio-button field --------------------------------------------------------------
+ radio_button (List(InputAttrs) options,
+ String label,
+ HtmlId id,
+ WebArgName web_arg_name,
+ WebArgValue web_arg_value,
+ Bool checked,
+ Mandatory mandatory),
+ // the same one, but with the tag on the right of the radio_button
+ radio_buttonr (List(InputAttrs) options,
+ String label,
+ HtmlId id,
+ WebArgName web_arg_name,
+ WebArgValue web_arg_value,
+ Bool checked,
+ Mandatory mandatory),
+
+ radio_button_list (List(InputAttrs) options,
+ String label,
+ HtmlId id,
+ WebArgName web_arg_name,
+ List((WebArgValue, String)) web_arg_value,
+ Maybe(InitialValue) selected,
+ Mandatory mandatory,
+ Bool is_wide),
+
+// //--- fields table --------------------------------------------------------------------
+// fields_table (String tag,
+// List(FormField) fields),
+//
+// //--- fields line ---------------------------------------------------------------------
+// fields_line (String tag,
+// List(FormField) fields),
+ one_line_fields (List(CXM_Form_Field) fields),
+
+//
+// //--- preview field -------------------------------------------------------------------
+// preview (String html_text),
+
+ //--- upload field -------------------------------------------------------------------
+ upload (List(InputAttrs) options,
+ String label,
+ HtmlId id,
+ WebArgName name,
+ Width width,
+ Mandatory mandatory),
+
+ raw_in_form (HTML_In_Form html),
+ raw_in_form (String label,
+ HtmlId id,
+ HTML_In_Form input),
+ div (List(CoreAttrs), HTML_In_Form content),
+ partial (HTML_Partial_Content p_content),
+ input_with_help (CXM_Form_Field field,
+ Maybe(String) help_title,
+ String help_text,
+ Int width),
+
+ sub_fieldset (HTML_In_Form fieldset),
+
+ blank_space,
+ blank_space (HtmlClass class),
+
+ //--- submit button -------------------------------------------------------------------
+ submit (List(CoreAttrs) options,
+ HtmlClass class,
+ String action_name,
+ Maybe(String) label,
+ String button_text,
+ List((String,String)) extra_operands),
+ empty.
+
+// //////////////////////////////////////////////
+// Alternative constructors:
+
+public define CXM_Form_Field
+ input(WebArgName n, InitialValue init_value, Width width)
+ = input([], "", htmlId(n.name), n, init_value, width, non_mandatory).
+
+public define CXM_Form_Field
+ input(String label, WebArgName n, InitialValue init_value, Width width)
+ = input([], label, htmlId(n.name), n, init_value, width, non_mandatory).
+
+public define CXM_Form_Field
+ input(String label, WebArgName n, InitialValue init_value, Width width, Mandatory mand)
+ = input([], label, htmlId(n.name), n, init_value, width, mand).
+
+public define CXM_Form_Field
+ input_readonly(String label, WebArgName n, InitialValue init_value, Width width)
+ = input_readonly([], label, htmlId(n.name), n, init_value, width).
+
+public define CXM_Form_Field
+ password_input(String label, WebArgName n, InitialValue init_value, Width width, Mandatory mand)
+ = password_input([], label, htmlId(n.name), n, init_value, width, mand).
+
+public define CXM_Form_Field
+ checkbox(String label, WebArgName n, WebArgValue value, Bool checked, Mandatory mand)
+ = checkbox([], label, htmlId(n.name), n, value, checked, mand).
+
+public define CXM_Form_Field
+ checkboxr(String label, WebArgName n, WebArgValue value, Bool checked, Mandatory mand)
+ = checkboxr([], label, htmlId(n.name), n, value, checked, mand).
+
+public define CXM_Form_Field
+ radio_button(String label, WebArgName n, WebArgValue value, Bool checked, Mandatory mand)
+ = radio_button([], label, htmlId(n.name), n, value, checked, mand).
+
+public define CXM_Form_Field
+ radio_buttonr(String label, WebArgName n, WebArgValue value, Bool checked, Mandatory mand)
+ = radio_buttonr([], label, htmlId(n.name), n, value, checked, mand).
+
+public define CXM_Form_Field
+ submit(String action_name, HtmlClass class, Maybe(String) label, String button_text, List((String,String)) extra_operands)
+ = submit([], class, action_name, label, button_text, extra_operands).
+
+public define CXM_Form_Field
+ submit(String action_name, Maybe(String) label, String button_text, List((String,String)) extra_operands)
+ = submit([], htmlClass(""), action_name, label, button_text, extra_operands).
+
+public define CXM_Form_Field
+ upload(String label, HtmlId id, WebArgName name, Width width)
+ = upload([], label, id, name, width, non_mandatory).
+
+public define CXM_Form_Field
+ upload(String label, HtmlId id, WebArgName name, Width width, Mandatory mand)
+ = upload([], label, id, name, width, mand).
+
+public define CXM_Form_Field
+ input_with_help (CXM_Form_Field field, String help_text)
+ = input_with_help (field, failure, help_text, 250).
+
+public define CXM_Form_Field
+ input_with_help (CXM_Form_Field field, String help_text, Int width)
+ = input_with_help (field, failure, help_text, width).
+
+public define CXM_Form_Field
+ ip_input
+ (
+ String label,
+ HtmlId id,
+ WebArgName wan_prefix,
+ String ip
+ )=
+ raw_in_form(
+ label,
+ id,
+ ip_input(id, wan_prefix, ip)
+ ).
+
+
+public define CXM_Form_Field
+ partial_ip_input
+ (
+ String label,
+ HtmlId id,
+ WebArgName wan_prefix,
+ List(String) ip_fixed_part,
+ String ip
+ )=
+ raw_in_form(
+ label,
+ id,
+ partial_ip_input(id, wan_prefix, ip_fixed_part, ip)
+ ).
+
+public define CXM_Form_Field
+ hidden
+ (
+ WebArgName web_arg_name,
+ InitialValue init_value
+ )=
+ if web_arg_name is wan(name) then
+ hidden(htmlId(name), web_arg_name, init_value).
+
+
+ //--- explanation field ---------------------
+
+// //////////////////////////////////////////////////////////
+
+public define HTML_In_Form
+ mf_format_form_field
+ (
+ CXM_Form_Field ff
+ ) =
+ with star = (Mandatory m) |-> (String)
+ if m is
+ {
+ mandatory then "*",
+ non_mandatory then ""
+ },
+ pixels = (Width width) |->
+ if width is
+ {
+ small then 10,
+ narrow then 50,
+ wide then 70,
+ custom(n) then n
+ },
+ // special case out of the div("inputable") tag.
+// if ff is submit(attrs, action_name, mb_label, button_text, extra_operands) then
+// mf_format_form_field_inside_inputable(ff, star, pixels)
+// else if ff is hidden(name, init) then
+// mf_format_form_field_inside_inputable(ff, star, pixels)
+// else if ff is sub_fieldset(fieldset) then
+// mf_format_form_field_inside_inputable(ff, star, pixels)
+// else
+// div([class("inputable")],
+// mf_format_form_field_inside_inputable(ff, star, pixels))
+
+// sequence([
+// literal(" \n"),
+// mf_format_form_field_inside_inputable(ff, star, pixels, failure),
+// literal("
\n"),
+// ])
+
+ if ff is
+ {
+ no_field then
+ literal(""),
+
+ title(t) then
+ literal("" + t + "
"),
+
+// title(s,t) then
+// text([h_center, size(s),bold,color(rgb(0,0,0))], t),
+//
+// title_f(t) then
+// t([h_center, size(16),bold,color(rgb(0,0,0))]),
+
+ message(t) then
+ literal(t),
+
+ input(options, label, id, name, init, w, mand) then
+ text_input([class("in") . options], label + star(mand), id, name, init, pixels(w)),
+
+ input_readonly(options, label, id, name, init, w) then
+ text_input_ro([class("in") . options], label, id, name, init, pixels(w)),
+
+ text_area(options, label, id, name, init, w, height, mand) then
+ text_area([input_attrs([class("in")]) . options], label + star(mand), id, name, init, pixels(w), height),
+
+ password_input(options, label, id, name, init, w, mand) then
+ password_input([class("in") . options], label + star(mand), id, name, init, pixels(w)),
+
+ hidden(id, name, init) then
+ hidden(id, name, init),
+
+ explain(t) then
+ div([class("sub")], literal(t)),
+
+ selector(options, label, id, wan, size, items, selected, mand) then
+ if selected is
+ {
+ failure then selector(options, label + star(mand), id, wan, size, items),
+ success(init) then selector(options, label + star(mand), id, wan, size, items, init),
+ },
+
+ selector_c(options, label, id, wan, size, items, selected, mand) then
+ if selected is
+ {
+ failure then selector_c(options, label + star(mand), id, wan, size, items),
+ success(init) then selector_c(options, label + star(mand), id, wan, size, items, init),
+ },
+
+ checkbox(options, label, id, name, val, checked, mand) then
+ check_box(options, label + star(mand), id, name, val, checked),
+
+ checkboxr(options, label, id, name, val, checked, mand) then
+ check_box_r(options, label + star(mand), id, name, val, checked),
+
+ radio_button(options, label, id, name, val, checked, mand) then
+ radio_button(options, label + star(mand), id, name, val, checked),
+
+ radio_buttonr(options, label, id, name, val, checked, mand) then
+ radio_button_r(options, label + star(mand), id, name, val, checked),
+
+ radio_button_list (options, label, id, wan, items, selected, mand, wide) then
+ sequence([
+ literal(""),
+ div( [class("radiolist")], sequence(
+ with i = var((Int)-1),
+ itemclass = if wide then "radiolistitem_wide" else "radiolistitem",
+ map( ((WebArgValue, String) item) |->
+ i <- *i + 1;
+ if item is (wav, item_label) then
+ with id = if id is htmlId(the_id) then htmlId(the_id + "_radio_" + *i),
+ div([class(itemclass)], radio_button_r(options, item_label, id, wan, wav,
+ if selected is success(v) then wav.value = v.value else false)),
+ items))
+ ),
+ ]),
+ one_line_fields(fields) then
+ table([nude],[row([],
+ map((CXM_Form_Field ff2) |-> cell([],mf_format_form_field(ff2)),fields))])
+ ,
+
+
+ upload(options, label, id, name, w, mand) then
+ file_upload(options, label + star(mand), id, name, pixels(w)),
+
+ raw_in_form(html) then
+ html,
+// div([class("in")], html),
+ raw_in_form(label, id, input) then
+ sequence([
+ if id is htmlId(id) then
+ literal(""),
+ input]),
+ div(options, e) then div(options, e),
+ partial(p_content) then partial(p_content),
+ input_with_help(input, help_title, help_text, width) then
+ sequence([
+ mf_format_form_field(input),
+ html_tooltip(force_String(help_title), help_text, width),
+ ]),
+
+ sub_fieldset(fieldset) then
+ fieldset,
+
+ blank_space then
+ div([class("blank_space")], literal(" ")),
+
+ blank_space(htmlClass) then
+ div([class(htmlClass.class)], literal(" ")),
+
+ submit(attrs, htmlClass, action_name, mb_label, button_text, extra_operands) then
+ actioner( same, // TODO change this to allow external URL
+ if mb_label is
+ {
+ failure then same,
+ success(n) then same(n)
+ },
+ submit(attrs + [class(htmlClass.class)], button_text),
+ action_name,
+ extra_operands
+ ),
+ empty then literal("")
+ }.
+
+public define HTML_In_Form
+ cxm_generic_fieldset
+ (
+ List(CoreAttrs) options,
+ String legend,
+ List(CXM_Form_Field)fields
+ ) =
+ sequence([
+ literal("")]).
+
+public define HTML_In_Form
+ cxm_generic_fieldset
+ (
+ HtmlId fieldSetId,
+ List(CXM_Form_Field)fields
+ ) =
+ cxm_generic_fieldset([id(fieldSetId.id), class("aligned")], "", fields).
+
+public define HTML_Off_Form
+ cxm_generic_form
+ (
+ String form_name,
+ List(CoreAttrs) options,
+ String action_name,
+ List((String,String)) extra_ops,
+ List(HTML_In_Form) fieldSets
+ ) =
+ //div([class("formulaire")],
+ form( form_name,
+ [class("formulaire") . options],
+ action_name,
+ extra_ops,
+ sequence( fieldSets )
+ // )
+ ).
+
+public define HTML_Off_Form
+ cxm_generic_form
+ (
+ String form_name,
+ List(CoreAttrs) options,
+ List(HTML_In_Form) fieldSets
+ ) =
+ //div([class("formulaire")],
+ form( form_name,
+ [class("formulaire") . options],
+ sequence( fieldSets )
+ // )
+ ).
+
+public define HTML_Off_Form
+ cxm_generic_form
+ (
+ String form_name,
+ List(CoreAttrs) options,
+ HtmlId fieldSetId,
+ String action_name,
+ List((String,String)) extra_ops,
+
+ List(CXM_Form_Field) fields
+ ) =
+ cxm_generic_form(form_name, options, action_name, extra_ops,
+ [
+ cxm_generic_fieldset([id(fieldSetId.id), class("aligned")], "", fields)
+ ]).
+
+public define HTML_Off_Form
+ cxm_generic_form
+ (
+ String form_name,
+ List(CoreAttrs) options,
+ HtmlId fieldSetId,
+ List(CXM_Form_Field) fields
+ ) =
+ cxm_generic_form(form_name, options,
+ [
+ cxm_generic_fieldset([id(fieldSetId.id), class("aligned")], "", fields)
+ ]).
+
+public define HTML_Off_Form
+ cxm_generic_form
+ (
+ String form_name,
+ List(HTML_In_Form) fieldSets
+ ) =
+ cxm_generic_form(form_name, [], fieldSets).
+
+public define HTML_Off_Form
+ cxm_generic_form
+ (
+ String form_name,
+ HtmlId fieldSetId,
+ List(CXM_Form_Field) fields
+ ) =
+ cxm_generic_form(form_name, [], fieldSetId, fields).
+
+
--
libgit2 0.21.4