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" />