action_manage.erl 776 B

1234567891011121314151617181920
  1. -module(action_manage).
  2. -author('Andrey Martemyanov').
  3. -include_lib("nitro/include/nitro.hrl").
  4. -compile(export_all).
  5. -define(B(E), nitro:to_binary(E)).
  6. -define(R(E), nitro:render(E)).
  7. -define(T(T), wf_event:target(T)).
  8. render_action(#replace{target=T,elements=E}) -> ?R(#jq{target=T,property=outerHTML,right=E});
  9. render_action(#insert{target=T,elements=E,position=P}) ->
  10. {Rendered,Actions}=render_element(E),
  11. [?T(T),".insertAdjacentHTML('",?B(P),"','",Rendered,"');",?R(Actions)];
  12. render_action(#multi{actions=A}) -> ["window.requestAnimationFrame(function(timestamp){",?R(A),"});"].
  13. render_element(E) ->
  14. Pid = self(),
  15. Ref = make_ref(),
  16. spawn(fun() -> Pid ! {?R(E),Ref,wf:actions()} end),
  17. receive {Rendered, Ref, Actions} -> {Rendered,Actions} end.