class JsDuck::Render::Class
Renders the whole documentation page for a class.
Public Class Methods
new(opts)
click to toggle source
# File lib/jsduck/render/class.rb, line 11 def initialize(opts) @opts = opts end
Public Instance Methods
render(cls)
click to toggle source
# File lib/jsduck/render/class.rb, line 15 def render(cls) @cls = cls return [ "<div>", render_sidebar, "<div class='doc-contents'>", render_tags(@cls), "</div>", "<div class='members'>", render_all_sections, "</div>", "</div>", ].flatten.compact.join end
Private Instance Methods
render_all_sections()
click to toggle source
# File lib/jsduck/render/class.rb, line 41 def render_all_sections MemberRegistry.definitions.map do |member_def| render_section(member_def) end end
render_member(m, is_first)
click to toggle source
# File lib/jsduck/render/class.rb, line 103 def render_member(m, is_first) # use classname "first-child" when it's first member in its category first_child = is_first ? "first-child" : "" # shorthand to owner class owner = m[:owner] # is this method inherited from parent? inherited = (owner != @cls[:name]) return [ "<div id='#{m[:id]}' class='member #{first_child} #{inherited ? 'inherited' : 'not-inherited'}'>", # leftmost column: expand button "<a href='#' class='side expandable'>", "<span> </span>", "</a>", # member name and type + link to owner class and source "<div class='title'>", "<div class='meta'>", inherited ? "<a href='#!/api/#{owner}' rel='#{owner}' class='defined-in docClass'>#{owner}</a>" : "<span class='defined-in' rel='#{owner}'>#{owner}</span>", "<br/>", @opts.source ? "<a href='source/#{m[:files][0][:href]}' target='_blank' class='view-source'>view source</a>" : "", "</div>", render_member_signature(m), render_tag_signature(m), "</div>", # short and long descriptions "<div class='description'>", "<div class='short'>", m[:short_doc] ? m[:short_doc] : m[:doc], "</div>", "<div class='long'>", render_tags(m), "</div>", "</div>", "</div>", ] end
render_member_signature(m)
click to toggle source
# File lib/jsduck/render/class.rb, line 141 def render_member_signature(m) TagRegistry.get_by_name(m[:tagname]).to_html(m, @cls) end
render_section(sec)
click to toggle source
# File lib/jsduck/render/class.rb, line 47 def render_section(sec) members = @cls[:members].find_all {|m| m[:tagname] == sec[:name] } # Skip rendering empty sections return [] if members.length == 0 # Split members array into subsections subsections = Array(sec[:subsections]).map do |subsec| ms = members.find_all {|m| test_filter(m, subsec[:filter]) } if ms.length > 0 {:title => subsec[:title], :members => ms, :default => subsec[:default]} else nil end end.compact # Print no subsections when no subsections defined or there's # just single subsection which is the default one. if subsections.length == 0 || subsections.length == 1 && subsections[0][:default] return [ "<div class='members-section'>", "<div class='definedBy'>Defined By</div>", "<h3 class='members-title icon-#{sec[:name]}'>#{sec[:title]}</h3>", render_subsection(members, nil), "</div>", ] end return [ "<div class='members-section'>", "<h3 class='members-title icon-#{sec[:name]}'>#{sec[:title]}</h3>", subsections.map {|ss| render_subsection(ss[:members], ss[:title]) }, "</div>", ] end
render_subsection(members, title)
click to toggle source
# File lib/jsduck/render/class.rb, line 92 def render_subsection(members, title) return if members.length == 0 index = 0 return [ "<div class='subsection'>", title ? "<div class='definedBy'>Defined By</div><h4 class='members-subtitle'>#{title}</h3>" : "", members.map {|m| index += 1; render_member(m, index == 1) }, "</div>", ] end
render_tag_signature(m)
click to toggle source
# File lib/jsduck/render/class.rb, line 145 def render_tag_signature(m) Render::Tags.render_signature(m) end
test_filter(member, filter)
click to toggle source
Returns true if member matches the conditions described by a subsection filter.
# File lib/jsduck/render/class.rb, line 85 def test_filter(member, filter) filter.each_pair do |field, truthy| return false unless truthy ? member[field] : !member[field] end return true end