Packages
nitro
11.4.16
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, nowarn_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,
case Record#select.update of
[] -> skip;
Update -> nitro:wire(#event{ type=change,
target=ID,
postback=Update,
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 == true, O#option.disabled == true} of
{true, true} -> <<"selected disabled value">>;
{true, false} -> <<"selected value">>;
{false, true} -> <<"disabled value">>;
{false, false} -> <<"value">>
end,
[{<<"id">>, O#option.id},
{<<"label">>, O#option.label},
{<<"title">>, O#option.title},
{ValueAttr, O#option.value}
].