class ExpressTemplates::Components::Presenters::TreeFor

Create an html table or ol (ordered list) for a model object representing a tree of similar objects.

The objects must respond to :children.

The block is passed a NodeBuilder which may accept field names.

Example:

“`ruby tree_for(:roles) { |role|

role.name

} “`

If the view has an @roles variable with a Role having children, this will turn into markup such as the following:

<ul id="roles" class="roles tree">
  <li>SuperAdmin
    <ul>
      <li>Admin
        <ul>
          <li>Publisher
            <ul>
               <li>Author</li>
            </ul>
          </li>
          <li>Auditor</li>
        </ul>
      </li>
    </ul>
  </li>
</ul>

Public Instance Methods

list_item(node) click to toggle source
# File lib/express_templates/components/tree_for.rb, line 71
def list_item(node)
  li {
    if @customize_block
      @customize_block.call(node)
    else
      text_node "#{node.name}#{"\n" if node.children.any?}"
    end
    if node.children.any?
      ul {
        list_items(node.children)
      }
    end
  }
end
list_items(nodes) click to toggle source
# File lib/express_templates/components/tree_for.rb, line 65
def list_items(nodes)
  nodes.each do |node|
    list_item(node)
  end
end
root_node() click to toggle source
# File lib/express_templates/components/tree_for.rb, line 57
def root_node
  if config[:root] && config[:root].respond_to?(:call)
    config[:root].call
  else
    send(config[:id])
  end
end