Returns an HTML tag.
Building HTML tagsBuilds HTML5 compliant tags with a tag proxy. Every tag can be built with:
tag.<tag name>(optional content, options)
where tag name can be e.g. br, div, section, article, or any tag really.
Passing contentTags
can pass content to embed within it:
tag.h1 'All titles fit to print' # => <h1>All titles fit to print</h1>
tag.div tag.p('Hello world!') # => <div><p>Hello world!</p></div>
Content can also be captured with a block, which is useful in templates:
<%= tag.p do %>
The next great American novel starts here.
<% end %>
# => <p>The next great American novel starts here.</p>
Options
Use symbol keyed options to add attributes to the generated tag.
tag.section class: %w( kitties puppies )
# => <section class="kitties puppies"></section>
tag.section id: dom_id(@post)
# => <section id="<generated dom id>"></section>
Pass true
for any attributes that can render with no values, like disabled
and readonly
.
tag.input type: 'text', disabled: true
# => <input type="text" disabled="disabled">
HTML5 data-*
and aria-*
attributes can be set with a single data
or aria
key pointing to a hash of sub-attributes.
To play nicely with JavaScript conventions, sub-attributes are dasherized.
tag.article data: { user_id: 123 }
# => <article data-user-id="123"></article>
Thus data-user-id
can be accessed as dataset.userId
.
Data attribute values are encoded to JSON, with the exception of strings, symbols, and BigDecimals. This may come in handy when using jQueryâs HTML5-aware .data()
from 1.4.3.
tag.div data: { city_state: %w( Chicago IL ) }
# => <div data-city-state="["Chicago","IL"]"></div>
The generated tag names and attributes are escaped by default. This can be disabled using escape
.
tag.img src: 'open & shut.png'
# => <img src="open & shut.png">
tag.img src: 'open & shut.png', escape: false
# => <img src="open & shut.png">
The tag builder respects HTML5 void elements if no content is passed, and omits closing tags for those elements.
# A standard element:
tag.div # => <div></div>
# A void element:
tag.br # => <br>
Note that when using the block form options should be wrapped in parenthesis.
<%= tag.a(href: "/about", class: "font-bold") do %>
About the author
<% end %>
# => <a href="/about" class="font-bold">About the author</a>
Building HTML attributes
Transforms a Hash
into HTML attributes, ready to be interpolated into ERB
. Includes or omits boolean attributes based on their truthiness. Transforms keys nested within aria:
or data:
objects into aria-
and data-
prefixed attributes:
<input <%= tag.attributes(type: :text, aria: { label: "Search" }) %>>
# => <input type="text" aria-label="Search">
<button <%= tag.attributes id: "call-to-action", disabled: false, aria: { expanded: false } %> class="primary">Get Started!</button>
# => <button id="call-to-action" aria-expanded="false" class="primary">Get Started!</button>
Legacy syntax
The following format is for legacy syntax support. It will be deprecated in future versions of Rails.
tag(name, options = nil, open = false, escape = true)
It returns an empty HTML tag of type name
which by default is XHTML compliant. Set open
to true to create an open tag compatible with HTML 4.0 and below. Add HTML attributes by passing an attributes hash to options
. Set escape
to false to disable attribute value escaping.
You can use symbols or strings for the attribute names.
Use true
with boolean attributes that can render with no value, like disabled
and readonly
.
HTML5 data-*
attributes can be set with a single data
key pointing to a hash of sub-attributes.
tag("br")
# => <br />
tag("br", nil, true)
# => <br>
tag("input", type: 'text', disabled: true)
# => <input type="text" disabled="disabled" />
tag("input", type: 'text', class: ["strong", "highlight"])
# => <input class="strong highlight" type="text" />
tag("img", src: "open & shut.png")
# => <img src="open & shut.png" />
tag("img", { src: "open & shut.png" }, false, false)
# => <img src="open & shut.png" />
tag("div", data: { name: 'Stephen', city_state: %w(Chicago IL) })
# => <div data-name="Stephen" data-city-state="["Chicago","IL"]" />
tag("div", class: { highlight: current_user.admin? })
# => <div class="highlight" />
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4