drawio_dsl 0.5.6 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (215) hide show
  1. checksums.yaml +4 -4
  2. data/.builders/.data/shapes.json +44 -26
  3. data/.builders/.templates/basic/dom_builder_shapes.rb +2 -2
  4. data/.builders/.templates/basic/drawio_extensions.rb +57 -0
  5. data/.builders/.templates/basic/drawio_shapes.rb +2 -2
  6. data/.builders/.templates/basic/schema_require.rb +3 -1
  7. data/.builders/blueprint/shapes.rb +9 -5
  8. data/.builders/generators/10-transform-drawio-js.rb +195 -0
  9. data/.builders/generators/20-drawio-extensions.rb +41 -0
  10. data/.builders/generators/project_plans/drawio_dsl.rb +11 -5
  11. data/.builders/generators/project_plans/k_doc.rb +39 -0
  12. data/.builders/generators/sample_diagrams/15-grid-direction.rb +0 -8
  13. data/.builders/generators/sample_diagrams/20-styles.rb +1 -2
  14. data/.builders/generators/sample_diagrams/30-html-shapes.rb +68 -0
  15. data/.rubocop.yml +4 -1
  16. data/CHANGELOG.md +27 -0
  17. data/docs/extensions/analyti_cs.svg +3 -0
  18. data/docs/extensions/android_inputs.svg +3 -0
  19. data/docs/extensions/app_services.svg +3 -0
  20. data/docs/extensions/appliances.svg +3 -0
  21. data/docs/extensions/arrows.svg +3 -0
  22. data/docs/extensions/aws_17___analyti_cs.svg +3 -0
  23. data/docs/extensions/aws_17___application_services.svg +3 -0
  24. data/docs/extensions/aws_17___artificial_intelligence.svg +3 -0
  25. data/docs/extensions/aws_17___business_productivity.svg +3 -0
  26. data/docs/extensions/aws_17___compute.svg +3 -0
  27. data/docs/extensions/aws_17___contact_center.svg +3 -0
  28. data/docs/extensions/aws_17___containers.svg +3 -0
  29. data/docs/extensions/aws_17___database.svg +3 -0
  30. data/docs/extensions/aws_17___desktop_app_straning.svg +3 -0
  31. data/docs/extensions/aws_17___developer_tools.svg +3 -0
  32. data/docs/extensions/aws_17___game_development.svg +3 -0
  33. data/docs/extensions/aws_17___general.svg +3 -0
  34. data/docs/extensions/aws_17___io_t.svg +3 -0
  35. data/docs/extensions/aws_17___management.svg +3 -0
  36. data/docs/extensions/aws_17___messaging.svg +3 -0
  37. data/docs/extensions/aws_17___migration.svg +3 -0
  38. data/docs/extensions/aws_17___mobile_services.svg +3 -0
  39. data/docs/extensions/aws_17___networking_content_delivery.svg +3 -0
  40. data/docs/extensions/aws_17___on_demand_workforce.svg +3 -0
  41. data/docs/extensions/aws_17___sdks.svg +3 -0
  42. data/docs/extensions/aws_17___serurity_identity_and_compliance.svg +3 -0
  43. data/docs/extensions/aws_17___storage.svg +3 -0
  44. data/docs/extensions/aws_19___application_integration.svg +3 -0
  45. data/docs/extensions/aws_19___ar_vr.svg +3 -0
  46. data/docs/extensions/aws_19___blockchain.svg +3 -0
  47. data/docs/extensions/aws_19___business_applications.svg +3 -0
  48. data/docs/extensions/aws_19___compute.svg +3 -0
  49. data/docs/extensions/aws_19___cost_management.svg +3 -0
  50. data/docs/extensions/aws_19___customer_engagement.svg +3 -0
  51. data/docs/extensions/aws_19___database.svg +3 -0
  52. data/docs/extensions/aws_19___desktop_app_streaming.svg +3 -0
  53. data/docs/extensions/aws_19___developer_tools.svg +3 -0
  54. data/docs/extensions/aws_19___ec2_instance_types.svg +3 -0
  55. data/docs/extensions/aws_19___game_tech.svg +3 -0
  56. data/docs/extensions/aws_19___general.svg +3 -0
  57. data/docs/extensions/aws_19___groups_note_repeated_below_without_v2.svg +3 -0
  58. data/docs/extensions/aws_19___internet_of_things.svg +3 -0
  59. data/docs/extensions/aws_19___machine_learning.svg +3 -0
  60. data/docs/extensions/aws_19___management_governance.svg +3 -0
  61. data/docs/extensions/aws_19___media_services.svg +3 -0
  62. data/docs/extensions/aws_19___migration_transfer.svg +3 -0
  63. data/docs/extensions/aws_19___mobile.svg +3 -0
  64. data/docs/extensions/aws_19___networking_content_delivery.svg +3 -0
  65. data/docs/extensions/aws_19___roboti_cs.svg +3 -0
  66. data/docs/extensions/aws_19___satellite.svg +3 -0
  67. data/docs/extensions/aws_19___security_identity_compliance.svg +3 -0
  68. data/docs/extensions/aws_19___storage.svg +3 -0
  69. data/docs/extensions/aws_19_analyti_cs.svg +3 -0
  70. data/docs/extensions/aws_general.svg +3 -0
  71. data/docs/extensions/azure2019.svg +3 -0
  72. data/docs/extensions/azure_cloud.svg +3 -0
  73. data/docs/extensions/azure_enterprise.svg +3 -0
  74. data/docs/extensions/azure_vms.svg +3 -0
  75. data/docs/extensions/basic_network_shapes.svg +3 -0
  76. data/docs/extensions/beds.svg +3 -0
  77. data/docs/extensions/bpmn_2_0.svg +3 -0
  78. data/docs/extensions/cisco_basic.svg +3 -0
  79. data/docs/extensions/cisco_extended.svg +3 -0
  80. data/docs/extensions/common_elements.svg +3 -0
  81. data/docs/extensions/computers_and_monitors.svg +3 -0
  82. data/docs/extensions/containers.svg +3 -0
  83. data/docs/extensions/content_delivery.svg +3 -0
  84. data/docs/extensions/couches.svg +3 -0
  85. data/docs/extensions/cubicle_walls.svg +3 -0
  86. data/docs/extensions/data_flow.svg +3 -0
  87. data/docs/extensions/database.svg +3 -0
  88. data/docs/extensions/deployment.svg +3 -0
  89. data/docs/extensions/desks.svg +3 -0
  90. data/docs/extensions/detailed_network_diagrams.svg +3 -0
  91. data/docs/extensions/developer_tools.svg +3 -0
  92. data/docs/extensions/doors_windows.svg +3 -0
  93. data/docs/extensions/ec2.svg +3 -0
  94. data/docs/extensions/electrical.svg +3 -0
  95. data/docs/extensions/electroni_cs.svg +3 -0
  96. data/docs/extensions/enterprise_application.svg +3 -0
  97. data/docs/extensions/equipment.svg +3 -0
  98. data/docs/extensions/ext_shapes.svg +3 -0
  99. data/docs/extensions/flowchart.svg +3 -0
  100. data/docs/extensions/geometric_shapes.svg +3 -0
  101. data/docs/extensions/google_cloud_platform.svg +3 -0
  102. data/docs/extensions/heat_exchangers.svg +3 -0
  103. data/docs/extensions/i_os_6_i_pad_controls.svg +3 -0
  104. data/docs/extensions/i_os_6_i_pad_elements.svg +3 -0
  105. data/docs/extensions/i_os_6_i_pad_icons.svg +3 -0
  106. data/docs/extensions/i_os_6_i_phone_controls.svg +3 -0
  107. data/docs/extensions/i_os_6_i_phone_elements.svg +3 -0
  108. data/docs/extensions/i_os_6_i_phone_icons.svg +3 -0
  109. data/docs/extensions/i_os_devices.svg +3 -0
  110. data/docs/extensions/i_os_icons.svg +3 -0
  111. data/docs/extensions/i_os_mockups.svg +3 -0
  112. data/docs/extensions/i_os_ui_components.svg +3 -0
  113. data/docs/extensions/i_pad_elements.svg +3 -0
  114. data/docs/extensions/i_phone_elements.svg +3 -0
  115. data/docs/extensions/information.svg +3 -0
  116. data/docs/extensions/instruments.svg +3 -0
  117. data/docs/extensions/internet_of_things.svg +3 -0
  118. data/docs/extensions/kanban.svg +3 -0
  119. data/docs/extensions/kitchen.svg +3 -0
  120. data/docs/extensions/kubernetes_icons.svg +3 -0
  121. data/docs/extensions/logic_gates.svg +3 -0
  122. data/docs/extensions/materials.svg +3 -0
  123. data/docs/extensions/message_routing.svg +3 -0
  124. data/docs/extensions/message_transformation.svg +3 -0
  125. data/docs/extensions/messaging_channels.svg +3 -0
  126. data/docs/extensions/messaging_endpoints.svg +3 -0
  127. data/docs/extensions/messaging_systems.svg +3 -0
  128. data/docs/extensions/mind_map.svg +3 -0
  129. data/docs/extensions/misc.svg +3 -0
  130. data/docs/extensions/misc_floorplan.svg +3 -0
  131. data/docs/extensions/miscellaneous.svg +3 -0
  132. data/docs/extensions/mobile_services.svg +3 -0
  133. data/docs/extensions/network.svg +3 -0
  134. data/docs/extensions/networking.svg +3 -0
  135. data/docs/extensions/on_demand.svg +3 -0
  136. data/docs/extensions/piping.svg +3 -0
  137. data/docs/extensions/power_sources.svg +3 -0
  138. data/docs/extensions/processes.svg +3 -0
  139. data/docs/extensions/pumps.svg +3 -0
  140. data/docs/extensions/repeated_from_the_above.svg +3 -0
  141. data/docs/extensions/restroom.svg +3 -0
  142. data/docs/extensions/s3.svg +3 -0
  143. data/docs/extensions/sdks.svg +3 -0
  144. data/docs/extensions/security_identity.svg +3 -0
  145. data/docs/extensions/server_racks.svg +3 -0
  146. data/docs/extensions/shipments.svg +3 -0
  147. data/docs/extensions/site_map.svg +3 -0
  148. data/docs/extensions/stairs.svg +3 -0
  149. data/docs/extensions/standard.svg +3 -0
  150. data/docs/extensions/system_management.svg +3 -0
  151. data/docs/extensions/tables_chairs.svg +3 -0
  152. data/docs/extensions/technology.svg +3 -0
  153. data/docs/extensions/transistors.svg +3 -0
  154. data/docs/extensions/ui_containers.svg +3 -0
  155. data/docs/extensions/ui_input.svg +3 -0
  156. data/docs/extensions/ui_menus.svg +3 -0
  157. data/docs/extensions/ui_misc.svg +3 -0
  158. data/docs/extensions/ui_widgets.svg +3 -0
  159. data/docs/extensions/uml_class_diagram.svg +3 -0
  160. data/docs/extensions/uml_component.svg +3 -0
  161. data/docs/extensions/uml_entity_relationship.svg +3 -0
  162. data/docs/extensions/uml_sequence.svg +3 -0
  163. data/docs/extensions/uml_state_activity.svg +3 -0
  164. data/docs/extensions/uml_use_case.svg +3 -0
  165. data/docs/extensions/value_stream_mapping.svg +3 -0
  166. data/docs/extensions/valves.svg +3 -0
  167. data/docs/extensions/venn_gradient.svg +3 -0
  168. data/docs/extensions/venn_plain.svg +3 -0
  169. data/docs/extensions/vessels.svg +3 -0
  170. data/docs/extensions.md +614 -0
  171. data/docs/project_done.svg +1 -1
  172. data/docs/project_in_progress.svg +1 -1
  173. data/docs/project_todo.svg +1 -1
  174. data/docs/samples/grid-direction-horizontal.svg +1 -1
  175. data/docs/samples/grid-direction-vertical.svg +1 -1
  176. data/docs/samples/samples.svg +1 -1
  177. data/docs/samples/styles-glass.svg +1 -1
  178. data/docs/samples/styles-plain.svg +1 -1
  179. data/docs/samples/styles-rounded.svg +1 -1
  180. data/docs/samples/styles-shadow.svg +1 -1
  181. data/docs/samples/styles-sketch.svg +1 -1
  182. data/docs/samples/themes-random.svg +1 -1
  183. data/lib/drawio_dsl/configuration_shapes.rb +12 -8
  184. data/lib/drawio_dsl/dom_builder.rb +23 -8
  185. data/lib/drawio_dsl/dom_builder_shapes.rb +92 -82
  186. data/lib/drawio_dsl/drawio_extensions.json +14024 -0
  187. data/lib/drawio_dsl/drawio_extensions.rb +4599 -0
  188. data/lib/drawio_dsl/drawio_extensions_active.rb +32 -0
  189. data/lib/drawio_dsl/drawio_shapes.rb +108 -96
  190. data/lib/drawio_dsl/formatters/_.rb +8 -0
  191. data/lib/drawio_dsl/formatters/base_formatter.rb +24 -0
  192. data/lib/drawio_dsl/formatters/factory.rb +32 -0
  193. data/lib/drawio_dsl/formatters/html_builder.rb +84 -0
  194. data/lib/drawio_dsl/formatters/interface_formatter.rb +53 -0
  195. data/lib/drawio_dsl/formatters/klass_formatter.rb +52 -0
  196. data/lib/drawio_dsl/formatters/style_builder.rb +63 -0
  197. data/lib/drawio_dsl/layout_engine.rb +17 -7
  198. data/lib/drawio_dsl/schema/_.rb +8 -4
  199. data/lib/drawio_dsl/schema/diagram.rb +1 -1
  200. data/lib/drawio_dsl/schema/layouts/flex_layout.rb +1 -2
  201. data/lib/drawio_dsl/schema/layouts/grid_layout.rb +1 -2
  202. data/lib/drawio_dsl/schema/layouts/layout.rb +0 -3
  203. data/lib/drawio_dsl/schema/node.rb +21 -2
  204. data/lib/drawio_dsl/schema/node_list.rb +20 -1
  205. data/lib/drawio_dsl/schema/page.rb +14 -3
  206. data/lib/drawio_dsl/schema/shapes/interface.rb +9 -0
  207. data/lib/drawio_dsl/schema/shapes/klass.rb +9 -0
  208. data/lib/drawio_dsl/schema/shapes/shape.rb +14 -5
  209. data/lib/drawio_dsl/schema/virtual/anchor.rb +26 -0
  210. data/lib/drawio_dsl/version.rb +1 -1
  211. data/lib/drawio_dsl/xml_builder.rb +4 -8
  212. data/lib/drawio_dsl.rb +3 -0
  213. data/package-lock.json +2 -2
  214. data/package.json +1 -1
  215. metadata +174 -2
