drawio_dsl 0.6.0 → 0.8.1

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 (48) hide show
  1. checksums.yaml +4 -4
  2. data/.builders/.data/shapes.json +58 -22
  3. data/.builders/.templates/basic/dom_builder_shapes.rb +3 -2
  4. data/.builders/.templates/basic/drawio_shapes.rb +2 -2
  5. data/.builders/blueprint/shapes.rb +25 -4
  6. data/.builders/generators/project-plan.rb +72 -0
  7. data/.builders/generators/sample_diagrams/05-samples.rb +19 -6
  8. data/.builders/generators/sample_diagrams/30-html-shapes.rb +48 -0
  9. data/.builders/generators/sample_diagrams/35-ids-and-arrows.rb +20 -0
  10. data/CHANGELOG.md +28 -0
  11. data/docs/project-plan/project.drawio +128 -0
  12. data/docs/project-plan/project_done.svg +3 -0
  13. data/docs/project-plan/project_in_progress.svg +3 -0
  14. data/docs/project-plan/project_todo.svg +3 -0
  15. data/docs/project-plan.md +3 -3
  16. data/docs/samples/html-shapes.svg +3 -0
  17. data/docs/samples/samples.md +4 -0
  18. data/docs/samples/styles-glass.svg +1 -1
  19. data/docs/samples/styles-plain.svg +1 -1
  20. data/docs/samples/styles-rounded.svg +1 -1
  21. data/docs/samples/styles-shadow.svg +1 -1
  22. data/docs/samples/styles-sketch.svg +1 -1
  23. data/docs/samples/themes-random.svg +1 -1
  24. data/lib/drawio_dsl/configuration_shapes.rb +14 -8
  25. data/lib/drawio_dsl/dom_builder_shapes.rb +137 -82
  26. data/lib/drawio_dsl/drawio_shapes.rb +114 -96
  27. data/lib/drawio_dsl/formatters/_.rb +8 -0
  28. data/lib/drawio_dsl/formatters/base_formatter.rb +24 -0
  29. data/lib/drawio_dsl/formatters/factory.rb +33 -0
  30. data/lib/drawio_dsl/formatters/html_builder.rb +84 -0
  31. data/lib/drawio_dsl/formatters/interface_formatter.rb +55 -0
  32. data/lib/drawio_dsl/formatters/klass_formatter.rb +54 -0
  33. data/lib/drawio_dsl/formatters/style_builder.rb +63 -0
  34. data/lib/drawio_dsl/schema/_.rb +7 -4
  35. data/lib/drawio_dsl/schema/shapes/interface.rb +9 -0
  36. data/lib/drawio_dsl/schema/shapes/klass.rb +9 -0
  37. data/lib/drawio_dsl/schema/shapes/shape.rb +20 -8
  38. data/lib/drawio_dsl/schema/shapes/todo.rb +9 -0
  39. data/lib/drawio_dsl/version.rb +1 -1
  40. data/lib/drawio_dsl.rb +1 -0
  41. data/package-lock.json +2 -2
  42. data/package.json +1 -1
  43. metadata +20 -7
  44. data/.builders/generators/project_plans/drawio_dsl.rb +0 -63
  45. data/.builders/generators/project_plans/k_doc.rb +0 -39
  46. data/docs/project_done.svg +0 -3
  47. data/docs/project_in_progress.svg +0 -3
  48. data/docs/project_todo.svg +0 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0f477a7317f4d012f3e7c1987de3ccedbf87431f5a5fa689862ba6ab3f19b62d
4
- data.tar.gz: b76493c62b5fcd11ca2d51a028e2499e221c5a2e0f06a4b09701862f8d557afb
3
+ metadata.gz: edb45547be95911f2d2929e42b3ad02bf70f393491bdd58c4b941c43ce26f073
4
+ data.tar.gz: d63dfaf0273ff5b0c2e8752221068cf767ba47d535707b2219e309181372ab88
5
5
  SHA512:
6
- metadata.gz: 684c4a481532aab5570fc06fbbb1bd075fe3b7dfd1d06903dbe8e0df8f08532c112ab73e8363243a8570224302fa104ed4a28ded7343bcba2a800d2997dd7d65
7
- data.tar.gz: 732f7ebd2f67587caaff22b51970b1a10cc258809deb16f5b060f38853d20c76620f923ad00ccf7c022e12c381ffd028499fc487fce46e0fd246b1bc2653fd35
6
+ metadata.gz: 674da036356abb138fc1dce8bc4514dc5a6c3e39787979523e4abd0855350a31e8da7826533d4e7741c7919fcf2453e776909971cd5afd2d448e08bba9fb1799
7
+ data.tar.gz: 7e766df5cd63151e3a519fa898b8afc27f1099e5bb8f1532608f850b3e059ba690e2f0f2b33058ff448fa276cc09ee601552aa59cf0770ae19947dc0387547c4
@@ -134,6 +134,42 @@
134
134
  "h": 160,
135
135
  "style_modifiers": "shape=cloud"
136
136
  },
137
+ {
138
+ "type": "container",
139
+ "text_only": false,
140
+ "x": 0,
141
+ "y": 0,
142
+ "w": 160,
143
+ "h": 160,
144
+ "style_modifiers": "swimlane"
145
+ },
146
+ {
147
+ "type": "container2",
148
+ "text_only": false,
149
+ "x": 0,
150
+ "y": 0,
151
+ "w": 160,
152
+ "h": 160,
153
+ "style_modifiers": "swimlane;horizontal=0"
154
+ },
155
+ {
156
+ "type": "container3",
157
+ "text_only": false,
158
+ "x": 0,
159
+ "y": 0,
160
+ "w": 160,
161
+ "h": 160,
162
+ "style_modifiers": "swimlane;startSize=50"
163
+ },
164
+ {
165
+ "type": "container4",
166
+ "text_only": false,
167
+ "x": 0,
168
+ "y": 0,
169
+ "w": 160,
170
+ "h": 160,
171
+ "style_modifiers": "swimlane;resizable=0"
172
+ },
137
173
  {
138
174
  "type": "cross",
139
175
  "text_only": false,
@@ -189,40 +225,22 @@
189
225
  "style_modifiers": "shape=hexagon"
190
226
  },
