drawio_dsl 0.5.7 → 0.8.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 +49 -22
- 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/blueprint/shapes.rb +10 -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 +30 -21
- 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 +48 -0
- data/.rubocop.yml +1 -0
- data/CHANGELOG.md +28 -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/html-shapes.svg +3 -0
- data/docs/samples/samples.md +4 -0
- 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 +14 -8
- data/lib/drawio_dsl/dom_builder.rb +23 -8
- data/lib/drawio_dsl/dom_builder_shapes.rb +97 -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 +114 -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 +33 -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 +7 -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 +16 -3
- data/lib/drawio_dsl/schema/node_list.rb +20 -1
- data/lib/drawio_dsl/schema/page.rb +14 -7
- 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 +25 -11
- data/lib/drawio_dsl/schema/shapes/todo.rb +9 -0
- data/lib/drawio_dsl/schema/virtual/anchor.rb +2 -0
- data/lib/drawio_dsl/version.rb +1 -1
- data/lib/drawio_dsl/xml_builder.rb +4 -9
- 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(40)
|
9
9
|
when 0
|
10
10
|
h1(**opts)
|
11
11
|
when 1
|
@@ -37,198 +37,216 @@ 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
|
+
todo(**opts)
|
79
79
|
when 35
|
80
|
-
|
80
|
+
face(**opts)
|
81
81
|
when 36
|
82
|
+
triangle(**opts)
|
83
|
+
when 37
|
84
|
+
embed_row(**opts)
|
85
|
+
when 38
|
86
|
+
embed_col50(**opts)
|
87
|
+
when 39
|
82
88
|
embed_col200(**opts)
|
83
89
|
end
|
84
90
|
end
|
85
91
|
|
86
|
-
def h1(**opts)
|
87
|
-
builder.add_h1(**opts)
|
92
|
+
def h1(**opts, &block)
|
93
|
+
builder.add_h1(**opts, &block)
|
94
|
+
end
|
95
|
+
|
96
|
+
def h2(**opts, &block)
|
97
|
+
builder.add_h2(**opts, &block)
|
98
|
+
end
|
99
|
+
|
100
|
+
def h3(**opts, &block)
|
101
|
+
builder.add_h3(**opts, &block)
|
102
|
+
end
|
103
|
+
|
104
|
+
def h4(**opts, &block)
|
105
|
+
builder.add_h4(**opts, &block)
|
88
106
|
end
|
89
107
|
|
90
|
-
def
|
91
|
-
builder.
|
108
|
+
def h5(**opts, &block)
|
109
|
+
builder.add_h5(**opts, &block)
|
92
110
|
end
|
93
111
|
|
94
|
-
def
|
95
|
-
builder.
|
112
|
+
def h6(**opts, &block)
|
113
|
+
builder.add_h6(**opts, &block)
|
96
114
|
end
|
97
115
|
|
98
|
-
def
|
99
|
-
builder.
|
116
|
+
def p(**opts, &block)
|
117
|
+
builder.add_p(**opts, &block)
|
100
118
|
end
|
101
119
|
|
102
|
-
def
|
103
|
-
builder.
|
120
|
+
def actor(**opts, &block)
|
121
|
+
builder.add_actor(**opts, &block)
|
104
122
|
end
|
105
123
|
|
106
|
-
def
|
107
|
-
builder.
|
124
|
+
def actor2(**opts, &block)
|
125
|
+
builder.add_actor2(**opts, &block)
|
108
126
|
end
|
109
127
|
|
110
|
-
def
|
111
|
-
builder.
|
128
|
+
def callout(**opts, &block)
|
129
|
+
builder.add_callout(**opts, &block)
|
112
130
|
end
|
113
131
|
|
114
|
-
def
|
115
|
-
builder.
|
132
|
+
def callout2(**opts, &block)
|
133
|
+
builder.add_callout2(**opts, &block)
|
116
134
|
end
|
117
135
|
|
118
|
-
def
|
119
|
-
builder.
|
136
|
+
def callout3(**opts, &block)
|
137
|
+
builder.add_callout3(**opts, &block)
|
120
138
|
end
|
121
139
|
|
122
|
-
def
|
123
|
-
builder.
|
140
|
+
def callout4(**opts, &block)
|
141
|
+
builder.add_callout4(**opts, &block)
|
124
142
|
end
|
125
143
|
|
126
|
-
def
|
127
|
-
builder.
|
144
|
+
def circle(**opts, &block)
|
145
|
+
builder.add_circle(**opts, &block)
|
128
146
|
end
|
129
147
|
|
130
|
-
def
|
131
|
-
builder.
|
148
|
+
def cloud(**opts, &block)
|
149
|
+
builder.add_cloud(**opts, &block)
|
132
150
|
end
|
133
151
|
|
134
|
-
def
|
135
|
-
builder.
|
152
|
+
def container(**opts, &block)
|
153
|
+
builder.add_container(**opts, &block)
|
136
154
|
end
|
137
155
|
|
138
|
-
def
|
139
|
-
builder.
|
156
|
+
def container2(**opts, &block)
|
157
|
+
builder.add_container2(**opts, &block)
|
140
158
|
end
|
141
159
|
|
142
|
-
def
|
143
|
-
builder.
|
160
|
+
def container3(**opts, &block)
|
161
|
+
builder.add_container3(**opts, &block)
|
144
162
|
end
|
145
163
|
|
146
|
-
def
|
147
|
-
builder.
|
164
|
+
def container4(**opts, &block)
|
165
|
+
builder.add_container4(**opts, &block)
|
148
166
|
end
|
149
167
|
|
150
|
-
def
|
151
|
-
builder.
|
168
|
+
def cross(**opts, &block)
|
169
|
+
builder.add_cross(**opts, &block)
|
152
170
|
end
|
153
171
|
|
154
|
-
def
|
155
|
-
builder.
|
172
|
+
def envelop(**opts, &block)
|
173
|
+
builder.add_envelop(**opts, &block)
|
156
174
|
end
|
157
175
|
|
158
|
-
def
|
159
|
-
builder.
|
176
|
+
def diamond(**opts, &block)
|
177
|
+
builder.add_diamond(**opts, &block)
|
160
178
|
end
|
161
179
|
|
162
|
-
def
|
163
|
-
builder.
|
180
|
+
def document(**opts, &block)
|
181
|
+
builder.add_document(**opts, &block)
|
164
182
|
end
|
165
183
|
|
166
|
-
def
|
167
|
-
builder.
|
184
|
+
def ellipse(**opts, &block)
|
185
|
+
builder.add_ellipse(**opts, &block)
|
168
186
|
end
|
169
187
|
|
170
|
-
def
|
171
|
-
builder.
|
188
|
+
def hexagon(**opts, &block)
|
189
|
+
builder.add_hexagon(**opts, &block)
|
172
190
|
end
|
173
191
|
|
174
|
-
def
|
175
|
-
builder.
|
192
|
+
def interface(**opts, &block)
|
193
|
+
builder.add_interface(**opts, &block)
|
176
194
|
end
|
177
195
|
|
178
|
-
def
|
179
|
-
builder.
|
196
|
+
def klass(**opts, &block)
|
197
|
+
builder.add_klass(**opts, &block)
|
180
198
|
end
|
181
199
|
|
182
|
-
def
|
183
|
-
builder.
|
200
|
+
def note(**opts, &block)
|
201
|
+
builder.add_note(**opts, &block)
|
184
202
|
end
|
185
203
|
|
186
|
-
def
|
187
|
-
builder.
|
204
|
+
def process(**opts, &block)
|
205
|
+
builder.add_process(**opts, &block)
|
188
206
|
end
|
189
207
|
|
190
|
-
def
|
191
|
-
builder.
|
208
|
+
def rectangle(**opts, &block)
|
209
|
+
builder.add_rectangle(**opts, &block)
|
192
210
|
end
|
193
211
|
|
194
|
-
def
|
195
|
-
builder.
|
212
|
+
def rectangle2(**opts, &block)
|
213
|
+
builder.add_rectangle2(**opts, &block)
|
196
214
|
end
|
197
215
|
|
198
|
-
def
|
199
|
-
builder.
|
216
|
+
def square(**opts, &block)
|
217
|
+
builder.add_square(**opts, &block)
|
200
218
|
end
|
201
219
|
|
202
|
-
def
|
203
|
-
builder.
|
220
|
+
def step(**opts, &block)
|
221
|
+
builder.add_step(**opts, &block)
|
204
222
|
end
|
205
223
|
|
206
|
-
def
|
207
|
-
builder.
|
224
|
+
def tick(**opts, &block)
|
225
|
+
builder.add_tick(**opts, &block)
|
208
226
|
end
|
209
227
|
|
210
|
-
def
|
211
|
-
builder.
|
228
|
+
def todo(**opts, &block)
|
229
|
+
builder.add_todo(**opts, &block)
|
212
230
|
end
|
213
231
|
|
214
|
-
def face(**opts)
|
215
|
-
builder.add_face(**opts)
|
232
|
+
def face(**opts, &block)
|
233
|
+
builder.add_face(**opts, &block)
|
216
234
|
end
|
217
235
|
|
218
|
-
def triangle(**opts)
|
219
|
-
builder.add_triangle(**opts)
|
236
|
+
def triangle(**opts, &block)
|
237
|
+
builder.add_triangle(**opts, &block)
|
220
238
|
end
|
221
239
|
|
222
|
-
def embed_row(**opts)
|
223
|
-
builder.add_embed_row(**opts)
|
240
|
+
def embed_row(**opts, &block)
|
241
|
+
builder.add_embed_row(**opts, &block)
|
224
242
|
end
|
225
243
|
|
226
|
-
def embed_col50(**opts)
|
227
|
-
builder.add_embed_col50(**opts)
|
244
|
+
def embed_col50(**opts, &block)
|
245
|
+
builder.add_embed_col50(**opts, &block)
|
228
246
|
end
|
229
247
|
|
230
|
-
def embed_col200(**opts)
|
231
|
-
builder.add_embed_col200(**opts)
|
248
|
+
def embed_col200(**opts, &block)
|
249
|
+
builder.add_embed_col200(**opts, &block)
|
232
250
|
end
|
233
251
|
end
|
234
252
|
# :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,33 @@
|
|
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
|
+
klass: DrawioDsl::Formatters::KlassFormatter,
|
13
|
+
class: DrawioDsl::Formatters::KlassFormatter, # alias for klass
|
14
|
+
interface: DrawioDsl::Formatters::InterfaceFormatter
|
15
|
+
}.freeze
|
16
|
+
|
17
|
+
def format_instance(type)
|
18
|
+
unless FORMATTERS.key?(type)
|
19
|
+
log.error "Unknown formatter type: #{type}"
|
20
|
+
@formatter = nil
|
21
|
+
return formatter
|
22
|
+
end
|
23
|
+
|
24
|
+
@formatter = FORMATTERS[type].new
|
25
|
+
formatter
|
26
|
+
end
|
27
|
+
|
28
|
+
def formatter
|
29
|
+
@formatter ||= DrawioDsl::Formatters::BaseFormatter.new
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
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
|