Browse Source

Added date filter as per Django, e.g. {{ date_var1|date:"r" }}.

Fixed a rendering bug in examples/docroot/filters 
which was failing because it was still using the "plus" filter
which was renamed to "add" at some point.  Changed it to "add".



git-svn-id: http://erlydtl.googlecode.com/svn/trunk@134 a5195066-8e3e-0410-a82a-05b01b1b9875
colm.dougan 17 years ago
parent
commit
b4f92e5370

+ 5 - 2
examples/docroot/filters

@@ -1,3 +1,5 @@
+Add: 2 + 2 = {{ 2|add:2 }}
+
 Capfirst: {{ "capitalized"|capfirst }}
 
 Centered:
@@ -5,6 +7,9 @@ Centered:
 {{ "center"|center:20 }}
 </pre>
 
+Date format:  {{ date_var1|date:"r" }}
+DateTime format: {{ datetime_var1|date:"r" }}
+
 Escape JS: {{ "\" '"|escapejs }}
 
 First letter: {{ "first"|first }}
@@ -30,8 +35,6 @@ Line breaks: {{ "Line 1\nLine 2\nLine 3"|linebreaksbr }}
 
 Lowercase: {{ "LOWERCASE"|lower }}
 
-Plus: 2 + 2 = {{ 2|plus:2 }}
-
 Right adjust:
 <pre>
 {{ "right"|rjust:20 }}

+ 13 - 0
src/erlydtl/erlydtl_filters.erl

@@ -66,6 +66,19 @@ center(Input, Number) when is_binary(Input) ->
 center(Input, Number) when is_list(Input) ->
     string:centre(Input, Number).
 
+date([Input], FormatStr) when is_list(Input) or is_binary(Input) ->
+    date(Input, FormatStr);
+date(Input, FormatStr) when is_binary(Input) ->
+    list_to_binary(date(binary_to_list(Input), FormatStr));
+date([{{_,_,_} = Date,{_,_,_} = Time}], FormatStr) ->
+    erlydtl_dateformat:format({Date, Time}, FormatStr);
+date([{_,_,_} = Date], FormatStr) ->
+    erlydtl_dateformat:format(Date, FormatStr);
+date(Input, _FormatStr) when is_list(Input) ->
+    io:format("Unexpected date parameter : ~p~n", [Input]),
+    "".
+
+
 escapejs([Input]) when is_list(Input) or is_binary(Input) ->
     escapejs(Input);
 escapejs(Input) when is_binary(Input) ->

+ 5 - 1
src/tests/erlydtl_functional_tests.erl

@@ -57,7 +57,11 @@ setup("extends") ->
     {ok, CompileVars, ok, RenderVars};
 setup("filters") ->
     CompileVars = [],
-    RenderVars = [{'list', ["eins", "zwei", "drei"]}],
+    RenderVars = [
+        {date_var1, {1975,7,24}},
+        {datetime_var1, {{1975,7,24}, {7,13,1}}},
+        {'list', ["eins", "zwei", "drei"]}
+    ],
     {ok, CompileVars, ok, RenderVars};
 setup("for") ->
     CompileVars = [],

+ 8 - 0
src/tests/erlydtl_unittests.erl

@@ -193,6 +193,14 @@ tests() ->
                 {"|center:1",
                     <<"{{ var1|center:1 }}">>, [{var1, "KBR"}], 
                     <<"B">>},
+                {"|date 1",
+                   <<"{{ var1|date:\"r\" }}">>,
+                   [{var1, {1975,7,24}}],
+                   <<"Thu, 24 Jul 1975 00:00:00 +0000">>},
+                {"|date 2",
+                   <<"{{ var1|date:\"r\" }}">>,
+                   [{var1, {{1975,7,24}, {7,13,1}}}],
+                   <<"Thu, 24 Jul 1975 07:13:01 +0000">>},
                 {"|escapejs",
                     <<"{{ var1|escapejs }}">>, [{var1, "Skip's \"Old-Timey\" Diner"}], 
                     <<"Skip\\'s \\\"Old-Timey\\\" Diner">>},