191
227
  {
192
- "type": "container",
193
- "text_only": false,
194
- "x": 0,
195
- "y": 0,
196
- "w": 160,
197
- "h": 160,
198
- "style_modifiers": "swimlane"
199
- },
200
- {
201
- "type": "container2",
228
+ "type": "interface",
202
229
  "text_only": false,
203
230
  "x": 0,
204
231
  "y": 0,
205
232
  "w": 160,
206
233
  "h": 160,
207
- "style_modifiers": "swimlane;horizontal=0"
234
+ "style_modifiers": "align=left;overflow=fill;fontSize=12;fontFamily=Helvetica"
208
235
  },
209
236
  {
210
- "type": "container3",
237
+ "type": "klass",
211
238
  "text_only": false,
212
239
  "x": 0,
213
240
  "y": 0,
214
241
  "w": 160,
215
242
  "h": 160,
216
- "style_modifiers": "swimlane;startSize=50"
217
- },
218
- {
219
- "type": "container4",
220
- "text_only": false,
221
- "x": 0,
222
- "y": 0,
223
- "w": 160,
224
- "h": 160,
225
- "style_modifiers": "swimlane;resizable=0"
243
+ "style_modifiers": "align=left;overflow=fill;fontSize=12;fontFamily=Helvetica"
226
244
  },
227
245
  {
228
246
  "type": "note",
@@ -287,6 +305,15 @@
287
305
  "h": 50,
288
306
  "style_modifiers": "verticalLabelPosition=bottom;verticalAlign=top;shape=mxgraph.basic.tick"
289
307
  },
308
+ {
309
+ "type": "todo",
310
+ "text_only": false,
311
+ "x": 0,
312
+ "y": 0,
313
+ "w": 300,
314
+ "h": 60,
315
+ "style_modifiers": ""
316
+ },
290
317
  {
291
318
  "type": "face",
292
319
  "text_only": false,
@@ -305,6 +332,15 @@
305
332
  "h": 100,
306
333
  "style_modifiers": "triangle"
307
334
  },
