Browse Source

move to nitro; unwrap

221V 3 years ago
parent
commit
6914d36458
6 changed files with 70 additions and 96 deletions
  1. 1 1
      ebin/nitro.app
  2. 1 1
      src/actions/action_manage.erl
  3. 1 1
      src/elements/group/element_dtl.erl
  4. 53 15
      src/nitro.erl
  5. 0 64
      src/nitro_conv.erl
  6. 14 14
      src/nitro_n2z.erl

+ 1 - 1
ebin/nitro.app

@@ -2,7 +2,7 @@
   {description, "NITRO Nitrogen Web Framework"},
   {vsn, "6.6.1"},
   {applications, [kernel, stdlib]},
-  {modules, [nitro_app, nitro_conv, nitro_n2z, nitro_static, nitro, action_alert, action_api, action_bind, action_confirm, action_event, action_jq, action_manage, action_transfer, action_ui, action_wire, element_calendar, element_comboLookup, element_comboLookupEdit, element_comboLookupVec, element_koatuu, element_sortable_item, element_sortable_list, element_del, element_ins, element_area, element_audio, element_canvas, element_embed, element_iframe, element_image, element_map, element_object, element_param, element_source, element_track, element_video, element_button, element_fieldset, element_form, element_keygen, element_label, element_legend, element_meter, element_output, element_progress, element_select, element_textarea, element_blockquote, element_dtl, element_html, element_li, element_script, element_checkbox, element_color, element_date, element_datetime_local, element_datetime, element_dropdown, element_email, element_file, element_hidden, element_input_button, element_input_image, element_input_time, element_input, element_link, element_list, element_literal, element_month, element_number, element_password, element_q, element_radio, element_radiogroup, element_range, element_reset, element_search, element_submit, element_tel, element_textbox, element_time, element_url, element_week, element_command, element_details, element_menu, element_summary, element_upload, element_meta_base, element_meta_link, element_meta, element_style, element_col, element_colgroup, element_table, element_td, element_th, element_tr, wf_event, wf_render_actions, wf_render_elements, wf_render, wf_tags ]},
+  {modules, [nitro_app, nitro_n2z, nitro_static, nitro, action_alert, action_api, action_bind, action_confirm, action_event, action_jq, action_manage, action_transfer, action_ui, action_wire, element_calendar, element_comboLookup, element_comboLookupEdit, element_comboLookupVec, element_koatuu, element_sortable_item, element_sortable_list, element_del, element_ins, element_area, element_audio, element_canvas, element_embed, element_iframe, element_image, element_map, element_object, element_param, element_source, element_track, element_video, element_button, element_fieldset, element_form, element_keygen, element_label, element_legend, element_meter, element_output, element_progress, element_select, element_textarea, element_blockquote, element_dtl, element_html, element_li, element_script, element_checkbox, element_color, element_date, element_datetime_local, element_datetime, element_dropdown, element_email, element_file, element_hidden, element_input_button, element_input_image, element_input_time, element_input, element_link, element_list, element_literal, element_month, element_number, element_password, element_q, element_radio, element_radiogroup, element_range, element_reset, element_search, element_submit, element_tel, element_textbox, element_time, element_url, element_week, element_command, element_details, element_menu, element_summary, element_upload, element_meta_base, element_meta_link, element_meta, element_style, element_col, element_colgroup, element_table, element_td, element_th, element_tr, wf_event, wf_render_actions, wf_render_elements, wf_render, wf_tags ]},
   {registered, []},
   {mod, { nitro_app, []}},
   {env, []}

+ 1 - 1
src/actions/action_manage.erl

@@ -19,7 +19,7 @@ render_element(E) ->
   Pid = erlang:self(),
   Ref = erlang:make_ref(),
   erlang:spawn(fun() ->
-    Pid ! {nitro:render(E), Ref, wf:actions()}
+    Pid ! {nitro:render(E), Ref, erlang:get(actions)}
     end),
   receive {Rendered, Ref, Actions} ->
     {Rendered, Actions}

+ 1 - 1
src/elements/group/element_dtl.erl

