Empty attribute with Ruby HAML

Ruby on-RailsRubyHaml

Ruby on-Rails Problem Overview


I'm implementing Schema microformats on a Ruby project using HAML and can't figure out how to set an empty attribute on a tag. I tried nil and false, but they simply do not shown.

Example: <div itemscope>

I'm tring to set an empty itemscope attribute.

Code added from comment by @StrangeElement:

My code:

.agency.premium{:itemscope => true, :itemtype => 'schema.org/ProfessionalService';} 

:itemscope => true seems to be the recommended approach from HAML's documentation. I get the same result as I would get with :itemscope => '', a XHTML-valid attribute with an empty value (i.e. <div itemscope="">).

Probably fine, but I'd rather have it empty as is documented in the Schema doc.

Ruby on-Rails Solutions


Solution 1 - Ruby on-Rails

Using something like

%div{:itemscope => true}

is the correct way to specify this in your Haml file.

How this is rendered depends on how you set Haml's format option. The default in Haml 3.1 is xhtml, and with that it will render as itemprop='itemprop', which is valid xhtml. To render with minimized attributes (like <div itemscope>) you need to set the format to html4 or html5. (In Rails 3 the default is html5, and in Haml 4.0 the default is html5).

How to set the Haml options depends on how you are using it, see the options section in the docs.

For example, using Haml directly in Ruby, this:

engine = Haml::Engine.new '%div{:itemscope => true}'
puts engine.render

produces the default xhtml with full attributes:

<div itemscope='itemscope'></div>

But this:

engine = Haml::Engine.new '%div{:itemscope => true}', :format => :html5
puts engine.render

produces the desired result with minimized attributes:

<div itemscope></div>

Solution 2 - Ruby on-Rails

If someone is interested in how to put more words in that way, he may use "foo bar" => true:

%option{ "disabled selected value" => true } Choose an option

results is:

<option disabled="" selected="" value="">Choose an option</option>

and works as expected.

Solution 3 - Ruby on-Rails

The accepted answer works, but it produces an HTML attribute with value.

If you want the attribute only to be output on HTML, without value, you can use the HTML-style attributes syntax of HAML:

%div(itemscope)

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionStrangeElementView Question on Stackoverflow
Solution 1 - Ruby on-RailsmattView Answer on Stackoverflow
Solution 2 - Ruby on-RailsNakilonView Answer on Stackoverflow
Solution 3 - Ruby on-RailsAndrea SalicettiView Answer on Stackoverflow