Re: New Additions to Template.js

Juerg Lehni <[email protected]>
Newsgroups gmane.comp.java.helma.general
Message-ID <[email protected]>
Yet another update:

I added prefix / suffix / default to conditional macros and loops,  
and a new feature called separator to loop.

This now allows things like:

<% foreach $value in [1, 2, 3] prefix="[ " suffix=" ]" separator=", " %>
   <%= $value %>
<% end %>

Result: [1, 2, 3]

<% if param.greetings prefix="Hello" %>
   World
<% end %>

Result: Hello World

Also note that parantheses are not needed any longer in if / elseif /  
foreach, but can still be used.

I think these additions are very useful.

The next feature will be to somehow allow $value in the loop above to  
know where it is... I still have not decided how this can be done  
nicely.

The changes lead to another clean up of the code, which seems to get  
less of a hack with each addition.

Download at the usual place:

http://dev.helma.org/wiki/JavaScript+Template+Engine/

Jürg

On 13 Apr 2007, at 12:29, Juerg Lehni wrote:

> Hello,
>
> I just upploaded a largely refactored and overhauled Template.js
>
> http://dev.helma.org/wiki/JavaScript+Template+Engine/
>
> This incorperates most of the skin additions described here:
>
> http://dev.helma.org/wiki/New+Skin+Features+in+Helma+1.6/
>
> Generally, I think althought the code became longer, it should be
> much more readable. There are still many regexps in there, but that
> is just the way to do it and still get a half-way decent speed for
> parsing in JS. All these constructs could be easily replaced with
> something more understandable in Java. I am very pleased with the
> efficiency of the new macr parser in Template.prototype.parseMacro
> and its private functions, for those who want to have a closer look.
>
> Some of the features / changes:
>
> - Local variables now need to have a $ in front of them, so you will
> probably have to change some of your templates. Right now, the new
> way to do things is:
>
>    <% foreach ($value in list) %> instead of <% foreach (value in
> list) %>
>    <% $value = 10 %> instead of <% set value = 10 %>
>
> This is not finalized though, i am simply playing around with
> notation and am very curious to hear the thoughts of the Template.js
> users.
>
> - Filter chains work, and hopefully the same way as in Helma. I am
> not so sure about all the details, e.g. where and when to append
> prefix / suffix, but will look at this soon to make sure it does the
> same.
>
> - Neste macros are supported. You can still write something like <%
> macro value=param.otherValue %> and for simple things, that is the
> recommended way, but you can also go and render a sub template into
> the parameter of another macro. neat!
>
> - Unnamed parameters are there and work in the same way as in Helma.
>
> - Sub templates are implemented in a new way, closly mimicing sub  
> skins:
>
> <% #name %>
> This is a sub-template. It can call <% macros %> and write <%=
> param.value %> too!
> Empty lines before and after it are automatically removed.
>
> <% #greedy +%>
> This is another sub-template. As apposed to the one abovce, this one
> keeps the
> empty lines due to the + at the end.
>
> Template.js also adds a macro for rendering templates and
> subtemplates. All this should work:
>
> <% this.template "#sub" value="variables" %>
> <% this.template "main#sub" value="variables" %>
> <% this.template "main" value="variables" %>
>
> Despite my first somewhat negative reactions to these I now started
> to see the advantages too, and have actually come to the conclusion
> that it is not a bad thing to drop nested content in tags.
>
> And while I was at it, I thought it would be neat to offer a
> possibility to render templates directly into a scope variable:
>
> <% $text %>
> Render this text into '$text'. Again, <% macros %> can be called.
>
> This also creates a sub template of the same name, without the $. And
> the variable $text then just contains the rendered result in the
> example above. This is actually what gave me the idea to only use $
> for all variables, but I am not so sure about that decision yet...
>
> I am curious to here what the users of Template.js think about all
> these changes.
>
> Will anybody miss the possibility to have nested content?
>
> I hope you enjoy this.
>
> I am looking forward to recieving some feedback.
>
> Jürg
> _______________________________________________
> Helma-user mailing list
> [email protected]
> http://helma.org/mailman/listinfo/helma-user
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.