class Showoff::Presentation::Slide

Attributes

background[R]
classes[R]
form[R]
id[R]
markdown[R]
name[R]
ref[R]
section[R]
section_title[R]
seq[R]
transition[R]

Public Class Methods

new(options, content, context={}) click to toggle source
# File lib/showoff/presentation/slide.rb, line 6
def initialize(options, content, context={})
  @markdown   = content
  @transition = 'none'
  @classes    = []
  setOptions!(options)
  setContext!(context)
end

Public Instance Methods

render() click to toggle source
# File lib/showoff/presentation/slide.rb, line 14
def render
  Showoff::State.increment(:slide_count)
  options = { :form => @form,
              :name => @name,
              :seq  => @seq,
            }

  content, notes = Showoff::Compiler.new(options).render(@markdown)

  # if a template file has been specified for this slide, load from disk and render it
  # @todo How many people are actually using these limited templates?!
  if tpl_file = Showoff::Config.get('template', @template)
    template = File.read(tpl_file)
    content  = template.gsub(/~~~CONTENT~~~/, content)
  end

  ERB.new(File.read(File.join(Showoff::GEMROOT, 'views','slide.erb')), nil, '-').result(binding)
end
setContext!(context) click to toggle source

currently a mishmash of passed in context and calculated valued extracted from classes

# File lib/showoff/presentation/slide.rb, line 77
def setContext!(context)
  @section = context[:section] || 'main'
  @name    = context[:name].chomp('.md')
  @seq     = context[:seq]

  #TODO: this should be in options
  # extract id from classes if set, or default to the HTML sanitized name
  @classes.delete_if { |x| x =~ /^#([\w-]+)/ && @id = $1 }
  @id ||= @name.dup.gsub(/[^-A-Za-z0-9_]/, '_')
  @id << seq.to_s if @seq

  # provide an href for the slide. If we've got multiple slides in this file, we'll have a sequence number
  # include that sequence number to index directly into that content
  @ref = @seq ? "#{@name}:#{@seq.to_s}" : @name

  #TODO: this should be in options
  # extract transition from classes, or default to 'none'
  @classes.delete_if { |x| x =~ /^transition=(.+)/ && @transition = $1 }

  #TODO: this should be in options
  # extract form id from classes, or default to nil
  @classes.delete_if { |x| x =~ /^form=(.+)/ && @form = $1 }

  # Extract a section title from subsection slides and add it to state so that it
  # can be carried forward to subsequent slides until a new section title is discovered.
  # @see
  #     https://github.com/puppetlabs/showoff/blob/3f43754c84f97be4284bb34f9bc7c42175d45226/lib/showoff.rb#L499-L508
  if @classes.include? 'subsection'
    matches = @markdown.match(/#+ *(.*?)#*$/)
    @section_title = matches[1] || @section
    Showoff::State.set(:section_title, @section_title)
  else
    @section_title = Showoff::State.get(:section_title) || @section
  end
end
setOptions!(options) click to toggle source

options are key=value elements within the [] brackets

# File lib/showoff/presentation/slide.rb, line 44
def setOptions!(options)
  return unless options
  return unless matches = options.match(/(\[(.*?)\])?(.*)/)

  if matches[2]
    matches[2].split(",").each do |element|
      key, val = element.split("=")
      case key
      when 'tpl', 'template'
        @template = val
      when 'bg', 'background'
        @background = val
      # For legacy reasons, the options below may also be specified in classes.
      # Currently that takes priority.
      # @todo: better define the difference between options and classes.
      when 'form'
        @form = val
      when 'id'
        @id = val
      when 'transition'
        @transition = val
      else
        Showoff::Logger.warn "Unknown slide option: #{key}=#{val}"
      end
    end
  end

  if matches[3]
    @classes = matches[3].split
  end
end
slideClasses() click to toggle source

This is a list of classes that we want applied only to content, and not to the slide, typically so that overly aggressive selectors don’t match more than they should.

@see

https://github.com/puppetlabs/showoff/blob/3f43754c84f97be4284bb34f9bc7c42175d45226/lib/showoff.rb#L734-L737
# File lib/showoff/presentation/slide.rb, line 38
def slideClasses
  blacklist = ['bigtext']
  @classes.reject { |klass| blacklist.include? klass }
end