Просмотр исходного кода

bugfix: presetting variables on inherited templates was broken

Roberto Saccon 17 лет назад
Родитель
Сommit
581b7fe09d

+ 2 - 0
demo/out/test_extends.html

@@ -1,3 +1,5 @@
+preset-base-barstring
+
 base-barstring
 
 base template

+ 10 - 0
demo/out/test_for_records_preset.html

@@ -2,6 +2,16 @@ before
 
 <ul>
 
+	<li><a href="http://canon.com">Canon</a></li>
+
+	<li><a href="http://leica.com">Leica</a></li>
+
+	<li><a href="http://nikon.com">Nikon</a></li>
+
+</ul>
+
+<ul>
+
 	<li><a href="http://amazon.com">Amazon (preset)</a></li>
 
 	<li><a href="http://google.com">Google (preset)</a></li>

+ 2 - 0
demo/templates/base.html

@@ -1,3 +1,5 @@
+{{ preset_base_var }}
+
 {{ base_var }}
 
 base template

+ 7 - 1
demo/templates/test_for_records_preset.html

@@ -1,7 +1,13 @@
 before
 
 <ul>
-{% for iterator in link_list %}
+{% for iterator in photo_links %}
+	<li><a href="{{ iterator.url }}">{{ iterator.name }}</a></li>
+{% endfor %}
+</ul>
+
+<ul>
+{% for iterator in software_links %}
 	<li><a href="{{ iterator.url }}">{{ iterator.name }}</a></li>
 {% endfor %}
 </ul>

+ 8 - 2
src/demo/erlydtl_demo.erl

@@ -173,7 +173,10 @@ render("for_preset" = Name) ->
     render(Name, ".html");
             
 render("for_records_preset" = Name) ->
-    render(Name, ".html");
+    Link1 = [{name, "Canon"}, {url, "http://canon.com"}],
+    Link2 = [{name, "Leica"}, {url, "http://leica.com"}],
+    Link3 = [{name, "Nikon"}, {url, "http://nikon.com"}],
+    render(Name, ".html", [{photo_links, [Link1, Link2, Link3]}]);
         
 render(Name) ->
     io:format("No such template: ~p~n",[Name]).  
@@ -204,6 +207,9 @@ render(Name, Ext, Args) ->
 %% @doc returns template preset variables
 %% @end 
 %%--------------------------------------------------------------------
+preset(test_extends) ->
+    [{preset_base_var, "preset-base-barstring"}];
+
 preset(test_var_preset) ->
     [{preset_var1, "preset-var1"}, {preset_var2, "preset-var2"}];
     
@@ -214,7 +220,7 @@ preset(test_for_records_preset) ->
     Link1 = [{name, "Amazon (preset)"}, {url, "http://amazon.com"}],
     Link2 = [{name, "Google (preset)"}, {url, "http://google.com"}],
     Link3 = [{name, "Microsoft (preset)"}, {url, "http://microsoft.com"}],
-    [{link_list, [Link1, Link2, Link3]}].
+    [{software_links, [Link1, Link2, Link3]}].
 
               
 %%====================================================================

+ 1 - 1
src/erlydtl/erlydtl_base.erl

@@ -125,7 +125,7 @@ build_tree2(nil, [{extends, Line, Name}], Dtl) ->
     #dtl{buffer = Buffer, doc_root = DocRoot, ext = Ext, preset = Preset} = Dtl,
     case parse(filename:join([DocRoot, Name])) of
         {ok, [AstH | AstT]} ->
-			{_, BaseBuffer, BaseArgs, _} = build_tree(AstH, AstT, DocRoot, Ext),			 
+			{_, BaseBuffer, BaseArgs, _} = build_tree(AstH, AstT, DocRoot, Ext, Preset),			 
 			Out = lists:foldl(fun(X, {AccBuffer, AccArgs, Status}) ->   
                     case X of
                         {block, Line1, BlockName, _} ->

+ 1 - 1
src/erlydtl/erlydtl_parser.erl

@@ -4,7 +4,7 @@
 
 string({_, String}) ->
     erl_syntax:binary([erl_syntax:binary_field(erl_syntax:integer(X)) || X <- String]).
-    % erl_syntax:string(String).  %% less verbose for debugging 
+    %erl_syntax:string(String).  %% less verbose for debugging 
     
 
 var({_, Line, Var}) ->

+ 1 - 1
src/erlydtl/erlydtl_parser.yrl

@@ -69,7 +69,7 @@ Erlang code.
 
 string({_, String}) ->
     erl_syntax:binary([erl_syntax:binary_field(erl_syntax:integer(X)) || X <- String]).
-    % erl_syntax:string(String).  %% less verbose for debugging 
+    %erl_syntax:string(String).  %% less verbose for debugging 
     
 
 var({_, Line, Var}) ->

+ 7 - 7
src/erlydtl/erlydtl_server.erl

@@ -78,25 +78,25 @@ compile(File, DocRoot, Mod) ->
     
 
 %%--------------------------------------------------------------------
-%% @spec (File::string(), DocRoot::string(), Mod::string(), Callback::tuple()) -> 
+%% @spec (File::string(), DocRoot::string(), Mod::string(), VarsCallback::tuple()) -> 
 %%     {Ok::atom, Ast::tuple() | {Error::atom(), Msg:string()}
 %% @doc compiles a template to a beam file
 %% @end 
 %%--------------------------------------------------------------------
-compile(File, DocRoot, Mod, {_Module, _Function} = Callback) ->
-    compile(File, DocRoot, Mod, "render", Callback);
+compile(File, DocRoot, Mod, {_, _} = VarsCallback) ->
+    compile(File, DocRoot, Mod, "render", VarsCallback);
 compile(File, DocRoot, Mod, Func) ->   
     gen_server:call(?MODULE, {compile, File, DocRoot, Mod, Func, []}).
         
 %%--------------------------------------------------------------------
 %% @spec (File::string(), DocRoot::string(), Mod::string(), Func::atom(),
-%%         Vars::tuple()) -> 
+%%         {VarsCbMod::atom(), VarsCbFunc::atom()}) -> 
 %%     {Ok::atom, Ast::tuple() | {Error::atom(), Msg:string()}
 %% @doc compiles a template to a beam file
 %% @end 
 %%--------------------------------------------------------------------            
-compile(File, DocRoot, Mod, Func, {VarsMod, VarsFunc}) ->   
-    case catch VarsMod:VarsFunc(list_to_atom(Mod)) of
+compile(File, DocRoot, Mod, Func, {VarsCbMod, VarsCbFunc}) ->   
+    case catch VarsCbMod:VarsCbFunc(list_to_atom(Mod)) of
         Vars when is_list(Vars) ->
             gen_server:call(?MODULE, {compile, File, DocRoot, Mod, Func, Vars});
         _ -> 
@@ -222,7 +222,7 @@ create_module(List, Args, Module, Function, Reload) ->
     [ModAST, CmpAST] = [erl_syntax:attribute(erl_syntax:atom(X), [erl_syntax:atom(Y)]) ||
         {X, Y} <- [{"module", Module}, {"compile", "export_all"}]],
     Forms = [erl_syntax:revert(X) || X <- [ModAST, CmpAST, FuncAST]],
-%io:format("TRACE ~p:~p Forms: ~p~n",[?MODULE, ?LINE, Forms]),
+    % io:format("TRACE ~p:~p Forms: ~p~n",[?MODULE, ?LINE, Forms]),
     case compile:forms(Forms) of
         {ok, Module1, Bin} ->
             case erlydtl:write_beam(Module1, Bin, "ebin") of