Sha256: 82a4c43ca3092366ad36b5a7544bcf42200be51628771f87b6de6109d2a7f286

Contents?: true

Size: 1.71 KB

Versions: 8

Compression:

Stored size: 1.71 KB

Contents

module ExpressTemplates
  module Components
    #
    # Create an html <tt>table</tt> or <tt>ol</tt> (ordered list) for
    # a model object representing a tree of similar objects.
    #
    # The objects must respond to <tt>:children</tt>.
    #
    # 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>
    #

    class TreeFor < Configurable

      tag :ul

      has_attributes :class => 'tree'

      contains -> (&customize_block) {
        @customize_block = customize_block
        list_items(send(config[:id]))
      }

      before_build -> {
        add_class config[:id]
      }

      def list_items(nodes)
        nodes.each do |node|
          list_item(node)
        end
      end

      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
    end
  end
end

Version data entries

8 entries across 8 versions & 2 rubygems

Version Path
express_admin-1.4.8 vendor/gems/express_templates/lib/express_templates/components/tree_for.rb
express_templates-0.9.7 lib/express_templates/components/tree_for.rb
express_admin-1.4.7 vendor/gems/express_templates/lib/express_templates/components/tree_for.rb
express_templates-0.9.6 lib/express_templates/components/tree_for.rb
express_admin-1.4.6 vendor/gems/express_templates/lib/express_templates/components/tree_for.rb
express_templates-0.9.5 lib/express_templates/components/tree_for.rb
express_admin-1.4.5 vendor/gems/express_templates/lib/express_templates/components/tree_for.rb
express_templates-0.9.4 lib/express_templates/components/tree_for.rb