drawio_dsl 0.6.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.builders/.data/shapes.json +44 -26
- data/.builders/.templates/basic/dom_builder_shapes.rb +2 -2
- data/.builders/.templates/basic/drawio_shapes.rb +2 -2
- data/.builders/blueprint/shapes.rb +6 -4
- data/.builders/generators/project_plans/drawio_dsl.rb +3 -1
- data/.builders/generators/sample_diagrams/30-html-shapes.rb +68 -0
- data/CHANGELOG.md +13 -0
- data/docs/project_in_progress.svg +1 -1
- data/docs/project_todo.svg +1 -1
- data/lib/drawio_dsl/configuration_shapes.rb +12 -8
- data/lib/drawio_dsl/dom_builder_shapes.rb +92 -82
- data/lib/drawio_dsl/drawio_shapes.rb +108 -96
- data/lib/drawio_dsl/formatters/_.rb +8 -0
- data/lib/drawio_dsl/formatters/base_formatter.rb +24 -0
- data/lib/drawio_dsl/formatters/factory.rb +32 -0
- data/lib/drawio_dsl/formatters/html_builder.rb +84 -0
- data/lib/drawio_dsl/formatters/interface_formatter.rb +53 -0
- data/lib/drawio_dsl/formatters/klass_formatter.rb +52 -0
- data/lib/drawio_dsl/formatters/style_builder.rb +63 -0
- data/lib/drawio_dsl/schema/_.rb +6 -4
- data/lib/drawio_dsl/schema/shapes/interface.rb +9 -0
- data/lib/drawio_dsl/schema/shapes/klass.rb +9 -0
- data/lib/drawio_dsl/schema/shapes/shape.rb +9 -2
- data/lib/drawio_dsl/version.rb +1 -1
- data/lib/drawio_dsl.rb +1 -0
- data/package-lock.json +2 -2
- data/package.json +1 -1
- metadata +12 -2
@@ -0,0 +1,84 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Work with HTML formatters to DrawIO shapes
|
4
|
+
module DrawioDsl
|
5
|
+
# HTML formatters can be used on shapes to render HTML using a DSL
|
6
|
+
module Formatters
|
7
|
+
# Create an instance of a HTML formatter on the shape
|
8
|
+
class HtmlBuilder
|
9
|
+
attr_reader :element_style_defaults
|
10
|
+
|
11
|
+
def initialize(element_style_defaults = {})
|
12
|
+
@element_style_defaults = element_style_defaults
|
13
|
+
end
|
14
|
+
|
15
|
+
def default_for(tag)
|
16
|
+
element_style_defaults[tag] || {}
|
17
|
+
end
|
18
|
+
|
19
|
+
def style_for(tag, **opts)
|
20
|
+
defaults = default_for(tag)
|
21
|
+
DrawioDsl::Formatters::StyleBuilder.new(**defaults).customize(**opts).style_attribute
|
22
|
+
end
|
23
|
+
|
24
|
+
def empty?
|
25
|
+
build_lines.empty?
|
26
|
+
end
|
27
|
+
|
28
|
+
def exist?
|
29
|
+
!empty?
|
30
|
+
end
|
31
|
+
|
32
|
+
def as_html(new_line: false)
|
33
|
+
new_line ? build_lines.join("\n") : build_lines.join
|
34
|
+
end
|
35
|
+
|
36
|
+
def hr(size: 1)
|
37
|
+
add_line("<hr size=\"#{size}\"/>")
|
38
|
+
end
|
39
|
+
|
40
|
+
def b(content, **opts)
|
41
|
+
add_line("<b#{style_for(:b, **opts)}>#{content}</b>")
|
42
|
+
end
|
43
|
+
|
44
|
+
def p(content, **opts)
|
45
|
+
# style_parts = %w[margin:0px margin-top:4px]
|
46
|
+
# style_parts << "text-align:#{opts[:text_align]}" if opts[:text_align]
|
47
|
+
# style=\"#{style_parts.join(';')}\"
|
48
|
+
add_line("<p#{style_for(:p, **opts)}>#{content}</p>")
|
49
|
+
end
|
50
|
+
|
51
|
+
def add_line(line)
|
52
|
+
lines << line
|
53
|
+
end
|
54
|
+
|
55
|
+
def add_placeholder(group_key)
|
56
|
+
lines << group_key
|
57
|
+
end
|
58
|
+
|
59
|
+
def group(key)
|
60
|
+
groups[key] ||= DrawioDsl::Formatters::HtmlBuilder.new(element_style_defaults)
|
61
|
+
end
|
62
|
+
|
63
|
+
def build_lines
|
64
|
+
lines.flat_map do |line|
|
65
|
+
if line.is_a?(Symbol)
|
66
|
+
group(line).build_lines
|
67
|
+
else
|
68
|
+
line
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
private
|
74
|
+
|
75
|
+
def lines
|
76
|
+
@lines ||= []
|
77
|
+
end
|
78
|
+
|
79
|
+
def groups
|
80
|
+
@groups ||= {}
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Work with HTML formatters to DrawIO shapes
|
4
|
+
module DrawioDsl
|
5
|
+
# HTML formatters can be used on shapes to render HTML using a DSL
|
6
|
+
module Formatters
|
7
|
+
# Create an instance of a HTML formatter on the shape
|
8
|
+
class InterfaceFormatter < BaseFormatter
|
9
|
+
def initialize
|
10
|
+
super({ p: { margin: '0px', margin_left: '4px', margin_top: '4px' } })
|
11
|
+
end
|
12
|
+
|
13
|
+
def header(value)
|
14
|
+
html.p('<i>Interface</i>', text_align: :center)
|
15
|
+
html.p("<b>#{value}</b>", text_align: :center)
|
16
|
+
html.hr
|
17
|
+
|
18
|
+
self
|
19
|
+
end
|
20
|
+
|
21
|
+
def field(name, type: nil)
|
22
|
+
value = if type
|
23
|
+
"#{name}: #{type}"
|
24
|
+
else
|
25
|
+
name
|
26
|
+
end
|
27
|
+
html.group(:fields).p(value)
|
28
|
+
|
29
|
+
self
|
30
|
+
end
|
31
|
+
|
32
|
+
def method(name, type: nil)
|
33
|
+
value = if type
|
34
|
+
"#{name}() : #{type}"
|
35
|
+
else
|
36
|
+
"#{name}()"
|
37
|
+
end
|
38
|
+
html.group(:methods).p(value)
|
39
|
+
|
40
|
+
self
|
41
|
+
end
|
42
|
+
|
43
|
+
def as_html(new_line: false)
|
44
|
+
html.add_placeholder(:fields)
|
45
|
+
html.add_placeholder(:methods)
|
46
|
+
|
47
|
+
html.group(:fields).hr if html.group(:fields).exist? && html.group(:methods).exist?
|
48
|
+
|
49
|
+
html.as_html(new_line: new_line)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Work with HTML formatters to DrawIO shapes
|
4
|
+
module DrawioDsl
|
5
|
+
# HTML formatters can be used on shapes to render HTML using a DSL
|
6
|
+
module Formatters
|
7
|
+
# Create an instance of a HTML formatter on the shape
|
8
|
+
class KlassFormatter < BaseFormatter
|
9
|
+
def initialize
|
10
|
+
super({ p: { margin: '0px', margin_left: '4px', margin_top: '4px' } })
|
11
|
+
end
|
12
|
+
|
13
|
+
def header(value)
|
14
|
+
html.p("<b>#{value}</b>", text_align: :center)
|
15
|
+
html.hr
|
16
|
+
|
17
|
+
self
|
18
|
+
end
|
19
|
+
|
20
|
+
def field(name, type: nil)
|
21
|
+
value = if type
|
22
|
+
"#{name}: #{type}"
|
23
|
+
else
|
24
|
+
name
|
25
|
+
end
|
26
|
+
html.group(:fields).p(value)
|
27
|
+
|
28
|
+
self
|
29
|
+
end
|
30
|
+
|
31
|
+
def method(name, type: nil)
|
32
|
+
value = if type
|
33
|
+
"#{name}() : #{type}"
|
34
|
+
else
|
35
|
+
"#{name}()"
|
36
|
+
end
|
37
|
+
html.group(:methods).p(value)
|
38
|
+
|
39
|
+
self
|
40
|
+
end
|
41
|
+
|
42
|
+
def as_html(new_line: false)
|
43
|
+
html.add_placeholder(:fields)
|
44
|
+
html.add_placeholder(:methods)
|
45
|
+
|
46
|
+
html.group(:fields).hr if html.group(:fields).exist? && html.group(:methods).exist?
|
47
|
+
|
48
|
+
html.as_html(new_line: new_line)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Work with HTML formatters to DrawIO shapes
|
4
|
+
module DrawioDsl
|
5
|
+
# HTML formatters can be used on shapes to render HTML using a DSL
|
6
|
+
module Formatters
|
7
|
+
# Create an instance of a HTML formatter on the shape
|
8
|
+
class StyleBuilder
|
9
|
+
MAPPINGS = {
|
10
|
+
margin: 'margin',
|
11
|
+
margin_top: 'margin-top',
|
12
|
+
margin_bottom: 'margin-bottom',
|
13
|
+
margin_left: 'margin-left',
|
14
|
+
margin_right: 'margin-right',
|
15
|
+
padding: 'padding',
|
16
|
+
padding_top: 'padding-top',
|
17
|
+
padding_bottom: 'padding-bottom',
|
18
|
+
padding_left: 'padding-left',
|
19
|
+
padding_right: 'padding-right',
|
20
|
+
text_align: 'text-align',
|
21
|
+
font_size: 'font-size',
|
22
|
+
font_weight: 'font-weight',
|
23
|
+
font_style: 'font-style',
|
24
|
+
font_family: 'font-family',
|
25
|
+
color: 'color'
|
26
|
+
}.freeze
|
27
|
+
|
28
|
+
attr_reader :defaults
|
29
|
+
attr_reader :custom
|
30
|
+
|
31
|
+
def initialize(**opts)
|
32
|
+
@style_parts = []
|
33
|
+
@defaults = opts
|
34
|
+
@custom = {}
|
35
|
+
end
|
36
|
+
|
37
|
+
def customize(**opts)
|
38
|
+
@custom = opts
|
39
|
+
|
40
|
+
self
|
41
|
+
end
|
42
|
+
|
43
|
+
def style
|
44
|
+
build
|
45
|
+
@style_parts.join(';')
|
46
|
+
end
|
47
|
+
|
48
|
+
def style_attribute
|
49
|
+
style_value = style
|
50
|
+
style_value.empty? ? nil : " style=\"#{style_value}\""
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
def build
|
56
|
+
defaults.merge(custom).each do |key, value|
|
57
|
+
style_key = MAPPINGS[key]
|
58
|
+
@style_parts << "#{style_key}:#{value}" if style_key
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
data/lib/drawio_dsl/schema/_.rb
CHANGED
@@ -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/
|
37
|
-
require_relative 'shapes/
|
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'
|
@@ -4,6 +4,8 @@ module DrawioDsl
|
|
4
4
|
module Schema
|
5
5
|
# Shape is a graphical element, it can be a shape, a text, or a group (todo)
|
6
6
|
class Shape < Node
|
7
|
+
include DrawioDsl::Formatters::Factory
|
8
|
+
|
7
9
|
class << self
|
8
10
|
attr_reader :shape_defaults
|
9
11
|
|
@@ -23,6 +25,7 @@ module DrawioDsl
|
|
23
25
|
|
24
26
|
attr_accessor :theme
|
25
27
|
attr_accessor :title
|
28
|
+
attr_accessor :value
|
26
29
|
|
27
30
|
# The style of the element, these will derive from the page style if not provided
|
28
31
|
attr_accessor :white_space
|
@@ -44,11 +47,15 @@ module DrawioDsl
|
|
44
47
|
attr_accessor :h
|
45
48
|
attr_accessor :style_modifiers
|
46
49
|
|
47
|
-
def initialize(page, **args)
|
50
|
+
def initialize(page, **args, &block)
|
48
51
|
args[:classification] = :shape
|
49
52
|
super(page, **args)
|
50
53
|
|
51
54
|
apply_defaults(args)
|
55
|
+
|
56
|
+
instance_eval(&block) if block_given?
|
57
|
+
|
58
|
+
@value = formatter.empty? ? title : formatter.as_html
|
52
59
|
end
|
53
60
|
|
54
61
|
def shape_defaults
|
@@ -101,7 +108,7 @@ module DrawioDsl
|
|
101
108
|
# rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
102
109
|
|
103
110
|
def as_xml(xml)
|
104
|
-
xml.mxCell(id: id, value:
|
111
|
+
xml.mxCell(id: id, value: value, style: style, vertex: 1, parent: parent&.id) do
|
105
112
|
xml.mxGeometry(x: x, y: y, width: w, height: h, as: 'geometry')
|
106
113
|
end
|
107
114
|
end
|
data/lib/drawio_dsl/version.rb
CHANGED
data/lib/drawio_dsl.rb
CHANGED
@@ -12,6 +12,7 @@ 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'
|
data/package-lock.json
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
{
|
2
2
|
"name": "drawio_dsl",
|
3
|
-
"version": "0.
|
3
|
+
"version": "0.7.0",
|
4
4
|
"lockfileVersion": 2,
|
5
5
|
"requires": true,
|
6
6
|
"packages": {
|
7
7
|
"": {
|
8
8
|
"name": "drawio_dsl",
|
9
|
-
"version": "0.
|
9
|
+
"version": "0.7.0",
|
10
10
|
"devDependencies": {
|
11
11
|
"@klueless-js/semantic-release-rubygem": "github:klueless-js/semantic-release-rubygem",
|
12
12
|
"@semantic-release/changelog": "^6.0.1",
|
data/package.json
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: drawio_dsl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Cruwys
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-03-
|
11
|
+
date: 2022-03-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: k_config
|
@@ -96,6 +96,7 @@ files:
|
|
96
96
|
- ".builders/generators/sample_diagrams/16-grid-alignment.rb"
|
97
97
|
- ".builders/generators/sample_diagrams/20-styles.rb"
|
98
98
|
- ".builders/generators/sample_diagrams/25-themes.rb"
|
99
|
+
- ".builders/generators/sample_diagrams/30-html-shapes.rb"
|
99
100
|
- ".builders/generators/sample_diagrams/50-willoughby-council.rb"
|
100
101
|
- ".releaserc.json"
|
101
102
|
- ".rspec"
|
@@ -295,6 +296,13 @@ files:
|
|
295
296
|
- lib/drawio_dsl/drawio_extensions.rb
|
296
297
|
- lib/drawio_dsl/drawio_extensions_active.rb
|
297
298
|
- lib/drawio_dsl/drawio_shapes.rb
|
299
|
+
- lib/drawio_dsl/formatters/_.rb
|
300
|
+
- lib/drawio_dsl/formatters/base_formatter.rb
|
301
|
+
- lib/drawio_dsl/formatters/factory.rb
|
302
|
+
- lib/drawio_dsl/formatters/html_builder.rb
|
303
|
+
- lib/drawio_dsl/formatters/interface_formatter.rb
|
304
|
+
- lib/drawio_dsl/formatters/klass_formatter.rb
|
305
|
+
- lib/drawio_dsl/formatters/style_builder.rb
|
298
306
|
- lib/drawio_dsl/layout_engine.rb
|
299
307
|
- lib/drawio_dsl/schema/_.rb
|
300
308
|
- lib/drawio_dsl/schema/common_style.rb
|
@@ -334,6 +342,8 @@ files:
|
|
334
342
|
- lib/drawio_dsl/schema/shapes/h5.rb
|
335
343
|
- lib/drawio_dsl/schema/shapes/h6.rb
|
336
344
|
- lib/drawio_dsl/schema/shapes/hexagon.rb
|
345
|
+
- lib/drawio_dsl/schema/shapes/interface.rb
|
346
|
+
- lib/drawio_dsl/schema/shapes/klass.rb
|
337
347
|
- lib/drawio_dsl/schema/shapes/note.rb
|
338
348
|
- lib/drawio_dsl/schema/shapes/p.rb
|
339
349
|
- lib/drawio_dsl/schema/shapes/process.rb
|