Packages
nitro
5.4.1
11.4.16
11.4.15
11.4.14
9.9.7
9.9.6
8.2.4
8.2.3
8.2.2
8.2.1
8.2.0
7.12.1
7.10.0
7.9.3
7.9.2
7.9.1
7.9.0
7.8.3
7.8.2
7.8.0
7.7.1
7.7.0
7.6.2
7.6.1
7.6.0
7.5.0
7.4.2
7.4.1
7.4.0
7.2.1
7.2.0
7.1.1
7.1.0
6.12.0
6.11.11
6.11.10
6.11.9
6.11.8
6.11.7
6.11.6
6.11.4
6.11.2
6.11.1
6.10.9
6.10.8
6.10.7
6.10.6
6.10.5
6.10.4
6.10.3
6.10.2
6.10.1
6.9.1
6.6.1
6.5.0
6.4.4
6.4.3
6.4.2
6.4.1
6.4.0
5.12.4
5.12.3
5.12.2
5.12.1
5.12.0
5.11.1
5.11.0
5.9.2
5.9.1
5.8.5
5.8.4
5.8.3
5.8.1
5.8.0
5.6.1
5.5.1
5.4.3
5.4.2
5.4.1
5.3.1
5.3.0
5.2.1
5.1.7
5.1.6
5.1.5
5.1.4
5.1.3
5.1.2
5.1.1
4.12.11
4.12.10
4.12.9
4.12.8
4.12.7
4.12.6
4.12.5
4.12.4
4.12.3
4.12.2
4.12.1
4.12.0
4.11.13
4.11.12
4.11.11
4.11.10
4.11.9
4.11.8
4.11.7
4.11.6
4.11.5
4.11.4
4.11.3
4.11.2
4.11.1
4.11.0
4.10.9
4.10.8
4.10.7
4.10.6
4.10.5
4.10.4
4.10.3
4.10.2
4.10.1
4.10.0
4.7.7
4.7.4
4.7.3
4.7.2
4.7.1
4.7.0
4.4.1
4.4.0
1.4.0
NITRO Nitrogen Web Framework
Current section
Files
Jump to
Current section
Files
src/elements/form/element_select.erl
-module(element_select).
-include_lib("nitro/include/nitro.hrl").
-include_lib("nitro/include/event.hrl").
-compile(export_all).
render_element(Record) when Record#select.show_if==false -> [<<>>];
render_element(Record = #select{}) ->
ID = case Record#select.id of [] -> nitro:temp_id(); I->I end,
case Record#select.postback of
[] -> skip;
Postback -> nitro:wire(#event{ type=change,
target=ID,
postback=Postback,
source=[nitro:to_atom(ID)|Record#select.source],
delegate=Record#select.delegate }) end,
Props = [
{<<"id">>, ID},
{<<"class">>, Record#select.class},
{<<"style">>, Record#select.style},
{<<"name">>, Record#select.name},
{<<"onchange">>, Record#select.onchange},
{<<"title">>, Record#select.title},
{<<"required">>, case Record#select.required of true -> <<"required">>; _-> [] end},
{<<"disabled">>, case Record#select.disabled of true -> <<"disabled">>; _-> [] end},
{<<"multiple">>, case Record#select.multiple of true -> <<"multiple">>; _-> [] end} | Record#select.data_fields
],
wf_tags:emit_tag(<<"select">>, nitro:render(Record#select.body),
Props);
render_element(Group = #optgroup{}) ->
wf_tags:emit_tag(<<"optgroup">>, nitro:render(Group#optgroup.body), [
{<<"disabled">>, case Group#optgroup.disabled of true-> <<"disabled">>; _-> [] end},
{<<"label">>, Group#optgroup.label}
]);
render_element(O = #option{}) ->
wf_tags:emit_tag(<<"option">>, nitro:render(O#option.body), lists:flatten([get_attrs(O) | O#option.data_fields])).
get_attrs(O) ->
ValueAttr = case {O#option.selected, O#option.disabled} of
{true, _} -> <<"selected value">>;
{true, true} -> <<"selected disabled value">>;
{_, true} -> <<"disabled value">>;
_ -> <<"value">>
end,
[{<<"id">>, O#option.id},
{<<"label">>, O#option.label},
{<<"title">>, O#option.title},
{ValueAttr, O#option.value}
].