Module: Archsight::Helpers::AnalysisRenderer

Included in:
Archsight::Helpers
Defined in:
lib/archsight/helpers/analysis_renderer.rb

Overview

AnalysisRenderer provides HTML rendering for analysis result sections

Class Method Summary collapse

Class Method Details

.escape_html(text) ⇒ Object

HTML escape helper



12
13
14
# File 'lib/archsight/helpers/analysis_renderer.rb', line 12

def escape_html(text)
  Rack::Utils.escape_html(text.to_s)
end

.render_analysis_section(section, markdown_renderer: nil) ⇒ Object

Render a single analysis section to HTML

Parameters:

  • section (Hash)

    Section data with :type and content

  • markdown_renderer (Proc, nil) (defaults to: nil)

    Optional proc to render markdown



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/archsight/helpers/analysis_renderer.rb', line 19

def render_analysis_section(section, markdown_renderer: nil)
  case section[:type]
  when :heading
    render_heading(section)
  when :text
    render_text(section, markdown_renderer)
  when :message
    render_message(section)
  when :table
    render_table(section)
  when :list
    render_list(section)
  when :code
    render_code(section)
  else
    ""
  end
end

.render_analysis_table(section) ⇒ Object

Render analysis table section to HTML



39
40
41
# File 'lib/archsight/helpers/analysis_renderer.rb', line 39

def render_analysis_table(section)
  render_table(section)
end

.render_code(section) ⇒ Object



77
78
79
80
# File 'lib/archsight/helpers/analysis_renderer.rb', line 77

def render_code(section)
  lang_class = section[:lang] ? " class=\"language-#{section[:lang]}\"" : ""
  %(<pre class="code"><code#{lang_class}>#{escape_html(section[:content])}</code></pre>)
end

.render_heading(section) ⇒ Object

Private rendering methods



45
46
47
# File 'lib/archsight/helpers/analysis_renderer.rb', line 45

def render_heading(section)
  %(<div class="analysis-heading level-#{section[:level]}">#{escape_html(section[:text])}</div>)
end

.render_list(section) ⇒ Object



72
73
74
75
# File 'lib/archsight/helpers/analysis_renderer.rb', line 72

def render_list(section)
  items = section[:items].map { |item| "<li>#{escape_html(item)}</li>" }.join
  %(<ul class="analysis-list">#{items}</ul>)
end

.render_message(section) ⇒ Object



54
55
56
57
58
59
60
61
# File 'lib/archsight/helpers/analysis_renderer.rb', line 54

def render_message(section)
  icon = case section[:level]
         when :error then "xmark-circle"
         when :warning then "warning-triangle"
         else "info-circle"
         end
  %(<div class="analysis-message message-#{section[:level]}"><i class="iconoir-#{icon}"></i> #{escape_html(section[:message])}</div>)
end

.render_table(section) ⇒ Object



63
64
65
66
67
68
69
70
# File 'lib/archsight/helpers/analysis_renderer.rb', line 63

def render_table(section)
  headers = section[:headers].map { |h| "<th>#{escape_html(h)}</th>" }.join
  rows = section[:rows].map do |row|
    cells = row.map { |cell| "<td>#{escape_html(cell.to_s)}</td>" }.join
    "<tr>#{cells}</tr>"
  end.join
  %(<div class="analysis-table-wrapper"><table><thead><tr>#{headers}</tr></thead><tbody>#{rows}</tbody></table></div>)
end

.render_text(section, markdown_renderer) ⇒ Object



49
50
51
52
# File 'lib/archsight/helpers/analysis_renderer.rb', line 49

def render_text(section, markdown_renderer)
  content = markdown_renderer ? markdown_renderer.call(section[:content]) : escape_html(section[:content])
  %(<div class="analysis-text">#{content}</div>)
end