hot_module 1.0.0.alpha11 → 1.0.0.alpha13
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 +1 -1
- data/lib/hot_module/component_renderer.rb +4 -9
- data/lib/hot_module/version.rb +1 -1
- data/lib/hot_module.rb +26 -10
- 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: 90f40d53a3d644454adb306af193e5258970067eaa31075263c13ce31ce23b3f
|
4
|
+
data.tar.gz: f3308d84a9605fce9edeff88e00e29ce88ebee8d5dcde9f96439b46f6a512567
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aa8b2ce963950a27f69a65c23db73f544fd52e84ab5b0d200667fc2e2a976dc2a8121c6fa7de0b4e4a50f8abb49d7243b484aea7210fc14cb3e8708414050248
|
7
|
+
data.tar.gz: 8a4a0de3a7dbd16b019327282ec3f1e604a622baf4f47dc21fffe6cd2ed9c25170de5d453ea43185deffe344fcd5324cd8696aff2046821b7988179ec4edc677
|
data/Gemfile.lock
CHANGED
@@ -1,10 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module HoTModuLe
|
4
|
-
class View < Bridgetown::ERBView
|
5
|
-
attr_accessor :child_nodes
|
6
|
-
end
|
7
|
-
|
8
4
|
class ComponentRenderer < Bridgetown::Builder
|
9
5
|
def build
|
10
6
|
render_html_modules
|
@@ -13,13 +9,13 @@ module HoTModuLe
|
|
13
9
|
# rubocop:todo Metrics
|
14
10
|
def render_html_modules
|
15
11
|
inspect_html do |doc, resource|
|
16
|
-
view_context =
|
12
|
+
view_context = Bridgetown::ERBView.new(resource)
|
17
13
|
|
18
14
|
HoTModuLe.registered_elements.each do |component|
|
19
15
|
tag_name = component.tag_name
|
20
16
|
doc.xpath("//#{tag_name}").reverse.each do |node|
|
21
17
|
if node["hmod:ignore"]
|
22
|
-
node.
|
18
|
+
node.remove_attribute("hmod:ignore")
|
23
19
|
next
|
24
20
|
end
|
25
21
|
|
@@ -37,11 +33,10 @@ module HoTModuLe
|
|
37
33
|
attrs.merge!(new_attrs)
|
38
34
|
attrs.transform_keys!(&:to_sym)
|
39
35
|
|
40
|
-
view_context.child_nodes = node.children
|
41
36
|
new_node = node.replace(
|
42
|
-
component.new(**attrs).render_in(view_context) { node.children
|
37
|
+
component.new(**attrs).render_in(view_context, rendering_mode: :node) { node.children }
|
43
38
|
)
|
44
|
-
new_node.
|
39
|
+
new_node.remove_attribute("hmod:ignore")
|
45
40
|
end
|
46
41
|
rescue StandardError => e
|
47
42
|
Bridgetown.logger.error "Unable to render <#{tag_name}> (#{component}) in #{resource.path}"
|
data/lib/hot_module/version.rb
CHANGED
data/lib/hot_module.rb
CHANGED
@@ -38,6 +38,11 @@ module HoTModuLe
|
|
38
38
|
@registered_elements
|
39
39
|
end
|
40
40
|
|
41
|
+
def self.register_element(component)
|
42
|
+
@registered_elements ||= Concurrent::Set.new
|
43
|
+
@registered_elements << component
|
44
|
+
end
|
45
|
+
|
41
46
|
# @param klass [Class]
|
42
47
|
# @return [void]
|
43
48
|
def self.included(klass)
|
@@ -98,7 +103,7 @@ module HoTModuLe
|
|
98
103
|
# @return [String]
|
99
104
|
def tag_name(value = nil)
|
100
105
|
@tag_name ||= begin
|
101
|
-
HoTModuLe.
|
106
|
+
HoTModuLe.register_element self
|
102
107
|
value
|
103
108
|
end
|
104
109
|
end
|
@@ -145,14 +150,25 @@ module HoTModuLe
|
|
145
150
|
# @return [Hash]
|
146
151
|
def attributes = {}
|
147
152
|
|
153
|
+
def rendering_mode = @_rendering_mode || :node
|
154
|
+
|
155
|
+
def rendering_mode=(mode)
|
156
|
+
@_rendering_mode = case mode
|
157
|
+
when :node, :string
|
158
|
+
mode
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
148
162
|
# @param attributes [Hash]
|
149
163
|
# @param content [String, Nokolexbor::Element]
|
150
|
-
#
|
151
|
-
def render_element(attributes: self.attributes, content: self.content, return_node: false) # rubocop:disable Metrics
|
164
|
+
def render_element(attributes: self.attributes, content: self.content) # rubocop:disable Metrics
|
152
165
|
doc = self.class.doc.clone
|
153
166
|
@_content = content
|
154
167
|
|
155
|
-
tmpl_el = doc.css("> template").find
|
168
|
+
tmpl_el = doc.css("> template").find do |node|
|
169
|
+
node.attributes.empty? ||
|
170
|
+
(node.attributes.count == 1 && node.attributes.any? { |k| k[0].start_with?("data-") })
|
171
|
+
end
|
156
172
|
|
157
173
|
unless tmpl_el
|
158
174
|
tmpl_el = doc.document.create_element("template")
|
@@ -167,7 +183,7 @@ module HoTModuLe
|
|
167
183
|
HoTModuLe.registered_elements.each do |component|
|
168
184
|
tmpl_el.children[0].css(component.tag_name).reverse.each do |node|
|
169
185
|
if node["hmod:ignore"]
|
170
|
-
node.
|
186
|
+
node.remove_attribute("hmod:ignore")
|
171
187
|
next
|
172
188
|
end
|
173
189
|
|
@@ -187,7 +203,7 @@ module HoTModuLe
|
|
187
203
|
new_node = node.replace(
|
188
204
|
component.new(**attrs).render_element(content: node.children)
|
189
205
|
)
|
190
|
-
new_node.
|
206
|
+
new_node.remove_attribute("hmod:ignore")
|
191
207
|
end
|
192
208
|
end
|
193
209
|
|
@@ -242,8 +258,7 @@ module HoTModuLe
|
|
242
258
|
tmpl_el.remove
|
243
259
|
end
|
244
260
|
|
245
|
-
|
246
|
-
return_node ? doc : doc.to_html
|
261
|
+
rendering_mode == :node ? doc : doc.to_html
|
247
262
|
end
|
248
263
|
|
249
264
|
def call(...) = render_element(...)
|
@@ -375,9 +390,10 @@ if defined?(Bridgetown)
|
|
375
390
|
Bridgetown::Component.extend ActiveSupport::DescendantsTracker
|
376
391
|
|
377
392
|
HoTModuLe.module_eval do
|
378
|
-
def render_in(
|
393
|
+
def render_in(view_context, rendering_mode = :string, &block)
|
379
394
|
@attributes&.[]=("hmod:ignore", "")
|
380
|
-
|
395
|
+
self.rendering_mode = rendering_mode
|
396
|
+
super(view_context, &block)
|
381
397
|
end
|
382
398
|
end
|
383
399
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hot_module
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.0.
|
4
|
+
version: 1.0.0.alpha13
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jared White
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-05-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: concurrent-ruby
|