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