HTML+ERB
Opening Tags
Script Tag (<%)
erb
<% "String" %>json
{
type: "erb-loud",
language: "ruby",
value: {
// Prism return value
}
}Expression Tag (<%=)
erb
<%= "String" %>json
{
type: "erb-loud",
language: "ruby",
value: {
// Prism return value
}
}Raw text output Tag (<%==)
erb
<%== "String" %>json
{
type: "erb-loud",
language: "ruby",
value: {
// Prism return value
}
}Comment Tag (<%#)
Can also be seen as <% #.
erb
<%# Comment %>json
{
type: "erb-comment",
language: "ruby",
value: {
// Prism return value
}
}??? Tag (<%-)
erb
json
{
type: "erb-???",
language: "ruby",
value: {
// Prism return value
}
}??? Tag (<%%)
erb
json
{
type: "erb-???",
language: "ruby",
value: {
// Prism return value
}
}Closing tags
??? Tag (%>)
erb
json
{
type: "erb-???",
language: "ruby",
value: {
// Prism return value
}
}??? Tag (%%>)
erb
json
{
type: "erb-???",
language: "ruby",
value: {
// Prism return value
}
}??? Tag (-%>)
erb
json
{
type: "erb-???",
language: "ruby",
value: {
// Prism return value
}
}Attribute Value interpolation
Interpolate attribute value
erb
<article id="<%= dom_id(article) %>"></article>json
{
type: "erb-???",
language: "ruby",
value: {
// Prism return value
}
}Interpolate attribute value with static value
erb
<article class="article <%= classes_for(article) %>"></article>json
{
type: "erb-???",
language: "ruby",
value: {
// Prism return value
}
}Attributes Interpolation
Output
erb
<input <%= "type='text' %> />json
{
type: "erb-???",
language: "ruby",
value: {
// Prism return value
}
}Conditional
erb
<input <% if true %> type="text" <% end %> />json
{
type: "erb-???",
language: "ruby",
value: {
// Prism return value
}
}Conditionals
Tag Children
erb
<% if true %>
<h1><%= "Hello World" %></h1>
<% end %>json
{
type: "erb-???",
language: "ruby",
value: {
// Prism return value
}
}Loops
Tag Children
erb
<% @posts.each do |post| %>
<h1><%= post.title %></h1>
<% end %>json
{
type: "erb-???",
language: "ruby",
value: {
// Prism return value
}
}Blocks
TODO
Rails Tag Helpers
content_tag
erb
<%= content_tag(:p, "Hello world!") %>json
{
type: "erb-???",
language: "ruby",
value: {
// Prism return value
}
}tag.<tag name>
erb
<%= tag.div tag.p("Hello world!") %>json
{
type: "erb-???",
language: "ruby",
value: {
// Prism return value
}
}tag.<tag name> with block
erb
<%= tag.p do %>
Hello world!
<% end %>json
{
type: "erb-???",
language: "ruby",
value: {
// Prism return value
}
}tag.<tag name> with attributes
erb
<%= tag.section class: ["bg-black text-white"] %>json
{
type: "erb-???",
language: "ruby",
value: {
// Prism return value
}
}tag.attributes
erb
<input <%= tag.attributes(type: :text, aria: { label: "Search" }) %>>json
{
type: "erb-???",
language: "ruby",
value: {
// Prism return value
}
}Disallowed
We should disallow/discourage the following patterns
Dynamic tag names
erb
<<%= "input" %> required />Dynamic Attribute names
erb
<input <%= "type" %>="text" />