non-invasive templating solutions in ruby?

T

Terrence Brannon

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=674225>

Thanks for your feedback,
terrence
 
P

Phlip

Terrence said:
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.
 
B

Brian Candler

Terrence said:
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.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,020
Latest member
GenesisGai

Latest Threads

Top