-module(element_select). %%-author('Maxim Sokhatsky'). -include_lib("nitro/include/nitro.hrl"). -include_lib("nitro/include/event.hrl"). -export([ render_element/1 ]). 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, true} -> <<"selected disabled value">>; {true, _} -> <<"selected value">>; {_, true} -> <<"disabled value">>; _ -> <<"value">> end, [{<<"id">>, O#option.id}, {<<"label">>, O#option.label}, {<<"title">>, O#option.title}, {ValueAttr, O#option.value} ].