element_select.erl 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. -module(element_select).
  2. %%-author('Maxim Sokhatsky').
  3. -include_lib("nitro/include/nitro.hrl").
  4. -compile([export_all, nowarn_export_all]).
  5. render_element(Record = #select{}) ->
  6. ID = case Record#select.id of
  7. undefined -> nitro:temp_id();
  8. I -> I
  9. end,
  10. case Record#select.postback of
  11. undefined -> skip;
  12. Postback ->
  13. nitro:wire( #event{type = change,
  14. target = ID,
  15. postback = Postback,
  16. source = [ nitro:to_atom(ID) ],
  17. delegate = Record#select.delegate} )
  18. end,
  19. Props = [
  20. {<<"id">>, ID},
  21. {<<"class">>, Record#select.class},
  22. {<<"style">>, Record#select.style},
  23. {<<"name">>, Record#select.name},
  24. {<<"onchange">>, Record#select.onchange},
  25. {<<"title">>, Record#select.title},
  26. {<<"required">>,
  27. case Record#select.required of
  28. true -> <<"required">>;
  29. _-> undefined
  30. end},
  31. {<<"disabled">>,
  32. case Record#select.disabled of
  33. true -> <<"disabled">>;
  34. _-> undefined
  35. end},
  36. {<<"multiple">>,
  37. case Record#select.multiple of
  38. true -> <<"multiple">>;
  39. _-> undefined
  40. end} | Record#select.data_fields
  41. ],
  42. wf_tags:emit_tag(<<"select">>, nitro:render(Record#select.body), Props);
  43. render_element(Group = #optgroup{}) ->
  44. wf_tags:emit_tag(<<"optgroup">>, nitro:render(Group#optgroup.body), [
  45. {<<"disabled">>,
  46. case Group#optgroup.disabled of
  47. true -> <<"disabled">>;
  48. _-> undefined
  49. end},
  50. {<<"label">>, Group#optgroup.label}
  51. ]);
  52. render_element(O = #option{}) ->
  53. wf_tags:emit_tag(<<"option">>, nitro:render(O#option.body), [
  54. {<<"id">>, O#option.id},
  55. {<<"disabled">>,
  56. case O#option.disabled of
  57. true -> <<"disabled">>;
  58. _-> undefined
  59. end},
  60. {<<"label">>, O#option.label},
  61. {<<"title">>, O#option.title},
  62. {<<"selected">>,
  63. case O#option.selected of
  64. true -> <<"selected">>;
  65. _-> undefined
  66. end},
  67. {<<"value">>, O#option.value} | O#option.data_fields
  68. ]).