335
+ {
336
+ "type": "line",
337
+ "text_only": false,
338
+ "x": 0,
339
+ "y": 0,
340
+ "w": 50,
341
+ "h": 50,
342
+ "style_modifiers": "edgeStyle=entityRelationEdgeStyle;strokeWidth=1;elbow=vertical;startArrow=none;startFill=0;endArrow=block;endFill=0;targetPerimeterSpacing=0;shape=flexArrow;endSize=6;fillStyle=zigzag;"
343
+ },
308
344
  {
309
345
  "type": "embed_row",
310
346
  "text_only": false,
@@ -6,8 +6,9 @@ module DrawioDsl
6
6
  module DomBuilderShapes
7
7
  {{#each shapes}}
8
8
 
9
- def add_{{snake ./type}}(**opts)
10
- {{snake ./type}} = DrawioDsl::Schema::{{camel ./type}}.new(current_page, **opts)
9
+ def add_{{snake ./type}}(id = nil, **opts, &block)
10
+ opts = { id: id }.merge(opts) if id
11
+ {{snake ./type}} = DrawioDsl::Schema::{{camel ./type}}.new(current_page, **opts, &block)
11
12
  add_shape({{snake ./type}})
12
13
  end
13
14
  {{/each}}
@@ -14,8 +14,8 @@ module DrawioDsl
14
14
  end
15
15
  {{#each shapes}}
16
16
 
17
- def {{snake ./type}}(**opts)
18
- builder.add_{{snake ./type}}(**opts)
17
+ def {{snake ./type}}(id = nil, **opts, &block)
18
+ builder.add_{{snake ./type}}(id, **opts, &block)
19
19
  end
20
20
  {{/each}}
21
21
  end
@@ -1,6 +1,21 @@
1
1
  m = KManager.model :shapes, namespace: %i[domain] do
2
2
  # microapp = import(:handlebars_helpers, :microapp)
3
3
 
4
+ table :strokes do
5
+ fields [:name, :style]
6
+
7
+ row :dashed , 'dashed=1;fixDash=1'
8
+ row :dotted , 'dashed=1;fixDash=1;dashPattern=1 4'
9
+ row :dashdot , 'dashed=1;fixDash=1;dashPattern=10 5 1 5'
10
+ row :dashdotdot , 'dashed=1;fixDash=1;dashPattern=10 5 1 5 1 5'
11
+ row :dotdotdot , 'dashed=1;fixDash=1;dashPattern=1 2'
12
+ row :longdash , 'dashed=1;fixDash=1;dashPattern=16 6'
13
+ row :dashlongdash , 'dashed=1;fixDash=1;dashPattern=10 6 16 6'
14
+ row :dashed24 , 'dashed=1;fixDash=1;dashPattern=3 8'
15
+ row :dashed32 , 'dashed=1;fixDash=1;dashPattern=6 5'
16
+ row :dashed44 , 'dashed=1;fixDash=1;dashPattern=8 8'
17
+ end
18
+
4
19
  table :shapes do
5
20
  fields [:type, :text_only, :x, :y, :w, :h, :style_modifiers]
6
21
 
@@ -24,16 +39,18 @@ m = KManager.model :shapes, namespace: %i[domain] do
24
39
  row :callout4 , false, 0, 0, 160, 120, 'shape=mxgraph.basic.roundRectCallout;dx=30;dy=15;size=5;boundedLbl=1;'
25
40
  row :circle , false, 0, 0, 160, 160, 'ellipse'
26
41
  row :cloud , false, 0, 0, 160, 160, 'shape=cloud'
42
+ row :container , false, 0, 0, 160, 160, 'swimlane'
43
+ row :container2 , false, 0, 0, 160, 160, 'swimlane;horizontal=0'
44
+ row :container3 , false, 0, 0, 160, 160, 'swimlane;startSize=50'
45
+ row :container4 , false, 0, 0, 160, 160, 'swimlane;resizable=0'
27
46
  row :cross , false, 0, 0, 50, 50, 'verticalLabelPosition=bottom;verticalAlign=top;html=1;shape=mxgraph.basic.x'
28
47
  row :envelop , false, 0, 0, 160, 100, 'shape=message'
29
48
  row :diamond , false, 0, 0, 100, 100, 'rhombus'
30
49
  row :document , false, 0, 0, 160, 160, 'shape=mxgraph.basic.document'
31
50
  row :ellipse , false, 0, 0, 200, 120, 'ellipse'
32
51
  row :hexagon , false, 0, 0, 200, 120, 'shape=hexagon'
33
- row :container , false, 0, 0, 160, 160, 'swimlane'
34
- row :container2 , false, 0, 0, 160, 160, 'swimlane;horizontal=0'
35
- row :container3 , false, 0, 0, 160, 160, 'swimlane;startSize=50'
36
- row :container4 , false, 0, 0, 160, 160, 'swimlane;resizable=0'
52
+ row :interface , false, 0, 0, 160, 160, 'align=left;overflow=fill;fontSize=12;fontFamily=Helvetica'
53
+ row :klass , false, 0, 0, 160, 160, 'align=left;overflow=fill;fontSize=12;fontFamily=Helvetica'
37
54
  row :note , false, 0, 0, 160, 160, 'shape=note'
38
55
  row :process , false, 0, 0, 200, 120, 'shape=process'
39
56
  row :rectangle , false, 0, 0, 200, 120, ''
@@ -41,9 +58,13 @@ m = KManager.model :shapes, namespace: %i[domain] do
41
58
  row :square , false, 0, 0, 160, 160, ''
42
59
  row :step , false, 0, 0, 120, 80, 'shape=step;perimeter=stepPerimeter;fixedSize=1'
43
60
  row :tick , false, 0, 0, 50, 50, 'verticalLabelPosition=bottom;verticalAlign=top;shape=mxgraph.basic.tick'
61
+ row :todo , false, 0, 0, 300, 60, ''
44
62
  row :face , false, 0, 0, 100, 100, 'verticalLabelPosition=bottom;verticalAlign=top;shape=mxgraph.basic.smiley'
45
63
  row :triangle , false, 0, 0, 100, 100, 'triangle'
46
64
 
65
+ row :line , false, 0, 0, 50, 50, 'edgeStyle=entityRelationEdgeStyle;strokeWidth=1;elbow=vertical;startArrow=none;startFill=0;endArrow=block;endFill=0;targetPerimeterSpacing=0;shape=flexArrow;endSize=6;fillStyle=zigzag;'
66
+ # edge="1" parent="node_root_2T8" source="b" target="c"
67
+
47
68
  # configuration for embedded element shape
48
69
  # note that the width / height probably should be driven of parent shape
49
70
  row :embed_row , false, 0, 0, 200, 40, 'shape=partialRectangle;collapsible=0;dropTarget=0;pointerEvents=0;top=0;left=0;bottom=1;right=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest'
@@ -0,0 +1,72 @@
1
+ KManager.action :project_plan do
2
+ action do
3
+
4
+ DrawioDsl::Drawio
5
+ .init(k_builder, on_exist: :write, on_action: :execute)
6
+ .diagram(rounded: 1, glass: 1)
7
+ .page('In progress', theme: :style_03, margin_left: 0, margin_top: 0) do
8
+
9
+ # h5(x: 300, y: 0, w: 400, h: 80, title: 'DrawIO DSL')
10
+ # p(x: 350, y: 40, w: 400, h: 80, title: 'Project plan - In progress')
11
+
12
+ grid_layout(y:90, direction: :horizontal, grid_h: 80, grid_w: 320, wrap_at: 3, grid: 0)
13
+
14
+ todo(title: 'ensure that ids are working as expected')
15
+ todo(title: 'alter the initial parameter of all shapes so that it can be an ID, without named attribute')
16
+ todo(title: 'add new shapes related to line connectors')
17
+ todo(title: 'line connectors need to support autolinking using ids')
18
+ end
19
+ .page('To Do', theme: :style_02, margin_left: 0, margin_top: 0) do
20
+
21
+ # h5(x: 300, y: 0, w: 400, h: 80, title: 'DrawIO DSL')
22
+ # p(x: 350, y: 40, w: 400, h: 80, title: 'Project plan')
23
+
24
+ grid_layout(y:90, direction: :horizontal, grid_h: 80, grid_w: 320, wrap_at: 3, grid: 0)
25
+
26
+ todo(title: 'add page background to theme, use it whenever the theme is set at a diagram/page level')
27
+ todo(title: 'move DrawioDsl::Formatters::Factory::FORMATTERS to resource file')
28
+ todo(title: 'move DrawioDsl::Formatters::StyleBuilder::MAPPINGS to resource file')
29
+ todo(title: 'need to setup new project plans')
30
+ todo(title: 'settings style attributes need to de-duplicate, might be best to utilize the new StyleBuilder class')
31
+ todo(title: 'write SVG directly into other projects')
32
+ todo(title: 'add :shape and :text-only to random shape generator')
33
+ todo(title: 'Nodes need to support child nodes')
34
+ todo(title: 'Grid layout does not position itself in relation to the last element')
35
+ todo(title: 'Dynamic sized shapes that expand to the size of their text')
36
+ todo(title: 'Control of text padding left, right, top and bottom')
37
+ todo(title: 'Improve the theme control over text-only shapes')
38
+ todo(title: 'x,y settings do not work for shapes within a grid layout')
39
+ todo(title: 'page layout so that you drop elements on and they are positioned correctly, e.g centered, left, right, etc, maybe a grid layout with a wrap of 1 and a width of the page is sufficient')
40
+ end
41
+ .page('Done', theme: :style_06, margin_left: 0, margin_top: 0) do
42
+
43
+ # h5(x: 300, y: 0, w: 400, h: 80, title: 'DrawIO DSL')
44
+ # p(x: 350, y: 40, w: 400, h: 80, title: 'Done')
45
+
46
+ grid_layout(y:90, direction: :horizontal, grid_h: 80, grid_w: 320, wrap_at: 3, grid: 0)
47
+
48
+ todo(title: 'move project-plan files')
49
+ todo(title: 'alter configure_shape so it sets the default shape key and use that for selecting the default HTML formatter')
50
+ todo(title: 'add todo shape to simplify project plan drawing')
51
+ todo(title: 'introduce .value property to shape and let it use either formatted HTML or plain text title')
52
+ todo(title: 'formatter DSL that can render HTML directly into the value property')
53
+ todo(title: 'formatter DSL for class and interface generation')
54
+ todo(title: 'generate extension based graphics based on drawio extensions.js')
55
+ todo(title: 'active? flag on page defaulting to true. set to false to exclude page from diagram.')
56
+ todo(title: 'first level child nodes need to hang of node 1')
57
+ todo(title: 'node has child nodes and add_node will set a nodes parent')
58
+ todo(title: 'nodes can belong to a parent node, the top level node responds with truthy to root?')
59
+ todo(title: 'add sample diagram for the github readme file')
60
+ todo(title: 'write samples into docs folder and display in readme')
61
+ todo(title: 'add export as .PNG, needs to take a page number as the PNG will not support multiple pages')
62
+ todo(title: 'add export as .SVG, needs to take a page number as the SVG will not support multiple pages')
63
+ todo(title: 'add save as .drawio')
64
+
65
+ end
66
+ .cd(:docs)
67
+ .save('project-plan/project.drawio')
68
+ .export_svg('project-plan/project_in_progress', page: 1)
69
+ .export_svg('project-plan/project_todo' , page: 2)
70
+ .export_svg('project-plan/project_done' , page: 3)
71
+ end
72
+ end
@@ -9,15 +9,28 @@ KManager.action :bootstrap do
9
9
  .page('Samples') do
10
10
  grid_layout(wrap_at: 5)
11
11
 
12
- KConfig.configuration.drawio.shapes.select { |shape| shape.type != :shape && !shape.text_only }.each do |shape|
13
- # print random number between 0 and 1
14
- send(shape.type, theme: KConfig.configuration.drawio.random_theme, title: shape.type.to_s, shape: shape, rounded: rnd(2), gloss: rnd(2), sketch: rnd(8))
12
+ # KConfig.configuration.drawio.shapes.select { |shape| shape.type != :shape && !shape.text_only }.each do |shape|
13
+ # # print random number between 0 and 1
14
+ # send(shape.type, theme: KConfig.configuration.drawio.random_theme, title: shape.type.to_s, shape: shape, rounded: rnd(2), gloss: rnd(2), sketch: rnd(8))
15
+ # end
16
+
17
+ for jersy_number in 67..112
18
+ team_color = :style_02
19
+ team_color = :style_03 if jersy_number % 3 == 0
20
+ team_color = :style_04 if jersy_number % 12 == 0
21
+
22
+ if jersy_number % 20 == 0
23
+ cloud(title: jersy_number, theme: team_color)
24
+ else
25
+ actor(title: jersy_number, theme: team_color)
26
+ end
15
27
  end
28
+
16
29
 
17
30
  end
18
31
  .cd(:spec)
19
- .save('.samples/05-samples.drawio')
20
- .cd(:docs)
21
- .export_svg('samples/samples', page: 1)
32
+ .osave('.samples/05-samples.drawio')
33
+ # .cd(:docs)
34
+ # .export_svg('samples/samples', page: 1)
22
35
  end
23
36
  end
@@ -0,0 +1,48 @@
1
+ KManager.action :html_shapes do
2
+ action do
3
+
4
+ # :rounded, :shadow, :sketch, :glass
5
+ DrawioDsl::Drawio
6
+ .init(k_builder, on_exist: :write, on_action: :execute)
7
+ .diagram(theme: :style_11)
8
+ .page('Style-Plain', margin_left: 0, margin_top: 0, rounded: 0, background: '#FFEADB') do
9
+ grid_layout(wrap_at: 8)
10
+
11
+ # html = DrawioDsl::Formatters::KlassFormatter.new
12
+ # .header('IPerson')
13
+ # .field(:first_name, type: :string)
14
+ # .field(:last_name, type: :string)
15
+ # .field(:age, type: :integer)
16
+ # .field(:birthday, type: :date)
17
+ # .method(:full_name)
18
+ # .method(:sean)
19
+ # .as_html
20
+
21
+ # square(title: html,
22
+ # style_modifiers: 'align=left;overflow=fill;fontSize=12;fontFamily=Helvetica'
23
+ # )
24
+
25
+ interface(theme: :style_07) do
26
+ format
27
+ .header('IPerson')
28
+ .field(:field1, type: :string)
29
+ .field(:field2, type: :string)
30
+ .method(:full_name, type: :string)
31
+ end
32
+
33
+ klass do
34
+ format(:class)
35
+ .header('Person')
36
+ .field(:field1, type: :string)
37
+ .field(:field2, type: :string)
38
+ .field(:age, type: :integer)
39
+ .field(:birthday, type: :date)
40
+ .method(:full_name, type: :string)
41
+ end
42
+ end
43
+ .cd(:spec)
44
+ .osave('.samples/30-html-shapes.drawio')
45
+ # .cd(:docs)
46
+ # .export_svg('samples/html-shapes', page: 1)
47
+ end
48
+ end
@@ -0,0 +1,20 @@
1
+ KManager.action :bootstrap do
2
+ action do
3
+
4
+ DrawioDsl::Drawio
5
+ .init(k_builder, on_exist: :write, on_action: :execute)
6
+ .diagram(theme: :style_06)
7
+ .page('Style-Plain', margin_left: 0, margin_top: 0) do
8
+ grid_layout(wrap_at: 2)
9
+
10
+ square(:a, title: '01')
11
+ circle(:b, title: '02')
12
+ rectangle(:c, title: '03')
13
+ ellipse(:d, title: '04')
14
+ end
15
+ .cd(:spec)
16
+ .osave('.samples/35-ids-and-arrows.drawio')
17
+ # .cd(:docs)
18
+ # .export_svg('samples/styles-plain', page: 1)
19
+ end
20
+ end
data/CHANGELOG.md CHANGED
@@ -1,3 +1,31 @@
1
+ # [0.8.0](https://github.com/klueless-io/drawio_dsl/compare/v0.7.0...v0.8.0) (2022-03-15)
2
+
3
+
4
+ ### Features
5
+
6
+ * alter configure_shape so it sets the default shape key and use that for selecting the default HTML formatter ([f0cde77](https://github.com/klueless-io/drawio_dsl/commit/f0cde7719c7b230147f10e269cbb9f02584b542b))
7
+
8
+ # [0.7.0](https://github.com/klueless-io/drawio_dsl/compare/v0.6.0...v0.7.0) (2022-03-14)
9
+
10
+
11
+ ### Features
12
+
13
+ * add support for HTML formatters to shapes ([14b05e2](https://github.com/klueless-io/drawio_dsl/commit/14b05e2c55ea61ad8f275d678ca4fcff8a43b466))
14
+ * add support for html shapes ([d2d0e72](https://github.com/klueless-io/drawio_dsl/commit/d2d0e72bef8f44c244dd209d191ab29aea0091c1))
15
+
16
+ # [0.6.0](https://github.com/klueless-io/drawio_dsl/compare/v0.5.7...v0.6.0) (2022-03-13)
17
+
18
+
19
+ ### Bug Fixes
20
+
21
+ * update failing tests ([37ebbbd](https://github.com/klueless-io/drawio_dsl/commit/37ebbbd37cf70b150c83dbd2a389c6f176a917cf))
22
+ * update pre-commit ([374a29b](https://github.com/klueless-io/drawio_dsl/commit/374a29bad9f50ac01b670d6bfa01e42e9864e00e))
23
+
24
+
25
+ ### Features
26
+
27
+ * first level child nodes need to hang of node 1, build example shapes from extensions.js ([4b233fb](https://github.com/klueless-io/drawio_dsl/commit/4b233fb452eafa8052e7d5014e19bec07ecf5657))
28
+
1
29
  ## [0.5.7](https://github.com/klueless-io/drawio_dsl/compare/v0.5.6...v0.5.7) (2022-03-09)
2
30
 
3
31
 
@@ -0,0 +1,128 @@
1
+ <mxfile host="d2u">
2
+ <diagram id="goa" name="In progress">
3
+ <mxGraphModel dx="0" dy="0" background="#FFFACD" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0">
4
+ <root>
5
+ <mxCell id="page_root_goa" parent="goa"/>
6
+ <mxCell id="node_root_goa" parent="page_root_goa"/>
7
+ <mxCell id="goa-2" value="ensure that ids are working as expected" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#d5e8d4;strokeColor=#82b366;fontColor=#333333" vertex="1" parent="node_root_goa">
8
+ <mxGeometry x="10" y="10" width="300" height="60" as="geometry"/>
9
+ </mxCell>
10
+ <mxCell id="goa-3" value="alter the initial parameter of all shapes so that it can be an ID, without named attribute" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#d5e8d4;strokeColor=#82b366;fontColor=#333333" vertex="1" parent="node_root_goa">
11
+ <mxGeometry x="330" y="10" width="300" height="60" as="geometry"/>
12
+ </mxCell>
13
+ <mxCell id="goa-4" value="add new shapes related to line connectors" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#d5e8d4;strokeColor=#82b366;fontColor=#333333" vertex="1" parent="node_root_goa">
14
+ <mxGeometry x="650" y="10" width="300" height="60" as="geometry"/>
15
+ </mxCell>
16
+ <mxCell id="goa-5" value="line connectors need to support autolinking using ids" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#d5e8d4;strokeColor=#82b366;fontColor=#333333" vertex="1" parent="node_root_goa">
17
+ <mxGeometry x="10" y="90" width="300" height="60" as="geometry"/>
18
+ </mxCell>
19
+ </root>
20
+ </mxGraphModel>
21
+ </diagram>
22
+ <diagram id="ywj" name="To Do">
23
+ <mxGraphModel dx="0" dy="0" background="#FFFACD" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0">
24
+ <root>
25
+ <mxCell id="page_root_ywj" parent="ywj"/>
26
+ <mxCell id="node_root_ywj" parent="page_root_ywj"/>
27
+ <mxCell id="ywj-2" value="add page background to theme, use it whenever the theme is set at a diagram/page level" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#333333" vertex="1" parent="node_root_ywj">
28
+ <mxGeometry x="10" y="10" width="300" height="60" as="geometry"/>
29
+ </mxCell>
30
+ <mxCell id="ywj-3" value="move DrawioDsl::Formatters::Factory::FORMATTERS to resource file" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#333333" vertex="1" parent="node_root_ywj">
31
+ <mxGeometry x="330" y="10" width="300" height="60" as="geometry"/>
32
+ </mxCell>
33
+ <mxCell id="ywj-4" value="move DrawioDsl::Formatters::StyleBuilder::MAPPINGS to resource file" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#333333" vertex="1" parent="node_root_ywj">
34
+ <mxGeometry x="650" y="10" width="300" height="60" as="geometry"/>
35
+ </mxCell>
36
+ <mxCell id="ywj-5" value="need to setup new project plans" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#333333" vertex="1" parent="node_root_ywj">
37
+ <mxGeometry x="10" y="90" width="300" height="60" as="geometry"/>
38
+ </mxCell>
39
+ <mxCell id="ywj-6" value="settings style attributes need to de-duplicate, might be best to utilize the new StyleBuilder class" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#333333" vertex="1" parent="node_root_ywj">
40
+ <mxGeometry x="330" y="90" width="300" height="60" as="geometry"/>
41
+ </mxCell>
42
+ <mxCell id="ywj-7" value="write SVG directly into other projects" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#333333" vertex="1" parent="node_root_ywj">
43
+ <mxGeometry x="650" y="90" width="300" height="60" as="geometry"/>
44
+ </mxCell>
45
+ <mxCell id="ywj-8" value="add :shape and :text-only to random shape generator" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#333333" vertex="1" parent="node_root_ywj">
46
+ <mxGeometry x="10" y="170" width="300" height="60" as="geometry"/>
47
+ </mxCell>
48
+ <mxCell id="ywj-9" value="Nodes need to support child nodes" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#333333" vertex="1" parent="node_root_ywj">
49
+ <mxGeometry x="330" y="170" width="300" height="60" as="geometry"/>
50
+ </mxCell>
51
+ <mxCell id="ywj-10" value="Grid layout does not position itself in relation to the last element" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#333333" vertex="1" parent="node_root_ywj">
52
+ <mxGeometry x="650" y="170" width="300" height="60" as="geometry"/>
53
+ </mxCell>
54
+ <mxCell id="ywj-11" value="Dynamic sized shapes that expand to the size of their text" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#333333" vertex="1" parent="node_root_ywj">
55
+ <mxGeometry x="10" y="250" width="300" height="60" as="geometry"/>
56
+ </mxCell>
57
+ <mxCell id="ywj-12" value="Control of text padding left, right, top and bottom" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#333333" vertex="1" parent="node_root_ywj">
58
+ <mxGeometry x="330" y="250" width="300" height="60" as="geometry"/>
59
+ </mxCell>
60
+ <mxCell id="ywj-13" value="Improve the theme control over text-only shapes" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#333333" vertex="1" parent="node_root_ywj">
61
+ <mxGeometry x="650" y="250" width="300" height="60" as="geometry"/>
62
+ </mxCell>
63
+ <mxCell id="ywj-14" value="x,y settings do not work for shapes within a grid layout" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#333333" vertex="1" parent="node_root_ywj">
64
+ <mxGeometry x="10" y="330" width="300" height="60" as="geometry"/>
65
+ </mxCell>
66
+ <mxCell id="ywj-15" value="page layout so that you drop elements on and they are positioned correctly, e.g centered, left, right, etc, maybe a grid layout with a wrap of 1 and a width of the page is sufficient" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#333333" vertex="1" parent="node_root_ywj">
67
+ <mxGeometry x="330" y="330" width="300" height="60" as="geometry"/>
68
+ </mxCell>
69
+ </root>
70
+ </mxGraphModel>
71
+ </diagram>
72
+ <diagram id="TfV" name="Done">
73
+ <mxGraphModel dx="0" dy="0" background="#FFFACD" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0">
74
+ <root>
75
+ <mxCell id="page_root_TfV" parent="TfV"/>
76
+ <mxCell id="node_root_TfV" parent="page_root_TfV"/>
77
+ <mxCell id="TfV-2" value="move project-plan files" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" vertex="1" parent="node_root_TfV">
78
+ <mxGeometry x="10" y="10" width="300" height="60" as="geometry"/>
79
+ </mxCell>
80
+ <mxCell id="TfV-3" value="alter configure_shape so it sets the default shape key and use that for selecting the default HTML formatter" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" vertex="1" parent="node_root_TfV">
81
+ <mxGeometry x="330" y="10" width="300" height="60" as="geometry"/>
82
+ </mxCell>
83
+ <mxCell id="TfV-4" value="add todo shape to simplify project plan drawing" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" vertex="1" parent="node_root_TfV">
84
+ <mxGeometry x="650" y="10" width="300" height="60" as="geometry"/>
85
+ </mxCell>
86
+ <mxCell id="TfV-5" value="introduce .value property to shape and let it use either formatted HTML or plain text title" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" vertex="1" parent="node_root_TfV">
87
+ <mxGeometry x="10" y="90" width="300" height="60" as="geometry"/>
88
+ </mxCell>
89
+ <mxCell id="TfV-6" value="formatter DSL that can render HTML directly into the value property" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" vertex="1" parent="node_root_TfV">
90
+ <mxGeometry x="330" y="90" width="300" height="60" as="geometry"/>
91
+ </mxCell>
92
+ <mxCell id="TfV-7" value="formatter DSL for class and interface generation" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" vertex="1" parent="node_root_TfV">
93
+ <mxGeometry x="650" y="90" width="300" height="60" as="geometry"/>
94
+ </mxCell>
95
+ <mxCell id="TfV-8" value="generate extension based graphics based on drawio extensions.js" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" vertex="1" parent="node_root_TfV">
96
+ <mxGeometry x="10" y="170" width="300" height="60" as="geometry"/>
97
+ </mxCell>
98
+ <mxCell id="TfV-9" value="active? flag on page defaulting to true. set to false to exclude page from diagram." style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" vertex="1" parent="node_root_TfV">
99
+ <mxGeometry x="330" y="170" width="300" height="60" as="geometry"/>
100
+ </mxCell>
101
+ <mxCell id="TfV-10" value="first level child nodes need to hang of node 1" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" vertex="1" parent="node_root_TfV">
102
+ <mxGeometry x="650" y="170" width="300" height="60" as="geometry"/>
103
+ </mxCell>
104
+ <mxCell id="TfV-11" value="node has child nodes and add_node will set a nodes parent" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" vertex="1" parent="node_root_TfV">
105
+ <mxGeometry x="10" y="250" width="300" height="60" as="geometry"/>
106
+ </mxCell>
107
+ <mxCell id="TfV-12" value="nodes can belong to a parent node, the top level node responds with truthy to root?" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" vertex="1" parent="node_root_TfV">
108
+ <mxGeometry x="330" y="250" width="300" height="60" as="geometry"/>
109
+ </mxCell>
110
+ <mxCell id="TfV-13" value="add sample diagram for the github readme file" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" vertex="1" parent="node_root_TfV">
111
+ <mxGeometry x="650" y="250" width="300" height="60" as="geometry"/>
112
+ </mxCell>
113
+ <mxCell id="TfV-14" value="write samples into docs folder and display in readme" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" vertex="1" parent="node_root_TfV">
114
+ <mxGeometry x="10" y="330" width="300" height="60" as="geometry"/>
115
+ </mxCell>
116
+ <mxCell id="TfV-15" value="add export as .PNG, needs to take a page number as the PNG will not support multiple pages" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" vertex="1" parent="node_root_TfV">
117
+ <mxGeometry x="330" y="330" width="300" height="60" as="geometry"/>
118
+ </mxCell>
119
+ <mxCell id="TfV-16" value="add export as .SVG, needs to take a page number as the SVG will not support multiple pages" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" vertex="1" parent="node_root_TfV">
120
+ <mxGeometry x="650" y="330" width="300" height="60" as="geometry"/>
121
+ </mxCell>
122
+ <mxCell id="TfV-17" value="add save as .drawio" style="whiteSpace=wrap;html=1;rounded=1;glass=1;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" vertex="1" parent="node_root_TfV">
123
+ <mxGeometry x="10" y="410" width="300" height="60" as="geometry"/>
124
+ </mxCell>
125
+ </root>
126
+ </mxGraphModel>
127
+ </diagram>
128
+ </mxfile>
@@ -0,0 +1,3 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
3
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="942px" height="462px" viewBox="-0.5 -0.5 942 462"><defs><linearGradient x1="0%" y1="0%" x2="0%" y2="100%" id="mx-gradient-ffffff-0.9-ffffff-0.1-s-0"><stop offset="0%" style="stop-color: rgb(255, 255, 255); stop-opacity: 0.9;"/><stop offset="100%" style="stop-color: rgb(255, 255, 255); stop-opacity: 0.1;"/></linearGradient></defs><g><rect x="0" y="0" width="300" height="60" rx="9" ry="9" fill="#f8cecc" stroke="#b85450" pointer-events="all"/><path d="M 10.15 -1 Q -1 -1 -1 10.15 L -1 24 Q 150 42 301 24 L 301 10.15 Q 301 -1 289.85 -1 Z" fill="url(#mx-gradient-ffffff-0.9-ffffff-0.1-s-0)" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 298px; height: 1px; padding-top: 30px; margin-left: 1px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">move project-plan files</div></div></div></foreignObject><text x="150" y="34" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">move project-plan files</text></switch></g><rect x="320" y="0" width="300" height="60" rx="9" ry="9" fill="#f8cecc" stroke="#b85450" pointer-events="all"/><path d="M 330.15 -1 Q 319 -1 319 10.15 L 319 24 Q 470 42 621 24 L 621 10.15 Q 621 -1 609.85 -1 Z" fill="url(#mx-gradient-ffffff-0.9-ffffff-0.1-s-0)" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 298px; height: 1px; padding-top: 30px; margin-left: 321px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">alter configure_shape so it sets the default shape key and use that for selecting the default HTML formatter</div></div></div></foreignObject><text x="470" y="34" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">alter configure_shape so it sets the default shape...</text></switch></g><rect x="640" y="0" width="300" height="60" rx="9" ry="9" fill="#f8cecc" stroke="#b85450" pointer-events="all"/><path d="M 650.15 -1 Q 639 -1 639 10.15 L 639 24 Q 790 42 941 24 L 941 10.15 Q 941 -1 929.85 -1 Z" fill="url(#mx-gradient-ffffff-0.9-ffffff-0.1-s-0)" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 298px; height: 1px; padding-top: 30px; margin-left: 641px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">add todo shape to simplify project plan drawing</div></div></div></foreignObject><text x="790" y="34" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">add todo shape to simplify project plan drawing</text></switch></g><rect x="0" y="80" width="300" height="60" rx="9" ry="9" fill="#f8cecc" stroke="#b85450" pointer-events="all"/><path d="M 10.15 79 Q -1 79 -1 90.15 L -1 104 Q 150 122 301 104 L 301 90.15 Q 301 79 289.85 79 Z" fill="url(#mx-gradient-ffffff-0.9-ffffff-0.1-s-0)" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 298px; height: 1px; padding-top: 110px; margin-left: 1px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">introduce .value property to shape and let it use either formatted HTML or plain text title</div></div></div></foreignObject><text x="150" y="114" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">introduce .value property to shape and let it use...</text></switch></g><rect x="320" y="80" width="300" height="60" rx="9" ry="9" fill="#f8cecc" stroke="#b85450" pointer-events="all"/><path d="M 330.15 79 Q 319 79 319 90.15 L 319 104 Q 470 122 621 104 L 621 90.15 Q 621 79 609.85 79 Z" fill="url(#mx-gradient-ffffff-0.9-ffffff-0.1-s-0)" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 298px; height: 1px; padding-top: 110px; margin-left: 321px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">formatter DSL that can render HTML directly into the value property</div></div></div></foreignObject><text x="470" y="114" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">formatter DSL that can render HTML directly into t...</text></switch></g><rect x="640" y="80" width="300" height="60" rx="9" ry="9" fill="#f8cecc" stroke="#b85450" pointer-events="all"/><path d="M 650.15 79 Q 639 79 639 90.15 L 639 104 Q 790 122 941 104 L 941 90.15 Q 941 79 929.85 79 Z" fill="url(#mx-gradient-ffffff-0.9-ffffff-0.1-s-0)" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 298px; height: 1px; padding-top: 110px; margin-left: 641px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">formatter DSL for class and interface generation</div></div></div></foreignObject><text x="790" y="114" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">formatter DSL for class and interface generation</text></switch></g><rect x="0" y="160" width="300" height="60" rx="9" ry="9" fill="#f8cecc" stroke="#b85450" pointer-events="all"/><path d="M 10.15 159 Q -1 159 -1 170.15 L -1 184 Q 150 202 301 184 L 301 170.15 Q 301 159 289.85 159 Z" fill="url(#mx-gradient-ffffff-0.9-ffffff-0.1-s-0)" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 298px; height: 1px; padding-top: 190px; margin-left: 1px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">generate extension based graphics based on drawio extensions.js</div></div></div></foreignObject><text x="150" y="194" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">generate extension based graphics based on drawio...</text></switch></g><rect x="320" y="160" width="300" height="60" rx="9" ry="9" fill="#f8cecc" stroke="#b85450" pointer-events="all"/><path d="M 330.15 159 Q 319 159 319 170.15 L 319 184 Q 470 202 621 184 L 621 170.15 Q 621 159 609.85 159 Z" fill="url(#mx-gradient-ffffff-0.9-ffffff-0.1-s-0)" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 298px; height: 1px; padding-top: 190px; margin-left: 321px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">active? flag on page defaulting to true. set to false to exclude page from diagram.</div></div></div></foreignObject><text x="470" y="194" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">active? flag on page defaulting to true. set to fa...</text></switch></g><rect x="640" y="160" width="300" height="60" rx="9" ry="9" fill="#f8cecc" stroke="#b85450" pointer-events="all"/><path d="M 650.15 159 Q 639 159 639 170.15 L 639 184 Q 790 202 941 184 L 941 170.15 Q 941 159 929.85 159 Z" fill="url(#mx-gradient-ffffff-0.9-ffffff-0.1-s-0)" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 298px; height: 1px; padding-top: 190px; margin-left: 641px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">first level child nodes need to hang of node 1</div></div></div></foreignObject><text x="790" y="194" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">first level child nodes need to hang of node 1</text></switch></g><rect x="0" y="240" width="300" height="60" rx="9" ry="9" fill="#f8cecc" stroke="#b85450" pointer-events="all"/><path d="M 10.15 239 Q -1 239 -1 250.15 L -1 264 Q 150 282 301 264 L 301 250.15 Q 301 239 289.85 239 Z" fill="url(#mx-gradient-ffffff-0.9-ffffff-0.1-s-0)" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 298px; height: 1px; padding-top: 270px; margin-left: 1px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">node has child nodes and add_node will set a nodes parent</div></div></div></foreignObject><text x="150" y="274" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">node has child nodes and add_node will set a nodes...</text></switch></g><rect x="320" y="240" width="300" height="60" rx="9" ry="9" fill="#f8cecc" stroke="#b85450" pointer-events="all"/><path d="M 330.15 239 Q 319 239 319 250.15 L 319 264 Q 470 282 621 264 L 621 250.15 Q 621 239 609.85 239 Z" fill="url(#mx-gradient-ffffff-0.9-ffffff-0.1-s-0)" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 298px; height: 1px; padding-top: 270px; margin-left: 321px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">nodes can belong to a parent node, the top level node responds with truthy to root?</div></div></div></foreignObject><text x="470" y="274" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">nodes can belong to a parent node, the top level n...</text></switch></g><rect x="640" y="240" width="300" height="60" rx="9" ry="9" fill="#f8cecc" stroke="#b85450" pointer-events="all"/><path d="M 650.15 239 Q 639 239 639 250.15 L 639 264 Q 790 282 941 264 L 941 250.15 Q 941 239 929.85 239 Z" fill="url(#mx-gradient-ffffff-0.9-ffffff-0.1-s-0)" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 298px; height: 1px; padding-top: 270px; margin-left: 641px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">add sample diagram for the github readme file</div></div></div></foreignObject><text x="790" y="274" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">add sample diagram for the github readme file</text></switch></g><rect x="0" y="320" width="300" height="60" rx="9" ry="9" fill="#f8cecc" stroke="#b85450" pointer-events="all"/><path d="M 10.15 319 Q -1 319 -1 330.15 L -1 344 Q 150 362 301 344 L 301 330.15 Q 301 319 289.85 319 Z" fill="url(#mx-gradient-ffffff-0.9-ffffff-0.1-s-0)" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 298px; height: 1px; padding-top: 350px; margin-left: 1px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">write samples into docs folder and display in readme</div></div></div></foreignObject><text x="150" y="354" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">write samples into docs folder and display in read...</text></switch></g><rect x="320" y="320" width="300" height="60" rx="9" ry="9" fill="#f8cecc" stroke="#b85450" pointer-events="all"/><path d="M 330.15 319 Q 319 319 319 330.15 L 319 344 Q 470 362 621 344 L 621 330.15 Q 621 319 609.85 319 Z" fill="url(#mx-gradient-ffffff-0.9-ffffff-0.1-s-0)" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 298px; height: 1px; padding-top: 350px; margin-left: 321px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">add export as .PNG, needs to take a page number as the PNG will not support multiple pages</div></div></div></foreignObject><text x="470" y="354" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">add export as .PNG, needs to take a page number as...</text></switch></g><rect x="640" y="320" width="300" height="60" rx="9" ry="9" fill="#f8cecc" stroke="#b85450" pointer-events="all"/><path d="M 650.15 319 Q 639 319 639 330.15 L 639 344 Q 790 362 941 344 L 941 330.15 Q 941 319 929.85 319 Z" fill="url(#mx-gradient-ffffff-0.9-ffffff-0.1-s-0)" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 298px; height: 1px; padding-top: 350px; margin-left: 641px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">add export as .SVG, needs to take a page number as the SVG will not support multiple pages</div></div></div></foreignObject><text x="790" y="354" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">add export as .SVG, needs to take a page number as...</text></switch></g><rect x="0" y="400" width="300" height="60" rx="9" ry="9" fill="#f8cecc" stroke="#b85450" pointer-events="all"/><path d="M 10.15 399 Q -1 399 -1 410.15 L -1 424 Q 150 442 301 424 L 301 410.15 Q 301 399 289.85 399 Z" fill="url(#mx-gradient-ffffff-0.9-ffffff-0.1-s-0)" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 298px; height: 1px; padding-top: 430px; margin-left: 1px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">add save as .drawio</div></div></div></foreignObject><text x="150" y="434" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">add save as .drawio</text></switch></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Text is not SVG - cannot display</text></a></switch></svg>