Class: Ea::Diagram::ElementRenderers::BaseRenderer

Inherits:
Object
  • Object
show all
Includes:
Util
Defined in:
lib/ea/diagram/element_renderers/base_renderer.rb

Overview

Base renderer for diagram elements

Direct Known Subclasses

ClassRenderer, ConnectorRenderer, PackageRenderer

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Util

#parse_ea_geometry, #parse_geometry_offsets, #style_to_css

Constructor Details

#initialize(element, style_resolver) ⇒ BaseRenderer

Returns a new instance of BaseRenderer.



12
13
14
15
# File 'lib/ea/diagram/element_renderers/base_renderer.rb', line 12

def initialize(element, style_resolver)
  @element = element
  @style_resolver = style_resolver
end

Instance Attribute Details

#elementObject (readonly)

Returns the value of attribute element.



10
11
12
# File 'lib/ea/diagram/element_renderers/base_renderer.rb', line 10

def element
  @element
end

#style_resolverObject (readonly)

Returns the value of attribute style_resolver.



10
11
12
# File 'lib/ea/diagram/element_renderers/base_renderer.rb', line 10

def style_resolver
  @style_resolver
end

Instance Method Details

#escape_text(text) ⇒ Object



64
65
66
67
68
69
70
71
72
73
# File 'lib/ea/diagram/element_renderers/base_renderer.rb', line 64

def escape_text(text)
  return "" unless text

  text.to_s
    .gsub("&", "&")
    .gsub("<", "&lt;")
    .gsub(">", "&gt;")
    .gsub('"', "&quot;")
    .gsub("'", "&apos;")
end

#renderString

Render the element as SVG

Returns:

  • (String)

    SVG content for the element



19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/ea/diagram/element_renderers/base_renderer.rb', line 19

def render
  style = style_resolver.resolve_element_style(element)

  <<~SVG
    <g class="lutaml-diagram-element lutaml-diagram-#{element[:type]}"
       data-element-id="#{element[:id]}"
       data-element-type="#{element[:type]}">
      #{render_shape(style)}
      #{render_label(style)}
    </g>
  SVG
end

#render_label(style) ⇒ Object

rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/ea/diagram/element_renderers/base_renderer.rb', line 36

def render_label(style) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
  return "" unless element[:name]

  x = element[:x] || 0
  y = element[:y] || 0
  width = element[:width] || 120
  height = element[:height] || 80

  # Center the label
  text_x = x + (width / 2)
  # Slight vertical offset for better centering
  text_y = y + (height / 2) + 5

  <<~SVG
    <text x="#{text_x}"
          y="#{text_y}"
          text-anchor="middle"
          dominant-baseline="middle"
          font-family="#{style[:font_family]}"
          font-size="#{style[:font_size]}"
          font-weight="#{style[:font_weight] || 'normal'}"
          fill="#{style[:text_color] || '#000000'}"
          class="lutaml-diagram-label">
      #{escape_text(element[:name])}
    </text>
  SVG
end

#render_shape(_style) ⇒ Object



32
33
34
# File 'lib/ea/diagram/element_renderers/base_renderer.rb', line 32

def render_shape(_style)
  ""
end