Class: JsDuck::Inline::LinkRenderer

Inherits:
Object
  • Object
show all
Defined in:
lib/jsduck/inline/link_renderer.rb

Overview

Renders HTML link to class or member.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(relations = {}, opts = OpenStruct.new) ⇒ LinkRenderer

Returns a new instance of LinkRenderer.



13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/jsduck/inline/link_renderer.rb', line 13

def initialize(relations={}, opts=OpenStruct.new)
  @relations = relations

  # Template HTML that replaces {@link Class#member anchor text}.
  # Can contain placeholders:
  #
  # %c - full class name (e.g. "Ext.Panel")
  # %m - class member name prefixed with member type (e.g. "method-urlEncode")
  # %# - inserts "#" if member name present
  # %- - inserts "-" if member name present
  # %a - anchor text for link
  @tpl = opts.link || '<a href="%c%#%m">%a</a>'
end

Instance Attribute Details

#relationsObject (readonly)

Access to relations object, used by Inline::Link and Inline::AutoLink.



11
12
13
# File 'lib/jsduck/inline/link_renderer.rb', line 11

def relations
  @relations
end

Instance Method Details

#find_members(cls, query) ⇒ Object



63
64
65
# File 'lib/jsduck/inline/link_renderer.rb', line 63

def find_members(cls, query)
  @relations[cls] ? @relations[cls].find_members(query) : []
end

#get_matching_member(cls, query) ⇒ Object



53
54
55
56
57
58
59
60
61
# File 'lib/jsduck/inline/link_renderer.rb', line 53

def get_matching_member(cls, query)
  ms = find_members(cls, query)
  if ms.length > 1
    instance_ms = ms.find_all {|m| !m[:static] }
    instance_ms.length > 0 ? instance_ms[0] : ms.find_all {|m| m[:static] }[0]
  else
    ms[0]
  end
end

Generates HTML link to class or member applying the link template.



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/jsduck/inline/link_renderer.rb', line 29

def link(cls, member, anchor_text, type=nil, static=nil)
  # Use the canonical class name for link (not some alternateClassName)
  cls = @relations[cls][:name]
  # prepend type name to member name
  member = member && get_matching_member(cls, {:name => member, :tagname => type, :static => static})

  @tpl.gsub(/(%[\w#-])/) do
    case $1
    when '%c'
      cls
    when '%m'
      member ? member[:id] : ""
    when '%#'
      member ? "#" : ""
    when '%-'
      member ? "-" : ""
    when '%a'
      Util::HTML.escape(anchor_text||"")
    else
      $1
    end
  end
end