Markaby
# In Camping, you don't have to set up the Builder.
# I'll leave it out in the other examples.
mab = Markaby::Builder.new
mab.p "This is a paragraph."
mab.div "I can do the same thing with a div."
To nest your HTML, you can pass a block.
form :method => 'post' do
legend 'Import stuff'
textarea :name => 'queries', :rows => '25', :cols => '100'
input :type => 'submit', :value => 'Import!'
end
[A side note, the textarea method inserts some whitespace by default. Very annoying, so if you know how to get rid of it in a non-hacky way, please let me know.]
It uses lots of metaprogramming trickery to make your life a whole lot easier. For example, you can add an arbitrary class to an element by calling the class name as a method.
div.example "This div will be of class example."
The class methods can also be chained.
div.example.special "This div will be of class example _and_ special."
You can do the same thing with an id by simply appending a bang (!) to the class name.
div.main_content! "This div will have the id main_content."
But what if you want a variable class name? I can't just tack the variable name on because the magic will mean that the class will be the name of the variable, not the value.
%w[one two three].each {|c| puts mab.p.c.to_s}
That's not going to work. It will output this.
<p class="c"/>
<p class="c"/>
<p class="c"/>
Ruby's send method to the rescue.
%w[one two three].each {|c| puts mab.p.send(c)}
This correctly outputs this.
<p class="one"/>
<p class="two"/>
<p class="three"/>