class JsDuck::Categories::Factory

Reads in categories and outputs them as HTML div

Public Class Methods

create(filename, doc_formatter, relations) click to toggle source
# File lib/jsduck/categories/factory.rb, line 12
def self.create(filename, doc_formatter, relations)
  if filename
    categories = Categories::File.new(filename, relations)
  else
    categories = Categories::Auto.new(relations)
  end
  Categories::Factory.new(categories.generate, doc_formatter, relations)
end
new(categories, doc_formatter, relations={}) click to toggle source
# File lib/jsduck/categories/factory.rb, line 21
def initialize(categories, doc_formatter, relations={})
  @categories = categories
  @class_name = Categories::ClassName.new(doc_formatter, relations)
  @columns = Columns.new("classes")
end

Public Instance Methods

to_html(style="") click to toggle source

Returns HTML listing of classes divided into categories

# File lib/jsduck/categories/factory.rb, line 28
      def to_html(style="")
        html = @categories.map do |category|
          [
            "<div class='section'>",
            "<h1>#{category['name']}</h1>",
            render_columns(category['groups']),
            "<div style='clear:both'></div>",
            "</div>",
          ]
        end.flatten.join("\n")

        return <<-EOHTML
          <div id='categories-content' style='#{style}'>
            #{html}
          </div>
        EOHTML
      end

Private Instance Methods

render_columns(groups) click to toggle source
# File lib/jsduck/categories/factory.rb, line 48
def render_columns(groups)
  align = ["left-column", "middle-column", "right-column"]
  i = -1
  return @columns.split(groups, 3).map do |col|
    i += 1
    [
      "<div class='#{align[i]}'>",
      render_groups(col),
      "</div>",
    ]
  end
end
render_groups(groups) click to toggle source
# File lib/jsduck/categories/factory.rb, line 61
def render_groups(groups)
  return groups.map do |g|
    [
      "<h3>#{g['name']}</h3>",
      "<ul class='links'>",
      g["classes"].map {|cls| "<li>" + @class_name.render(cls) + "</li>" },
      "</ul>",
    ]
  end
end