@@ -23,13 +23,23 @@ module DrawioDsl
23
23
  page.position_y = page.margin_top
24
24
 
25
25
  page.nodes.all.each do |node|
26
- case node.classification
27
- when :layout_rule
28
- @current_layout = node
29
- when :shape
30
- current_layout&.position_shape(node)
31
- end
32
- # node.debug(format: :row)
26
+ traverse_node(node)
27
+ end
28
+ end
29
+
30
+ def traverse_node(node)
31
+ process_node(node)
32
+ node.nodes.all.each do |child|
33
+ traverse_node(child)
34
+ end
35
+ end
36
+
37
+ def process_node(node)
38
+ case node.classification
39
+ when :layout_rule
40
+ @current_layout = node
41
+ when :shape
42
+ current_layout&.position_shape(node)
33
43
  end
34
44
  end
35
45
  end
@@ -27,16 +27,18 @@ require_relative 'shapes/callout3'
27
27
  require_relative 'shapes/callout4'
28
28
  require_relative 'shapes/circle'
29
29
  require_relative 'shapes/cloud'
30
+ require_relative 'shapes/container'
31
+ require_relative 'shapes/container2'
32
+ require_relative 'shapes/container3'
33
+ require_relative 'shapes/container4'
30
34
  require_relative 'shapes/cross'
