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 = {}) ⇒ LinkRenderer

Returns a new instance of LinkRenderer.



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

def initialize(relations={}, opts={})
  @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_tpl] || '<a href="%c%#%m">%a</a>'
end

Instance Attribute Details

#relationsObject (readonly)

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



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

def relations
  @relations
end

Instance Method Details

#find_members(cls, query) ⇒ Object



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

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

#get_matching_member(cls, query) ⇒ Object



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

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.



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

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