12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- -module (wf_render_elements).
- -author('Maxim Sokhatsky').
- -include_lib ("nitro/include/nitro.hrl").
- -compile([export_all, nowarn_export_all]).
- render_element(E) when is_list(E) -> E;
- render_element(Element) when is_tuple(Element) ->
- Id = case element(#element.id,Element) of
- undefined -> undefined;
- L when is_list(L) -> L;
- Other -> nitro:to_list(Other) end,
- case element(#element.actions,Element) of undefined -> skip; Actions -> nitro:wire(Actions) end,
- Tag = case element(#element.html_tag,Element) of undefined -> nitro:to_binary(element(1, Element)); T -> T end,
- case element(#element.validation,Element) of
- [] -> skip;
- Code ->
- nitro:wire(nitro:f("{var name='~s'; qi(name)"
- ".addEventListener('validation',"
- "function(e) { if (!(~s)) e.preventDefault(); });"
- "qi(name).validation = true;}",[Id,Code]))
- end,
- case element(#element.module,Element) of
- undefined ->
- default_render(Tag, Element);
- Module ->
- nitro:to_binary(Module:render_element(setelement(#element.id,Element,Id))) end;
- render_element(Element) -> io:format("Unknown Element: ~p~n\r",[Element]).
- default_render(Tag, Record) ->
- wf_tags:emit_tag(Tag, nitro:render(element(#element.body,Record)),
- lists:append([
- [{<<"id">>, element(#element.id, Record)},
- {<<"class">>, element(#element.class, Record)},
- {<<"style">>, element(#element.style, Record)},
- {<<"title">>, element(#element.title, Record)},
- {<<"accesskey">>, element(#element.accesskey, Record)},
- {<<"contenteditable">>, element(#element.contenteditable, Record)},
- {<<"contextmenu">>, element(#element.contextmenu, Record)},
- {<<"dir">>, element(#element.dir, Record)},
- {<<"draggable">>, element(#element.draggable, Record)},
- {<<"dropzone">>, element(#element.dropzone, Record)},
- {<<"hidden">>, element(#element.hidden, Record)},
- {<<"lang">>, element(#element.lang, Record)},
- {<<"spellcheck">>, element(#element.spellcheck, Record)},
- {<<"translate">>, element(#element.translate, Record)},
- {<<"tabindex">>, element(#element.tabindex, Record)},
- {<<"role">>, element(#element.role, Record)}],
- element(#element.data_fields, Record),
- element(#element.aria_states, Record)])).
|