31
35
  require_relative 'shapes/envelop'
32
36
  require_relative 'shapes/diamond'
33
37
  require_relative 'shapes/document'
34
38
  require_relative 'shapes/ellipse'
35
39
  require_relative 'shapes/hexagon'
36
- require_relative 'shapes/container'
37
- require_relative 'shapes/container2'
38
- require_relative 'shapes/container3'
39
- require_relative 'shapes/container4'
40
+ require_relative 'shapes/interface'
41
+ require_relative 'shapes/klass'
40
42
  require_relative 'shapes/note'
41
43
  require_relative 'shapes/process'
42
44
  require_relative 'shapes/rectangle'
@@ -49,3 +51,5 @@ require_relative 'shapes/triangle'
49
51
  require_relative 'shapes/embed_row'
50
52
  require_relative 'shapes/embed_col50'
51
53
  require_relative 'shapes/embed_col200'
54
+
55
+ require_relative 'virtual/anchor'
@@ -49,7 +49,7 @@ module DrawioDsl
49
49
  theme: theme,
50
50
  palette: palette.to_h,
51
51
  style: style.to_h,
52
- pages: pages.map(&:to_h)
52
+ pages: pages.select(&:active?).map(&:to_h)
53
53
  }
54
54
  end
55
55
  end
@@ -10,13 +10,12 @@ module DrawioDsl
10
10
  attr_reader :perpendicular_max
