class JsDuck::Web::Search

Creates list of all members in all classes that is used by the searching feature in UI.

Public Instance Methods

create(classes, assets, opts) click to toggle source

Given list of classes and other assets, returns an array of hashes describing the search data.

# File lib/jsduck/web/search.rb, line 13
def create(classes, assets, opts)
  list = []

  classes.each do |cls|
    list << class_node(cls)

    cls[:alternateClassNames].each do |name|
      list << alt_node(name, cls)
    end

    cls[:aliases].each_pair do |key, items|
      items.each do |name|
        list << alias_node(key, name, cls)
      end
    end

    # add all local members, but skip constructors
    cls[:members].each do |m|
      list << member_node(m, cls) unless m[:hide] || constructor?(m)
    end
  end

  # Don't include guides data when separate guides search engine is provided
  assets.guides.each_item {|g| list << guide_node(g) } unless opts.search[:url]

  assets.videos.each_item {|v| list << video_node(v) }

  assets.examples.each_item {|e| list << example_node(e) }

  list
end

Private Instance Methods

alias_display_name(key) click to toggle source

Some alias types are shown differently. e.g. instead of “widget:” we show “xtype:”

# File lib/jsduck/web/search.rb, line 141
def alias_display_name(key)
  titles = {
    "widget" => "xtype",
    "plugin" => "ptype",
    "feature" => "ftype",
  }
  titles[key] || key
end
alias_node(key, name, cls) click to toggle source
# File lib/jsduck/web/search.rb, line 51
def alias_node(key, name, cls)
  return {
    :name => name,
    :fullName => alias_display_name(key)+": "+name,
    :icon => Web::ClassIcons.get(cls) + "-redirect",
    :url => "#!/api/" + cls[:name],
    :meta => combine_meta(cls),
    :sort => 0,
  }
end
alt_node(name, cls) click to toggle source
# File lib/jsduck/web/search.rb, line 73
def alt_node(name, cls)
  return {
    :name => ClassName.short(name),
    :fullName => name,
    :type => :class,
    :icon => Web::ClassIcons.get(cls) + "-redirect",
    :url => "#!/api/" + cls[:name],
    :meta => combine_meta(cls),
    :sort => 2,
  }
end
class_node(cls) click to toggle source
# File lib/jsduck/web/search.rb, line 62
def class_node(cls)
  return {
    :name => ClassName.short(cls[:name]),
    :fullName => cls[:name],
    :icon => Web::ClassIcons.get(cls),
    :url => "#!/api/" + cls[:name],
    :meta => combine_meta(cls),
    :sort => 1,
  }
end
combine_meta(hash) click to toggle source

Add data for builtin tags with signatures to :meta field.

# File lib/jsduck/web/search.rb, line 130
def combine_meta(hash)
  meta = {}
  TagRegistry.signatures.each do |s|
    name = s[:tagname]
    meta[name] = hash[name] if hash[name]
  end
  meta
end
constructor?(m) click to toggle source
# File lib/jsduck/web/search.rb, line 47
def constructor?(m)
  m[:tagname] == :method && m[:name] == "constructor"
end
example_node(example) click to toggle source
# File lib/jsduck/web/search.rb, line 118
def example_node(example)
  return {
    :name => example["title"],
    :fullName => "example: " + example["title"],
    :icon => "icon-example",
    :url => "#!/example/" + example["name"],
    :meta => {},
    :sort => 4,
  }
end
guide_node(guide) click to toggle source
# File lib/jsduck/web/search.rb, line 96
def guide_node(guide)
  return {
    :name => guide["title"],
    :fullName => "guide: " + guide["title"],
    :icon => "icon-guide",
    :url => "#!/guide/" + guide["name"],
    :meta => {},
    :sort => 4,
  }
end
member_node(member, cls) click to toggle source
# File lib/jsduck/web/search.rb, line 85
def member_node(member, cls)
  return {
    :name => member[:name],
    :fullName => cls[:name] + "." + member[:name],
    :icon => "icon-" + member[:tagname].to_s,
    :url => "#!/api/" + cls[:name] + "-" + member[:id],
    :meta => combine_meta(member),
    :sort => 3,
  }
end
video_node(video) click to toggle source
# File lib/jsduck/web/search.rb, line 107
def video_node(video)
  return {
    :name => video["title"],
    :fullName => "video: " + video["title"],
    :icon => "icon-video",
    :url => "#!/video/" + video["name"],
    :meta => {},
    :sort => 4,
  }
end