class JsDuck::Render::Sidebar
Generates HTML for the class hierarchy sidebar inside class documentation.
Public Class Methods
new(opts)
click to toggle source
# File lib/jsduck/render/sidebar.rb, line 7 def initialize(opts) @opts = opts end
Public Instance Methods
render(cls)
click to toggle source
Renders a sidebar for given class. Returns Array of HTML or nil.
# File lib/jsduck/render/sidebar.rb, line 13 def render(cls) items = [ render_alternate_class_names(cls[:alternateClassNames]), render_tree(cls), render_dependencies(cls[:mixins], "Mixins"), render_dependencies(cls[:parentMixins], "Inherited mixins"), render_dependencies(cls[:requires], "Requires"), render_dependencies(cls[:subclasses], "Subclasses"), render_dependencies(cls[:mixedInto], "Mixed into"), render_dependencies(cls[:uses], "Uses"), render_files(cls[:files]) ] if items.compact.length > 0 return ['<pre class="hierarchy">', items, '</pre>'] else return nil end end
Private Instance Methods
render_alternate_class_names(names)
click to toggle source
# File lib/jsduck/render/sidebar.rb, line 35 def render_alternate_class_names(names) return if names.length == 0 return [ "<h4>Alternate names</h4>", names.map {|name| "<div class='alternate-class-name'>#{name}</div>" }, ] end
render_class_tree(classes, i=0)
click to toggle source
# File lib/jsduck/render/sidebar.rb, line 78 def render_class_tree(classes, i=0) return "" if classes.length <= i name = classes[i] return [ "<div class='subclass #{i == 0 ? 'first-child' : ''}'>", classes.length-1 == i ? "<strong>#{name}</strong>" : (name.exists? ? render_link(name) : name), render_class_tree(classes, i+1), "</div>", ] end
render_dependencies(names, title)
click to toggle source
# File lib/jsduck/render/sidebar.rb, line 44 def render_dependencies(names, title) return if !names || names.length == 0 return [ "<h4>#{title}</h4>", names.map {|name| "<div class='dependency'>#{name.exists? ? render_link(name) : name}</div>" }, ] end
render_files(files)
click to toggle source
# File lib/jsduck/render/sidebar.rb, line 53 def render_files(files) return if !@opts.source || files.length == 0 || files[0][:filename] == "" return [ "<h4>Files</h4>", files.map do |file| url = "source/" + file[:href] title = File.basename(file[:filename]) "<div class='dependency'><a href='#{url}' target='_blank'>#{title}</a></div>" end ] end
render_link(cls_name)
click to toggle source
# File lib/jsduck/render/sidebar.rb, line 90 def render_link(cls_name) "<a href='#!/api/#{cls_name}' rel='#{cls_name}' class='docClass'>#{cls_name}</a>" end
render_tree(cls)
click to toggle source
Take care of the special case where class has parent for which we have no docs. In that case the “extends” property exists but “superclasses” is empty. We still create the tree, but without links in it.
# File lib/jsduck/render/sidebar.rb, line 69 def render_tree(cls) return if !cls[:extends] || cls[:extends] == "Object" return [ "<h4>Hierarchy</h4>", render_class_tree(cls[:superclasses] + [cls[:name]]) ] end