[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

non-invasive templating solutions in ruby?

Terrence Brannon

1/26/2009 6:04:00 PM

hello, I am a perl and python programmer, but for completeness, I
would like to know which dynamic html generation systems exist in Ruby
which focus on driving HTML generation outside of the HTML itself.

In an 'invasive' system, you would see presentation logic directly in
the HTML, for example:

[% IF age < 10 %]
Hello [% name %], does your mother know you're
using her AOL account?
[% ELSIF age < 18 %]
Sorry, you're not old enough to enter
(and too dumb to lie about your age)
[% ELSE %]
Welcome [% name %].
[% END %]

whereas in a 'non-invasive' system there would only be HTML with id or
class tags

<span id="age_dialog">
<span id="under10">
Hello, does your mother know you're
using her AOL account?
</span>
<span id="under18">
Sorry, you're not old enough to enter
(and too dumb to lie about your age)
</span>
<span id="welcome">
Welcome
</span>
</span>

and then you would simply remove the parts of the HTML based on age:

$age->retain('under10') if $age < 10;


My list of non-invasive (aka push-style) templating systems is
maintained here
<http://perlmonks.org/?node_id=...

Thanks for your feedback,
terrence
4 Answers

Phlip

1/26/2009 8:06:00 PM

0

Terrence Brannon wrote:

> hello, I am a perl and python programmer,

Hello, I'm a programmer!

> but for completeness, I
> would like to know which dynamic html generation systems exist in Ruby
> which focus on driving HTML generation outside of the HTML itself.

> [% ELSE %]
> Welcome [% name %].
> [% END %]

Everyone uses eRB there. Except those who use HAML, or certain other systems,
such as Builder::XmlMarkup.

> whereas in a 'non-invasive' system there would only be HTML with id or
> class tags
>
> <span id="age_dialog">
> <span id="under10">

Look up 'lilu templates'. They hook into your Rails views, and use Hpricot's CSS
selectors to search and replace HTML details before they go out.

> $age->retain('under10') if $age < 10;

Exactly - some similar detail in an 'instruction' file.

Terrence Brannon

1/26/2009 8:25:00 PM

0

On Jan 26, 3:06 pm, Phlip <phlip2...@gmail.com> wrote:

>
> Look up 'lilu templates'. They hook into your Rails views, and use Hpricot's CSS
> selectors to search and replace HTML details before they go out.
>
> > $age->retain('under10') if $age < 10;
>

yes their mailing list seems dead - http://groups.google.com/group/lilu...

but I found kwartz and amrita, so I added those.

Thanks.


Terrence Brannon

1/26/2009 8:26:00 PM

0

On Jan 26, 3:06 pm, Phlip <phlip2...@gmail.com> wrote:

>
> Look up 'lilu templates'.

This was a good review of ruby templates -
http://www.hokstad.com/mini-reviews-of-19-ruby-template-en...

Brian Candler

1/26/2009 8:58:00 PM

0

Terrence Brannon wrote:
> whereas in a 'non-invasive' system there would only be HTML with id or
> class tags
>
> <span id="age_dialog">
> <span id="under10">
> Hello, does your mother know you're
> using her AOL account?
> </span>
> <span id="under18">
> Sorry, you're not old enough to enter
> (and too dumb to lie about your age)
> </span>
> <span id="welcome">
> Welcome
> </span>
> </span>
>
> and then you would simply remove the parts of the HTML based on age:
>
> $age->retain('under10') if $age < 10;

Amrita works like that. I haven't used it for a long time, and it
doesn't appear to have been updated since 2003, but it worked fine then
:-)

Another option is to do the template insertion client-side in
Javascript. For example, Rails Javascript helpers can write the
Javascript for you dynamically and send it straight to the client:

render :update do |page|
page.remove_html 'under18'
page.remove_html 'welcome'
end

(It uses Prototype by default, but by installing jRails then the same
Ruby code will generate jQuery javascript instead)

The attraction of this approach is that Ajax updates work the same way,
and it's a stepping-stone towards making a richer Javascript interface
if you want to go that way.
--
Posted via http://www.ruby-....