class Rabbit::HTML::Generator
Attributes
pdf_filename[RW]
source_filename[RW]
Public Class Methods
new(canvas, base_name, image_type, output_html, output_index_html, rss_base_uri)
click to toggle source
# File lib/rabbit/html/generator.rb, line 52 def initialize(canvas, base_name, image_type, output_html, output_index_html, rss_base_uri) @canvas = canvas @suffix = "html" @rss_info = [] @rss_filename = "index.rdf" rss_base_uri = rss_base_uri.chomp('/') + '/' if rss_base_uri @rss_base_uri = rss_base_uri @base_name = base_name @base_dir = File.dirname(@base_name) @image_type = image_type @output_html = output_html @output_index_html = output_index_html @pdf_filename = nil @source_filename = nil FileUtils.mkdir_p(Filename.new(@base_dir).encode) end
Public Instance Methods
index_href(slide_number)
click to toggle source
# File lib/rabbit/html/generator.rb, line 120 def index_href(slide_number) with_outputting_index(true) do href(slide_number) end end
index_image_title(slide_number)
click to toggle source
# File lib/rabbit/html/generator.rb, line 132 def index_image_title(slide_number) @canvas.with_index_mode(true) do with_outputting_index(true) do image_title(slide_number) end end end
number_of_places(num)
click to toggle source
# File lib/rabbit/html/generator.rb, line 98 def number_of_places(num) n = 1 target = num while target >= 10 target /= 10 n += 1 end n end
output_html?()
click to toggle source
# File lib/rabbit/html/generator.rb, line 112 def output_html? @output_html end
output_index_html?()
click to toggle source
# File lib/rabbit/html/generator.rb, line 108 def output_index_html? @output_index_html end
output_slide_html?()
click to toggle source
# File lib/rabbit/html/generator.rb, line 116 def output_slide_html? output_html? and !@index_mode end
outputting_index?()
click to toggle source
# File lib/rabbit/html/generator.rb, line 148 def outputting_index? @outputting_index end
save()
click to toggle source
# File lib/rabbit/html/generator.rb, line 70 def save save_environment do @outputting_index = false @canvas.each_slide_pixbuf do |slide, pixbuf, slide_number| message = _("Creating a image for the %dth page") % slide_number @canvas.logger.info(message) save_slide(slide, pixbuf, slide_number) true end if output_index_html? @canvas.with_index_mode(true) do @canvas.slides.each_with_index do |slide, slide_number| save_index(slide, slide_number) end end end unless save_rss @canvas.logger.warn(_("can't generate RSS")) end end end
save_pixbuf(pixbuf, optional=nil)
click to toggle source
# File lib/rabbit/html/generator.rb, line 92 def save_pixbuf(pixbuf, optional=nil) pixbuf.save(pixbuf_filename(@slide_number, optional), normalized_image_type) image_src(@slide_number, optional) end
slide_href(slide_number)
click to toggle source
# File lib/rabbit/html/generator.rb, line 126 def slide_href(slide_number) with_outputting_index(false) do href(slide_number) end end
slide_image_title(slide_number)
click to toggle source
# File lib/rabbit/html/generator.rb, line 140 def slide_image_title(slide_number) @canvas.with_index_mode(false) do with_outputting_index(false) do image_title(slide_number) end end end
with_outputting_index(index) { || ... }
click to toggle source
# File lib/rabbit/html/generator.rb, line 152 def with_outputting_index(index) _index = @outputting_index @outputting_index = index yield ensure @outputting_index = _index end
Private Instance Methods
a_link(slide_number, label, label_only)
click to toggle source
# File lib/rabbit/html/generator.rb, line 278 def a_link(slide_number, label, label_only) _href = href(slide_number) HTML.a_link("<a href=\"#{_href}\">", label, label_only) end
filename_format()
click to toggle source
# File lib/rabbit/html/generator.rb, line 229 def filename_format format = @base_name.dup format << "-index" if outputting_index? slide_size = outputting_index? ? @index_slide_size : @slide_size format << "-%0#{number_of_places(slide_size)}d%s.%s" end
first_href(slide_number=@slide_number)
click to toggle source
# File lib/rabbit/html/generator.rb, line 373 def first_href(slide_number=@slide_number) href(first_index(slide_number)) end
first_index(slide_number=@slide_number)
click to toggle source
# File lib/rabbit/html/generator.rb, line 321 def first_index(slide_number=@slide_number) 0 end
first_link(slide_number=@slide_number)
click to toggle source
# File lib/rabbit/html/generator.rb, line 337 def first_link(slide_number=@slide_number) a_link(first_index(slide_number), h("<<"), first_slide?(slide_number)) end
first_slide?(slide_number=@slide_number)
click to toggle source
# File lib/rabbit/html/generator.rb, line 313 def first_slide?(slide_number=@slide_number) slide_number.zero? end
href(slide_number)
click to toggle source
# File lib/rabbit/html/generator.rb, line 273 def href(slide_number) name = slide_filename(slide_number) u(File.basename(name)) end
image_filename(slide_number=@slide_number, optional=nil)
click to toggle source
# File lib/rabbit/html/generator.rb, line 250 def image_filename(slide_number=@slide_number, optional=nil) make_filename(slide_number, @image_type, optional) end
image_src(slide_number=@slide_number, optional=nil)
click to toggle source
# File lib/rabbit/html/generator.rb, line 431 def image_src(slide_number=@slide_number, optional=nil) u(File.basename(image_filename(slide_number, optional))) end
image_title(slide_number=@slide_number)
click to toggle source
# File lib/rabbit/html/generator.rb, line 291 def image_title(slide_number=@slide_number) title = h(slide_title(slide_number)) title << "(#{slide_number}/#{@canvas.slide_size - 1})" title end
last_href(slide_number=@slide_number)
click to toggle source
# File lib/rabbit/html/generator.rb, line 385 def last_href(slide_number=@slide_number) href(last_index(slide_number)) end
last_index(slide_number=@slide_number)
click to toggle source
# File lib/rabbit/html/generator.rb, line 333 def last_index(slide_number=@slide_number) @canvas.slide_size - 1 end
last_link(slide_number=@slide_number)
click to toggle source
# File lib/rabbit/html/generator.rb, line 352 def last_link(slide_number=@slide_number) a_link(last_index(slide_number), h(">>"), last_slide?(slide_number)) end
last_slide?(slide_number=@slide_number)
click to toggle source
# File lib/rabbit/html/generator.rb, line 317 def last_slide?(slide_number=@slide_number) @canvas.slide_size.zero? or slide_number == @canvas.slide_size - 1 end
make_filename(slide_number, suffix, optional=nil)
click to toggle source
# File lib/rabbit/html/generator.rb, line 236 def make_filename(slide_number, suffix, optional=nil) optional = "-#{optional}" if optional name = filename_format % [slide_number, optional || '', suffix] Filename.new(name).encode end
make_rss()
click to toggle source
# File lib/rabbit/html/generator.rb, line 447 def make_rss RSS::Maker.make('1.0') do |maker| now = Time.now title_slide_info = @rss_info.first filename, title, text, html = title_slide_info maker.channel.about = rss_uri maker.channel.title = title maker.channel.description = text maker.channel.link = @rss_base_uri maker.channel.date = now @rss_info.each_with_index do |info, i| filename, title, text, html = info item = maker.items.new_item item.link = "#{@rss_base_uri}#{File.basename(filename)}" item.title = title item.description = text item.content_encoded = normalize_html_reference(html, @rss_base_uri) item.date = now - i end end end
next_href(slide_number=@slide_number)
click to toggle source
# File lib/rabbit/html/generator.rb, line 381 def next_href(slide_number=@slide_number) href(next_index(slide_number)) end
next_index(slide_number=@slide_number)
click to toggle source
# File lib/rabbit/html/generator.rb, line 329 def next_index(slide_number=@slide_number) slide_number + 1 end
next_link(slide_number=@slide_number)
click to toggle source
# File lib/rabbit/html/generator.rb, line 347 def next_link(slide_number=@slide_number) a_link(next_index(slide_number), h(">"), last_slide?(slide_number)) end
normalize_html_reference(html, base_uri)
click to toggle source
# File lib/rabbit/html/generator.rb, line 470 def normalize_html_reference(html, base_uri) html.gsub(/(href|src)=(["'])((?:(?!\2)[^:])+)\2/) do "#{$1}=#{$2}#{base_uri}#{$3}#{$2}" end end
normalized_image_type()
click to toggle source
# File lib/rabbit/html/generator.rb, line 264 def normalized_image_type case @image_type when /jpg/i "jpeg" else @image_type.downcase end end
output_html(filename)
click to toggle source
# File lib/rabbit/html/generator.rb, line 258 def output_html(filename) File.open(filename, "w") do |f| f.print(to_html) end end
pixbuf_filename(slide_number=@slide_number, optional=nil)
click to toggle source
# File lib/rabbit/html/generator.rb, line 254 def pixbuf_filename(slide_number=@slide_number, optional=nil) make_filename(slide_number, @image_type, optional) end
previous_href(slide_number=@slide_number)
click to toggle source
# File lib/rabbit/html/generator.rb, line 377 def previous_href(slide_number=@slide_number) href(previous_index(slide_number)) end
previous_index(slide_number=@slide_number)
click to toggle source
# File lib/rabbit/html/generator.rb, line 325 def previous_index(slide_number=@slide_number) slide_number - 1 end
previous_link(slide_number=@slide_number)
click to toggle source
# File lib/rabbit/html/generator.rb, line 342 def previous_link(slide_number=@slide_number) a_link(previous_index(slide_number), h("<"), first_slide?(slide_number)) end
rss_available?()
click to toggle source
# File lib/rabbit/html/generator.rb, line 439 def rss_available? not @rss_base_uri.nil? end
rss_link()
click to toggle source
# File lib/rabbit/html/generator.rb, line 357 def rss_link if rss_available? attrs = { "rel" => "alternate", "type" => "application/rss+xml", "title" => "RSS", "href" => rss_uri, }.collect do |key, value| "#{h(key)}=\"#{h(value)}\"" end.join(" ") "<link #{attrs} />" else '' end end
rss_uri()
click to toggle source
# File lib/rabbit/html/generator.rb, line 443 def rss_uri "#{@rss_base_uri}#{@rss_filename}" end
save_environment() { || ... }
click to toggle source
# File lib/rabbit/html/generator.rb, line 161 def save_environment @index_mode = @canvas.index_mode? @slide_size = @canvas.slide_size @index_slide_size = 0 if output_index_html? @canvas.with_index_mode(true) do @index_slide_size = @canvas.slide_size end end yield ensure @index_mode = nil @slide_size = nil @index_slide_size = nil end
save_html(slide, slide_number) { || ... }
click to toggle source
# File lib/rabbit/html/generator.rb, line 177 def save_html(slide, slide_number) @slide = slide @slide_number = slide_number yield ensure @slide_number = nil @slide = nil end
save_index(slide, slide_number)
click to toggle source
# File lib/rabbit/html/generator.rb, line 200 def save_index(slide, slide_number) save_html(slide, slide_number) do with_outputting_index(true) do @slide_index_html = @slide.to_html(self) filename = slide_filename output_html(filename) if output_index_html? if rss_available? @rss_info << [filename, slide_title(slide_number), @slide.text, @slide_index_html] end @slide_index_html = nil end end end
save_rss()
click to toggle source
# File lib/rabbit/html/generator.rb, line 215 def save_rss return true unless rss_available? if Object.const_defined?(:RSS) rss = make_rss name = File.join(@base_dir, @rss_filename) File.open(Filename.new(name).encode, "w") do |f| f.print(rss.to_s) end true else false end end
save_slide(slide, pixbuf, slide_number)
click to toggle source
# File lib/rabbit/html/generator.rb, line 186 def save_slide(slide, pixbuf, slide_number) save_html(slide, slide_number) do with_outputting_index(false) do save_pixbuf(pixbuf) filename = slide_filename output_html(filename) if output_html? if rss_available? @rss_info << [filename, slide_title(slide_number), @slide.text, @slide.to_html(self)] end end end end
slide_content()
click to toggle source
# File lib/rabbit/html/generator.rb, line 283 def slide_content if outputting_index? @slide_index_html else "<div class=\"slide\">#{slide_image}</div>" end end
slide_filename(slide_number=@slide_number)
click to toggle source
# File lib/rabbit/html/generator.rb, line 242 def slide_filename(slide_number=@slide_number) if !outputting_index? and slide_number.zero? Filename.new(File.join(@base_dir, "index.#{@suffix}")).encode else make_filename(slide_number, @suffix) end end
slide_image(slide_number=@slide_number)
click to toggle source
# File lib/rabbit/html/generator.rb, line 297 def slide_image(slide_number=@slide_number) src = image_src(slide_number) img = "<img title=\"#{image_title(slide_number)}\" " + "src=\"#{src}\" alt=\"#{h(slide_text(slide_number))}\" />" if last_slide?(slide_number) img else href = next_href(slide_number) "<a href=\"#{href}\">#{img}</a>" end end
slide_text(slide_number=@slide_number)
click to toggle source
# File lib/rabbit/html/generator.rb, line 309 def slide_text(slide_number=@slide_number) @canvas.slide_text(slide_number) end
slide_title(slide_number=@slide_number)
click to toggle source
# File lib/rabbit/html/generator.rb, line 435 def slide_title(slide_number=@slide_number) Utils.unescape_title(@canvas.slide_title(slide_number)) end
toggle_mode_href()
click to toggle source
# File lib/rabbit/html/generator.rb, line 389 def toggle_mode_href with_outputting_index(!outputting_index?) do first_href end end