@@ -21,7 +21,7 @@ render_element(Record=#dtl{}) ->
   {ok, R} = render(M, Record#dtl.js_escape,
     [{K, nitro:render(V)} || {K, V} <- Record#dtl.bindings] ++
       case Record#dtl.bind_script of
-        true -> [{script, nitro:script()}];
+        true -> [{script, erlang:get(script)}];
         _-> []
       end),
   R.

+ 53 - 15
src/nitro.erl

@@ -27,10 +27,15 @@ qc(Key, Req) ->
   proplists:get_value(nitro:to_binary(Key), cowboy_req:parse_qs(Req)).
 
 
+% Convert and Utils API
+
 f(S) -> f(S, []).
 
 f(S, Args) -> lists:flatten(io_lib:format(S, Args)).
 
+
+coalesce({_, Y}) -> Y;
+coalesce(false) -> undefined;
 coalesce([]) -> undefined;
 coalesce([H]) -> H;
 coalesce([undefined|T]) -> coalesce(T);
@@ -77,6 +82,48 @@ to_integer(L) when erlang:is_list(L) -> erlang:list_to_integer(L);
 to_integer(F) when erlang:is_float(F) -> erlang:round(F).
 
 
+% join(List, Delimiter)
+join([], _) -> [];
+join([Item], _Delim) -> [Item];
+join([Item|Items], Delim) ->
+  [Item, Delim | join(Items, Delim)].
+
+
+% replace(String, S1, S2)
+replace([], _, _) -> [];
+replace(String, S1, S2) when erlang:is_list(String), erlang:is_list(S1), erlang:is_list(S2) ->
+  Length = erlang:length(S1),
+  case string:substr(String, 1, Length) of
+    S1 ->
+      S2 ++ replace(string:substr(String, Length + 1), S1, S2);
+    _ ->
+      [erlang:hd(String) | replace(erlang:tl(String), S1, S2)]
+  end.
+
+
+indexof(Key, Fields) -> indexof(Key, Fields, 2).
+
+indexof(_, [], _) -> undefined;
+indexof(Key, [Key|_], N) -> N;
+indexof(Key, [_|T], N) -> indexof(Key, T, N + 1).
+
+
+append(List, Key, Value) ->
+  case Value of
+    undefined -> List;
+    _A -> [{Key, Value}|List]
+  end.
+
+
+os_env(Key) -> os_env(Key, "").
+
+os_env(Key, Default) ->
+  case os:getenv(Key) of
+    false -> Default;
+    V -> V
+  end.
+
+
 -ifndef(PICKLER).
 -define(PICKLER, (application:get_env(n2z, pickler, nitro_conv))).
 -endif.
@@ -94,6 +141,10 @@ authenticate(I, Auth) ->
   (application:get_env(n2z, session, n2z_session)):authenticate(I, Auth).
 
 render(X) -> wf_render:render(X).
+
+
+% Wire JavaScript nitro:wire
+
 wire(Actions) -> action_wire:wire(Actions).
 
 unique_integer() -> erlang:unique_integer().
@@ -273,10 +324,6 @@ url_decode_h([Lo, Hi, ?PERCENT | Rest], Acc) when ?IS_HEX(Lo), ?IS_HEX(Hi) ->
 url_decode_h([C | Rest], Acc) -> url_decode_h(Rest, [C | Acc]).
 
 
-script() -> erlang:get(script).
-script(Script) -> erlang:put(script, Script).
-
-
 % Update DOM nitro:update
 
 update(Target, Elements) ->
@@ -315,15 +362,12 @@ render_html(Elements) ->
   Ref = erlang:make_ref(),
   erlang:spawn(fun() ->  % todo : remove spawn
     R = nitro:render(Elements),
-    Pid ! {R, Ref, nitro:actions()}
+    Pid ! {R, Ref, erlang:get(actions)}
     end),
   {Render, Ref, Actions} = receive {_, Ref, _} = A -> A end, 
   {Render, Ref, Actions}.
 
 
-actions() -> erlang:get(actions).
-actions(Ac) -> erlang:put(actions, Ac).
-
 insert_top(Target, Elements) when erlang:element(1, Elements) == tr ->
   insert_top(tbody, Target, Elements);
 insert_top(Target, Elements) ->
@@ -344,16 +388,10 @@ remove(Target) ->
     "x && x.parentNode.removeChild(x);").
 
 
-% Wire JavaScript nitro:wire
-
-state(Key) -> erlang:get(Key).
-state(Key, Value) -> erlang:put(Key, Value).
-
-
 % Redirect and purge connection nitro:redirect
 
 redirect(Url) -> nitro:wire(#jq{target='window', property=location, args=simple, right=Url}).
-%header(K, V) -> nitro:context((?CTX)#cx{req=cowboy_req:set_resp_header(K, V, ?CTX#cx.req)}).
+%header(K, V) -> Ctx = (?CTX)#cx{req=cowboy_req:set_resp_header(K, V, ?CTX#cx.req)}, erlang:put(context, Ctx).
 
 
 setAttr(Element, Attr, Value) -> 

+ 0 - 64
src/nitro_conv.erl

@@ -1,64 +0,0 @@
--module(nitro_conv).
-% N2Z Formatter: JSON, BERT
-% author Maxim Sokhatsky
-
--include_lib("nitro/include/nitro.hrl").
-
--compile([export_all, nowarn_export_all]). % todo export
-
-% JOIN
-
-join([],_) -> [];
-join([Item], _Delim) -> [Item];
-join([Item|Items], Delim) -> [Item, Delim | join(Items,Delim)].
-
-
-f(S) -> f(S, []).
-f(S, Args) -> lists:flatten(io_lib:format(S, Args)).
-
-replace([], _, _) -> [];
-replace(String, S1, S2) when erlang:is_list(String), erlang:is_list(S1), erlang:is_list(S2) ->
-  Length = erlang:length(S1),
-  case string:substr(String, 1, Length) of
-    S1 ->
-      S2 ++ replace(string:substr(String, Length + 1), S1, S2);
-    _ ->
-      [erlang:hd(String)|replace(erlang:tl(String), S1, S2)]
-  end.
-
-coalesce({_, Y}) -> Y;
-coalesce(false) -> undefined;
-coalesce([]) -> undefined;
-coalesce([H]) -> H;
-coalesce([undefined|T]) -> coalesce(T);
-coalesce([[]|T]) -> coalesce(T);
-coalesce([H|_]) -> H.
-
-indexof(Key, Fields) -> indexof(Key, Fields, 2).
-indexof(_Key, [], _N) -> undefined;
-indexof(Key, [Key|_T], N) -> N;
-indexof(Key, [_|T], N) -> indexof(Key, T, N + 1).
-
-config(App, Key, Default) ->
-  application:get_env(App,Key,Default).
-
-os_env(Key) -> os_env(Key, "").
-os_env(Key, Default) ->
-  case os:getenv(Key) of
-    false -> Default;
-    V -> V
-  end.
-
-
-% base64 encode/decode
-pickle(Data) ->
-  base64:encode(erlang:term_to_binary({Data, os:timestamp()}, [compressed])).
-
-depickle(PickledData) ->
-  try
-    {Data, _PickleTime} = erlang:binary_to_term(base64:decode(nitro:to_binary(PickledData))),
-    Data
-  catch _:_ ->
-    undefined
-  end.
-

+ 14 - 14
src/nitro_n2z.erl

@@ -25,19 +25,19 @@ info(#init{token=Auth}, Req, State) ->
             Req,New};
 
 info(#client{data=Message}, Req, State) ->
-  nitro:actions([]),
+  erlang:put(actions, []),
   {reply, {bert, io(#client{data=Message}, State)}, Req, State};
 
 info(#pickle{}=Event, Req, State) ->
-  nitro:actions([]),
+  erlang:put(actions, []),
   {reply, {bert, html_events(Event, State)}, Req, State};
 
 info(#flush{data=Actions}, Req, State) ->
-  nitro:actions(Actions),
+  erlang:put(actions, Actions),
   {reply, {bert, io(<<>>)}, Req, State};
 
 info(#direct{data=Message}, Req, State) ->
-  nitro:actions([]),
+  erlang:put(actions, []),
   {reply, {bert, case io(Message, State) of
                       {io, _, {stack, _}} = Io -> Io;
                       {io, Code, Res} -> {io, Code, {direct, Res}} end},
@@ -49,10 +49,10 @@ info(Message, Req, State) -> {unknown, Message, Req, State}.
 % double render: actions could generate actions
 
 render_actions(Actions) ->
-  nitro:actions([]),
+  erlang:put(actions, []),
   First  = nitro:render(Actions),
-  Second = nitro:render(nitro:actions()),
-  nitro:actions([]),
+  Second = nitro:render(erlang:get(actions)),
+  erlang:put(actions, []),
   nitro:to_binary([First, Second]).
 
 
@@ -99,7 +99,7 @@ render_ev(#ev{module=M, name=F, msg=P, trigger=T}, _Source, Linked, State) ->
 io(Event, #cx{module=Module}) ->
   try
   X = Module:event(Event),
-  {io, render_actions(nitro:actions()), X}
+  {io, render_actions(erlang:get(actions)), X}
   
   catch E:R:S ->
     ?LOG_EXCEPTION(E, R, S),
@@ -108,7 +108,7 @@ io(Event, #cx{module=Module}) ->
 
 io(Data) ->
   try
-  {io, render_actions(nitro:actions()), Data}
+  {io, render_actions(erlang:get(actions)), Data}
   
   catch E:R:S ->
     ?LOG_EXCEPTION(E, R, S),
@@ -122,15 +122,15 @@ render_ev(#ev{module=M,name=F,msg=P,trigger=T},_Source,Linked,State) ->
          api_event -> M:F(P,Linked,State);
              event -> [erlang:put(K,V) || {K,V} <- Linked], M:F(P);
                  _ -> M:F(P,T,State) end
-    catch E:R -> S = erlang:get_stacktrace(), ?LOG_EXCEPTION(E,R,S), {stack,S} end.
+    catch E:R -> S = erlang:get_stacktrace(), ?LOG_EXCEPTION(E, R, S), {stack, S} end.
 
 io(Event, #cx{module=Module}) ->
-    try X = Module:event(Event), {io,render_actions(nitro:actions()),X}
-    catch E:R -> S = erlang:get_stacktrace(), ?LOG_EXCEPTION(E,R,S), {io,<<>>,{stack,S}} end.
+    try X = Module:event(Event), {io,render_actions(erlang:get(actions)),X}
+    catch E:R -> S = erlang:get_stacktrace(), ?LOG_EXCEPTION(E, R, S), {io, <<>>, {stack, S}} end.
 
 io(Data) ->
-    try {io,render_actions(nitro:actions()),Data}
-    catch E:R -> S = erlang:get_stacktrace(), ?LOG_EXCEPTION(E,R,S), {io,<<>>,{stack,S}} end.
+    try {io,render_actions(erlang:get(actions)),Data}
+    catch E:R -> S = erlang:get_stacktrace(), ?LOG_EXCEPTION(E, R, S), {io, <<>>, {stack, S}} end.
 
 -endif.