class Showoff::Presentation::Section

Attributes

name[R]
slides[R]

Public Class Methods

new(name, files) click to toggle source
# File lib/showoff/presentation/section.rb, line 4
def initialize(name, files)
  @name   = name
  @slides = []
  files.each { |filename| loadSlides(filename) }

  # merged output means that we just want to generate *everything*. This is used by internal,
  # methods such as content validation, where we want all content represented.
  # https://github.com/puppetlabs/showoff/blob/220d6eef4c5942eda625dd6edc5370c7490eced7/lib/showoff.rb#L429-L453
  unless Showoff::State.get(:merged)
    if Showoff::State.get(:supplemental)
      # if we're looking for supplemental material, only include the content we want
      @slides.select! {|slide| slide.classes.include? 'supplemental' }
      @slides.select! {|slide| slide.classes.include? Showoff::State.get(:supplemental) }
    else
      # otherwise just skip all supplemental material completely
      @slides.reject! {|slide| slide.classes.include? 'supplemental' }
    end

    case Showoff::State.get(:format)
    when 'web'
      @slides.reject! {|slide| slide.classes.include? 'toc' }
      @slides.reject! {|slide| slide.classes.include? 'printonly' }
    when 'print', 'supplemental'
      @slides.reject! {|slide| slide.classes.include? 'noprint' }
    end
  end

end

Public Instance Methods

loadSlides(filename) click to toggle source

Gets the raw file content from disk and partitions it by slide markers into content for each slide.

Returns an array of Slide objects

Source:

https://github.com/puppetlabs/showoff/blob/3f43754c84f97be4284bb34f9bc7c42175d45226/lib/showoff.rb#L396-L414
# File lib/showoff/presentation/section.rb, line 44
def loadSlides(filename)
  return unless filename.end_with? '.md'

  content = File.read(File.join(Showoff::Locale.contentPath, filename))

  # if there are no !SLIDE markers, then make every H1 define a new slide
  unless content =~ /^\<?!SLIDE/m
    content = content.gsub(/^# /m, "<!SLIDE>\n# ")
  end

  slides = content.split(/^<?!SLIDE\s?([^>]*)>?/)
  slides.shift # has an extra empty string because the regex matches the entire source string.

  # this is a counter keeping track of how many slides came from the file.
  # It kicks in at 2 because at this point, slides are a tuple of (options, content)
  seq = slides.size > 2 ? 1 : nil

  # iterate each slide tuple and add slide objects to the array
  slides.each_slice(2) do |data|
    options, content = data
    @slides << Showoff::Presentation::Slide.new(options, content, :section => @name, :name => filename, :seq => seq)
    seq +=1 if seq
  end

end
render() click to toggle source
# File lib/showoff/presentation/section.rb, line 33
def render
  @slides.map(&:render).join("\n")
end