PresentlySourcePresentlySlideRenderer

class SlideRenderer

Renders a single slide using its XRB template.

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

Definitions

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

Initialize a new slide renderer.

Signature

parameter css_class String

The CSS class for the slide container element.

parameter templates Templates

The template resolver to use.

Implementation

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

def render(builder, slide, extra_class: nil)

Render a slide into the given builder.

Signature

parameter builder XRB::Builder

The HTML builder.

parameter slide Slide

The slide to render.

parameter extra_class String | Nil

An additional CSS class for the container.

Implementation

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