phlexing 0.4.0 → 0.5.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/Gemfile.lock +6 -6
- data/lib/phlexing/helpers.rb +16 -4
- data/lib/phlexing/options.rb +3 -2
- data/lib/phlexing/template_generator.rb +32 -4
- data/lib/phlexing/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 32473f2d62d2af3b3a05ae264b34ed586914fad139c2fa75e92d09560f1d7a12
|
4
|
+
data.tar.gz: 7175a9dc57029272641b7b025304ff87510e459623a77881703d4f55ea981e40
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ec5c1a3b6cc6d5061b555e328b8bcf4a2e0ea179e2ace84e6fb63ccb97a3a78ba58c2f822646cd94d884eb2b87c90762e05a7afff79cf3086c4b75c3bb052b11
|
7
|
+
data.tar.gz: ce270b4f89019cc589b0823cc3500b36eb25040fe3f19a737dc8676852019598dcd32489437cb1cd19bbf3d02053ef3cacf9156c260563a82e5e06d138769255
|
data/Gemfile.lock
CHANGED
@@ -17,7 +17,7 @@ GIT
|
|
17
17
|
PATH
|
18
18
|
remote: .
|
19
19
|
specs:
|
20
|
-
phlexing (0.
|
20
|
+
phlexing (0.5.0)
|
21
21
|
deface (~> 1.9)
|
22
22
|
html_press (~> 0.8.2)
|
23
23
|
nokogiri (~> 1.0)
|
@@ -123,7 +123,7 @@ GEM
|
|
123
123
|
i18n (1.12.0)
|
124
124
|
concurrent-ruby (~> 1.0)
|
125
125
|
json (2.6.2)
|
126
|
-
loofah (2.
|
126
|
+
loofah (2.20.0)
|
127
127
|
crass (~> 1.0.2)
|
128
128
|
nokogiri (>= 1.5.9)
|
129
129
|
mail (2.8.1)
|
@@ -150,15 +150,15 @@ GEM
|
|
150
150
|
timeout
|
151
151
|
net-smtp (0.3.3)
|
152
152
|
net-protocol
|
153
|
-
nio4r (2.5.
|
154
|
-
nokogiri (1.14.
|
153
|
+
nio4r (2.5.9)
|
154
|
+
nokogiri (1.14.3-x86_64-darwin)
|
155
155
|
racc (~> 1.4)
|
156
|
-
nokogiri (1.14.
|
156
|
+
nokogiri (1.14.3-x86_64-linux)
|
157
157
|
racc (~> 1.4)
|
158
158
|
parallel (1.22.1)
|
159
159
|
parser (3.2.0.0)
|
160
160
|
ast (~> 2.4.1)
|
161
|
-
phlex (1.
|
161
|
+
phlex (1.8.1)
|
162
162
|
concurrent-ruby (~> 1.2)
|
163
163
|
erb (>= 4)
|
164
164
|
zeitwerk (~> 2.6)
|
data/lib/phlexing/helpers.rb
CHANGED
@@ -9,6 +9,8 @@ module Phlexing
|
|
9
9
|
Phlex::HTML::VoidElements.registered_elements.values +
|
10
10
|
Phlex::HTML::StandardElements.registered_elements.values
|
11
11
|
|
12
|
+
SVG_ELEMENTS = Phlex::SVG::StandardElements.registered_elements.values.to_h { |element| [element.downcase, element] }
|
13
|
+
|
12
14
|
def whitespace
|
13
15
|
options.whitespace? ? "whitespace\n" : ""
|
14
16
|
end
|
@@ -59,17 +61,27 @@ module Phlexing
|
|
59
61
|
end
|
60
62
|
|
61
63
|
def tag_name(node)
|
62
|
-
return "template_tag" if node.name == "template-tag"
|
63
|
-
|
64
64
|
name = node.name.tr("-", "_")
|
65
65
|
|
66
|
-
|
66
|
+
return name if name == "template_tag"
|
67
|
+
return name if name.start_with?("s.")
|
68
|
+
return name if KNOWN_ELEMENTS.include?(name)
|
69
|
+
|
70
|
+
@converter.custom_elements << name
|
67
71
|
|
68
72
|
name
|
69
73
|
end
|
70
74
|
|
71
|
-
def block
|
75
|
+
def block(params = nil)
|
72
76
|
out << " {"
|
77
|
+
|
78
|
+
if params
|
79
|
+
out << " "
|
80
|
+
out << "|"
|
81
|
+
out << params
|
82
|
+
out << "|"
|
83
|
+
end
|
84
|
+
|
73
85
|
yield
|
74
86
|
out << " }"
|
75
87
|
end
|
data/lib/phlexing/options.rb
CHANGED
@@ -2,16 +2,17 @@
|
|
2
2
|
|
3
3
|
module Phlexing
|
4
4
|
class Options
|
5
|
-
attr_accessor :component, :component_name, :parent_component, :whitespace
|
5
|
+
attr_accessor :component, :component_name, :parent_component, :whitespace, :svg_param
|
6
6
|
|
7
7
|
alias_method :whitespace?, :whitespace
|
8
8
|
alias_method :component?, :component
|
9
9
|
|
10
|
-
def initialize(component: false, component_name: "Component", parent_component: "Phlex::HTML", whitespace: true)
|
10
|
+
def initialize(component: false, component_name: "Component", parent_component: "Phlex::HTML", whitespace: true, svg_param: "s")
|
11
11
|
@component = component
|
12
12
|
@component_name = safe_constant_name(component_name)
|
13
13
|
@parent_component = safe_constant_name(parent_component)
|
14
14
|
@whitespace = whitespace
|
15
|
+
@svg_param = svg_param
|
15
16
|
end
|
16
17
|
|
17
18
|
def safe_constant_name(name)
|
@@ -54,7 +54,7 @@ module Phlexing
|
|
54
54
|
|
55
55
|
attributes = []
|
56
56
|
|
57
|
-
node.
|
57
|
+
node.attribute_nodes.each do |attribute|
|
58
58
|
attributes << handle_attribute(attribute)
|
59
59
|
end
|
60
60
|
|
@@ -74,7 +74,13 @@ module Phlexing
|
|
74
74
|
def handle_html_attribute_output(attribute)
|
75
75
|
String.new.tap { |s|
|
76
76
|
s << arg(attribute.name.underscore)
|
77
|
-
|
77
|
+
if attribute.value.blank? && !attribute.to_html.include?("=")
|
78
|
+
# handling boolean attributes
|
79
|
+
# eg. <input required> => input(required: true)
|
80
|
+
s << "true"
|
81
|
+
else
|
82
|
+
s << quote(attribute.value)
|
83
|
+
end
|
78
84
|
}
|
79
85
|
end
|
80
86
|
|
@@ -141,8 +147,10 @@ module Phlexing
|
|
141
147
|
out << tag_name(node)
|
142
148
|
out << handle_attributes(node)
|
143
149
|
|
150
|
+
params = node.name == "svg" ? options.svg_param : nil
|
151
|
+
|
144
152
|
if node.children.any?
|
145
|
-
block { handle_children(node, level) }
|
153
|
+
block(params) { handle_children(node, level) }
|
146
154
|
end
|
147
155
|
|
148
156
|
out << newline
|
@@ -183,6 +191,22 @@ module Phlexing
|
|
183
191
|
out << newline if level == 1
|
184
192
|
end
|
185
193
|
|
194
|
+
def handle_svg_node(node, level)
|
195
|
+
node.children.each do |child|
|
196
|
+
child.traverse do |subchild|
|
197
|
+
subchild.name = SVG_ELEMENTS[subchild.name] if SVG_ELEMENTS.key?(subchild.name)
|
198
|
+
subchild.name = subchild.name.prepend("#{options.svg_param}.") # rubocop:disable Style/RedundantSelfAssignment
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
202
|
+
whitespace_before = options.whitespace
|
203
|
+
options.whitespace = false
|
204
|
+
|
205
|
+
handle_element_node(node, level)
|
206
|
+
|
207
|
+
options.whitespace = whitespace_before
|
208
|
+
end
|
209
|
+
|
186
210
|
def handle_document_node(node, level)
|
187
211
|
handle_children(node, level)
|
188
212
|
end
|
@@ -198,7 +222,11 @@ module Phlexing
|
|
198
222
|
in Nokogiri::XML::Text
|
199
223
|
handle_text_node(node)
|
200
224
|
in Nokogiri::XML::Element
|
201
|
-
|
225
|
+
if node.name == "svg"
|
226
|
+
handle_svg_node(node, level)
|
227
|
+
else
|
228
|
+
handle_element_node(node, level)
|
229
|
+
end
|
202
230
|
in Nokogiri::HTML4::Document | Nokogiri::HTML4::DocumentFragment | Nokogiri::XML::DTD
|
203
231
|
handle_document_node(node, level)
|
204
232
|
in Nokogiri::XML::Comment
|
data/lib/phlexing/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: phlexing
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marco Roth
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-04-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: deface
|