drawio_dsl 0.5.7 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
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"