[Erlangweb-users] Problem with DTL and password field in forms
Brought to you by:
etcerlangweb,
paulgray
|
From: Gilbert R. <erl...@la...> - 2010-02-18 17:49:35
|
Hello,
I am working on a website in erlang-web, and here are two problems I stumbled upon that
required modification or erlang-web source code.
First, password fields in form with confirmation would alway return an error saying
the password didn't match. It was caused by wtype_password:validate who would
feed ["password", "password"] to utf8_api:ustring. The result is one string:
"passwordpassword" instead of ["password", "password"].
Here is the change I made to correct this:
--- a/lib/wparts-1.4/src/wtype_password.erl Tue Jan 19 10:58:02 2010 +0100
+++ b/lib/wparts-1.4/src/wtype_password.erl Thu Feb 18 18:09:11 2010 +0100
@@ -45,8 +45,13 @@
end
end;
+validate({Types, [RawString1, RawString2]}) when is_list(RawString1) and is_list(RawString2) ->
+ validate2({Types, [utf8_api:ustring(RawString1), utf8_api:ustring(RawString2)]});
+
validate({Types, RawString}) when is_list(RawString) ->
- String = utf8_api:ustring(RawString),
+ validate2({Types, utf8_api:ustring(RawString)}).
+
+validate2({Types, String}) when is_list(String) ->
case wpart_valid:is_private(Types) of
true ->
{ok, String};
My second problem was with DTL templates. While wpart template's parent include
mecanism works well with templates sepparated in subdirectories, DTL caused problems.
Here is an exemple of the directory structure that cause problem:
- templates
- base
- base.html
- half.html
- frontpage.html
- article
- article.html
while an extends "half.html" works well in frontpage.html , it does not in article.html.
And if you do an extends "base/base.html" in it, erlydtl tries to load article/base/base.html
Trying to do extends "../base/half.html" doesn't fix the problem as it then tries to load
article/base.html inside half.html
In order to make DTL have the same behavior, I give DTL the template directory
throught its doc_root option.
--- a/lib/eptic-1.4/src/e_cache_ets.erl Tue Jan 19 10:58:02 2010 +0100
+++ b/lib/eptic-1.4/src/e_cache_ets.erl Thu Feb 18 18:09:11 2010 +0100
@@ -93,7 +93,7 @@
XML;
cache(File, erlydtl_expander) ->
Mod = list_to_atom(string:join(string:tokens(File, "/.-"), "")),
- case erlydtl:compile(File, Mod) of
+ case erlydtl:compile(File, Mod, [{doc_root, e_conf:template_root()}]) of
ok ->
ets:insert(?MODULE, {File, {date(), time()}, Mod}),
Mod;
Erlang-web is otherwise quite nice to work with. Thanks for the good work.
|