Packages
nitro
6.11.8
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/render/wf_render_elements.erl
-module (wf_render_elements).
-author('Maxim Sokhatsky').
-include_lib ("nitro/include/nitro.hrl").
-include_lib ("nitro/include/comboLookupEdit.hrl").
-export([render_element/1]).
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 [] -> skip; Actions -> nitro:wire(Actions) end,
Tag = case element(#element.html_tag,Element) of [] -> nitro:to_binary(element(1, Element)); T -> T end,
case element(1, Element) of
comboLookupEdit ->
lists:map(fun (El) ->
Input =
case element(#element.body, El) of
Body when not (Body == []) and is_list(Body) ->
case element(#element.body, hd(lists:flatten(tl(Body)))) of
X when is_tuple(X)-> X;
_ -> El
end;
_ -> El
end,
InputId = element(#element.id, Input),
case element(#element.validation, Input) of
[] -> skip;
InputCode ->
nitro:wire(nitro:f("{var name='~s'; qi(name) && qi(name).addEventListener('validation',"
"function(e) { if (!(~s)) e.preventDefault(); });"
"if(qi(name)) qi(name).validation = true;}",[InputId,InputCode]))
end
end, lists:flatten(tl(element(#element.body, element(#comboLookupEdit.form, Element)))));
_ ->
case element(#element.validation,Element) of
[] -> skip;
Code ->
nitro:wire(nitro:f("{var name='~s'; qi(name) && qi(name).addEventListener('validation',"
"function(e) { if (!(~s)) e.preventDefault(); });"
"if(qi(name)) qi(name).validation = true;}",[Id,Code])) end
end,
case element(#element.module,Element) of
[] -> default_render(Tag, Element);
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(lists:flatten([element(#element.body,Record)])),
lists:append([
[{<<"id">>, element(#element.id, Record)},
{<<"data-bind">>, element(#element.bind, 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)},
{<<"onclick">>, element(#element.onclick, Record)},
{<<"spellcheck">>, element(#element.spellcheck, Record)},
{<<"translate">>, element(#element.translate, Record)},
{<<"tabindex">>, element(#element.tabindex, Record)},
{<<"onmouseout">>, element(#element.onmouseout, Record)},
{<<"onmouseover">>, element(#element.onmouseover, Record)},
{<<"onmousemove">>, element(#element.onmousemove, Record)},
{<<"role">>, element(#element.role, Record)}],
element(#element.data_fields, Record),
element(#element.aria_states, Record)])).