Class: Journeybook::PageRenderer

Inherits:
Object
  • Object
show all
Defined in:
app/services/journeybook/page_renderer.rb

Instance Method Summary collapse

Constructor Details

#initialize(parser: ComponentParser.new, markdown_renderer: MarkdownRenderer.new, component_renderer: ComponentRenderer.new, sanitizer: HtmlSanitizer.new) ⇒ PageRenderer

Returns a new instance of PageRenderer.



3
4
5
6
7
8
9
10
11
12
13
# File 'app/services/journeybook/page_renderer.rb', line 3

def initialize(
  parser: ComponentParser.new,
  markdown_renderer: MarkdownRenderer.new,
  component_renderer: ComponentRenderer.new,
  sanitizer: HtmlSanitizer.new
)
  @parser = parser
  @markdown_renderer = markdown_renderer
  @component_renderer = component_renderer
  @sanitizer = sanitizer
end

Instance Method Details

#render(page_or_markdown, form_authenticity_token: nil, component_index: nil, component_anchors: false) ⇒ String

Parameters:

Returns:

  • (String)


17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'app/services/journeybook/page_renderer.rb', line 17

def render(page_or_markdown, form_authenticity_token: nil, component_index: nil, component_anchors: false)
  @component_anchors = component_anchors
  markdown = page_or_markdown.respond_to?(:markdown) ? page_or_markdown.markdown : page_or_markdown
  extracted_markdown, components = @parser.extract(markdown)
    return render_component(components[component_index], form_authenticity_token, page_or_markdown) if component_index

    page = page_or_markdown if page_or_markdown.respond_to?(:markdown)
    html = @markdown_renderer.render(extracted_markdown)

  components.each_with_index do |component, index|
    html = html.gsub(%r{<p>\s*#{component.token}\s*</p>}, component.token)
      html = html.gsub(component.token, "#{component_anchor(index)}#{@component_renderer.render(component, page:)}")
  end

  @sanitizer.sanitize(inject_form_token(html, form_authenticity_token))
end