Commit 99b491a7 authored by Rene Saarsoo's avatar Rene Saarsoo
Browse files

Make member signature rendering customizable.

Split the Render::Signature into two classes:

 - MethodSignature
 - PropertySignature

And add a third one for a shared method for generating the link:

 - SignatureUtil

All the builtin member classes now have #to_html method which
takes two parameters (differently from the normal #to_html that
only takes one).  This probably can't stay this exact way.
parent ada26258
Loading
Loading
Loading
Loading
+11 −4
Original line number Diff line number Diff line
require 'jsduck/render/signature'
require 'jsduck/render/tags'
require 'jsduck/render/sidebar'
require 'jsduck/tag_registry'

module JsDuck
  module Render
@@ -13,7 +13,6 @@ module JsDuck

      def render(cls)
        @cls = cls
        @signature = Render::Signature.new(cls)

        return [
          "<div>",
@@ -122,8 +121,8 @@ module JsDuck
                "<br/>",
                @opts.source ? "<a href='source/#{m[:files][0][:href]}' target='_blank' class='view-source'>view source</a>" : "",
              "</div>",
              # method params signature or property type signature
              @signature.render(m),
              render_member_signature(m),
              render_tag_signature(m),
            "</div>",
            # short and long descriptions
            "<div class='description'>",
@@ -138,6 +137,14 @@ module JsDuck
        ]
      end

      def render_member_signature(m)
        TagRegistry.get_by_name(m[:tagname]).to_html(m, @cls)
      end

      def render_tag_signature(m)
        Render::Tags.render_signature(m)
      end

    end

  end
+63 −0
Original line number Diff line number Diff line
require 'jsduck/render/tags'
require 'jsduck/tag_registry'
require 'jsduck/util/singleton'
require 'jsduck/render/signature_util'

module JsDuck
  module Render

    # Performs the rendering of member signatures.
    class Signature
      # Initializes the renderer for rendering members of the given
      # class.
      def initialize(cls)
        @cls = cls
      end
    # Performs the rendering of method signatures.
    class MethodSignature
      include JsDuck::Util::Singleton

      # Renders signature of the given member.
      def render(member)
        # Keep the code simpler by not passing around the member hash
      # Renders signature of the given method/event/scss_mixin.
      # The class config is needed for naming the constructor the same as class.
      def render(member, cls)
        @m = member
        @cls = cls

        return [
          render_new,
          render_link,
          render_type,
          render_tag_signature,
        ]
          render_params,
          render_return,
        ].join
      end

      private
@@ -32,15 +29,7 @@ module JsDuck
      end

      def render_link
        "<a href='#{render_url}' class='name #{render_expandable}'>#{render_name}</a>"
      end

      def render_url
        "#!/api/#{@m[:owner]}-#{@m[:id]}"
      end

      def render_expandable
        @m[:short_doc] ? "expandable" : "not-expandable"
        SignatureUtil::link(@m[:owner], @m[:id], render_name)
      end

      def render_name
@@ -51,22 +40,6 @@ module JsDuck
        @m[:tagname] == :method && @m[:name] == "constructor"
      end

      def render_type
        if like_property?
          render_property_type
        else
          render_params + render_return
        end
      end

      def like_property?
        TagRegistry.member_type_names(:property_like).include?(@m[:tagname])
      end

      def render_property_type
        "<span> : #{@m[:html_type]}</span>"
      end

      def render_params
        ps = @m[:params].map {|p| render_single_param(p) }.join(", ")
        "( <span class='pre'>#{ps}</span> )"
@@ -81,11 +54,7 @@ module JsDuck
      end

      def method_with_return?
        @m[:tagname] == :method && @m[:return] != nil
      end

      def render_tag_signature
        Render::Tags.render_signature(@m)
        @m[:return] != nil
      end

    end
+34 −0
Original line number Diff line number Diff line
require 'jsduck/util/singleton'
require 'jsduck/render/signature_util'

module JsDuck
  module Render

    # Performs the rendering of property signatures.
    class PropertySignature
      include JsDuck::Util::Singleton

      # Renders signature of the given property/cfg/scss_var.
      def render(member)
        @m = member

        return [
          render_link,
          render_type,
        ].join
      end

      private

      def render_link
        SignatureUtil::link(@m[:owner], @m[:id], @m[:name])
      end

      def render_type
        "<span> : #{@m[:html_type]}</span>"
      end

    end

  end
end
+14 −0
Original line number Diff line number Diff line
module JsDuck
  module Render

    # Helper method for rendering the link in method/property signature
    class SignatureUtil

      def self.link(class_name, member_id, text)
        "<a href='#!/api/#{class_name}-#{member_id}' class='name expandable'>#{text}</a>"
      end

    end

  end
end
+5 −0
Original line number Diff line number Diff line
require "jsduck/tag/tag"
require "jsduck/doc/subproperties"
require "jsduck/render/property_signature"

module JsDuck::Tag
  class Cfg < Tag
@@ -45,5 +46,9 @@ module JsDuck::Tag
      h[:properties] = nested[:properties]
      h[:name] = nested[:name]
    end

    def to_html(cfg, cls)
      JsDuck::Render::PropertySignature.render(cfg)
    end
  end
end
Loading