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_classString The CSS class for the slide container element.
-
parameter
templatesTemplates 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
builderXRB::Builder The HTML builder.
-
parameter
slideSlide The slide to render.
-
parameter
extra_classString | 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