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".
Colm Dougan 17 years ago
parent
commit
e394033bd9

+ 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">>},