Sha256: 1c2ad482200b51a4e6951d49e650c939b1f58a7c9667bd9b1b8ccc8dede0c1c8

Contents?: true

Size: 1.75 KB

Versions: 21

Compression:

Stored size: 1.75 KB

Contents

require "jsduck/meta_tag"
require "jsduck/logger"

module JsDuck::Tag
  # Implementation of @aside tag.
  class Aside < JsDuck::MetaTag
    def initialize
      @name = "aside"
      @key = :aside
      @position = :top
      @allowed_types = {
        :guide => true,
        :video => true,
        :example => true,
      }
    end

    def to_value(asides)
      asides.map do |line|
        if line =~ /\A(\w+) +([^ ].*)\Z/
          type = $1.to_sym
          name = $2.strip
          if @allowed_types[type]
            {:type => type, :name => name}
          else
            warn("Unknown @aside type: #{type}")
          end
        else
          warn("Bad syntax: @aside #{line}")
        end
      end.compact
    end

    def to_html(asides)
      asides.map do |aside|
        type = aside[:type]
        name = aside[:name]
        assets_group = get_assets_group(type)
        asset = assets_group[name]
        if asset
          url = "#!/#{type}/#{name}"
          heading = type.to_s.capitalize
          title = asset["title"]
          icon_url = assets_group.icon_url(asset)
          <<-EOHTML
            <div class='aside #{type}'>
              <h4>#{heading}</h4>
              <p><a href='#{url}'><img src='#{icon_url}' alt=''> #{title}</a></p>
            </div>
          EOHTML
        else
          warn("Unknown @aside name: #{type} #{name}")
        end
      end.compact
    end

    def get_assets_group(type)
      case type
      when :guide then @assets.guides
      when :video then @assets.videos
      when :example then @assets.examples
      else {}
      end
    end

    def warn(msg)
      ctx = @context ? @context[:files][0] : {}
      JsDuck::Logger.instance.warn(:aside, msg, ctx[:filename], ctx[:linenr])
      nil
    end

  end
end

Version data entries

21 entries across 21 versions & 1 rubygems

Version Path
jsduck-4.0.1 lib/jsduck/tag/aside.rb
jsduck-4.0.0 lib/jsduck/tag/aside.rb
jsduck-3.11.2 lib/jsduck/tag/aside.rb
jsduck-4.0.beta2 lib/jsduck/tag/aside.rb
jsduck-3.11.1 lib/jsduck/tag/aside.rb
jsduck-4.0.beta lib/jsduck/tag/aside.rb
jsduck-3.11.0 lib/jsduck/tag/aside.rb
jsduck-3.10.5 lib/jsduck/tag/aside.rb
jsduck-3.10.4 lib/jsduck/tag/aside.rb
jsduck-3.10.3 lib/jsduck/tag/aside.rb
jsduck-3.10.2 lib/jsduck/tag/aside.rb
jsduck-3.10.1 lib/jsduck/tag/aside.rb
jsduck-3.10.0 lib/jsduck/tag/aside.rb
jsduck-3.9.1 lib/jsduck/tag/aside.rb
jsduck-3.9.0 lib/jsduck/tag/aside.rb
jsduck-3.9.0.pre lib/jsduck/tag/aside.rb
jsduck-3.8.4 lib/jsduck/tag/aside.rb
jsduck-3.8.3 lib/jsduck/tag/aside.rb
jsduck-3.8.2 lib/jsduck/tag/aside.rb
jsduck-3.8.1 lib/jsduck/tag/aside.rb