Forum: Ruby non-invasive templating solutions in ruby?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Terrence Brannon (Guest)
on 2009-01-26 20:05
(Received via mailing list)
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
Phlip (Guest)
on 2009-01-26 22:10
(Received via mailing list)
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 (Guest)
on 2009-01-26 22:30
(Received via mailing list)
On Jan 26, 3:06 pm, Phlip <removed_email_address@domain.invalid> 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-templates

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

Thanks.
Terrence Brannon (Guest)
on 2009-01-26 22:31
(Received via mailing list)
On Jan 26, 3:06 pm, Phlip <removed_email_address@domain.invalid> wrote:

>
> Look up 'lilu templates'.

This was a good review of ruby templates -
http://www.hokstad.com/mini-reviews-of-19-ruby-tem...
Brian C. (Guest)
on 2009-01-26 23:00
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.
This topic is locked and can not be replied to.