require 'jsduck/doc_formatter' require 'jsduck/inheritance_tree' require 'jsduck/cfg_table' require 'jsduck/property_table' require 'jsduck/method_table' require 'jsduck/event_table' module JsDuck # Creates HTML documentation page for one class. class Page # Initializes doc page generator # # - cls : the Class object for which to generate documentation # - subclasses : lookup table for easy access to subclasses # - cache : cache for already generated HTML rows for class members # def initialize(cls, subclasses = {}, cache = {}) @cls = cls @subclasses = subclasses @cache = cache @formatter = DocFormatter.new(cls.full_name) end def to_html [ '
', inheritance_tree, heading, abstract, description, "
", CfgTable.new(@cls, @cache).to_html, PropertyTable.new(@cls, @cache).to_html, MethodTable.new(@cls, @cache).to_html, EventTable.new(@cls, @cache).to_html, "
", ].join("\n") end # only render the tree if class has at least one ancestor def inheritance_tree @cls.parent ? InheritanceTree.new(@cls).to_html : "" end def heading "

Class #{@cls.full_name}

" end def abstract [ "", abstract_row("Extends:", @cls.parent ? class_link(@cls.parent.full_name) : "Object"), abstract_row("Defind In:", file_link), @subclasses[@cls] ? abstract_row("Subclasses:", subclasses) : "", "
", ].join("\n") end def class_link(class_name, label=nil) label = label || class_name "#{label}" end def file_link "#{@cls[:filename]}" end def subclasses subs = @subclasses[@cls].sort {|a, b| a.short_name <=> b.short_name } subs.collect {|cls| class_link(cls.full_name, cls.short_name) }.join(", ") end def abstract_row(label, info) "#{label}#{info}" end def description "
#{@formatter.format(@cls[:doc])}
" end end end