No release in over a year
Annoyed to write tag.span('LOL')? Just use the new helpers as follows span('lol') to avoid writing to much code while having the safety of rails.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
 Dependencies

Runtime

~> 7, >= 6.1.4.1
 Project Readme

ActiveHtmlTags

A simple helper to simplify the generation of html by bringing content_tag to the next level.

Getting started

Add the gem to your Gemfile. For the last officially released gem:

gem 'active_html_tags'

Now you should be able to use any html tag as a ruby method in your views.

Usage

ActiveHtmlTags is a helper to use any kind of HTML tag as a direct method instead of passing it to content_tag # or tag.#. At the same time it allows for multiple arguments to be given and for smarter options.

# In any view using ApplicationHelper
# for example in app/views/___/___.html.erb
# app/views/layouts/application.html.erb

<%= h1 "This is pretty awesome" %>
<%= tag.h1, "compared to this" %>
<%= content_tag :h1, "or this" %>

The name mappings from html tags to method names are 1:1. Therefore you can create constructs like these:

<%= div do %>
  <%= table do %>
    <%= tr do %>
      <%= th "but it doesn't stop here" %>
      <%= td do %>
         you can make such nice tables
      <% end %>
    <% end %>
    <%= tr(th("very dense tables?"), td(:yes)) %>
  <% end %>

  <%= table tr(th("complete tables?"), td(:yes)) %>
<% end %>

A list of all HTML available and usable tags can be found on w3schools - TAGs.

Currently all these tags are supported:

a, abbr, acronym, address, applet, area, article, aside, audio, b, base, basefont,
bb, bdo, big, blockquote, body, button, canvas, caption, center, cite, code, col,
colgroup, command, datagrid, datalist, dd, del, details, dfn, dialog, dir, div, dl,
dt, em, embed, eventsource, fieldset, figcaption, figure, font, footer, form, frame,
frameset, h1, h2, h3, h4, h5, h6, head, header, hgroup, html, i, iframe, img, input,
ins, isindex, kbd, keygen, label, legend, li, link, map, mark, menu, meta, meter, nav,
noframes, noscript, object, ol, optgroup, option, output, p, param, pre, progress, q,
rp, rt, ruby, s, samp, script, section, select, small, source, span, strike, strong,
style, sub, sup, table, tbody, td, textarea, tfoot, th, thead, time, title, tr, track,
tt, u, ul, var, video, wbr, hr, br

Unlimited arguments

Additionally the content_tag method signature has been improved slightly. Now it supports a list of arguments

<%= h1 "You can add as much", "as you want", small("and what you want") %>
vs
<%= tag.span :h1, safe_join(["this is not very", "sexy", content_tag(:small, "or readable")], " ") %>
<%= content_tag :h1, safe_join(["this is not very", "sexy", content_tag(:small, "or readable")], " ") %>

Advanced options for style

Have you ever wondered why this happens with css? Now you don't have run into this anymore, arrays and hashes are first class citizens in ActiveHtmlTags.

<%= span "this text is actually green", style: {color: :green} %>
# <span style="color: green">this text is actually green</span>
vs
<%= content_tag :span, "this text is sadly not green", style: {color: :green} %>
# <span style="color green">this text is sadly not green</span>

This allows for more complex scenarios

<%= base_style = {"background-color" => "blue"} # Place this logic somewhere nicely %>

<%= span "this text is actually green on blue", style: base_style.merge({color: :green}) %>
# <span style="background-color: blue ; color: green">this text is actually green on blue</span>

Of course arrays are loved too.

<% base_style = ["background-color: blue"]%>

<%= span "this text is actually green on blue", style: base_style + ["color: green"] %>
# <span style="background-color: blue ; color: green">this text is actually green on blue</span>

Boht arrays and hashes are joined using ;

Advanced options for javascript

Options will be joined using ; in case of html attributes who require javascript. A reference of these is also available here: w3schools - HTML Attribute Reference

<%= span "don't click me", onclick: ["1 + 1", "2 + 2"] %>
# <span onclick="1 + 1 ; 2 + 2">don't click me</span>

Only the values will be shown in case of hashes. This allows easier code re-use and overwriting.

<%= span "don't click me", onclick: {base: "1 + 1", feature: "2 + 2"} %>
# <span onclick="1 + 1 ; 2 + 2">don't click me</span>

Advanced options for class and all other attributes

In all other cases, arrays and hash values will be joined using spaces . A reference of all html attributes is also available here: w3schools - HTML Attribute Reference

<% current_color = good_or_bad ? "btn-primary" : "btn-default" %>
<% current_size = nice_or_cool ? "btn-lg" : "btn-sm" %>
<%= span "a nice bootstrap button", class: ["btn", current_state, current_size] %>
# <span class="btn btn-primary btn-lg">a nice boostrap button</span>

In case of hashes, you can override values easier.

<% base_button = {base: :btn, color: "btn-primary"} %>

<%= span "a nice bootstrap button", class: base_button) %>
# <span class="btn btn-primary">a nice boostrap button</span>

<%= span "a nice bootstrap button", class: base_button.merge({color: "btn-danger"}) %>
# <span class="btn btn-danger">a nice boostrap button</span>

Installation

Add this line to your application's Gemfile:

gem 'active_html_tags'

And then execute:

$ bundle

Or install it yourself as:

$ gem install active_html_tags

Contributing

Feel free to create a merge request in case of bugs, features and more.

Test

bundle exec rake test

License

The gem is available as open source under the terms of the MIT License.