Skip to content

Commit

Permalink
Merge pull request erlydtl#14 from peeb/master
Browse files Browse the repository at this point in the history
Support for input text with no URLs in it in erlydtl_filters:urlize/2
  • Loading branch information
evanmiller committed Jun 30, 2011
2 parents 86b1199 + 3872025 commit 56b50af
Showing 1 changed file with 20 additions and 15 deletions.
35 changes: 20 additions & 15 deletions src/erlydtl_filters.erl
Original file line number Diff line number Diff line change
Expand Up @@ -1064,21 +1064,26 @@ urlize(Input, Trunc) when is_binary(Input) ->
urlize(binary_to_list(Input),Trunc);
urlize(Input, Trunc) ->
{ok,RE} = re:compile("(([[:alpha:]]+://|www\.)[^<>[:space:]]+[[:alnum:]/])"),
{match,Matches} = re:run(Input,RE,[global]),
Indexes = lists:map(fun(Match) -> lists:nth(2,Match) end, Matches),
Domains = lists:map(fun({Start, Length}) -> lists:sublist(Input, Start+1, Length) end, Indexes),
URIDomains = lists:map(fun(Domain) -> addDefaultURI(Domain) end, Domains),
case Trunc == 0 of
true ->
DomainsTrunc = Domains;
false ->
DomainsTrunc = lists:map(fun(Domain) -> string:concat( string:substr(Domain,1,Trunc-3), "...") end, Domains)
end,
ReplaceList = lists:zip(URIDomains,DomainsTrunc),
ReplaceStrings = lists:map(fun({URIDomain,Domain}) -> lists:flatten(io_lib:format("<a href=\"~s\" rel=\"nofollow\">~s</a>",[URIDomain,Domain])) end, ReplaceList),
Template = re:replace(Input,"(([[:alpha:]]+://|www\.)[^<>[:space:]]+[[:alnum:]/])", "~s", [global,{return,list}]),
Result = lists:flatten(io_lib:format(Template,ReplaceStrings)),
Result.
RegexResult = re:run(Input,RE,[global]),
case RegexResult of
{match, Matches} ->
Indexes = lists:map(fun(Match) -> lists:nth(2,Match) end, Matches),
Domains = lists:map(fun({Start, Length}) -> lists:sublist(Input, Start+1, Length) end, Indexes),
URIDomains = lists:map(fun(Domain) -> addDefaultURI(Domain) end, Domains),
case Trunc == 0 of
true ->
DomainsTrunc = Domains;
false ->
DomainsTrunc = lists:map(fun(Domain) -> string:concat( string:substr(Domain,1,Trunc-3), "...") end, Domains)
end,
ReplaceList = lists:zip(URIDomains,DomainsTrunc),
ReplaceStrings = lists:map(fun({URIDomain,Domain}) -> lists:flatten(io_lib:format("<a href=\"~s\" rel=\"nofollow\">~s</a>",[URIDomain,Domain])) end, ReplaceList),
Template = re:replace(Input,"(([[:alpha:]]+://|www\.)[^<>[:space:]]+[[:alnum:]/])", "~s", [global,{return,list}]),
Result = lists:flatten(io_lib:format(Template,ReplaceStrings)),
Result;
nomatch ->
Input
end.

%% @doc Converts URLs into clickable links just like urlize, but truncates URLs longer than the given character limit.
urlizetrunc(Input, Trunc) ->
Expand Down

0 comments on commit 56b50af

Please sign in to comment.