123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- -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 erlang:is_list(E) -> E;
- render_element(Element) when erlang:is_tuple(Element) ->
- Id = case erlang:element(#element.id, Element) of
- [] -> [];
- undefined -> undefined; %% todo check maybe rm?
- L when erlang:is_list(L) -> L;
- Other -> nitro:to_list(Other)
- end,
- case erlang:element(#element.actions, Element) of
- [] -> skip;
- Actions -> nitro:wire(Actions)
- end,
- Tag = case erlang:element(#element.html_tag, Element) of
- [] -> nitro:to_binary(erlang:element(1, Element));
- T -> T
- end,
-
- case erlang:element(1, Element) of
- comboLookupEdit ->
- lists:map(fun(El) ->
- Input = case erlang:element(#element.body, El) of
- Body when not (Body == []) and erlang:is_list(Body) ->
- case erlang:element(#element.body, hd(lists:flatten(tl(Body)))) of
- X when erlang:is_tuple(X)-> X;
- _ -> El
- end;
- _ -> El
- end,
-
- InputId = erlang:element(#element.id, Input),
-
- case erlang: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(erlang:element(#element.body, erlang:element(#comboLookupEdit.form, Element)))));
-
- _ ->
- case erlang: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 erlang:element(#element.module, Element) of
- [] -> default_render(Tag, Element);
- undefined -> default_render(Tag, Element); %% todo check maybe rm?
- Module ->
- nitro:to_binary( Module:render_element( erlang: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( [erlang:element(#element.body, Record)] )),
- lists:append([
- [{<<"id">>, erlang:element(#element.id, Record)}, %% todo check bench/compare erlang asm/refactoring
- {<<"data-bind">>, erlang:element(#element.bind, Record)},
- {<<"class">>, erlang:element(#element.class, Record)},
- {<<"style">>, erlang:element(#element.style, Record)},
- {<<"title">>, erlang:element(#element.title, Record)},
- {<<"accesskey">>, erlang:element(#element.accesskey, Record)},
- {<<"contenteditable">>, erlang:element(#element.contenteditable, Record)},
- {<<"contextmenu">>, erlang:element(#element.contextmenu, Record)},
- {<<"dir">>, erlang:element(#element.dir, Record)},
- {<<"draggable">>, erlang:element(#element.draggable, Record)},
- {<<"dropzone">>, erlang:element(#element.dropzone, Record)},
- {<<"hidden">>, erlang:element(#element.hidden, Record)},
- {<<"lang">>, erlang:element(#element.lang, Record)},
- {<<"onclick">>, erlang:element(#element.onclick, Record)},
- {<<"spellcheck">>, erlang:element(#element.spellcheck, Record)},
- {<<"translate">>, erlang:element(#element.translate, Record)},
- {<<"tabindex">>, erlang:element(#element.tabindex, Record)},
- {<<"onmouseout">>, erlang:element(#element.onmouseout, Record)},
- {<<"onmouseover">>, erlang:element(#element.onmouseover, Record)},
- {<<"onmousemove">>, erlang:element(#element.onmousemove, Record)},
- {<<"role">>, erlang:element(#element.role, Record)}],
- erlang:element(#element.data_fields, Record),
- erlang:element(#element.aria_states, Record)
- ]) ).
|