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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d90f5f3aee3f096c2b0dc962592cef3ff02563a5a8b5bef47cab9adc9eabf309
4
- data.tar.gz: cdda20661fa3aab05d14f793a4b6ef3cf6d9c0bfc116a28a49a1118ab1286d2c
3
+ metadata.gz: 90f40d53a3d644454adb306af193e5258970067eaa31075263c13ce31ce23b3f
4
+ data.tar.gz: f3308d84a9605fce9edeff88e00e29ce88ebee8d5dcde9f96439b46f6a512567
5
5
  SHA512:
6
- metadata.gz: ff109253d98e063cfcf6a79481a3cde7934afca492dcca0edd865266cc1401918ba858f04f1cd7ae125d424332f9cdbfd1e562fe4e9914c55313a08070aa61cc
7
- data.tar.gz: bb1864cc03b42c1612bd53aa29ef7278d38ad46b8d3362ab31b6093aa8abe907a7a2d1587b04338b2e2b74b868136235181a6871ef27eecb2690e59765d9e3c7
6
+ metadata.gz: aa8b2ce963950a27f69a65c23db73f544fd52e84ab5b0d200667fc2e2a976dc2a8121c6fa7de0b4e4a50f8abb49d7243b484aea7210fc14cb3e8708414050248
7
+ data.tar.gz: 8a4a0de3a7dbd16b019327282ec3f1e604a622baf4f47dc21fffe6cd2ed9c25170de5d453ea43185deffe344fcd5324cd8696aff2046821b7988179ec4edc677
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- hot_module (1.0.0.alpha11)
4
+ hot_module (1.0.0.alpha13)
5
5
  concurrent-ruby (~> 1.2)
6
6
  nokolexbor (>= 0.4.2)
7
7
 
@@ -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 = HoTModuLe::View.new(resource)
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.attribute("hmod:ignore").remove
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.to_html.html_safe }
37
+ component.new(**attrs).render_in(view_context, rendering_mode: :node) { node.children }
43
38
  )
44
- new_node.first.attribute("hmod:ignore")&.remove
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}"
@@ -2,5 +2,5 @@
2
2
 
3
3
  module HoTModuLe
4
4
  # @return [String]
5
- VERSION = "1.0.0.alpha11"
5
+ VERSION = "1.0.0.alpha13"
6
6
  end
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.registered_elements << self
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
- # @param return_node [Boolean]
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 { _1.attributes.empty? }
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.attribute("hmod:ignore").remove
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.first.attribute("hmod:ignore")&.remove
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
- # And that is that.
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
- super
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.alpha11
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-04-08 00:00:00.000000000 Z
11
+ date: 2023-05-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby