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