require 'rubygems' require 'nokogiri' require 'rdiscount' require 'makers-mark' require 'erb' require File.join(File.dirname(__FILE__), 'slide') $SILENT = true class SlideDown attr_reader :classes def self.render(args) new(File.read(File.join(Dir.pwd, *args))).render end # Ensures that the first slide has proper !SLIDE declaration def initialize(raw) @raw = raw =~ /\A!SLIDE/ ? raw : "!SLIDE\n#{raw}" extract_classes! end def slides @slides ||= lines.map { |text| Slide.new(text, *@classes.shift) } end def read(path) File.read(File.dirname(__FILE__) + '/../templates/%s' % path) end def render template = File.read(File.dirname(__FILE__) + '/../templates/template.erb') ERB.new(template).result(binding) end private def lines @lines ||= @raw.split(/^!SLIDE/) \ .reject { |line| line.empty? } end def parse_snippets(slide) slide.gsub!(/@@@\s([\w\s]+)\s*$/, %(
))
slide.gsub!(/@@@\s*$/, %(
))
end
# These get added to the dom.
def stylesheets
Dir[Dir.pwd + '/*.css'].map { |path| File.read(path) }
end
def jabascripts
Dir[Dir.pwd + '/*.js'].map { |path| File.read(path) }
end
def extract_classes!
@classes = []
@raw.gsub!(/^!SLIDE\s*([a-z\s]*)$/) do |klass|
@classes << klass.to_s.chomp.gsub('!SLIDE', '')
"!SLIDE"
end ; @classes
end
end