drawio_dsl 0.5.7 → 0.8.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 (216) hide show
  1. checksums.yaml +4 -4
  2. data/.builders/.data/shapes.json +49 -22
  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/blueprint/shapes.rb +10 -5
  7. data/.builders/generators/10-transform-drawio-js.rb +195 -0
  8. data/.builders/generators/20-drawio-extensions.rb +41 -0
  9. data/.builders/generators/project_plans/drawio_dsl.rb +30 -21
  10. data/.builders/generators/sample_diagrams/15-grid-direction.rb +0 -8
  11. data/.builders/generators/sample_diagrams/20-styles.rb +1 -2
  12. data/.builders/generators/sample_diagrams/30-html-shapes.rb +48 -0
  13. data/.rubocop.yml +1 -0
  14. data/CHANGELOG.md +28 -0
  15. data/docs/extensions/analyti_cs.svg +3 -0
  16. data/docs/extensions/android_inputs.svg +3 -0
  17. data/docs/extensions/app_services.svg +3 -0
  18. data/docs/extensions/appliances.svg +3 -0
  19. data/docs/extensions/arrows.svg +3 -0
  20. data/docs/extensions/aws_17___analyti_cs.svg +3 -0
  21. data/docs/extensions/aws_17___application_services.svg +3 -0
  22. data/docs/extensions/aws_17___artificial_intelligence.svg +3 -0
  23. data/docs/extensions/aws_17___business_productivity.svg +3 -0
  24. data/docs/extensions/aws_17___compute.svg +3 -0
  25. data/docs/extensions/aws_17___contact_center.svg +3 -0
  26. data/docs/extensions/aws_17___containers.svg +3 -0
  27. data/docs/extensions/aws_17___database.svg +3 -0
  28. data/docs/extensions/aws_17___desktop_app_straning.svg +3 -0
  29. data/docs/extensions/aws_17___developer_tools.svg +3 -0
  30. data/docs/extensions/aws_17___game_development.svg +3 -0
  31. data/docs/extensions/aws_17___general.svg +3 -0
  32. data/docs/extensions/aws_17___io_t.svg +3 -0
  33. data/docs/extensions/aws_17___management.svg +3 -0
  34. data/docs/extensions/aws_17___messaging.svg +3 -0
  35. data/docs/extensions/aws_17___migration.svg +3 -0
  36. data/docs/extensions/aws_17___mobile_services.svg +3 -0
  37. data/docs/extensions/aws_17___networking_content_delivery.svg +3 -0
  38. data/docs/extensions/aws_17___on_demand_workforce.svg +3 -0
  39. data/docs/extensions/aws_17___sdks.svg +3 -0
  40. data/docs/extensions/aws_17___serurity_identity_and_compliance.svg +3 -0
  41. data/docs/extensions/aws_17___storage.svg +3 -0
  42. data/docs/extensions/aws_19___application_integration.svg +3 -0
  43. data/docs/extensions/aws_19___ar_vr.svg +3 -0
  44. data/docs/extensions/aws_19___blockchain.svg +3 -0
  45. data/docs/extensions/aws_19___business_applications.svg +3 -0
  46. data/docs/extensions/aws_19___compute.svg +3 -0
  47. data/docs/extensions/aws_19___cost_management.svg +3 -0
  48. data/docs/extensions/aws_19___customer_engagement.svg +3 -0
  49. data/docs/extensions/aws_19___database.svg +3 -0
  50. data/docs/extensions/aws_19___desktop_app_streaming.svg +3 -0
  51. data/docs/extensions/aws_19___developer_tools.svg +3 -0
  52. data/docs/extensions/aws_19___ec2_instance_types.svg +3 -0
  53. data/docs/extensions/aws_19___game_tech.svg +3 -0
  54. data/docs/extensions/aws_19___general.svg +3 -0
  55. data/docs/extensions/aws_19___groups_note_repeated_below_without_v2.svg +3 -0
  56. data/docs/extensions/aws_19___internet_of_things.svg +3 -0
  57. data/docs/extensions/aws_19___machine_learning.svg +3 -0
  58. data/docs/extensions/aws_19___management_governance.svg +3 -0
  59. data/docs/extensions/aws_19___media_services.svg +3 -0
  60. data/docs/extensions/aws_19___migration_transfer.svg +3 -0
  61. data/docs/extensions/aws_19___mobile.svg +3 -0
  62. data/docs/extensions/aws_19___networking_content_delivery.svg +3 -0
  63. data/docs/extensions/aws_19___roboti_cs.svg +3 -0
  64. data/docs/extensions/aws_19___satellite.svg +3 -0
  65. data/docs/extensions/aws_19___security_identity_compliance.svg +3 -0
  66. data/docs/extensions/aws_19___storage.svg +3 -0
  67. data/docs/extensions/aws_19_analyti_cs.svg +3 -0
  68. data/docs/extensions/aws_general.svg +3 -0
  69. data/docs/extensions/azure2019.svg +3 -0
  70. data/docs/extensions/azure_cloud.svg +3 -0
  71. data/docs/extensions/azure_enterprise.svg +3 -0
  72. data/docs/extensions/azure_vms.svg +3 -0
  73. data/docs/extensions/basic_network_shapes.svg +3 -0
  74. data/docs/extensions/beds.svg +3 -0
  75. data/docs/extensions/bpmn_2_0.svg +3 -0
  76. data/docs/extensions/cisco_basic.svg +3 -0
  77. data/docs/extensions/cisco_extended.svg +3 -0
  78. data/docs/extensions/common_elements.svg +3 -0
  79. data/docs/extensions/computers_and_monitors.svg +3 -0
  80. data/docs/extensions/containers.svg +3 -0
  81. data/docs/extensions/content_delivery.svg +3 -0
  82. data/docs/extensions/couches.svg +3 -0
  83. data/docs/extensions/cubicle_walls.svg +3 -0
  84. data/docs/extensions/data_flow.svg +3 -0
  85. data/docs/extensions/database.svg +3 -0
  86. data/docs/extensions/deployment.svg +3 -0
  87. data/docs/extensions/desks.svg +3 -0
  88. data/docs/extensions/detailed_network_diagrams.svg +3 -0
  89. data/docs/extensions/developer_tools.svg +3 -0
  90. data/docs/extensions/doors_windows.svg +3 -0
  91. data/docs/extensions/ec2.svg +3 -0
  92. data/docs/extensions/electrical.svg +3 -0
  93. data/docs/extensions/electroni_cs.svg +3 -0
  94. data/docs/extensions/enterprise_application.svg +3 -0
  95. data/docs/extensions/equipment.svg +3 -0
  96. data/docs/extensions/ext_shapes.svg +3 -0
  97. data/docs/extensions/flowchart.svg +3 -0
  98. data/docs/extensions/geometric_shapes.svg +3 -0
  99. data/docs/extensions/google_cloud_platform.svg +3 -0
  100. data/docs/extensions/heat_exchangers.svg +3 -0
  101. data/docs/extensions/i_os_6_i_pad_controls.svg +3 -0
  102. data/docs/extensions/i_os_6_i_pad_elements.svg +3 -0
  103. data/docs/extensions/i_os_6_i_pad_icons.svg +3 -0
  104. data/docs/extensions/i_os_6_i_phone_controls.svg +3 -0
  105. data/docs/extensions/i_os_6_i_phone_elements.svg +3 -0
  106. data/docs/extensions/i_os_6_i_phone_icons.svg +3 -0
  107. data/docs/extensions/i_os_devices.svg +3 -0
  108. data/docs/extensions/i_os_icons.svg +3 -0
  109. data/docs/extensions/i_os_mockups.svg +3 -0
  110. data/docs/extensions/i_os_ui_components.svg +3 -0
  111. data/docs/extensions/i_pad_elements.svg +3 -0
  112. data/docs/extensions/i_phone_elements.svg +3 -0
  113. data/docs/extensions/information.svg +3 -0
  114. data/docs/extensions/instruments.svg +3 -0
  115. data/docs/extensions/internet_of_things.svg +3 -0
  116. data/docs/extensions/kanban.svg +3 -0
  117. data/docs/extensions/kitchen.svg +3 -0
  118. data/docs/extensions/kubernetes_icons.svg +3 -0
  119. data/docs/extensions/logic_gates.svg +3 -0
  120. data/docs/extensions/materials.svg +3 -0
  121. data/docs/extensions/message_routing.svg +3 -0
  122. data/docs/extensions/message_transformation.svg +3 -0
  123. data/docs/extensions/messaging_channels.svg +3 -0
  124. data/docs/extensions/messaging_endpoints.svg +3 -0
  125. data/docs/extensions/messaging_systems.svg +3 -0
  126. data/docs/extensions/mind_map.svg +3 -0
  127. data/docs/extensions/misc.svg +3 -0
  128. data/docs/extensions/misc_floorplan.svg +3 -0
  129. data/docs/extensions/miscellaneous.svg +3 -0
  130. data/docs/extensions/mobile_services.svg +3 -0
  131. data/docs/extensions/network.svg +3 -0
  132. data/docs/extensions/networking.svg +3 -0
  133. data/docs/extensions/on_demand.svg +3 -0
  134. data/docs/extensions/piping.svg +3 -0
  135. data/docs/extensions/power_sources.svg +3 -0
  136. data/docs/extensions/processes.svg +3 -0
  137. data/docs/extensions/pumps.svg +3 -0
  138. data/docs/extensions/repeated_from_the_above.svg +3 -0
  139. data/docs/extensions/restroom.svg +3 -0
  140. data/docs/extensions/s3.svg +3 -0
  141. data/docs/extensions/sdks.svg +3 -0
  142. data/docs/extensions/security_identity.svg +3 -0
  143. data/docs/extensions/server_racks.svg +3 -0
  144. data/docs/extensions/shipments.svg +3 -0
  145. data/docs/extensions/site_map.svg +3 -0
  146. data/docs/extensions/stairs.svg +3 -0
  147. data/docs/extensions/standard.svg +3 -0
  148. data/docs/extensions/system_management.svg +3 -0
  149. data/docs/extensions/tables_chairs.svg +3 -0
  150. data/docs/extensions/technology.svg +3 -0
  151. data/docs/extensions/transistors.svg +3 -0
  152. data/docs/extensions/ui_containers.svg +3 -0
  153. data/docs/extensions/ui_input.svg +3 -0
  154. data/docs/extensions/ui_menus.svg +3 -0
  155. data/docs/extensions/ui_misc.svg +3 -0
  156. data/docs/extensions/ui_widgets.svg +3 -0
  157. data/docs/extensions/uml_class_diagram.svg +3 -0
  158. data/docs/extensions/uml_component.svg +3 -0
  159. data/docs/extensions/uml_entity_relationship.svg +3 -0
  160. data/docs/extensions/uml_sequence.svg +3 -0
  161. data/docs/extensions/uml_state_activity.svg +3 -0
  162. data/docs/extensions/uml_use_case.svg +3 -0
  163. data/docs/extensions/value_stream_mapping.svg +3 -0
  164. data/docs/extensions/valves.svg +3 -0
  165. data/docs/extensions/venn_gradient.svg +3 -0
  166. data/docs/extensions/venn_plain.svg +3 -0
  167. data/docs/extensions/vessels.svg +3 -0
  168. data/docs/extensions.md +614 -0
  169. data/docs/project_done.svg +1 -1
  170. data/docs/project_in_progress.svg +1 -1
  171. data/docs/project_todo.svg +1 -1
  172. data/docs/samples/grid-direction-horizontal.svg +1 -1
  173. data/docs/samples/grid-direction-vertical.svg +1 -1
  174. data/docs/samples/html-shapes.svg +3 -0
  175. data/docs/samples/samples.md +4 -0
  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 +14 -8
  184. data/lib/drawio_dsl/dom_builder.rb +23 -8
  185. data/lib/drawio_dsl/dom_builder_shapes.rb +97 -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 +114 -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 +33 -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 +7 -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 +16 -3
  204. data/lib/drawio_dsl/schema/node_list.rb +20 -1
  205. data/lib/drawio_dsl/schema/page.rb +14 -7
  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 +25 -11
  209. data/lib/drawio_dsl/schema/shapes/todo.rb +9 -0
  210. data/lib/drawio_dsl/schema/virtual/anchor.rb +2 -0
  211. data/lib/drawio_dsl/version.rb +1 -1
  212. data/lib/drawio_dsl/xml_builder.rb +4 -9
  213. data/lib/drawio_dsl.rb +3 -0
  214. data/package-lock.json +2 -2
  215. data/package.json +1 -1
  216. 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'
