Re: Proposal: <#p expression> for printing values that deliberately store markup
Denis Bredelet <[email protected]> Sun, 24 Feb 2013 15:38:02 +0000
| Newsgroups | gmane.comp.web.freemarker.devel |
|---|---|
| Message-ID | <[email protected]> |
The proposal looks well thought out.
I will just say that I approve it.
What is the difference between macro and function then?
-- Denis.
> I want to able to tell this simple rule of thumb to users:
>
> - Always put the template into <#escape x as x?html>, or when it
> becomes available, just turn on global escaping and forget about it.
>
> - Print values that aren't meant to contain HTML markup with
> `${expression}`. These will be automatically escaped.
>
> - Print values that meant to store HTML markup with
> `<#p expression>`. These will not be automatically escaped, ever.
>
> In general, what you print with <@...> or <#...>-s (i.e., with
> macros or directives) is never escaped. They meant to generate
> markup, and that's why they look like HTML tags.
>
> You may wonder why not `${expression?noescape}` or something like that.
> For two reasons:
>
> - It violates the rule of thumb shown above. It's something that's not
> escaped, meant to generate markup, yet doesn't look like <...>. #p
> is true to the above idea.
>
> BTW, there's this confusion in many heads about what's the
> difference between a #macro (or a directive) and a #function, and
> why you can't call macros inside expression, and so on. The reason
> of the distinction is basically the above rule of thumb. Only this
> rule wasn't communicated or even executed clearly so far.
>
> - What exactly would be the result of `expression?noescape`? If it's
> just an FTL string, how would ${...} know that it must not be
> escaped? Or what's the result of `foo + bar?noescape`? In a new
> language I probably would have plain-string VS markup-string type,
> but adding it to a 10+ years old language would probably be a too
> brutal change.
>
> You may also wonder what's the problem with:
>
> <#noescape>${expression}</#noescape>
>
> Well, it's far too ugly for a basic task like this. Other than it's
> annoying to type and read back, if many interpolations would print
> values that are already markup in a certain template, the author will
> possibly feel tempted to remove #escape and use ${exprssion?html} on
> the places where the expression value needs to be escaped. Then in
> some templates you have to write ?html, in some you must not write
> that or you do double-escaping... that's messy and dangerous and
> invalidates the rule of thumb shown earlier.
>
> Comments/ideas?
>
> --
> Best regards,
> Daniel Dekany
>
>
> ------------------------------------------------------------------------------
> Everyone hates slow websites. So do we.
> Make your web apps faster with AppDynamics
> Download AppDynamics Lite for free today:
> http://p.sf.net/sfu/appdyn_d2d_feb
> _______________________________________________
> FreeMarker-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/freemarker-devel
------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_feb