drawio_dsl 0.1.0 → 0.4.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 (46) hide show
  1. checksums.yaml +4 -4
  2. data/.builders/.templates/command.rb +8 -0
  3. data/.builders/.templates/schema_shape.rb +9 -0
  4. data/.builders/blueprint/shapes.rb +19 -0
  5. data/.builders/boot.rb +1 -0
  6. data/.builders/generators/10-page-margin.rb +46 -0
  7. data/.builders/generators/15-grid-direction.rb +40 -0
  8. data/.builders/generators/16-grid-alignment.rb +73 -0
  9. data/.builders/generators/20-styles.rb +64 -0
  10. data/.builders/generators/25-themes.rb +24 -0
  11. data/.rubocop.yml +6 -1
  12. data/CHANGELOG.md +24 -0
  13. data/lib/drawio_dsl/configuration.rb +58 -45
  14. data/lib/drawio_dsl/dom_builder.rb +66 -23
  15. data/lib/drawio_dsl/drawio.rb +65 -36
  16. data/lib/drawio_dsl/layout_engine.rb +24 -28
  17. data/lib/drawio_dsl/schema/_.rb +23 -0
  18. data/lib/drawio_dsl/schema/common_style.rb +42 -0
  19. data/lib/drawio_dsl/schema/default_palette.rb +31 -0
  20. data/lib/drawio_dsl/schema/diagram.rb +57 -0
  21. data/lib/drawio_dsl/schema/layouts/flex_layout.rb +87 -0
  22. data/lib/drawio_dsl/schema/layouts/grid_layout.rb +102 -0
  23. data/lib/drawio_dsl/schema/layouts/layout.rb +41 -0
  24. data/lib/drawio_dsl/schema/node.rb +53 -0
  25. data/lib/drawio_dsl/schema/page.rb +135 -0
  26. data/lib/drawio_dsl/schema/shapes/callout.rb +9 -0
  27. data/lib/drawio_dsl/schema/shapes/circle.rb +9 -0
  28. data/lib/drawio_dsl/schema/shapes/cloud.rb +9 -0
  29. data/lib/drawio_dsl/schema/shapes/diamond.rb +9 -0
  30. data/lib/drawio_dsl/schema/shapes/ellipse.rb +9 -0
  31. data/lib/drawio_dsl/schema/shapes/hexagon.rb +9 -0
  32. data/lib/drawio_dsl/schema/shapes/note.rb +9 -0
  33. data/lib/drawio_dsl/schema/shapes/process.rb +9 -0
  34. data/lib/drawio_dsl/schema/shapes/rectangle.rb +9 -0
  35. data/lib/drawio_dsl/schema/shapes/shape.rb +125 -0
  36. data/lib/drawio_dsl/schema/shapes/square.rb +9 -0
  37. data/lib/drawio_dsl/version.rb +1 -1
  38. data/lib/drawio_dsl/xml_builder.rb +7 -7
  39. data/lib/drawio_dsl.rb +1 -2
  40. data/package-lock.json +2 -2
  41. data/package.json +1 -1
  42. metadata +30 -6
  43. data/.builders/generators/10-layout.rb +0 -21
  44. data/lib/drawio_dsl/drawio_dsl-OLD.x +0 -335
  45. data/lib/drawio_dsl/layout_container.rb +0 -54
  46. data/lib/drawio_dsl/schema.rb +0 -346
