Enabling/disabling HTML with Amrita

E

Eric Schwartz

I know with Amrita, if you pass nil as the data for a template
element, it doesn't get printed. What I'm interested in is in
conditional container elements, such as <span> or <tr>, that print
their templated content when enabled. See my test below:

emschwar@wilson:/tmp$ cat bah.templ
<table>
<tr><td id="cell1" />/></tr>
<tr id="row2"><td id="cell2" /></tr>
</table>

emschwar@wilson:/tmp$ cat ./amrita-test
#!/usr/bin/ruby
require 'amrita/template'

data1 = { :cell1 => "Cell 1" }

data2 = { :cell1 => "Cell 1",
:row2 => "testing",
:cell2 => "Cell 2" }

template = Amrita::TemplateFile.new("bah.templ")

template.expand(STDOUT, data1)
puts
template.expand(STDOUT, data2)

emschwar@wilson:/tmp$ ./amrita-test
<table>
<tr><td>Cell 1</td></tr>

</table>

<table>
<tr><td>Cell 1</td></tr>
<tr>testing</tr>
</table>
emschwar@wilson:/tmp$

Obviously, what I'm looking for in the second case is something like
<table>
<tr><td>Cell 1</td></tr>
<tr><td>Cell 2</td></tr>
</table>

I've been resorting to templating tricks like

<tr><td id="cell2" /></tr>

but that leaves an empty table row in there when there's no 'cell2',
which is not always what I want. In the particular application I'm
using it for, it's okay, but it's kinda ugly. How can I get there
from here? Or can I?

-=Eric
 
A

Aredridel

I know with Amrita, if you pass nil as the data for a template
element, it doesn't get printed. What I'm interested in is in
conditional container elements, such as <span> or <tr>, that print
their templated content when enabled. See my test below:

emschwar@wilson:/tmp$ cat bah.templ
<table>
<tr><td id="cell1" />/></tr>
<tr id="row2"><td id="cell2" /></tr>
</table>

emschwar@wilson:/tmp$ cat ./amrita-test
#!/usr/bin/ruby
require 'amrita/template'

data1 = { :cell1 => "Cell 1" }

data2 = { :cell1 => "Cell 1",
:row2 => "testing",
:cell2 => "Cell 2" }

template = Amrita::TemplateFile.new("bah.templ")

template.expand(STDOUT, data1)
puts
template.expand(STDOUT, data2)

emschwar@wilson:/tmp$ ./amrita-test
<table>
<tr><td>Cell 1</td></tr>

</table>

<table>
<tr><td>Cell 1</td></tr>
<tr>testing</tr>
</table>
emschwar@wilson:/tmp$

Obviously, what I'm looking for in the second case is something like
<table>
<tr><td>Cell 1</td></tr>
<tr><td>Cell 2</td></tr>
</table>

I've been resorting to templating tricks like

<tr><td id="cell2" /></tr>

but that leaves an empty table row in there when there's no 'cell2',
which is not always what I want. In the particular application I'm
using it for, it's okay, but it's kinda ugly. How can I get there
from here? Or can I?

<tr><td><span amrita:id='cell2'>Cell 2</span></td></tr>

Ari
 
E

Eric Schwartz

Aredridel said:
<tr><td><span amrita:id='cell2'>Cell 2</span></td></tr>

Right, but that still leaves the extra <tr> in there. I want to have
the <tr> show up when there is content for 'cell2', but not when there
isn't any.

-=Eric
 
Z

Zev Blut

Hello,

I know with Amrita, if you pass nil as the data for a template
element, it doesn't get printed. What I'm interested in is in
conditional container elements, such as <span> or <tr>, that print
their templated content when enabled. See my test below:

emschwar@wilson:/tmp$ cat bah.templ
<table>
<tr><td id="cell1" />/></tr>
<tr id="row2"><td id="cell2" /></tr>
</table>

Notice that cell2 is a child of row2.
Now try using this data hash:


#!/usr/bin/ruby
require 'amrita/template'

data3 = {
:cell1 => "Cell 1",
:row2 => {
:cell2 => "Cell 2"
}
}

template = Amrita::TemplateFile.new("bah.templ")

template.expand(STDOUT, data3)

Obviously, what I'm looking for in the second case is something like
<table>
<tr><td>Cell 1</td></tr>
<tr><td>Cell 2</td></tr>
</table>

The result of data3 should be what you want.
I hope this makes sense.

Best,
Zev
 
E

Eric Schwartz

Zev Blut said:
data3 = {
:cell1 => "Cell 1",
:row2 => {
:cell2 => "Cell 2"
}
}

This is very cool. I'll have to re-read the Amrita docs to see if I'm
just blind, or if this isn't there-- I'll see if I can't produce a
patch if this isn't documented.
The result of data3 should be what you want.
I hope this makes sense.

Tons of sense. Thanks, Zev!

-=Eric
 

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

No members online now.

Forum statistics

Threads
473,780
Messages
2,569,611
Members
45,273
Latest member
DamonShoem

Latest Threads

Top