Module: Alchemy::ElementsBlockHelper

Included in:
ElementsHelper
Defined in:
app/helpers/alchemy/elements_block_helper.rb

Overview

Provides a collection of block-level helpers, allowing for a much more concise way of writing element view/editor partials.

Defined Under Namespace

Classes: BlockHelper, ElementViewHelper

Instance Method Summary collapse

Instance Method Details

#element_view_for(element, options = {}) ⇒ Object

Block-level helper for element views. Constructs a DOM element wrapping your content element and provides a block helper object you can use for concise access to Alchemy’s various helpers.

Example:

<%= element_view_for(element) do |el| %>
  <%= el.render :title %>
  <%= el.render :body %>
  <%= link_to "Go!", el.ingredient(:target_url) %>
<% end %>

You can override the tag, ID and class used for the generated DOM element:

<%= element_view_for(element, tag: 'span', id: 'my_id', class: 'thing') do |el| %>
   <%- ... %>
<% end %>

If you don’t want your view to be wrapped into an extra element, simply set tag to false:

<%= element_view_for(element, tag: false) do |el| %>
   <%- ... %>
<% end %>

Options Hash (options):

  • :tag (Object) — default: :div

    The HTML tag to be used for the wrapping element.

  • :id (Object) — default: the element's dom_id

    The wrapper tag’s DOM ID.

  • :class (Object) — default: the element's name

    The wrapper tag’s DOM class.

  • :tags_formatter (Object)

    A lambda used for formatting the element’s tags (see Alchemy::ElementsHelper::element_tags_attributes). Set to false to not include tags in the wrapper element.

Parameters:

  • The element to display.

  • (defaults to: {})

    Additional options.



102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
# File 'app/helpers/alchemy/elements_block_helper.rb', line 102

def element_view_for(element, options = {})
  options = {
    tag: :div,
    tags_formatter: ->(tags) { tags.join(" ") }
  }.merge(options)

  # capture inner template block
  output = capture do
    yield ElementViewHelper.new(self, element: element) if block_given?
  end

  # wrap output in a useful DOM element
  if (tag = options.delete(:tag))
    # add preview attributes
    options.merge!(element_preview_code_attributes(element))

    # add tags
    if (tags_formatter = options.delete(:tags_formatter))
      options.merge!(element_tags_attributes(element, formatter: tags_formatter))
    end

    output = (tag, output, options)
  end

  # that's it!
  output
end