Commit 530d20f5 authored by Rene Saarsoo's avatar Rene Saarsoo
Browse files

Implement searching from alternateClassNames.

Changed search records structure around a bit:

- "type" field is now either "class" or "member".
- new "icon" field defines the icon to show.
- "id" is defined for each record and identified the search result.
  For example the id of alternateClassName record is the name of
  the original class.
- simplified the code a bit in the filterMembers method that
  performs the actual searching.

For alternateClassNames we show the subclass icon.
Should be good enough for now.
parent 1b737534
Loading
Loading
Loading
Loading
+22 −3
Original line number Diff line number Diff line
@@ -10,6 +10,11 @@ module JsDuck
      list = []
      docs.each do |cls|
        list << class_node(cls)

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

        [:members, :statics].each do |group|
          cls[group].each_key do |type|
            cls.members(type, group).each do |m|
@@ -30,7 +35,20 @@ module JsDuck
        :cls => cls.full_name,
        :member => cls.short_name,
        :type => :class,
        :aliases => cls[:aliases]
        :icon => :class,
        :aliases => cls[:aliases],
        :id => cls.full_name,
      }
    end

    # Creates structure representing one alternate classname
    def alt_node(name, cls)
      return {
        :cls => name,
        :member => Class.short_name(name),
        :type => :class,
        :icon => :subclass,
        :id => cls.full_name,
      }
    end

@@ -39,8 +57,9 @@ module JsDuck
      return {
        :cls => cls.full_name,
        :member => member[:name],
        :type => member[:tagname],
        :id => member[:id],
        :type => :member,
        :icon => member[:tagname],
        :id => cls.full_name + "-" + member[:id],
      }
    end

+6 −9
Original line number Diff line number Diff line
@@ -116,11 +116,7 @@ Ext.define('Docs.controller.Search', {

    // loads class/method corrseponding to the record
    loadRecord: function(record) {
        var name = record.get("cls");
        if (record.get("type") !== 'class') {
            name += '-' + record.get("id");
        }
        Docs.App.getController('Classes').loadClass("#!/api/"+name);
        Docs.App.getController('Classes').loadClass("#!/api/"+record.get("id"));
        this.getDropdown().hide();
    },

@@ -163,24 +159,25 @@ Ext.define('Docs.controller.Search', {
        var reMid = new RegExp(safeText, "i");

        Ext.Array.forEach(Docs.data.search, function(r) {
            var is_class = r.type === "class";
            // when search text has "." in it, search from the full name (e.g. "Ext.Component.focus")
            // Otherwise search from just the member name (e.g. "focus" or "Component")
            var name = hasDot ? r.cls + (r.type === "class" ? "" : "." + r.member) : r.member;
            var name = hasDot ? r.cls + (is_class ? "" : "." + r.member) : r.member;

            if (r.aliases && this.matchAlias(r.aliases, reFull)) {
                results[xFull].push(r);
            }
            else if (reFull.test(name)) {
                results[r.type === "class" ? clsFull : mFull].push(r);
                results[is_class ? clsFull : mFull].push(r);
            }
            else if (r.aliases && this.matchAlias(r.aliases, reBeg)) {
                results[xBeg].push(r);
            }
            else if (reBeg.test(name)) {
                results[r.type === "class" ? clsBeg : mBeg].push(r);
                results[is_class ? clsBeg : mBeg].push(r);
            }
            else if (reMid.test(name)) {
                results[r.type === "class" ? clsMid : mMid].push(r);
                results[is_class ? clsMid : mMid].push(r);
            }
        }, this);

+1 −1
Original line number Diff line number Diff line
@@ -4,7 +4,7 @@
Ext.define('Docs.store.Search', {
    extend: 'Ext.data.Store',

    fields: ['cls', 'member', 'type', 'aliases', 'id'],
    fields: ['cls', 'member', 'type', 'icon', 'aliases', 'id'],
    proxy: {
        type: 'memory',
        reader: {
+1 −1
Original line number Diff line number Diff line
@@ -43,7 +43,7 @@ Ext.define('Docs.view.search.Dropdown', {
        this.tpl = new Ext.XTemplate(
            '<tpl for=".">',
                '<div class="item">',
                    '<div class="icon icon-{type}"></div>',
                    '<div class="icon icon-{icon}"></div>',
                    '<div class="title">{member}</div>',
                    '<div class="class">{cls}</div>',
                '</div>',