class Octopress::Tags::CaptionedImageTag::Tag

Public Class Methods

new(tag_name, markup, tokens) click to toggle source

most of this class is copied from github.com/octopress/video-tag/blob/master/lib/octopress-video-tag.rb

Calls superclass method
# File lib/octo-captioned-image.rb, line 13
def initialize(tag_name, markup, tokens)
  @markup = markup
  super
end

Public Instance Methods

extract_caption(markup) click to toggle source
# File lib/octo-captioned-image.rb, line 54
def extract_caption(markup)
  # the markup other methods use to find params has the caption removed to avoid parsing issues
  caption, remaining_markup = CaptionExtractor.extract(markup)
  return caption, remaining_markup
end
parse_options(option_string) click to toggle source
# File lib/octo-captioned-image.rb, line 60
def parse_options(option_string)
  CaptionOptionsParser.new(option_string)
end
process_liquid(context) click to toggle source
# File lib/octo-captioned-image.rb, line 64
def process_liquid(context)
  Liquid::Template.parse(@markup).render!(context.environments.first)
end
render(context) click to toggle source
# File lib/octo-captioned-image.rb, line 18
def render(context)
  @markup = process_liquid(context) # what is this doing? should not replace markup

  caption, remaining_markup = extract_caption(@markup)
  options = parse_options(remaining_markup)

  figure_classes = ["captioned-image#{'-chrome' if options.chrome}"]
  figure_classes << "float-#{options.float}" if options.float
  figure_classes << "clear-#{options.clear}" if options.clear
  figure_class_decl = " class=\"#{figure_classes.join(' ')}\""

  img_attributes = ""
  img_attributes += "width=\"#{options.width}\" " if options.width
  img_attributes += "height=\"#{options.height}\" " if options.height

  figcaption_class = "caption-#{options.position}"
  figcaption_class += "-chrome" if options.chrome

  fig_caption = ["  <figcaption class=\"#{figcaption_class}\">"]
  fig_caption << "    #{caption}"
  fig_caption << "  </figcaption>"

  image = options.source.map do |src| 
    # should this caption be escaped if it contains html or quotes?
    ["  <img src=\"#{src}\" alt=\"#{caption}\" #{img_attributes}/>"]
  end

  figure_content = options.position == "top" ? fig_caption + image : image + fig_caption

  figure = ["<figure#{figure_class_decl}>"]
  figure += figure_content
  figure << "</figure>"

  return figure.join("\n")
end