@@ -1,346 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module DrawioDsl
4
- module Schema
5
- # Common Style is the reused on Diagram, Page and Element
6
- #
7
- # When styles are not provided at each level, then they will inherit from
8
- # the parent common style.
9
- #
10
- # Elements will use the common style of their page
11
- class CommonStyle
12
- attr_accessor :theme
13
- attr_accessor :white_space
14
- attr_accessor :html
15
- attr_accessor :rounded
16
- attr_accessor :shadow
17
- attr_accessor :glass
18
- attr_accessor :sketch
19
-
20
- def initialize(**args, &block)
21
- @white_space = args[:white_space]
22
- @html = args[:html]
23
- @rounded = args[:rounded]
24
- @shadow = args[:shadow]
25
- @sketch = args[:sketch]
26
- @glass = args[:glass]
27
-
28
- instance_eval(&block) if block_given?
29
- end
30
-
31
- def to_h
32
- {
33
- white_space: white_space,
34
- html: html,
35
- rounded: rounded,
36
- shadow: shadow,
37
- sketch: sketch,
38
- glass: glass
39
- }
40
- end
41
- end
42
-
43
- # Default Palette contains palette information that can be inherited at each level
44
- class DefaultPalette
45
- attr_accessor :fill_color
46
- attr_accessor :stroke_color
47
- attr_accessor :font_color
48
- attr_accessor :gradient
49
-
50
- def initialize(owner, **args, &block)
51
- @fill_color = args[:fill_color]
52
- @stroke_color = args[:stroke_color]
53
- @font_color = args[:font_color]
54
- @gradient = args[:gradient]
55
-
56
- instance_exec(owner, &block) if block_given?
57
- end
58
-
59
- def to_h
60
- {
61
- fill_color: fill_color,
62
- stroke_color: stroke_color,
63
- font_color: font_color,
64
- gradient: gradient
65
- }
66
- end
67
- end
68
-
69
- # Diagram is the root of the schema, it contains pages
70
- class Diagram
71
- attr_accessor :host
72
- attr_accessor :theme
73
- attr_accessor :style
74
- attr_accessor :palette
75
- attr_accessor :pages
76
-
77
- # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
78
- def initialize(**args)
79
- @host = args[:host] || SecureRandom.alphanumeric(3)
80
-
81
- # Apply a random theme to the diagram if none is specified.
82
- @theme = args[:theme] || KConfig.configuration.drawio.random_theme
83
-
84
- @style = DrawioDsl::Schema::CommonStyle.new(**args) do
85
- default_style = KConfig.configuration.drawio.base_style
86
-
87
- # Inherit from configured style when specific style not specified.
88
- @white_space ||= default_style.white_space
89
- @html ||= default_style.html
90
- @rounded ||= default_style.rounded
91
- @shadow ||= default_style.shadow
92
- @sketch ||= default_style.sketch
93
- @glass ||= default_style.glass
94
- end
95
-
96
- @palette = DrawioDsl::Schema::DefaultPalette.new(self, **args) do |diagram|
97
- theme_palette = KConfig.configuration.drawio.palette(diagram.theme)
98
-
99
- # Inherit from theme when specific palette options are not specified.
100
- @fill_color ||= theme_palette.fill_color
101
- @stroke_color ||= theme_palette.stroke_color
102
- @font_color ||= theme_palette.font_color
103
- @gradient ||= theme_palette.gradient
104
- end
105
-
106
- @pages = args[:pages] || []
107
- end
108
- # rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
109
-
110
- def to_h
111
- {
112
- host: host,
113
- theme: theme,
114
- palette: palette.to_h,
115
- style: style.to_h,
116
- pages: pages.map(&:to_h)
117
- }
118
- end
119
- end
120
-
121
- # Page is a container for elements
122
- class Page
123
- attr_accessor :diagram
124
-
125
- attr_accessor :id
126
- attr_accessor :name
127
- attr_accessor :theme
128
- attr_accessor :style
129
- attr_accessor :palette
130
- attr_accessor :elements
131
-
132
- # attr_accessor :dx # dx = "2636"
133
- # attr_accessor :dy # dy = "2332"
134
- attr_accessor :grid # grid = "0"
135
- attr_accessor :grid_size # gridSize = "10"
136
- attr_accessor :guides # guides = "1"
137
- attr_accessor :tooltips # tooltips = "1"
138
- attr_accessor :connect # connect = "1"
139
- attr_accessor :arrows # arrows = "1"
140
- attr_accessor :fold # fold = "1"
141
- attr_accessor :page_no # page = "1"
142
- attr_accessor :page_scale # pageScale = "1"
143
- attr_accessor :page_width # pageWidth = "583"
144
- attr_accessor :page_height # pageHeight = "827"
145
- attr_accessor :background # background = "#FFFACD"
146
- attr_accessor :page_shadow # shadow = "0"
147
- attr_accessor :math # math = "0"
148
-
149
- # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity, Metrics/MethodLength
150
- def initialize(diagram, **args)
151
- @diagram = diagram
152
-
153
- @id = args[:id]
154
- @name = args[:name]
155
- @theme = args[:theme] || diagram.theme
156
-
157
- @grid = args[:grid] || 0
158
- @grid_size = args[:grid_size] || 10
159
- @guides = args[:guides] || 1
160
- @tooltips = args[:tooltips] || 1
161
- @connect = args[:connect] || 1
162
- @arrows = args[:arrows] || 1
163
- @fold = args[:fold] || 1
164
- @page_no = args[:page_no] || 1
165
- @page_scale = args[:page_scale] || 1
166
- @page_width = args[:page_width] || 1169 # A4
167
- @page_height = args[:page_height] || 827 # A4
168
- @background = args[:background] || '#FFFACD'
169
- @page_shadow = args[:page_shadow] || 0
170
- @math = args[:math] || 0
171
-
172
- @style = DrawioDsl::Schema::CommonStyle.new(**args) do
173
- # Inherit from the diagram style when specific style not specified.
174
- @white_space ||= diagram.style.white_space
175
- @html ||= diagram.style.html
176
- @rounded ||= diagram.style.rounded
177
- @shadow ||= diagram.style.shadow
178
- @sketch ||= diagram.style.sketch
179
- @glass ||= diagram.style.glass
180
- end
181
-
182
- @palette = DrawioDsl::Schema::DefaultPalette.new(self, **args) do |page|
183
- theme_palette = KConfig.configuration.drawio.palette(page.theme)
184
-
185
- # Inherit from theme when specific palette options are not specified.
186
- @fill_color ||= theme_palette.fill_color
187
- @stroke_color ||= theme_palette.stroke_color
188
- @font_color ||= theme_palette.font_color
189
- @gradient ||= theme_palette.gradient
190
- end
191
-
192
- @elements = args[:elements] || []
193
- end
194
- # rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity, Metrics/MethodLength
195
-
196
- def to_h
197
- {
198
- id: id,
199
- name: name,
200
- theme: theme,
201
- palette: palette.to_h,
202
- style: style.to_h,
203
- elements: elements.map(&:to_h)
204
- }
205
- end
206
- end
207
-
208
- # Element is a graphical element, it can be a shape, a text, or a group (todo)
209
- class Element
210
- attr_accessor :page
211
-
212
- attr_accessor :theme
213
- attr_accessor :title
214
-
215
- # The style of the element, these will derive from the page style if not provided
216
- attr_accessor :white_space
217
- attr_accessor :html
218
- attr_accessor :rounded
219
- attr_accessor :shadow
220
- attr_accessor :glass
221
- attr_accessor :sketch
222
-
223
- attr_accessor :fill_color
224
- attr_accessor :stroke_color
225
- attr_accessor :font_color
226
- attr_accessor :gradient
227
-
228
- attr_accessor :id
229
- attr_accessor :type
230
- attr_accessor :x
231
- attr_accessor :y
232
- attr_accessor :w
233
- attr_accessor :h
234
- attr_accessor :style_modifiers
235
-
236
- def initialize(page, **args)
237
- @page = page
238
- @id = args[:id]
239
-
240
- apply_defaults(args, KConfig.configuration.drawio.element)
241
- end
242
-
243
- # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
244
- def apply_defaults(args, element_defaults)
245
- @theme = args[:theme] || page.theme # KConfig.configuration.drawio.themes.sample
246
- theme_palette = KConfig.configuration.drawio.palette(page.theme)
247
- @title = args[:title] || ''
248
-
249
- @white_space = args[:white_space] || page.style.white_space # wrap or nil
250
- @html = args[:html] || page.style.html
251
- @rounded = args[:rounded] || page.style.rounded
252
- @shadow = args[:shadow] || page.style.shadow
253
- @sketch = args[:sketch] || page.style.sketch
254
- @glass = args[:glass] || page.style.glass
255
-
256
- @type = args[:type] || element_defaults.type
257
- @x = args[:x] || element_defaults.x
258
- @y = args[:y] || element_defaults.y
259
- @w = args[:w] || element_defaults.w
260
- @h = args[:h] || element_defaults.h
261
- @style_modifiers = args[:style_modifiers] || element_defaults.style_modifiers
262
-
263
- @fill_color = args[:fill_color] || theme_palette.fill_color
264
- @stroke_color = args[:stroke_color] || theme_palette.stroke_color
265
- @font_color = args[:font_color] || theme_palette.font_color
266
- @gradient = args[:gradient] || theme_palette.gradient
267
- end
268
-
269
- def style
270
- key_values = []
271
- key_values << style_modifiers unless style_modifiers.empty?
272
- key_values << "whiteSpace=#{white_space}" if white_space
273
- key_values << "html=#{html}" if html
274
- key_values << "rounded=#{rounded}" if rounded
275
- key_values << "shadow=#{shadow}" if shadow
276
- key_values << "sketch=#{sketch}" if sketch
277
- key_values << "glass=#{glass}" if glass
278
- key_values << "fillColor=#{fill_color}" if fill_color
279
- key_values << "strokeColor=#{stroke_color}" if stroke_color
280
- key_values << "fontColor=#{font_color}" if font_color
281
- key_values << "gradient=#{gradient}" if gradient
282
-
283
- key_values.join(';')
284
- end
285
- # rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
286
-
287
- def to_h
288
- {
289
- id: id,
290
- type: type,
291
- x: x,
292
- y: y,
293
- w: w,
294
- h: h,
295
- style: style
296
- }
297
- end
298
- end
299
-
300
- # Graphical element in the shape of a square
301
- class Square < Element
302
- def initialize(page, **args)
303
- super(page, **args)
304
-
305
- apply_defaults(args, KConfig.configuration.drawio.square)
306
- end
307
- end
308
-
309
- # Graphical element in the shape of a rectangle
310
- class Rectangle < Element
311
- def initialize(page, **args)
312
- super(page, **args)
313
-
314
- apply_defaults(args, KConfig.configuration.drawio.rectangle)
315
- end
316
- end
317
-
318
- # Graphical element in the shape of a circle
319
- class Circle < Element
320
- def initialize(page, **args)
321
- super(page, **args)
322
-
323
- apply_defaults(args, KConfig.configuration.drawio.circle)
324
- end
325
- end
326
-
327
- # Graphical element in the shape of an rectangle with to vertical lines
328
- class Process < Element
329
- def initialize(page, **args)
330
- super(page, **args)
331
-
332
- apply_defaults(args, KConfig.configuration.drawio.process)
333
- end
334
- end
335
-
336
- # Graphical element in the shape of an ellipse
337
- class Ellipse < Element
338
- def initialize(page, **args)
339
- super(page, **args)
340
-
341
- apply_defaults(args, KConfig.configuration.drawio.ellipse)
342
- end
343
- end
344
- end
345
- end
346
- # dx="800" dy="583" background="#FFFACD" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="0" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0"