11
11
 
12
12
  def initialize(page, **args)
13
- @type = :flex_layout
14
13
  @direction = args[:direction] || :horizontal
15
14
  @wrap_at = args[:wrap_at] || (direction == :horizontal ? 1000 : 800)
16
15
  @gap = args[:gap] || 20
17
16
  @perpendicular_max = 0
18
17
 
19
- super(page, **args)
18
+ super(page, **args.merge(type: :flex_layout))
20
19
  end
21
20
 
22
21
  def position_shape(shape)
@@ -15,7 +15,6 @@ module DrawioDsl
15
15
 
16
16
  # rubocop:disable Metrics/CyclomaticComplexity
17
17
  def initialize(page, **args)
18
- @type = :grid_layout
19
18
  @direction = args[:direction] || :horizontal
20
19
  @wrap_at = args[:wrap_at] || 5
21
20
  @grid_size = args[:grid_size] || 220
@@ -25,7 +24,7 @@ module DrawioDsl
25
24
  @v_align = args[:v_align] || :center
26
25
  @cell_no = 1
27
26
 
28
- super(page, **args)
27
+ super(page, **args.merge(type: :grid_layout))
29
28
  end
30
29
  # rubocop:enable Metrics/CyclomaticComplexity
31
30
 
@@ -4,8 +4,6 @@ module DrawioDsl
4
4
  module Schema
