Sha256: 685780e481e21ce3f1e2ac3de00a2824cf3ae40206b3aa29d37ba693cb8f7098

Contents?: true

Size: 1.17 KB

Versions: 16

Compression:

Stored size: 1.17 KB

Contents

require 'jsduck/util/html'

module JsDuck

  # Manages the single TOC entry (with possible subentries).
  class GuideTocEntry
    attr_accessor :label, :items

    def initialize(parent=nil)
      @parent = parent
      @label = ""
      @items = []
      @min_level = 2
    end

    # Adds entry at the corresponding heading level.
    def add(level, id, text)
      if level == @min_level
        @items << GuideTocEntry.new(self)
        @items.last.label = "#{prefix} <a href='#!/guide/#{id}'>#{text}</a>\n"
      else
        if @items.empty?
          @items << GuideTocEntry.new(self)
        end
        @items.last.add(level-1, id, text)
      end
    end

    # Generates the heading counter, like "1.5.4."
    def prefix
      (@parent ? @parent.prefix : "") + "#{@items.length}."
    end

    # Total number of headings in TOC
    def count
      @items.map {|item| 1 + item.count}.reduce(0, :+)
    end

    # Converts to nested HTML list.
    def to_html
      return if @items.empty?

      return [
        "<ul>",
          @items.map do |item|
            "<li>#{item.label} #{item.to_html}</li>"
          end,
        "</ul>",
      ].flatten.compact.join("\n")
    end

  end

end

Version data entries

16 entries across 16 versions & 3 rubygems

Version Path
solvas-jsduck-6.0.0.30539 lib/jsduck/guide_toc_entry.rb
solvas-jsduck-6.0.0.9571 lib/jsduck/guide_toc_entry.rb
solvas-jsduck-6.0.0.6154 lib/jsduck/guide_toc_entry.rb
solvas-jsduck-6.0.0.4021 lib/jsduck/guide_toc_entry.rb
solvas-jsduck-6.0.0.2554 lib/jsduck/guide_toc_entry.rb
solvas-jsduck-6.0.0.1891 lib/jsduck/guide_toc_entry.rb
solvas-jsduck-6.0.0.beta.1888 lib/jsduck/guide_toc_entry.rb
jsduck-troopjs-0.0.10 lib/jsduck/guide_toc_entry.rb
jsduck-troopjs-0.0.9 lib/jsduck/guide_toc_entry.rb
jsduck-troopjs-0.0.8 lib/jsduck/guide_toc_entry.rb
jsduck-troopjs-0.0.7 lib/jsduck/guide_toc_entry.rb
jsduck-troopjs-0.0.5 lib/jsduck/guide_toc_entry.rb
jsduck-troopjs-0.0.4 lib/jsduck/guide_toc_entry.rb
jsduck-troopjs-0.0.3 lib/jsduck/guide_toc_entry.rb
jsduck-troopjs-0.0.1 lib/jsduck/guide_toc_entry.rb
jsduck-6.0.0beta lib/jsduck/guide_toc_entry.rb