/* * 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_web_arg_utils.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_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), //checkbox_hide_show checkbox_hide_show( List(InputAttrs) options, String label, WebArgName web_arg_name, WebArgValue web_arg_value, Bool checked, List(CXM_Form_Field) fields), //--- 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 cxm_format_form_field ( CXM_Form_Field ff, List(Web_arg) lwa ) = 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, wan, default, w, mand) then text_input([class("in") . options], label + star(mand), id, wan, init(get_String(lwa, wan.name, default.value)), 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, wan, default, w, height, mand) then text_area([input_attrs([class("in")]) . options], label + star(mand), id, wan, init(get_String(lwa, wan.name, default.value)), 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([class("in") . options], label + star(mand), id, wan, size, items), success(default) then selector([class("in") . options], label + star(mand), id, wan, size, items, init(get_String(lwa, wan.name, default.value))), }, selector_c(options, label, id, wan, size, items, selected, mand) then if selected is { failure then selector_c([class("in") . options], label + star(mand), id, wan, size, items), success(default) then selector_c([class("in") . options], label + star(mand), id, wan, size, items, init(get_String(lwa, wan.name, default.value))), }, checkbox(options, label, id, wan, val, checked, mand) then check_box([class("in") . options], label + star(mand), id, wan, val, get_Bool(lwa, wan.name, checked)), checkboxr(options, label, id, wan, val, checked, mand) then check_box_r([class("in") . options], label + star(mand), id, wan, val, get_Bool(lwa, wan.name, checked)), checkbox_hide_show(options, label, wan, val, checked, fields) then with div_id = generate_random_string(15), sequence([ check_box([event(onclick, "checkbox_hide_show_element('"+div_id+"', this);")], label, htmlId(""), wan, val, get_Bool(lwa, wan.name, checked)), div([id(div_id), style("display:"+if checked then "block" else "none")], sequence(map((CXM_Form_Field ff2) |-> div([class("form_field")], cxm_format_form_field(ff2, lwa)),fields))) ]), radio_button(options, label, id, wan, val, checked, mand) then radio_button([class("in") . options], label + star(mand), id, wan, val, get_Bool(lwa, wan.name, checked)), radio_buttonr(options, label, id, wan, val, checked, mand) then radio_button_r([class("in") . options], label + star(mand), id, wan, val, get_Bool(lwa, wan.name, checked)), radio_button_list (options, label, id, wan, items, selected, mand, wide) then with new_selected = if get_String(lwa, wan.name) is { failure then selected, success(value) then success(init(value)) }, 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 new_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([],cxm_format_form_field(ff2, lwa)),fields))]) , upload(options, label, id, name, w, mand) then file_upload([class("in") . 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([ cxm_format_form_field(input, lwa), 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(Web_arg) lwa, List(CXM_Form_Field) fields )= sequence([ literal(""), literal(if length(legend) > 0 then "" + legend + "" else ""), sequence( map((CXM_Form_Field ff) |-> div([class("form_field")], cxm_format_form_field(ff, lwa)), fields) ), literal("")] ) . public define HTML_In_Form cxm_fieldset ( HtmlId fieldSetId, List(Web_arg) lwa, List(CXM_Form_Field) fields ) = cxm_fieldset([id(fieldSetId.id), class("aligned")], "", lwa, 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, HtmlId fieldSetId, String action_name, List((String,String)) extra_ops, List(Web_arg) lwa, List(CXM_Form_Field) fields ) = cxm_form(form_name, options, action_name, extra_ops, [ cxm_fieldset([id(fieldSetId.id), class("aligned")], "", lwa, fields) ]). public define HTML_Off_Form cxm_form ( String form_name, List(CoreAttrs) options, HtmlId fieldSetId, List(Web_arg) lwa, List(CXM_Form_Field) fields ) = cxm_form(form_name, options, [ cxm_fieldset([id(fieldSetId.id), class("aligned")], "", lwa, 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(Web_arg) lwa, List(CXM_Form_Field) fields ) = cxm_form(form_name, [], fieldSetId, lwa, fields).