drawio_dsl 0.5.6 → 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_extensions.rb +57 -0
- data/.builders/.templates/basic/drawio_shapes.rb +2 -2
- data/.builders/.templates/basic/schema_require.rb +3 -1
- data/.builders/blueprint/shapes.rb +9 -5
- data/.builders/generators/10-transform-drawio-js.rb +195 -0
- data/.builders/generators/20-drawio-extensions.rb +41 -0
- data/.builders/generators/project_plans/drawio_dsl.rb +11 -5
- data/.builders/generators/project_plans/k_doc.rb +39 -0
- data/.builders/generators/sample_diagrams/15-grid-direction.rb +0 -8
- data/.builders/generators/sample_diagrams/20-styles.rb +1 -2
- data/.builders/generators/sample_diagrams/30-html-shapes.rb +68 -0
- data/.rubocop.yml +4 -1
- data/CHANGELOG.md +27 -0
- data/docs/extensions/analyti_cs.svg +3 -0
- data/docs/extensions/android_inputs.svg +3 -0
- data/docs/extensions/app_services.svg +3 -0
- data/docs/extensions/appliances.svg +3 -0
- data/docs/extensions/arrows.svg +3 -0
- data/docs/extensions/aws_17___analyti_cs.svg +3 -0
- data/docs/extensions/aws_17___application_services.svg +3 -0
- data/docs/extensions/aws_17___artificial_intelligence.svg +3 -0
- data/docs/extensions/aws_17___business_productivity.svg +3 -0
- data/docs/extensions/aws_17___compute.svg +3 -0
- data/docs/extensions/aws_17___contact_center.svg +3 -0
- data/docs/extensions/aws_17___containers.svg +3 -0
- data/docs/extensions/aws_17___database.svg +3 -0
- data/docs/extensions/aws_17___desktop_app_straning.svg +3 -0
- data/docs/extensions/aws_17___developer_tools.svg +3 -0
- data/docs/extensions/aws_17___game_development.svg +3 -0
- data/docs/extensions/aws_17___general.svg +3 -0
- data/docs/extensions/aws_17___io_t.svg +3 -0
- data/docs/extensions/aws_17___management.svg +3 -0
- data/docs/extensions/aws_17___messaging.svg +3 -0
- data/docs/extensions/aws_17___migration.svg +3 -0
- data/docs/extensions/aws_17___mobile_services.svg +3 -0
- data/docs/extensions/aws_17___networking_content_delivery.svg +3 -0
- data/docs/extensions/aws_17___on_demand_workforce.svg +3 -0
- data/docs/extensions/aws_17___sdks.svg +3 -0
- data/docs/extensions/aws_17___serurity_identity_and_compliance.svg +3 -0
- data/docs/extensions/aws_17___storage.svg +3 -0
- data/docs/extensions/aws_19___application_integration.svg +3 -0
- data/docs/extensions/aws_19___ar_vr.svg +3 -0
- data/docs/extensions/aws_19___blockchain.svg +3 -0
- data/docs/extensions/aws_19___business_applications.svg +3 -0
- data/docs/extensions/aws_19___compute.svg +3 -0
- data/docs/extensions/aws_19___cost_management.svg +3 -0
- data/docs/extensions/aws_19___customer_engagement.svg +3 -0
- data/docs/extensions/aws_19___database.svg +3 -0
- data/docs/extensions/aws_19___desktop_app_streaming.svg +3 -0
- data/docs/extensions/aws_19___developer_tools.svg +3 -0
- data/docs/extensions/aws_19___ec2_instance_types.svg +3 -0
- data/docs/extensions/aws_19___game_tech.svg +3 -0
- data/docs/extensions/aws_19___general.svg +3 -0
- data/docs/extensions/aws_19___groups_note_repeated_below_without_v2.svg +3 -0
- data/docs/extensions/aws_19___internet_of_things.svg +3 -0
- data/docs/extensions/aws_19___machine_learning.svg +3 -0
- data/docs/extensions/aws_19___management_governance.svg +3 -0
- data/docs/extensions/aws_19___media_services.svg +3 -0
- data/docs/extensions/aws_19___migration_transfer.svg +3 -0
- data/docs/extensions/aws_19___mobile.svg +3 -0
- data/docs/extensions/aws_19___networking_content_delivery.svg +3 -0
- data/docs/extensions/aws_19___roboti_cs.svg +3 -0
- data/docs/extensions/aws_19___satellite.svg +3 -0
- data/docs/extensions/aws_19___security_identity_compliance.svg +3 -0
- data/docs/extensions/aws_19___storage.svg +3 -0
- data/docs/extensions/aws_19_analyti_cs.svg +3 -0
- data/docs/extensions/aws_general.svg +3 -0
- data/docs/extensions/azure2019.svg +3 -0
- data/docs/extensions/azure_cloud.svg +3 -0
- data/docs/extensions/azure_enterprise.svg +3 -0
- data/docs/extensions/azure_vms.svg +3 -0
- data/docs/extensions/basic_network_shapes.svg +3 -0
- data/docs/extensions/beds.svg +3 -0
- data/docs/extensions/bpmn_2_0.svg +3 -0
- data/docs/extensions/cisco_basic.svg +3 -0
- data/docs/extensions/cisco_extended.svg +3 -0
- data/docs/extensions/common_elements.svg +3 -0
- data/docs/extensions/computers_and_monitors.svg +3 -0
- data/docs/extensions/containers.svg +3 -0
- data/docs/extensions/content_delivery.svg +3 -0
- data/docs/extensions/couches.svg +3 -0
- data/docs/extensions/cubicle_walls.svg +3 -0
- data/docs/extensions/data_flow.svg +3 -0
- data/docs/extensions/database.svg +3 -0
- data/docs/extensions/deployment.svg +3 -0
- data/docs/extensions/desks.svg +3 -0
- data/docs/extensions/detailed_network_diagrams.svg +3 -0
- data/docs/extensions/developer_tools.svg +3 -0
- data/docs/extensions/doors_windows.svg +3 -0
- data/docs/extensions/ec2.svg +3 -0
- data/docs/extensions/electrical.svg +3 -0
- data/docs/extensions/electroni_cs.svg +3 -0
- data/docs/extensions/enterprise_application.svg +3 -0
- data/docs/extensions/equipment.svg +3 -0
- data/docs/extensions/ext_shapes.svg +3 -0
- data/docs/extensions/flowchart.svg +3 -0
- data/docs/extensions/geometric_shapes.svg +3 -0
- data/docs/extensions/google_cloud_platform.svg +3 -0
- data/docs/extensions/heat_exchangers.svg +3 -0
- data/docs/extensions/i_os_6_i_pad_controls.svg +3 -0
- data/docs/extensions/i_os_6_i_pad_elements.svg +3 -0
- data/docs/extensions/i_os_6_i_pad_icons.svg +3 -0
- data/docs/extensions/i_os_6_i_phone_controls.svg +3 -0
- data/docs/extensions/i_os_6_i_phone_elements.svg +3 -0
- data/docs/extensions/i_os_6_i_phone_icons.svg +3 -0
- data/docs/extensions/i_os_devices.svg +3 -0
- data/docs/extensions/i_os_icons.svg +3 -0
- data/docs/extensions/i_os_mockups.svg +3 -0
- data/docs/extensions/i_os_ui_components.svg +3 -0
- data/docs/extensions/i_pad_elements.svg +3 -0
- data/docs/extensions/i_phone_elements.svg +3 -0
- data/docs/extensions/information.svg +3 -0
- data/docs/extensions/instruments.svg +3 -0
- data/docs/extensions/internet_of_things.svg +3 -0
- data/docs/extensions/kanban.svg +3 -0
- data/docs/extensions/kitchen.svg +3 -0
- data/docs/extensions/kubernetes_icons.svg +3 -0
- data/docs/extensions/logic_gates.svg +3 -0
- data/docs/extensions/materials.svg +3 -0
- data/docs/extensions/message_routing.svg +3 -0
- data/docs/extensions/message_transformation.svg +3 -0
- data/docs/extensions/messaging_channels.svg +3 -0
- data/docs/extensions/messaging_endpoints.svg +3 -0
- data/docs/extensions/messaging_systems.svg +3 -0
- data/docs/extensions/mind_map.svg +3 -0
- data/docs/extensions/misc.svg +3 -0
- data/docs/extensions/misc_floorplan.svg +3 -0
- data/docs/extensions/miscellaneous.svg +3 -0
- data/docs/extensions/mobile_services.svg +3 -0
- data/docs/extensions/network.svg +3 -0
- data/docs/extensions/networking.svg +3 -0
- data/docs/extensions/on_demand.svg +3 -0
- data/docs/extensions/piping.svg +3 -0
- data/docs/extensions/power_sources.svg +3 -0
- data/docs/extensions/processes.svg +3 -0
- data/docs/extensions/pumps.svg +3 -0
- data/docs/extensions/repeated_from_the_above.svg +3 -0
- data/docs/extensions/restroom.svg +3 -0
- data/docs/extensions/s3.svg +3 -0
- data/docs/extensions/sdks.svg +3 -0
- data/docs/extensions/security_identity.svg +3 -0
- data/docs/extensions/server_racks.svg +3 -0
- data/docs/extensions/shipments.svg +3 -0
- data/docs/extensions/site_map.svg +3 -0
- data/docs/extensions/stairs.svg +3 -0
- data/docs/extensions/standard.svg +3 -0
- data/docs/extensions/system_management.svg +3 -0
- data/docs/extensions/tables_chairs.svg +3 -0
- data/docs/extensions/technology.svg +3 -0
- data/docs/extensions/transistors.svg +3 -0
- data/docs/extensions/ui_containers.svg +3 -0
- data/docs/extensions/ui_input.svg +3 -0
- data/docs/extensions/ui_menus.svg +3 -0
- data/docs/extensions/ui_misc.svg +3 -0
- data/docs/extensions/ui_widgets.svg +3 -0
- data/docs/extensions/uml_class_diagram.svg +3 -0
- data/docs/extensions/uml_component.svg +3 -0
- data/docs/extensions/uml_entity_relationship.svg +3 -0
- data/docs/extensions/uml_sequence.svg +3 -0
- data/docs/extensions/uml_state_activity.svg +3 -0
- data/docs/extensions/uml_use_case.svg +3 -0
- data/docs/extensions/value_stream_mapping.svg +3 -0
- data/docs/extensions/valves.svg +3 -0
- data/docs/extensions/venn_gradient.svg +3 -0
- data/docs/extensions/venn_plain.svg +3 -0
- data/docs/extensions/vessels.svg +3 -0
- data/docs/extensions.md +614 -0
- data/docs/project_done.svg +1 -1
- data/docs/project_in_progress.svg +1 -1
- data/docs/project_todo.svg +1 -1
- data/docs/samples/grid-direction-horizontal.svg +1 -1
- data/docs/samples/grid-direction-vertical.svg +1 -1
- data/docs/samples/samples.svg +1 -1
- data/docs/samples/styles-glass.svg +1 -1
- data/docs/samples/styles-plain.svg +1 -1
- data/docs/samples/styles-rounded.svg +1 -1
- data/docs/samples/styles-shadow.svg +1 -1
- data/docs/samples/styles-sketch.svg +1 -1
- data/docs/samples/themes-random.svg +1 -1
- data/lib/drawio_dsl/configuration_shapes.rb +12 -8
- data/lib/drawio_dsl/dom_builder.rb +23 -8
- data/lib/drawio_dsl/dom_builder_shapes.rb +92 -82
- data/lib/drawio_dsl/drawio_extensions.json +14024 -0
- data/lib/drawio_dsl/drawio_extensions.rb +4599 -0
- data/lib/drawio_dsl/drawio_extensions_active.rb +32 -0
- 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/layout_engine.rb +17 -7
- data/lib/drawio_dsl/schema/_.rb +8 -4
- data/lib/drawio_dsl/schema/diagram.rb +1 -1
- data/lib/drawio_dsl/schema/layouts/flex_layout.rb +1 -2
- data/lib/drawio_dsl/schema/layouts/grid_layout.rb +1 -2
- data/lib/drawio_dsl/schema/layouts/layout.rb +0 -3
- data/lib/drawio_dsl/schema/node.rb +21 -2
- data/lib/drawio_dsl/schema/node_list.rb +20 -1
- data/lib/drawio_dsl/schema/page.rb +14 -3
- 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 +14 -5
- data/lib/drawio_dsl/schema/virtual/anchor.rb +26 -0
- data/lib/drawio_dsl/version.rb +1 -1
- data/lib/drawio_dsl/xml_builder.rb +4 -8
- data/lib/drawio_dsl.rb +3 -0
- data/package-lock.json +2 -2
- data/package.json +1 -1
- metadata +174 -2
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module DrawioDsl
|
4
|
+
module DrawIoExtensionsActive
|
5
|
+
def apply_active_flags
|
6
|
+
sections.each do |section|
|
7
|
+
section[:shapes].each do |shape|
|
8
|
+
shape[:active] = check_if_active(shape)
|
9
|
+
end
|
10
|
+
section[:active] = section[:shapes].any? { |s| s[:active] }
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def check_if_active(shape)
|
15
|
+
style = shape[:style]
|
16
|
+
|
17
|
+
ban = %w[
|
18
|
+
mxCompositeShape
|
19
|
+
strokeColor=none;fillColor=none
|
20
|
+
shape=image
|
21
|
+
shadow=1
|
22
|
+
shape=partialRectangle;right=0
|
23
|
+
shape=partialRectangle;right=0;left=0
|
24
|
+
]
|
25
|
+
|
26
|
+
return false if style.empty?
|
27
|
+
return false if ban.include?(style)
|
28
|
+
|
29
|
+
true
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -5,7 +5,7 @@ module DrawioDsl
|
|
5
5
|
# :nocov:
|
6
6
|
module DrawioShapes
|
7
7
|
def random(**opts)
|
8
|
-
case rand(
|
8
|
+
case rand(39)
|
9
9
|
when 0
|
10
10
|
h1(**opts)
|
11
11
|
when 1
|
@@ -37,198 +37,210 @@ module DrawioDsl
|
|
37
37
|
when 14
|
38
38
|
cloud(**opts)
|
39
39
|
when 15
|
40
|
-
|
40
|
+
container(**opts)
|
41
41
|
when 16
|
42
|
-
|
42
|
+
container2(**opts)
|
43
43
|
when 17
|
44
|
-
|
44
|
+
container3(**opts)
|
45
45
|
when 18
|
46
|
-
|
46
|
+
container4(**opts)
|
47
47
|
when 19
|
48
|
-
|
48
|
+
cross(**opts)
|
49
49
|
when 20
|
50
|
-
|
50
|
+
envelop(**opts)
|
51
51
|
when 21
|
52
|
-
|
52
|
+
diamond(**opts)
|
53
53
|
when 22
|
54
|
-
|
54
|
+
document(**opts)
|
55
55
|
when 23
|
56
|
-
|
56
|
+
ellipse(**opts)
|
57
57
|
when 24
|
58
|
-
|
58
|
+
hexagon(**opts)
|
59
59
|
when 25
|
60
|
-
|
60
|
+
interface(**opts)
|
61
61
|
when 26
|
62
|
-
|
62
|
+
klass(**opts)
|
63
63
|
when 27
|
64
|
-
|
64
|
+
note(**opts)
|
65
65
|
when 28
|
66
|
-
|
66
|
+
process(**opts)
|
67
67
|
when 29
|
68
|
-
|
68
|
+
rectangle(**opts)
|
69
69
|
when 30
|
70
|
-
|
70
|
+
rectangle2(**opts)
|
71
71
|
when 31
|
72
|
-
|
72
|
+
square(**opts)
|
73
73
|
when 32
|
74
|
-
|
74
|
+
step(**opts)
|
75
75
|
when 33
|
76
|
-
|
76
|
+
tick(**opts)
|
77
77
|
when 34
|
78
|
-
|
78
|
+
face(**opts)
|
79
79
|
when 35
|
80
|
-
|
80
|
+
triangle(**opts)
|
81
81
|
when 36
|
82
|
+
embed_row(**opts)
|
83
|
+
when 37
|
84
|
+
embed_col50(**opts)
|
85
|
+
when 38
|
82
86
|
embed_col200(**opts)
|
83
87
|
end
|
84
88
|
end
|
85
89
|
|
86
|
-
def h1(**opts)
|
87
|
-
builder.add_h1(**opts)
|
90
|
+
def h1(**opts, &block)
|
91
|
+
builder.add_h1(**opts, &block)
|
92
|
+
end
|
93
|
+
|
94
|
+
def h2(**opts, &block)
|
95
|
+
builder.add_h2(**opts, &block)
|
96
|
+
end
|
97
|
+
|
98
|
+
def h3(**opts, &block)
|
99
|
+
builder.add_h3(**opts, &block)
|
88
100
|
end
|
89
101
|
|
90
|
-
def
|
91
|
-
builder.
|
102
|
+
def h4(**opts, &block)
|
103
|
+
builder.add_h4(**opts, &block)
|
92
104
|
end
|
93
105
|
|
94
|
-
def
|
95
|
-
builder.
|
106
|
+
def h5(**opts, &block)
|
107
|
+
builder.add_h5(**opts, &block)
|
96
108
|
end
|
97
109
|
|
98
|
-
def
|
99
|
-
builder.
|
110
|
+
def h6(**opts, &block)
|
111
|
+
builder.add_h6(**opts, &block)
|
100
112
|
end
|
101
113
|
|
102
|
-
def
|
103
|
-
builder.
|
114
|
+
def p(**opts, &block)
|
115
|
+
builder.add_p(**opts, &block)
|
104
116
|
end
|
105
117
|
|
106
|
-
def
|
107
|
-
builder.
|
118
|
+
def actor(**opts, &block)
|
119
|
+
builder.add_actor(**opts, &block)
|
108
120
|
end
|
109
121
|
|
110
|
-
def
|
111
|
-
builder.
|
122
|
+
def actor2(**opts, &block)
|
123
|
+
builder.add_actor2(**opts, &block)
|
112
124
|
end
|
113
125
|
|
114
|
-
def
|
115
|
-
builder.
|
126
|
+
def callout(**opts, &block)
|
127
|
+
builder.add_callout(**opts, &block)
|
116
128
|
end
|
117
129
|
|
118
|
-
def
|
119
|
-
builder.
|
130
|
+
def callout2(**opts, &block)
|
131
|
+
builder.add_callout2(**opts, &block)
|
120
132
|
end
|
121
133
|
|
122
|
-
def
|
123
|
-
builder.
|
134
|
+
def callout3(**opts, &block)
|
135
|
+
builder.add_callout3(**opts, &block)
|
124
136
|
end
|
125
137
|
|
126
|
-
def
|
127
|
-
builder.
|
138
|
+
def callout4(**opts, &block)
|
139
|
+
builder.add_callout4(**opts, &block)
|
128
140
|
end
|
129
141
|
|
130
|
-
def
|
131
|
-
builder.
|
142
|
+
def circle(**opts, &block)
|
143
|
+
builder.add_circle(**opts, &block)
|
132
144
|
end
|
133
145
|
|
134
|
-
def
|
135
|
-
builder.
|
146
|
+
def cloud(**opts, &block)
|
147
|
+
builder.add_cloud(**opts, &block)
|
136
148
|
end
|
137
149
|
|
138
|
-
def
|
139
|
-
builder.
|
150
|
+
def container(**opts, &block)
|
151
|
+
builder.add_container(**opts, &block)
|
140
152
|
end
|
141
153
|
|
142
|
-
def
|
143
|
-
builder.
|
154
|
+
def container2(**opts, &block)
|
155
|
+
builder.add_container2(**opts, &block)
|
144
156
|
end
|
145
157
|
|
146
|
-
def
|
147
|
-
builder.
|
158
|
+
def container3(**opts, &block)
|
159
|
+
builder.add_container3(**opts, &block)
|
148
160
|
end
|
149
161
|
|
150
|
-
def
|
151
|
-
builder.
|
162
|
+
def container4(**opts, &block)
|
163
|
+
builder.add_container4(**opts, &block)
|
152
164
|
end
|
153
165
|
|
154
|
-
def
|
155
|
-
builder.
|
166
|
+
def cross(**opts, &block)
|
167
|
+
builder.add_cross(**opts, &block)
|
156
168
|
end
|
157
169
|
|
158
|
-
def
|
159
|
-
builder.
|
170
|
+
def envelop(**opts, &block)
|
171
|
+
builder.add_envelop(**opts, &block)
|
160
172
|
end
|
161
173
|
|
162
|
-
def
|
163
|
-
builder.
|
174
|
+
def diamond(**opts, &block)
|
175
|
+
builder.add_diamond(**opts, &block)
|
164
176
|
end
|
165
177
|
|
166
|
-
def
|
167
|
-
builder.
|
178
|
+
def document(**opts, &block)
|
179
|
+
builder.add_document(**opts, &block)
|
168
180
|
end
|
169
181
|
|
170
|
-
def
|
171
|
-
builder.
|
182
|
+
def ellipse(**opts, &block)
|
183
|
+
builder.add_ellipse(**opts, &block)
|
172
184
|
end
|
173
185
|
|
174
|
-
def
|
175
|
-
builder.
|
186
|
+
def hexagon(**opts, &block)
|
187
|
+
builder.add_hexagon(**opts, &block)
|
176
188
|
end
|
177
189
|
|
178
|
-
def
|
179
|
-
builder.
|
190
|
+
def interface(**opts, &block)
|
191
|
+
builder.add_interface(**opts, &block)
|
180
192
|
end
|
181
193
|
|
182
|
-
def
|
183
|
-
builder.
|
194
|
+
def klass(**opts, &block)
|
195
|
+
builder.add_klass(**opts, &block)
|
184
196
|
end
|
185
197
|
|
186
|
-
def note(**opts)
|
187
|
-
builder.add_note(**opts)
|
198
|
+
def note(**opts, &block)
|
199
|
+
builder.add_note(**opts, &block)
|
188
200
|
end
|
189
201
|
|
190
|
-
def process(**opts)
|
191
|
-
builder.add_process(**opts)
|
202
|
+
def process(**opts, &block)
|
203
|
+
builder.add_process(**opts, &block)
|
192
204
|
end
|
193
205
|
|
194
|
-
def rectangle(**opts)
|
195
|
-
builder.add_rectangle(**opts)
|
206
|
+
def rectangle(**opts, &block)
|
207
|
+
builder.add_rectangle(**opts, &block)
|
196
208
|
end
|
197
209
|
|
198
|
-
def rectangle2(**opts)
|
199
|
-
builder.add_rectangle2(**opts)
|
210
|
+
def rectangle2(**opts, &block)
|
211
|
+
builder.add_rectangle2(**opts, &block)
|
200
212
|
end
|
201
213
|
|
202
|
-
def square(**opts)
|
203
|
-
builder.add_square(**opts)
|
214
|
+
def square(**opts, &block)
|
215
|
+
builder.add_square(**opts, &block)
|
204
216
|
end
|
205
217
|
|
206
|
-
def step(**opts)
|
207
|
-
builder.add_step(**opts)
|
218
|
+
def step(**opts, &block)
|
219
|
+
builder.add_step(**opts, &block)
|
208
220
|
end
|
209
221
|
|
210
|
-
def tick(**opts)
|
211
|
-
builder.add_tick(**opts)
|
222
|
+
def tick(**opts, &block)
|
223
|
+
builder.add_tick(**opts, &block)
|
212
224
|
end
|
213
225
|
|
214
|
-
def face(**opts)
|
215
|
-
builder.add_face(**opts)
|
226
|
+
def face(**opts, &block)
|
227
|
+
builder.add_face(**opts, &block)
|
216
228
|
end
|
217
229
|
|
218
|
-
def triangle(**opts)
|
219
|
-
builder.add_triangle(**opts)
|
230
|
+
def triangle(**opts, &block)
|
231
|
+
builder.add_triangle(**opts, &block)
|
220
232
|
end
|
221
233
|
|
222
|
-
def embed_row(**opts)
|
223
|
-
builder.add_embed_row(**opts)
|
234
|
+
def embed_row(**opts, &block)
|
235
|
+
builder.add_embed_row(**opts, &block)
|
224
236
|
end
|
225
237
|
|
226
|
-
def embed_col50(**opts)
|
227
|
-
builder.add_embed_col50(**opts)
|
238
|
+
def embed_col50(**opts, &block)
|
239
|
+
builder.add_embed_col50(**opts, &block)
|
228
240
|
end
|
229
241
|
|
230
|
-
def embed_col200(**opts)
|
231
|
-
builder.add_embed_col200(**opts)
|
242
|
+
def embed_col200(**opts, &block)
|
243
|
+
builder.add_embed_col200(**opts, &block)
|
232
244
|
end
|
233
245
|
end
|
234
246
|
# :nocov:
|
@@ -0,0 +1,24 @@
|
|
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 BaseFormatter
|
9
|
+
attr_reader :html
|
10
|
+
|
11
|
+
def initialize(element_style_defaults = {})
|
12
|
+
@html = DrawioDsl::Formatters::HtmlBuilder.new(element_style_defaults)
|
13
|
+
end
|
14
|
+
|
15
|
+
def empty?
|
16
|
+
html.empty?
|
17
|
+
end
|
18
|
+
|
19
|
+
def as_html(new_line: false)
|
20
|
+
html.as_html(new_line: new_line)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,32 @@
|
|
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
|
+
module Factory
|
9
|
+
include KLog::Logging
|
10
|
+
|
11
|
+
FORMATTERS = {
|
12
|
+
class: DrawioDsl::Formatters::KlassFormatter,
|
13
|
+
interface: DrawioDsl::Formatters::InterfaceFormatter
|
14
|
+
}.freeze
|
15
|
+
|
16
|
+
def format(type)
|
17
|
+
unless FORMATTERS.key?(type)
|
18
|
+
log.error "Unknown formatter type: #{type}"
|
19
|
+
@formatter = nil
|
20
|
+
return formatter
|
21
|
+
end
|
22
|
+
|
23
|
+
@formatter = FORMATTERS[type].new
|
24
|
+
formatter
|
25
|
+
end
|
26
|
+
|
27
|
+
def formatter
|
28
|
+
@formatter ||= DrawioDsl::Formatters::BaseFormatter.new
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -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
|