Packages
nitro
7.8.2
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_event.erl
-module(wf_event).
-author('Maxim Sokhatsky').
-author('Andrey Martemyanov').
-include_lib("nitro/include/cx.hrl").
-include_lib("nitro/include/nitro.hrl").
-export([target/1, new/2, new/6, new/7]).
-record(ev, { module, msg, trigger, name }).
-define(B(E), nitro:to_binary(E)).
-define(L(E), nitro:to_list(E)).
target({ps, {qa, Id}, Ps}) ->
T = target({qa,Id}), P = nitro:js_escape(Ps),
["var t=",T,";t.map(ts => '",P,"'.split('.').reduce((a,p)=>(a&&a[p]?a[p]:null),ts)).filter(o=>o)"];
target({ps,Id,Ps}) ->
T = target(Id), P = nitro:js_escape(Ps),
["var ts=",T,",ps = '",P,"'.split('.').reduce((a,p)=>(a&&a[p]?a[p]:null),ts);","ps&&ps"];
target({qs,S}) -> ["qs('",nitro:js_escape(?L(S)), "')"];
target({qa,S}) -> ["Array.from(qa('",nitro:js_escape(?L(S)), "'))"];
target({g,T}) -> nitro:js_escape(?L(T));
target(Id) -> ["qi('",nitro:js_escape(?L(Id)),"')"].
new(P,E,D,N,Data,Source) -> new(P,E,D,N,Data,Source,<<>>).
new(bin,Data) -> <<"ws.send(enc(tuple(atom('bin'),bin('",(nitro:pickle(Data))/binary,"'))));">>.
new([], _, _, _, _, _, _) -> <<>>;
new(undefined, _, _, _, _, _, _) -> <<>>;
new(Postback, Element, Delegate, Name, Data, Source, Validation) ->
Module = nitro:coalesce([Delegate, ?CTX#cx.module]),
Join=fun([]) -> [];
([E]) -> [$'|E]++[$'];
([H|T]) -> [[$'|H]++[$']] ++ [ [$,,$'|E]++[$'] || E <- T ] end,
Event = #ev{name=Name, module=Module, msg=Postback, trigger=Element},
list_to_binary(["{ if (validateSources([",Join([ nitro:to_list(S) || S <- Source, S =/= []]),
"])) { ",?B(Validation)," ws.send(enc(tuple(atom('",?B(application:get_env(n2o,event,pickle)),"'),bin('",
Element,"'),bin('",nitro:pickle(Event),"'),",Data,"))); } else console.log('Validation Error'); }"]).