5
5
  # Provides base configuration for automatic layouts
6
6
  class Layout < Node
7
- attr_accessor :type
8
-
9
7
  # represents the x coordinate of the top left corner layout area
10
8
  # this coordinate is based on the current location of the page
11
9
  attr_accessor :anchor_x
@@ -31,7 +29,6 @@ module DrawioDsl
31
29
 
32
30
  def to_h
33
31
  super.merge(
34
- type: type,
35
32
  anchor_x: anchor_x,
36
33
  anchor_y: anchor_y
37
34
  )
@@ -7,19 +7,38 @@ module DrawioDsl
7
7
  class Node
8
8
  attr_accessor :id
9
9
  attr_accessor :page
10
+ attr_accessor :parent
10
11
  attr_accessor :classification
12
+ attr_accessor :type
13
+ attr_accessor :nodes
11
14
 
12
15
  def initialize(page, **args)
13
16
  @page = page
14
17
  @id = args[:id]
18
+ @parent = args[:parent]
15
19
  @classification = args[:classification] || :unknown
20
+ @type = args[:type] || :unknown
21
+ @nodes = NodeList.new
16
22
  end
17
23
 
18
24
  def to_h
19
- {
25
+ result = {
20
26
  id: id,
21
- classification: classification
27
+ parent_id: parent&.id,
28
+ classification: classification,
29
+ type: type
22
30
  }
31
+ result[:nodes] = nodes.to_h if nodes.any?
32
+ result
33
+ end
34
+
35
+ def root?
36
+ parent.nil? || parent.is_a?(DrawioDsl::Schema::Page)
37
+ end
38
+
39
+ def add_node(node)
40
+ @nodes.add(self, node)
41
+ node
23
42
  end
24
43
 
25
44
  # :nocov:
@@ -9,7 +9,8 @@ module DrawioDsl
9
9
  @nodes = []
10
10
  end
11
11
 
12
- def add(node)
12
+ def add(parent, node)
13
+ node.parent = parent
13
14
  @nodes << node
14
15
  end
15
16
 
@@ -29,6 +30,24 @@ module DrawioDsl
29
30
  @nodes.length
30
31
  end
31
32
 
33
+ def empty?
34
+ @nodes.empty?
35
+ end
36
+
37
+ def any?
38
+ @nodes.any?
39
+ end
40
+
41
+ def first
42
+ @nodes.first
43
+ end
44
+
45
+ def as_xml(xml)
46
+ nodes.each do |node|
47
+ node.as_xml(xml) if node.respond_to?(:as_xml)
48
+ end
49
+ end
50
+
32
51
  def to_h
33
52
  @nodes.map(&:to_h)
34
53
  end
@@ -11,6 +11,7 @@ module DrawioDsl
11
11
  attr_accessor :position_y
12
12
 
13
13
  attr_accessor :id
14
+ attr_accessor :active
14
15
  attr_reader :name
15
16
  attr_reader :theme
16
17
  attr_reader :style
@@ -39,6 +40,7 @@ module DrawioDsl
39
40
  @diagram = diagram
40
41
 
41
42
  @id = args[:id]
43
+ @active = args[:active].nil? ? true : !args[:active].nil?
42
44
  @name = args[:name]
43
45
  @theme = args[:theme] || diagram.theme
44
46
 
@@ -90,9 +92,18 @@ module DrawioDsl
90
92
  end
91
93
  # rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity, Metrics/MethodLength
92
94
 
93
- # def shapes
94
- # nodes.shapes
95
- # end
95
+ def active?
96
+ !!@active
97
+ end
98
+
99
+ def add_node(node)
100
+ @nodes.add(self, node)
101
+ node
102
+ end
103
+
104
+ def as_xml(xml)
105
+ nodes.as_xml(xml)
106
+ end
96
107
 
97
108
  def to_h
98
109
  {
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DrawioDsl
4
+ module Schema
5
+ class Interface < Shape
6
+ configure_shape(:interface)
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DrawioDsl
4
+ module Schema
5
+ class Klass < Shape
6
+ configure_shape(:klass)
7
+ end
8
+ end
9
+ end
@@ -4,6 +4,8 @@ module DrawioDsl
4
4
  module Schema
5
5
  # Shape is a graphical element, it can be a shape, a text, or a group (todo)
6
6
  class Shape < Node
7
+ include DrawioDsl::Formatters::Factory
8
+
7
9
  class << self
8
10
  attr_reader :shape_defaults
9
11
 
@@ -23,6 +25,7 @@ module DrawioDsl
23
25
 
24
26
  attr_accessor :theme
25
27
  attr_accessor :title
28
+ attr_accessor :value
26
29
 
27
30
  # The style of the element, these will derive from the page style if not provided
28
31
  attr_accessor :white_space
@@ -37,7 +40,6 @@ module DrawioDsl
37
40
  attr_accessor :font_color
38
41
  attr_accessor :gradient
39
42
 
40
- attr_accessor :type
41
43
  attr_accessor :text_only
42
44
  attr_accessor :x
43
45
  attr_accessor :y
@@ -45,11 +47,15 @@ module DrawioDsl
45
47
  attr_accessor :h
46
48
  attr_accessor :style_modifiers
47
49
 
48
- def initialize(page, **args)
50
+ def initialize(page, **args, &block)
49
51
  args[:classification] = :shape
50
52
  super(page, **args)
51
53
 
52
54
  apply_defaults(args)
55
+
56
+ instance_eval(&block) if block_given?
57
+
58
+ @value = formatter.empty? ? title : formatter.as_html
53
59
  end
54
60
 
55
61
  def shape_defaults
@@ -85,7 +91,6 @@ module DrawioDsl
85
91
 
86
92
  def style
87
93
  key_values = []
88
- key_values << style_modifiers unless style_modifiers.empty?
89
94
  key_values << "whiteSpace=#{white_space}" if white_space
90
95
  key_values << "html=#{html}" if html
91
96
  key_values << "rounded=#{rounded}" if rounded
@@ -96,20 +101,22 @@ module DrawioDsl
96
101
  key_values << "strokeColor=#{stroke_color}" if stroke_color
97
102
  key_values << "fontColor=#{font_color}" if font_color
98
103
  key_values << "gradient=#{gradient}" if gradient
104
+ key_values << style_modifiers unless style_modifiers.empty?
99
105
 
100
106
  key_values.join(';')
101
107
  end
102
108
  # rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
103
109
 
104
110
  def as_xml(xml)
105
- xml.mxCell(id: id, value: title, style: style, vertex: 1, parent: "#{page.id}-B") do
111
+ xml.mxCell(id: id, value: value, style: style, vertex: 1, parent: parent&.id) do
106
112
  xml.mxGeometry(x: x, y: y, width: w, height: h, as: 'geometry')
107
113
  end
108
114
  end
109
115
 
110
116
  def to_h
111
- {
117
+ result = {
112
118
  id: id,
119
+ parent_id: parent&.id,
113
120
  classification: classification,
114
121
  type: type,
115
122
  x: x,
@@ -118,6 +125,8 @@ module DrawioDsl
118
125
  h: h,
119
126
  style: style
120
127
  }
128
+ result[:nodes] = nodes.to_h if nodes.any?
129
+ result
121
130
  end
122
131
 
123
132
  # :nocov:
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DrawioDsl
4
+ module Schema
5
+ # Provides an anchor point on the page for elements to hang from
6
+ class Anchor < Node
7
+ def initialize(page, **args)
8
+ args[:classification] = :anchor
9
+ super(page, **args)
10
+ end
11
+
12
+ # xml.mxCell(id: "#{page.id}-A")
13
+ # xml.mxCell(id: "#{page.id}-B", parent: "#{page.id}-A")
14
+
15
+ def as_xml(xml)
16
+ if parent
17
+ xml.mxCell(id: id, parent: parent.id)
18
+ else
19
+ xml.mxCell(id: id)
20
+ end
21
+
22
+ nodes.as_xml(xml)
23
+ end
24
+ end
25
+ end
26
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module DrawioDsl
4
- VERSION = '0.5.6'
4
+ VERSION = '0.7.0'
5
5
  end
@@ -22,13 +22,13 @@ module DrawioDsl
22
22
 
23
23
  def build_diagram(xml)
24
24
  xml.mxfile(host: diagram.host) do
25
- diagram.pages.each do |page|
25
+ diagram.pages.select(&:active?).each do |page|
26
26
  build_page(xml, page)
27
27
  end
28
28
  end
29
29
  end
30
30
 
31
- # rubocop:disable Metrics/MethodLength, Metrics/AbcSize, Metrics/BlockLength
31
+ # rubocop:disable Metrics/AbcSize
32
32
  def build_page(xml, page)
33
33
  xml.diagram(id: page.id, name: page.name) do
34
34
  xml.mxGraphModel(
@@ -50,15 +50,11 @@ module DrawioDsl
50
50
  shadow: page.page_shadow
51
51
  ) do
52
52
  xml.root do
53
- xml.mxCell(id: "#{page.id}-A")
54
- xml.mxCell(id: "#{page.id}-B", parent: "#{page.id}-A")
55
- page.nodes.all.each do |node|
56
- node.as_xml(xml) if node.classification == :shape
57
- end
53
+ page.as_xml(xml)
58
54
  end
59
55
  end
60
56
  end
61
57
  end
62
- # rubocop:enable Metrics/MethodLength, Metrics/AbcSize, Metrics/BlockLength
58
+ # rubocop:enable Metrics/AbcSize
63
59
  end
64
60
  end
data/lib/drawio_dsl.rb CHANGED
@@ -12,12 +12,15 @@ require_relative 'drawio_dsl/configuration_shapes'
12
12
  require_relative 'drawio_dsl/configuration_themes'
13
13
  require_relative 'drawio_dsl/configuration'
14
14
  require_relative 'drawio_dsl/version'
15
+ require_relative 'drawio_dsl/formatters/_'
15
16
  require_relative 'drawio_dsl/schema/_'
16
17
  require_relative 'drawio_dsl/dom_builder_shapes'
17
18
  require_relative 'drawio_dsl/dom_builder'
18
19
  require_relative 'drawio_dsl/xml_builder'
19
20
  require_relative 'drawio_dsl/layout_engine'
20
21
  require_relative 'drawio_dsl/drawio_shapes'
22
+ require_relative 'drawio_dsl/drawio_extensions_active'
23
+ require_relative 'drawio_dsl/drawio_extensions'
21
24
  require_relative 'drawio_dsl/drawio'
22
25
 
23
26
  module DrawioDsl
data/package-lock.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "drawio_dsl",
3
- "version": "0.5.6",
3
+ "version": "0.7.0",
4
4
  "lockfileVersion": 2,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "drawio_dsl",
9
- "version": "0.5.6",
9
+ "version": "0.7.0",
10
10
  "devDependencies": {
11
11
  "@klueless-js/semantic-release-rubygem": "github:klueless-js/semantic-release-rubygem",
12
12
  "@semantic-release/changelog": "^6.0.1",
data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "drawio_dsl",
3
- "version": "0.5.6",
3
+ "version": "0.7.0",
4
4
  "description": "DrawIO DSL can build DrawIO diagrams using a Domain Specific Language",
5
5
  "scripts": {
6
6
  "release": "semantic-release"