# Module type Eliom_mkforms.ELIOMFORMSIG

    module type ELIOMFORMSIG = sig .. end

    type form_content_elt

    type form_content_elt_list

    type form_elt

    type a_content_elt

    type a_content_elt_list

    type a_elt

    type a_elt_list

    type div_content_elt

    type div_content_elt_list

    type uri

    type link_elt

    type script_elt

    type textarea_elt

    type input_elt

    type pcdata_elt

    type select_elt

    type select_content_elt

    type select_content_elt_list

    type button_elt

    type button_content_elt

    type button_content_elt_list

    type option_elt

    type option_elt_list

    type a_attrib_t

    type form_attrib_t

    type input_attrib_t

    type textarea_attrib_t

    type select_attrib_t

    type link_attrib_t

    type script_attrib_t

    type optgroup_attrib_t

    type option_attrib_t

    type button_attrib_t

    type input_type_t

    type button_type_t

## Links and forms

    val make_full_string_uri : ?https:bool ->
           service:('a, unit, [< Eliom_services.get_service_kind ],
                    [< Eliom_services.suff ], 'b, unit, [< Eliom_services.registrable ])
                   Eliom_services.service ->
           sp:Eliom_sessions.server_params ->
           ?hostname:string -> ?port:int -> ?fragment:string -> 'a -> string

Creates the string corresponding to the full (absolute) URL of a service applied to its GET parameters.

Hostname and port are determined from attribute of <host> tag in configuration file, but you can choose the one you want by setting the optional `?hostname` and `?port` parameters here.

    val make_full_uri : ?https:bool ->
           service:('a, unit, [< Eliom_services.get_service_kind ],
                    [< Eliom_services.suff ], 'b, unit, [< Eliom_services.registrable ])
                   Eliom_services.service ->
           sp:Eliom_sessions.server_params ->
           ?hostname:string ->
           ?port:int -> ?fragment:string -> 'a -> uri

Creates the string corresponding to the full (absolute) URL of a service applied to its GET parameters.

    val make_string_uri : ?https:bool ->
           service:('a, unit, [< Eliom_services.get_service_kind ],
                    [< Eliom_services.suff ], 'b, unit, [< Eliom_services.registrable ])
                   Eliom_services.service ->
           sp:Eliom_sessions.server_params ->
           ?hostname:string -> ?port:int -> ?fragment:string -> 'a -> string

Creates the string corresponding to the relative URL of a service applied to its GET parameters.

    val make_uri : ?https:bool ->
           service:('a, unit, [< Eliom_services.get_service_kind ],
                    [< Eliom_services.suff ], 'b, unit, [< Eliom_services.registrable ])
                   Eliom_services.service ->
           sp:Eliom_sessions.server_params ->
           ?hostname:string ->
           ?port:int -> ?fragment:string -> 'a -> uri

Creates the (relative) URL for a service. Like the `a` function, it may take extra parameters.

    val a : ?https:bool ->
           ?a:a_attrib_t ->
           service:('a, unit, [< Eliom_services.get_service_kind ],
                    [< Eliom_services.suff ], 'b, 'c, [< Eliom_services.registrable ])
                   Eliom_services.service ->
           sp:Eliom_sessions.server_params ->
           ?hostname:string ->
           ?port:int ->
           ?fragment:string ->
           a_content_elt_list ->
           'a -> a_elt

`a service sp cont ()` creates a link to `service`. The text of the link is `cont`. For example `cont` may be something like `[pcdata "click here"]`.

The last parameter is for GET parameters. For example `a service sp cont (42,"hello")`

The `~a` optional parameter is used for extra attributes.

The `~fragment` optional parameter is used for the "fragment" part of the URL, that is, the part after character "#".

When possible, all links generated by Eliom are relative, for example to make easier the use with reverse proxies. But in case of protocol change (if you want to switch to https using `~https:true` for example, or if the service imposes https), absolute links will be generated. In that case, hostname and port are determined from attribute of `<host>` tag in configuration file, but you can choose other ones by setting the optional `?hostname` and `?port` parameters here. These options have no effect for relative links. Warning: it may be a security problem to use the hostname sent by the client here.

    val css_link : ?a:link_attrib_t ->
           uri:uri ->
           unit -> link_elt

Creates a `<link>` tag for a Cascading StyleSheet (CSS).

    val js_script : ?a:script_attrib_t ->
           uri:uri ->
           unit -> script_elt

Creates a `<script>` tag to add a javascript file

    val get_form : ?https:bool ->
           ?a:form_attrib_t ->
           service:('a, unit, [< Eliom_services.get_service_kind ],
                    [< Eliom_services.suff ], 'b, 'c, [< Eliom_services.registrable ])
                   Eliom_services.service ->
           sp:Eliom_sessions.server_params ->
           ?hostname:string ->
           ?port:int ->
           ?fragment:string ->
           ('b -> form_content_elt_list) ->
           form_elt

`get_form service sp formgen` creates a GET form to `service`. The content of the form is generated by the function `formgen`, that takes the names of the service parameters as parameters.

    val lwt_get_form : ?https:bool ->
           ?a:form_attrib_t ->
           service:('a, unit, [< Eliom_services.get_service_kind ],
                    [< Eliom_services.suff ], 'b, 'c, [< Eliom_services.registrable ])
                   Eliom_services.service ->
           sp:Eliom_sessions.server_params ->
           ?hostname:string ->
           ?port:int ->
           ?fragment:string ->
           ('b -> form_content_elt_list Lwt.t) ->
           form_elt Lwt.t

The same but taking a cooperative function.

    val post_form : ?https:bool ->
           ?a:form_attrib_t ->
           service:('a, 'b, [< Eliom_services.post_service_kind ],
                    [< Eliom_services.suff ], 'c, 'd, [< Eliom_services.registrable ])
                   Eliom_services.service ->
           sp:Eliom_sessions.server_params ->
           ?hostname:string ->
           ?port:int ->
           ?fragment:string ->
           ?keep_get_na_params:bool ->
           ('d -> form_content_elt_list) ->
           'a -> form_elt

`post_form service sp formgen` creates a POST form to `service`. The last parameter is for GET parameters (as in the function `a`).

    val lwt_post_form : ?https:bool ->
           ?a:form_attrib_t ->
           service:('a, 'b, [< Eliom_services.post_service_kind ],
                    [< Eliom_services.suff ], 'c, 'd, [< Eliom_services.registrable ])
                   Eliom_services.service ->
           sp:Eliom_sessions.server_params ->
           ?hostname:string ->
           ?port:int ->
           ?fragment:string ->
           ?keep_get_na_params:bool ->
           ('d -> form_content_elt_list Lwt.t) ->
           'a -> form_elt Lwt.t

The same but taking a cooperative function.

## Form widgets

    val int_input : ?a:input_attrib_t ->
           input_type:input_type_t ->
           ?name:[< int Eliom_parameters.setoneradio ] Eliom_parameters.param_name ->
           ?value:int -> unit -> input_elt

Creates an `<input>` tag for an integer

    val int32_input : ?a:input_attrib_t ->
           input_type:input_type_t ->
           ?name:[< int32 Eliom_parameters.setoneradio ] Eliom_parameters.param_name ->
           ?value:int32 -> unit -> input_elt

Creates an `<input>` tag for an integer

    val int64_input : ?a:input_attrib_t ->
           input_type:input_type_t ->
           ?name:[< int64 Eliom_parameters.setoneradio ] Eliom_parameters.param_name ->
           ?value:int64 -> unit -> input_elt

Creates an `<input>` tag for an integer

    val float_input : ?a:input_attrib_t ->
           input_type:input_type_t ->
           ?name:[< float Eliom_parameters.setoneradio ] Eliom_parameters.param_name ->
           ?value:float -> unit -> input_elt

Creates an `<input>` tag for a float

    val string_input : ?a:input_attrib_t ->
           input_type:input_type_t ->
           ?name:[< string Eliom_parameters.setoneradio ] Eliom_parameters.param_name ->
           ?value:string -> unit -> input_elt

Creates an `<input>` tag for a string

    val user_type_input : ?a:input_attrib_t ->
           input_type:input_type_t ->
           ?name:[< 'a Eliom_parameters.setoneradio ] Eliom_parameters.param_name ->
           ?value:'a -> ('a -> string) -> input_elt

Creates an `<input>` tag for a user type

    val raw_input : ?a:input_attrib_t ->
           input_type:input_type_t ->
           ?name:string -> ?value:string -> unit -> input_elt

Creates an untyped `<input>` tag. You may use the name you want (for example to use with `Eliom_parameters.any`).

    val file_input : ?a:input_attrib_t ->
           name:[< Ocsigen_extensions.file_info Eliom_parameters.setoneradio ]
                Eliom_parameters.param_name ->
           unit -> input_elt

Creates an `<input>` tag for sending a file

    val image_input : ?a:input_attrib_t ->
           name:[< Eliom_parameters.coordinates Eliom_parameters.oneradio ]
                Eliom_parameters.param_name ->
           ?src:uri ->
           unit -> input_elt

Creates an `<input type="image" name="...">` tag that sends the coordinates the user clicked on

    val int_image_input : ?a:input_attrib_t ->
           name:[< (int * Eliom_parameters.coordinates) Eliom_parameters.oneradio ]
                Eliom_parameters.param_name ->
           value:int ->
           ?src:uri ->
           unit -> input_elt

Creates an `<input type="image" name="..." value="...">` tag that sends the coordinates the user clicked on and a value of type int

    val int32_image_input : ?a:input_attrib_t ->
           name:[< (int32 * Eliom_parameters.coordinates) Eliom_parameters.oneradio ]
                Eliom_parameters.param_name ->
           value:int32 ->
           ?src:uri ->
           unit -> input_elt

Creates an `<input type="image" name="..." value="...">` tag that sends the coordinates the user clicked on and a value of type int32

    val int64_image_input : ?a:input_attrib_t ->
           name:[< (int64 * Eliom_parameters.coordinates) Eliom_parameters.oneradio ]
                Eliom_parameters.param_name ->
           value:int64 ->
           ?src:uri ->
           unit -> input_elt

Creates an `<input type="image" name="..." value="...">` tag that sends the coordinates the user clicked on and a value of type int64

    val float_image_input : ?a:input_attrib_t ->
           name:[< (float * Eliom_parameters.coordinates) Eliom_parameters.oneradio ]
                Eliom_parameters.param_name ->
           value:float ->
           ?src:uri ->
           unit -> input_elt

Creates an `<input type="image" name="..." value="...">` tag that sends the coordinates the user clicked on and a value of type float

    val string_image_input : ?a:input_attrib_t ->
           name:[< (string * Eliom_parameters.coordinates) Eliom_parameters.oneradio ]
                Eliom_parameters.param_name ->
           value:string ->
           ?src:uri ->
           unit -> input_elt

Creates an `<input type="image" name="..." value="...">` tag that sends the coordinates the user clicked on and a value of type string

    val user_type_image_input : ?a:input_attrib_t ->
           name:[< ('a * Eliom_parameters.coordinates) Eliom_parameters.oneradio ]
                Eliom_parameters.param_name ->
           value:'a ->
           ?src:uri ->
           ('a -> string) -> input_elt

Creates an `<input type="image" name="..." value="...">` tag that sends the coordinates the user clicked on and a value of user defined type

    val raw_image_input : ?a:input_attrib_t ->
           name:string ->
           value:string ->
           ?src:uri ->
           unit -> input_elt

Creates an `<input type="image" name="..." value="...">` tag that sends the coordinates the user clicked on and an untyped value

    val bool_checkbox : ?a:input_attrib_t ->
           ?checked:bool ->
           name:[ `One of bool ] Eliom_parameters.param_name ->
           unit -> input_elt

Creates a checkbox `<input>` tag that will have a boolean value. The service must declare a `bool` parameter.

    val int_checkbox : ?a:input_attrib_t ->
           ?checked:bool ->
           name:[ `Set of int ] Eliom_parameters.param_name ->
           value:int -> unit -> input_elt

Creates a checkbox `<input>` tag that will have an int value. Thus you can do several checkboxes with the same name (and different values). The service must declare a parameter of type `set`.

    val int32_checkbox : ?a:input_attrib_t ->
           ?checked:bool ->
           name:[ `Set of int32 ] Eliom_parameters.param_name ->
           value:int32 -> unit -> input_elt

Creates a checkbox `<input>` tag that will have an int32 value. Thus you can do several checkboxes with the same name (and different values). The service must declare a parameter of type `set`.

    val int64_checkbox : ?a:input_attrib_t ->
           ?checked:bool ->
           name:[ `Set of int64 ] Eliom_parameters.param_name ->
           value:int64 -> unit -> input_elt

Creates a checkbox `<input>` tag that will have an int64 value. Thus you can do several checkboxes with the same name (and different values). The service must declare a parameter of type `set`.

    val float_checkbox : ?a:input_attrib_t ->
           ?checked:bool ->
           name:[ `Set of float ] Eliom_parameters.param_name ->
           value:float -> unit -> input_elt

Creates a checkbox `<input>` tag that will have a float value. Thus you can do several checkboxes with the same name (and different values). The service must declare a parameter of type `set`.

    val string_checkbox : ?a:input_attrib_t ->
           ?checked:bool ->
           name:[ `Set of string ] Eliom_parameters.param_name ->
           value:string -> unit -> input_elt

Creates a checkbox `<input>` tag that will have a string value. Thus you can do several checkboxes with the same name (and different values). The service must declare a parameter of type `set`.

    val user_type_checkbox : ?a:input_attrib_t ->
           ?checked:bool ->
           name:[ `Set of 'a ] Eliom_parameters.param_name ->
           value:'a -> ('a -> string) -> input_elt

Creates a checkbox `<input>` tag that will have a "user type" value. Thus you can do several checkboxes with the same name (and different values). The service must declare a parameter of type `set`.

    val raw_checkbox : ?a:input_attrib_t ->
           ?checked:bool ->
           name:string -> value:string -> unit -> input_elt

Creates a checkbox `<input>` tag with untyped content. Thus you can do several checkboxes with the same name (and different values). The service must declare a parameter of type `any`.

    val string_radio : ?a:input_attrib_t ->
           ?checked:bool ->
           name:[ `Radio of string ] Eliom_parameters.param_name ->
           value:string -> unit -> input_elt

Creates a radio `<input>` tag with string content. For services taking radio buttons, use `Eliom_parameters.radio`.

    val int_radio : ?a:input_attrib_t ->
           ?checked:bool ->
           name:[ `Radio of int ] Eliom_parameters.param_name ->
           value:int -> unit -> input_elt

Creates a radio `<input>` tag with int content

    val int32_radio : ?a:input_attrib_t ->
           ?checked:bool ->
           name:[ `Radio of int32 ] Eliom_parameters.param_name ->
           value:int32 -> unit -> input_elt

Creates a radio `<input>` tag with int32 content

    val int64_radio : ?a:input_attrib_t ->
           ?checked:bool ->
           name:[ `Radio of int64 ] Eliom_parameters.param_name ->
           value:int64 -> unit -> input_elt

Creates a radio `<input>` tag with int64 content

    val float_radio : ?a:input_attrib_t ->
           ?checked:bool ->
           name:[ `Radio of float ] Eliom_parameters.param_name ->
           value:float -> unit -> input_elt

Creates a radio `<input>` tag with float content

    val user_type_radio : ?a:input_attrib_t ->
           ?checked:bool ->
           name:[ `Radio of 'a ] Eliom_parameters.param_name ->
           value:'a -> ('a -> string) -> input_elt

Creates a radio `<input>` tag with user_type content

    val raw_radio : ?a:input_attrib_t ->
           ?checked:bool ->
           name:string -> value:string -> unit -> input_elt

Creates a radio `<input>` tag with untyped string content (low level)

    val string_button : ?a:button_attrib_t ->
           name:[< string Eliom_parameters.setone ] Eliom_parameters.param_name ->
           value:string ->
           button_content_elt_list ->
           button_elt

Creates a `<button>` tag with string content

    val int_button : ?a:button_attrib_t ->
           name:[< int Eliom_parameters.setone ] Eliom_parameters.param_name ->
           value:int ->
           button_content_elt_list ->
           button_elt

Creates a `<button>` tag with int content

    val int32_button : ?a:button_attrib_t ->
           name:[< int32 Eliom_parameters.setone ] Eliom_parameters.param_name ->
           value:int32 ->
           button_content_elt_list ->
           button_elt

Creates a `<button>` tag with int32 content

    val int64_button : ?a:button_attrib_t ->
           name:[< int64 Eliom_parameters.setone ] Eliom_parameters.param_name ->
           value:int64 ->
           button_content_elt_list ->
           button_elt

Creates a `<button>` tag with int64 content

    val float_button : ?a:button_attrib_t ->
           name:[< float Eliom_parameters.setone ] Eliom_parameters.param_name ->
           value:float ->
           button_content_elt_list ->
           button_elt

Creates a `<button>` tag with float content

    val user_type_button : ?a:button_attrib_t ->
           name:[< 'a Eliom_parameters.setone ] Eliom_parameters.param_name ->
           value:'a ->
           ('a -> string) ->
           button_content_elt_list ->
           button_elt

Creates a `<button>` tag with user_type content

    val raw_button : ?a:button_attrib_t ->
           button_type:button_type_t ->
           name:string ->
           value:string ->
           button_content_elt_list ->
           button_elt

Creates a `<button>` tag with untyped string content

    val button : ?a:button_attrib_t ->
           button_type:button_type_t ->
           button_content_elt_list ->
           button_elt

Creates a `<button>` tag with no value. No value is sent.

    val textarea : ?a:textarea_attrib_t ->
           name:[< string Eliom_parameters.setoneradio ] Eliom_parameters.param_name ->
           ?value:pcdata_elt ->
           rows:int -> cols:int -> unit -> textarea_elt

Creates a `<textarea>` tag

    val raw_textarea : ?a:textarea_attrib_t ->
           name:string ->
           ?value:pcdata_elt ->
           rows:int -> cols:int -> unit -> textarea_elt

Creates a `<textarea>` tag for untyped form

    type 'a soption = option_attrib_t * 'a *
           pcdata_elt option * bool

`type `'a` select_opt =`

`|` | `Optgroup of `optgroup_attrib_t * string * 'a soption * 'a soption list``
`|` | `Option of `'a soption``

The type for `<select>` options and groups of options.

- The field of type 'a in `soption` is the value that will be sent by the form.
- If the `pcdata elt option` is not present it is also the value displayed.
- The string in `select_opt` is the label

    val raw_select : ?a:select_attrib_t ->
           name:string ->
           string select_opt ->
           string select_opt list ->
           select_elt

Creates a `<select>` tag for any (untyped) value.

    val int_select : ?a:select_attrib_t ->
           name:[< `One of int ] Eliom_parameters.param_name ->
           int select_opt ->
           int select_opt list ->
           select_elt

Creates a `<select>` tag for int values.

    val int32_select : ?a:select_attrib_t ->
           name:[< `One of int32 ] Eliom_parameters.param_name ->
           int32 select_opt ->
           int32 select_opt list ->
           select_elt

Creates a `<select>` tag for int32 values.

    val int64_select : ?a:select_attrib_t ->
           name:[< `One of int64 ] Eliom_parameters.param_name ->
           int64 select_opt ->
           int64 select_opt list ->
           select_elt

Creates a `<select>` tag for int64 values.

    val float_select : ?a:select_attrib_t ->
           name:[< `One of float ] Eliom_parameters.param_name ->
           float select_opt ->
           float select_opt list ->
           select_elt

Creates a `<select>` tag for float values.

    val string_select : ?a:select_attrib_t ->
           name:[< `One of string ] Eliom_parameters.param_name ->
           string select_opt ->
           string select_opt list ->
           select_elt

Creates a `<select>` tag for string values.

    val user_type_select : ?a:select_attrib_t ->
           name:[< `One of 'a ] Eliom_parameters.param_name ->
           'a select_opt ->
           'a select_opt list ->
           ('a -> string) -> select_elt

Creates a `<select>` tag for user type values.

    val raw_multiple_select : ?a:select_attrib_t ->
           name:string ->
           string select_opt ->
           string select_opt list ->
           select_elt

Creates a `<select>` tag for any (untyped) value.

    val int_multiple_select : ?a:select_attrib_t ->
           name:[< `Set of int ] Eliom_parameters.param_name ->
           int select_opt ->
           int select_opt list ->
           select_elt

Creates a `<select>` tag for int values.

    val int32_multiple_select : ?a:select_attrib_t ->
           name:[< `Set of int32 ] Eliom_parameters.param_name ->
           int32 select_opt ->
           int32 select_opt list ->
           select_elt

Creates a `<select>` tag for int32 values.

    val int64_multiple_select : ?a:select_attrib_t ->
           name:[< `Set of int64 ] Eliom_parameters.param_name ->
           int64 select_opt ->
           int64 select_opt list ->
           select_elt

Creates a `<select>` tag for int64 values.

    val float_multiple_select : ?a:select_attrib_t ->
           name:[< `Set of float ] Eliom_parameters.param_name ->
           float select_opt ->
           float select_opt list ->
           select_elt

Creates a `<select>` tag for float values.

    val string_multiple_select : ?a:select_attrib_t ->
           name:[< `Set of string ] Eliom_parameters.param_name ->
           string select_opt ->
           string select_opt list ->
           select_elt

Creates a `<select>` tag for string values.

    val user_type_multiple_select : ?a:select_attrib_t ->
           name:[< `Set of 'a ] Eliom_parameters.param_name ->
           'a select_opt ->
           'a select_opt list ->
           ('a -> string) -> select_elt

Creates a `<select>` tag for user type values.