@@ -44,6 +46,7 @@ require_relative 'shapes/rectangle2'
44
46
  require_relative 'shapes/square'
45
47
  require_relative 'shapes/step'
46
48
  require_relative 'shapes/tick'
49
+ require_relative 'shapes/todo'
47
50
  require_relative 'shapes/face'
48
51
  require_relative 'shapes/triangle'
49
52
  require_relative 'shapes/embed_row'
@@ -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
  )
@@ -9,23 +9,36 @@ module DrawioDsl
9
9
  attr_accessor :page
10
10
  attr_accessor :parent
11
11
  attr_accessor :classification
12
+ attr_accessor :type
13
+ attr_accessor :nodes
12
14
 
13
15
  def initialize(page, **args)
14
16
  @page = page
15
17
  @id = args[:id]
16
18
  @parent = args[:parent]
17
19
  @classification = args[:classification] || :unknown
20
+ @type = args[:type] || :unknown
21
+ @nodes = NodeList.new
18
22
  end
19
23
 
20
24
  def to_h
21
- {
25
+ result = {
22
26
  id: id,
23
- classification: classification
27
+ parent_id: parent&.id,
28
+ classification: classification,
29
+ type: type
24
30
  }
31
+ result[:nodes] = nodes.to_h if nodes.any?
32
+ result
25
33
  end
26
34
 
27
35
  def root?
28
- parent.nil?
36
+ parent.nil? || parent.is_a?(DrawioDsl::Schema::Page)
37
+ end
38
+
39
+ def add_node(node)
40
+ @nodes.add(self, node)
41
+ node
29
42
  end
30
43
 
31
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
 
@@ -87,16 +89,21 @@ module DrawioDsl
87
89
  end
88
90
 
89
91
  @nodes = NodeList.new # []
90
-
91
- # add anchor nodes
92
- @nodes.add(DrawioDsl::Schema::Anchor.new(self, id: "page_root_#{id}"))
93
- @nodes.add(DrawioDsl::Schema::Anchor.new(self, id: "node_root_#{id}"))
94
92
  end
95
93
  # rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity, Metrics/MethodLength
96
94
 
97
- # def shapes
98
- # nodes.shapes
99
- # 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
100
107
 
101
108
  def to_h
102
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,18 +4,20 @@ 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
10
+ attr_reader :shape_key
8
11
  attr_reader :shape_defaults
9
12
 
10
- def configure_shape(name)
11
- unless KConfig.configuration.drawio.shapes.members.include?(name)
12
- puts "Shape #{name} not found in configuration"
13
+ def configure_shape(key)
14
+ unless KConfig.configuration.drawio.shapes.members.include?(key)
15
+ puts "Shape #{key} not found in configuration"
13
16
  return
14
17
  end
15
18
 
16
- config = KConfig.configuration.drawio.shapes[name]
17
-
18
- @shape_defaults = config.clone
19
+ @shape_key = key
20
+ @shape_defaults = KConfig.configuration.drawio.shapes[key].clone
19
21
  end
20
22
  end
21
23
 
@@ -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
@@ -83,9 +89,13 @@ module DrawioDsl
83
89
  @font_color = args[:font_color] || theme_palette.font_color
84
90
  end
85
91
 
92
+ def format(type = nil)
93
+ type ||= self.class.shape_key
94
+ format_instance(type)
95
+ end
96
+
86
97
  def style
87
98
  key_values = []
88
- key_values << style_modifiers unless style_modifiers.empty?
89
99
  key_values << "whiteSpace=#{white_space}" if white_space
90
100
  key_values << "html=#{html}" if html
91
101
  key_values << "rounded=#{rounded}" if rounded
@@ -96,20 +106,22 @@ module DrawioDsl
96
106
  key_values << "strokeColor=#{stroke_color}" if stroke_color
97
107
  key_values << "fontColor=#{font_color}" if font_color
98
108
  key_values << "gradient=#{gradient}" if gradient
109
+ key_values << style_modifiers unless style_modifiers.empty?
99
110
 
100
111
  key_values.join(';')
101
112
  end
102
113
  # rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
103
114
 
104
115
  def as_xml(xml)
105
- xml.mxCell(id: id, value: title, style: style, vertex: 1, parent: "#{page.id}-B") do
116
+ xml.mxCell(id: id, value: value, style: style, vertex: 1, parent: parent&.id) do
106
117
  xml.mxGeometry(x: x, y: y, width: w, height: h, as: 'geometry')
107
118
  end
108
119
  end
109
120
 
110
121
  def to_h
111
- {
122
+ result = {
112
123
  id: id,
124
+ parent_id: parent&.id,
113
125
  classification: classification,
114
126
  type: type,
115
127
  x: x,
@@ -118,6 +130,8 @@ module DrawioDsl
118
130
  h: h,
119
131
  style: style
120
132
  }
133
+ result[:nodes] = nodes.to_h if nodes.any?
134
+ result
121
135
  end
122
136
 
123
137
  # :nocov:
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DrawioDsl
4
+ module Schema
5
+ class Todo < Shape
6
+ configure_shape(:todo)
7
+ end
8
+ end
9
+ end
@@ -18,6 +18,8 @@ module DrawioDsl
18
18
  else
19
19
  xml.mxCell(id: id)
20
20
  end
21
+
22
+ nodes.as_xml(xml)
21
23
  end
22
24
  end
23
25
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module DrawioDsl
4
- VERSION = '0.5.7'
4
+ VERSION = '0.8.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
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,16 +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
- # puts node.classification
57
- node.as_xml(xml) if %i[shape anchor].include?(node.classification)
58
- end
53
+ page.as_xml(xml)
59
54
  end
60
55
  end
61
56
  end
62
57
  end
63
- # rubocop:enable Metrics/MethodLength, Metrics/AbcSize
58
+ # rubocop:enable Metrics/AbcSize
64
59
  end
65
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.7",
3
+ "version": "0.8.0",
4
4
  "lockfileVersion": 2,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "drawio_dsl",
9
- "version": "0.5.7",
9
+ "version": "0.8.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.7",
3
+ "version": "0.8.0",
4
4
  "description": "DrawIO DSL can build DrawIO diagrams using a Domain Specific Language",
5
5
  "scripts": {
6
6
  "release": "semantic-release"