Class: Presently::SlideRenderer

Inherits:
Object
  • Object
show all
Defined in:
lib/presently/slide_renderer.rb

Overview

Renders a single slide using its XRB template.

A plain Ruby object (not a Live view) that resolves templates via a Templates instance and produces HTML for a given Slide.

Instance Method Summary collapse

Constructor Details

#initialize(css_class: "slide", templates: Templates.for) ⇒ SlideRenderer

Initialize a new slide renderer.



20
21
22
23
# File 'lib/presently/slide_renderer.rb', line 20

def initialize(css_class: "slide", templates: Templates.for)
	@css_class = css_class
	@templates = templates
end

Instance Method Details

#render(builder, slide, extra_class: nil) ⇒ Object

Render a slide into the given builder.



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/presently/slide_renderer.rb', line 29

def render(builder, slide, extra_class: nil)
	return unless slide
	
	template = @templates.resolve(slide.template)
	scope = TemplateScope.new(slide)
	html = template.to_string(scope)
	
	classes = [@css_class, extra_class].compact.join(" ")
	builder.tag(:div, class: classes, data: {template: slide.template}) do
		builder.raw(html)
		if slide.script
			builder.tag(:script, type: "text/slide-script") do
				builder.raw(slide.script)
			end
		end
	end
end