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

Implement unordered_list filter

Evan Miller 14 лет назад
Родитель
Сommit
b3ef61ac2a
2 измененных файлов с 14 добавлено и 21 удалено
  1. 11 21
      src/erlydtl_filters.erl
  2. 3 0
      tests/src/erlydtl_unittests.erl

+ 11 - 21
src/erlydtl_filters.erl

@@ -102,7 +102,7 @@
         title/1,
         truncatewords/2,
         %truncatewords_html/,
-        %unordered_list/1,
+        unordered_list/1,
         upper/1,
         urlencode/1,
         urlize/1,
@@ -706,26 +706,16 @@ truncatewords(Input, Max) ->
     truncatewords(Input, Max, []).
 
 %% @doc Recursively takes a self-nested list and returns an HTML unordered list -- WITHOUT opening and closing <ul> tags. 
-%%TODO: finish unordered_list
-%% unordered_list(List) ->
-%%         lists:reverse(unordered_list(List, [])).
-%%  
-%% unordered_list([], Acc) ->
-%%         Acc;
-%% unordered_list(List, Acc) ->   
-%%         [First|Rest] = List,
-%%         io:format("First is_list: ~p, ~p~n", [First, is_list(First)]),
-%%         case is_list(First) of
-%%             true ->
-%%                 [First|Rest] = First,
-%%                 Return = [First | Acc],
-%%                 "<ul>" ++ unordered_list(Rest,Return) + "</ul>";
-%%             false ->
-%%                 Return = [First | Acc],
-%%                 "<li>" ++ unordered_list(Rest,Return) + "</li>"
-%%         end.
-
-
+unordered_list(List) ->
+    String = lists:flatten(unordered_list(List, [])),
+    string:substr(String, 5, erlang:length(String) - 9).
+  
+unordered_list([], Acc) ->
+    ["<ul>", lists:reverse(Acc), "</ul>"];
+unordered_list([First|_] = List, []) when is_integer(First) ->
+    "<li>"++List;
+unordered_list([First|Rest], Acc) when is_list(First) ->
+    unordered_list(Rest, [unordered_list(First, [])|Acc]).
 
 %% @doc Converts a string into all uppercase.
 upper(Input) when is_binary(Input) ->

+ 3 - 0
tests/src/erlydtl_unittests.erl

@@ -773,6 +773,9 @@ tests() ->
                 {"|truncatewords:3",
                     <<"{{ var1|truncatewords:3 }}">>, [{var1, "Don't Truncate Me"}],
                     <<"Don't Truncate Me">>},
+                {"|unordered_list",
+                    <<"{{ var1|unordered_list }}">>, [{var1, ["States", ["Kansas", ["Lawrence", "Topeka"], "Illinois"]]}],
+                    <<"<li>States<ul><li>Kansas<ul><li>Lawrence<li>Topeka</ul><li>Illinois</ul>">>},
                 {"|upper",
                     <<"{{ message|upper }}">>, [{message, "That man has a gun."}],
                     <<"THAT MAN HAS A GUN.">>},