Sha256: cafa1bf72388bbd1a6df0d868f316d95e1bc170ea4ca467770a3877fe8cd5f91

Contents?: true

Size: 1.66 KB

Versions: 5

Compression:

Stored size: 1.66 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
      emits -> (customize_block) {
        @customize_block = customize_block
        ul(id: config[:id], class: "#{config[:id]} tree") {
          list_items(eval(config[:id].to_s))
        }
      }

      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

5 entries across 5 versions & 2 rubygems

Version Path
express_admin-1.3.2 vendor/gems/express_templates/lib/express_templates/components/tree_for.rb
express_admin-1.3.1 vendor/gems/express_templates/lib/express_templates/components/tree_for.rb
express_templates-0.7.1 lib/express_templates/components/tree_for.rb
express_templates-0.7.0 lib/express_templates/components/tree_for.rb
express_admin-1.3.0 vendor/gems/express_templates/lib/express_templates/components/tree_for.rb