diff --git a/web/CXM_form.anubis b/web/CXM_form.anubis new file mode 100644 index 0000000..2bc70af --- /dev/null +++ b/web/CXM_form.anubis @@ -0,0 +1,561 @@ +/* + * Created by PyramIDE. + * User: フランスのトトロ + * Date: 07/12/2014 + * Time: 16:49 + * © Calexium + */ + +// ************************************************************************************* +// *** Generic form +// ************************************************************************************* +read tools/basis.anubis +read system/string.anubis +read calexium_lib/web/CXM_common.anubis +read calexium_lib/web/CXM_making_a_web_site.anubis +read calexium_lib/web/CXM_html_tooltip.anubis +read calexium_lib/web/CXM_widgets.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 CXM_FormTooltip: + tooltip(String title, String content, Int width). + +public type CXM_FormField: + 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_FormField) 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), + partial (HTML_Partial_Content p_content), + input_with_help (CXM_FormField 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_FormField + input(WebArgName n, InitialValue init_value, Width width) + = input([], "", htmlId(n.name), n, init_value, width, non_mandatory). + +public define CXM_FormField + input(String label, WebArgName n, InitialValue init_value, Width width) + = input([], label, htmlId(n.name), n, init_value, width, non_mandatory). + +public define CXM_FormField + 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_FormField + input_readonly(String label, WebArgName n, InitialValue init_value, Width width) + = input_readonly([], label, htmlId(n.name), n, init_value, width). + +public define CXM_FormField + 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_FormField + checkbox(String label, WebArgName n, WebArgValue value, Bool checked, Mandatory mand) + = checkbox([], label, htmlId(n.name), n, value, checked, mand). + +public define CXM_FormField + checkboxr(String label, WebArgName n, WebArgValue value, Bool checked, Mandatory mand) + = checkboxr([], label, htmlId(n.name), n, value, checked, mand). + +public define CXM_FormField + 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_FormField + 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_FormField + 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_FormField + 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_FormField + upload(String label, HtmlId id, WebArgName name, Width width) + = upload([], label, id, name, width, non_mandatory). + +public define CXM_FormField + upload(String label, HtmlId id, WebArgName name, Width width, Mandatory mand) + = upload([], label, id, name, width, mand). + +public define CXM_FormField + input_with_help (CXM_FormField field, String help_text) + = input_with_help (field, failure, help_text, 250). + +public define CXM_FormField + input_with_help (CXM_FormField field, String help_text, Int width) + = input_with_help (field, failure, help_text, width). + +public define CXM_FormField + 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_FormField + 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_FormField + 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 + cxm_format_form_field + ( + CXM_FormField 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_FormField ff2) |-> cell([],cxm_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]), + partial(p_content) then + partial(p_content), + input_with_help(input, help_title, help_text, width) then + sequence([ + cxm_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_fieldset + ( + List(CoreAttrs) options, + String legend, + List(CXM_FormField) fields + ) = + sequence([ + literal(""), + literal(if length(legend) > 0 then "" + legend + "" else ""), + sequence( map((CXM_FormField ff) |-> div([class("form_field")], cxm_format_form_field(ff)), fields) ), + literal("")]). + +public define HTML_In_Form + cxm_fieldset + ( + HtmlId fieldSetId, + List(CXM_FormField) fields + ) = + cxm_fieldset([id(fieldSetId.id), class("aligned")], "", fields). + +public define HTML_Off_Form + cxm_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_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_form + ( + String form_name, + List(CoreAttrs) options, + String action_name, + List((String,String)) extra_ops, + HtmlId fieldSetId, + List(CXM_FormField) fields + ) = + cxm_form(form_name, options, action_name, extra_ops, + [ + cxm_fieldset([id(fieldSetId.id), class("aligned")], "", fields) + ]). + +public define HTML_Off_Form + cxm_form + ( + String form_name, + List(CoreAttrs) options, + HtmlId fieldSetId, + List(CXM_FormField) fields + ) = + cxm_form(form_name, options, + [ + cxm_fieldset([id(fieldSetId.id), class("aligned")], "", fields) + ]). + +public define HTML_Off_Form + cxm_form + ( + String form_name, + List(HTML_In_Form) fieldSets + ) = + cxm_form(form_name, [], fieldSets). + +public define HTML_Off_Form + cxm_form + ( + String form_name, + HtmlId fieldSetId, + List(CXM_FormField) fields + ) = + cxm_form(form_name, [], fieldSetId, fields). + diff --git a/web/CXM_html_tooltip.anubis b/web/CXM_html_tooltip.anubis new file mode 100644 index 0000000..0b46044 --- /dev/null +++ b/web/CXM_html_tooltip.anubis @@ -0,0 +1,101 @@ +/* + * Created by PyramIDE. + * User: フランスのトトロ + * Date: 07/12/2014 + * Time: 17:12 + * © Calexium + */ + +read tools/basis.anubis + +read calexium_lib/web/CXM_common.anubis +read calexium_lib/web/CXM_making_a_web_site.anubis + +public define HTML_Off_Form + html_tooltip + ( + String title, + String keyword, + ) = + literal(""). + + actioner(same,same, link([id("help_" + keyword), class("jTip jTip_help"), attr("target", "_blank")], " ", success(title)), "ajax_show_tooltip", [("tooltip_id", keyword)], []). + +public define HTML_Off_Form + html_tooltip + ( + String title, + String keyword, + Int width, + ) = + literal(""). + + actioner(same,same, link([id("help_" + keyword), class("jTip jTip_help"), attr("target", "_blank")], " ", success(title)), "ajax_show_tooltip", [("tooltip_id", keyword), ("width", to_decimal(width))], []). + +public define HTML_In_Form + html_tooltip + ( + String title, + String keyword, + ) = + literal(""). + + actioner(same,same, link([id("help_" + keyword), class("jTip jTip_help"), attr("target", "_blank")], " ", success(title)), "ajax_show_tooltip", [("tooltip_id", keyword)], []). + +public define HTML_In_Form + html_tooltip + ( + String title, + String keyword, + Int width, + ) = + literal(""). + + actioner(same,same, link([id("help_" + keyword), class("jTip jTip_help"), attr("target", "_blank")], " ", success(title)), "ajax_show_tooltip", [("tooltip_id", keyword), ("width", to_decimal(width))], []). + + public define HTML_Off_Form + html_tooltip_ext + ( + String title, + String keyword, + String class_suffix + ) = + actioner(same,same, link([id("help_" + keyword), class("jTip jTip_"+class_suffix), attr("target", "_blank")], " ", success(title)), "ajax_show_tooltip", [("tooltip_ext", keyword)], []). + +public define HTML_Off_Form + html_tooltip_ext + ( + String title, + String keyword, + String class_suffix, + List((String, String)) ext_args + ) = + with extra_args = format_extra_operands(ext_args), + literal(""). + + actioner(same,same, link([id("help_" + keyword), class("jTip jTip_"+class_suffix), attr("target", "_blank")], " ", success(title)), "ajax_show_tooltip", [("tooltip_ext", keyword)] + ext_args, []). + + public define HTML_In_Form + html_tooltip_ext + ( + String title, + String keyword, + String class_suffix + ) = + actioner(same,same, link([id("help_" + keyword), class("jTipu jTip_"+class_suffix), attr("target", "_blank")], " ", success(title)), "ajax_show_tooltip", [("tooltip_ext", keyword)], []). + +public define HTML_In_Form + html_tooltip_ext + ( + String title, + String keyword, + String class_suffix, + List((String, String)) ext_args + ) = + with extra_args = format_extra_operands(ext_args), + literal(""). + + + href=\"/?a=ajax_show_tooltip&tooltip_id="+keyword+"\" id=\"help_"+keyword+HELP_HMS_MODE" class="jTip jTip_help" target="_blank" name="Aide sur la fonctionnalité 'No Limit'"> "). + + actioner(same,same, link([id("help_" + keyword), class("jTip jTip_"+class_suffix), attr("target", "_blank")], " ", success(title)), "ajax_show_tooltip", [("tooltip_ext", keyword)] + ext_args, []). diff --git a/web/CXM_widgets.anubis b/web/CXM_widgets.anubis new file mode 100644 index 0000000..e9d553c --- /dev/null +++ b/web/CXM_widgets.anubis @@ -0,0 +1,71 @@ +/* + * Created by PyramIDE. + * User: フランスのトトロ + * Date: 07/12/2014 + * Time: 18:10 + * © Calexium + */ + +read system/string.anubis +read tools/basis.anubis + +read calexium_lib/web/CXM_making_a_web_site.anubis + +public define HTML_In_Form + ip_input + ( + HtmlId the_id, + WebArgName wan_prefix, + String ip + )= + with ip_fields = split(ip, '.'), + if the_id is htmlId(id_str) then + if wan_prefix is wan(field_prefix) then + div([id(id_str)], + sequence( + [ + text_input([class("ip_input")], "", htmlId(""), wan(field_prefix+"_0"), init(force_nth(0,ip_fields,"")), 3), + text("."), + text_input([class("ip_input")], "", htmlId(""), wan(field_prefix+"_1"), init(force_nth(1,ip_fields,"")), 3), + text("."), + text_input([class("ip_input")], "", htmlId(""), wan(field_prefix+"_2"), init(force_nth(2,ip_fields,"")), 3), + text("."), + text_input([class("ip_input")], "", htmlId(""), wan(field_prefix+"_3"), init(force_nth(3,ip_fields,"")), 3), + ])) + . + +// --------------------------------------------------------------------------- + +public define HTML_In_Form + partial_ip_input + ( + HtmlId the_id, + WebArgName wan_prefix, + List(String) ip_fixed_part, + String ip + )= + with ip_fields = split(ip, '.'), + if the_id is htmlId(id_str) then + if wan_prefix is wan(field_prefix) then + with make_field = (Int index) + |-> if index < length(ip_fixed_part) then + text([], force_nth(index, ip_fixed_part, "")) + else + text_input([class("ip_input")], + "", + htmlId(""), + wan(field_prefix + "_" + index), + init(force_nth(index, ip_fields, "")), + 3), + div([id(id_str)], + sequence( + [ + make_field(0), + text("."), + make_field(1), + text("."), + make_field(2), + text("."), + make_field(3), + ])) + . -- libgit2 0.21.4