Commit 7e9f917c authored by Rene Saarsoo's avatar Rene Saarsoo
Browse files

Define member sections rendering in Tag classes.

The titles and ordering of the sections is now defined within the Tag
class of each member type.  Ordering works similarly to the ordering
of #to_html method calls.

Titles are no more hardcoded in Render::Class.
parent 1268816c
Loading
Loading
Loading
Loading
+23 −26
Original line number Diff line number Diff line
@@ -39,28 +39,26 @@ module JsDuck
      end

      def render_all_sections
        sections = [
          {:type => :property, :title => "Properties"},
          {:type => :method, :title => "Methods"},
          {:type => :event, :title => "Events"},
          {:type => :css_var, :title => "CSS Variables"},
          {:type => :css_mixin, :title => "CSS Mixins"},
        ]

        render_configs_section + sections.map {|sec| render_section(sec) }
        TagRegistry.member_types.map do |member_type|
          render_section(member_type)
        end
      end

      def render_configs_section
        configs = @cls[:members][:cfg] + @cls[:statics][:cfg]
      def render_section(sec)
        # We have special logic for configs.
        return render_configs_section if sec[:name] == :cfg

        if configs.length > 0
          required, optional = configs.partition {|c| c[:required] }
        members = @cls[:members][sec[:name]]
        statics = @cls[:statics][sec[:name]]

        # Skip rendering empty sections
        if members.length > 0 || statics.length > 0
          return [
            "<div class='members-section'>",
              required.length == 0 ? "<div class='definedBy'>Defined By</div>" : "",
              "<h3 class='members-title icon-cfg'>Config options</h3>",
              render_subsection(required, "Required Config options"),
              render_subsection(optional, required.length > 0 ? "Optional Config options" : nil),
              statics.length == 0 ? "<div class='definedBy'>Defined By</div>" : "",
              "<h3 class='members-title icon-#{sec[:name]}'>#{sec[:title]}</h3>",
              render_subsection(members, statics.length > 0 ? "Instance #{sec[:title]}" : nil),
              render_subsection(statics, "Static #{sec[:title]}"),
            "</div>",
          ]
        else
@@ -68,18 +66,17 @@ module JsDuck
        end
      end

      def render_section(sec)
        members = @cls[:members][sec[:type]]
        statics = @cls[:statics][sec[:type]]
      def render_configs_section
        configs = @cls[:members][:cfg] + @cls[:statics][:cfg]

        # Skip rendering empty sections
        if members.length > 0 || statics.length > 0
        if configs.length > 0
          required, optional = configs.partition {|c| c[:required] }
          return [
            "<div class='members-section'>",
              statics.length == 0 ? "<div class='definedBy'>Defined By</div>" : "",
              "<h3 class='members-title icon-#{sec[:type]}'>#{sec[:title]}</h3>",
              render_subsection(members, statics.length > 0 ? "Instance #{sec[:title]}" : nil),
              render_subsection(statics, "Static #{sec[:title]}"),
              required.length == 0 ? "<div class='definedBy'>Defined By</div>" : "",
              "<h3 class='members-title icon-cfg'>Config options</h3>",
              render_subsection(required, "Required Config options"),
              render_subsection(optional, required.length > 0 ? "Optional Config options" : nil),
            "</div>",
          ]
        else
+6 −1
Original line number Diff line number Diff line
@@ -6,7 +6,12 @@ module JsDuck::Tag
    def initialize
      @pattern = "cfg"
      @key = :cfg
      @member_type = {:name => :cfg, :category => :property_like}
      @member_type = {
        :name => :cfg,
        :category => :property_like,
        :title => "Config options",
        :position => MEMBER_POS_CFG,
      }
    end

    # @cfg {Type} [name=default] (required) ...
+6 −1
Original line number Diff line number Diff line
@@ -6,7 +6,12 @@ module JsDuck::Tag
  # :css_mixin.
  class CssMixin < Tag
    def initialize
      @member_type = {:name => :css_mixin, :category => :method_like}
      @member_type = {
        :name => :css_mixin,
        :category => :method_like,
        :title => "CSS Mixins",
        :position => MEMBER_POS_CSS_MIXIN,
      }
    end
  end
end
+6 −1
Original line number Diff line number Diff line
@@ -5,7 +5,12 @@ module JsDuck::Tag
    def initialize
      @pattern = "var"
      @key = :css_var
      @member_type = {:name => :css_var, :category => :property_like}
      @member_type = {
        :name => :css_var,
        :category => :property_like,
        :title => "CSS Variables",
        :position => MEMBER_POS_CSS_VAR,
      }
    end

    # @var {Type} [name=default] ...
+6 −1
Original line number Diff line number Diff line
@@ -5,7 +5,12 @@ module JsDuck::Tag
    def initialize
      @pattern = "event"
      @key = :event
      @member_type = {:name => :event, :category => :method_like}
      @member_type = {
        :name => :event,
        :category => :method_like,
        :title => "Events",
        :position => MEMBER_POS_EVENT,
      }
    end

    # @event name ...
Loading