hot_module 1.0.0.alpha3 → 1.0.0.alpha5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bc20758effe540a0a4bbb8627fcdd7b3cf528792795de33dd039542e495ad8f9
4
- data.tar.gz: e6dd965829f44ec8402c8c3a8664ac6c63a203050c945bba89eec02081629e48
3
+ metadata.gz: 311aa96ca587c79afa0971208fc11d96c13266be65285c012e40bd5ebb8a9ca5
4
+ data.tar.gz: d15b81ff3e9f0aa95bc733f7435ddabda886526992bf41dbb9dc8e510f8f3b53
5
5
  SHA512:
6
- metadata.gz: 1600644deca41a43f7e9fdd3a33b880d20867cedbcc3251d025c3d0db9c0a0e63239328f46a57ad23a7e71de1793c5c987acb815023fb7496481dadca65d597f
7
- data.tar.gz: 8901f9bfccaadbde5655bc5b60b5a03120ad422b8fb664b8305a1b4fe2489453608953bdc67f57a85a6125e55e25811af451e11440cdf873a48f89f905939296
6
+ metadata.gz: ca18eaf39bb5cd695097bd604bc3af29476bc9cb234f7e4212a2089d75a098789845e2d5252e729c8bf537f2287b61e20861b76eab317b8f3c8878d70230dee5
7
+ data.tar.gz: 3db8c8480001f9e94090a6188a0f95485cb69c9c446343149c482464814c133e6836e3f95052d86eb8b3545394387869764ccb5010f12bdf5d710dba49783944
data/CHANGELOG.md CHANGED
@@ -1,5 +1,5 @@
1
1
  ## [Unreleased]
2
2
 
3
- ## [0.1.0] - 2022-09-21
3
+ ## [1.0.0.alpha5] - 2023-03-23
4
4
 
5
- - Initial release
5
+ - Add Bridgetown plugin support
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- hot_module (1.0.0.alpha3)
4
+ hot_module (1.0.0.alpha5)
5
5
  nokolexbor (~> 0.4)
6
6
 
7
7
  GEM
@@ -34,7 +34,6 @@ GEM
34
34
  nokogiri (1.14.2-x86_64-linux)
35
35
  racc (~> 1.4)
36
36
  nokolexbor (0.4.0-arm64-darwin)
37
- nokolexbor (0.4.0-x86_64-linux)
38
37
  parallel (1.22.1)
39
38
  parser (3.2.1.1)
40
39
  ast (~> 2.4.1)
data/benchmark.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  $LOAD_PATH.unshift File.expand_path("lib", __dir__)
2
4
  require "hot_module"
3
5
 
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ module HoTModuLe
4
+ class ComponentRenderer < Bridgetown::Builder
5
+ def build
6
+ registered_tags = {}
7
+ Bridgetown::Component.subclasses.each do |component|
8
+ next unless component.respond_to?(:tag_name)
9
+
10
+ registered_tags[component.tag_name] = component
11
+ end
12
+
13
+ render_html_modules(registered_tags)
14
+ end
15
+
16
+ def render_html_modules(registered_tags) # rubocop:todo Metrics
17
+ inspect_html do |doc, resource| # rubocop:todo Metrics
18
+ view_context = Bridgetown::ERBView.new(resource)
19
+
20
+ registered_tags.each do |tag_name, component|
21
+ doc.xpath("//#{tag_name}").reverse.each do |node|
22
+ if node["hmod:ignore"]
23
+ node.attribute("hmod:ignore").remove
24
+ next
25
+ end
26
+
27
+ attrs = node.attributes.transform_values(&:value)
28
+ attrs.reject! { |k| k.start_with?("hmod:") }
29
+
30
+ new_attrs = {}
31
+ attrs.each do |k, v|
32
+ next unless k.start_with?("ruby:")
33
+
34
+ new_key = k.delete_prefix("ruby:")
35
+ attrs.delete(k)
36
+ new_attrs[new_key] = resource.instance_eval(v)
37
+ end
38
+ attrs.merge!(new_attrs)
39
+ attrs.transform_keys!(&:to_sym)
40
+
41
+ new_node = node.replace(
42
+ component.new(**attrs).render_in(view_context) { node.children.to_html }
43
+ )
44
+ new_node.first.attribute("hmod:ignore")&.remove
45
+ end
46
+ rescue StandardError => e
47
+ Bridgetown.logger.error "Unable to render <#{tag_name}> (#{component}) in #{resource.path}"
48
+ raise e
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -2,5 +2,5 @@
2
2
 
3
3
  module HoTModuLe
4
4
  # @return [String]
5
- VERSION = "1.0.0.alpha3"
5
+ VERSION = "1.0.0.alpha5"
6
6
  end
data/lib/hot_module.rb CHANGED
@@ -126,7 +126,7 @@ module HoTModuLe
126
126
  def render_element(attributes: self.attributes, content: self.content, return_node: false) # rubocop:disable Metrics
127
127
  doc = self.class.doc.clone
128
128
 
129
- tmpl_el = doc.css("> template").find { _1.attributes.length.zero? }
129
+ tmpl_el = doc.css("> template").find { _1.attributes.empty? }
130
130
 
131
131
  unless tmpl_el
132
132
  tmpl_el = doc.document.create_element("template")
@@ -302,3 +302,26 @@ module HoTModuLe
302
302
  @_context_locals = previous_context
303
303
  end
304
304
  end
305
+
306
+ if defined?(Bridgetown)
307
+ Bridgetown.initializer :hot_module do |config|
308
+ Bridgetown::Component.extend ActiveSupport::DescendantsTracker
309
+
310
+ HoTModuLe.module_eval do
311
+ def render_in(*)
312
+ @attributes&.[]=("hmod:ignore", "")
313
+ super
314
+ end
315
+ end
316
+
317
+ # Eager load all components
318
+ config.hook :site, :after_reset do |site|
319
+ unless site.config.eager_load_paths.find { _1.end_with?(site.config.components_dir) }
320
+ site.config.eager_load_paths << site.config.autoload_paths.find { _1.end_with?(site.config.components_dir) }
321
+ end
322
+ end
323
+
324
+ require_relative "hot_module/component_renderer"
325
+ config.builder HoTModuLe::ComponentRenderer
326
+ end
327
+ end
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.alpha3
4
+ version: 1.0.0.alpha5
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-03-22 00:00:00.000000000 Z
11
+ date: 2023-03-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokolexbor
@@ -56,6 +56,7 @@ files:
56
56
  - benchmark.rb
57
57
  - hot_module.gemspec
58
58
  - lib/hot_module.rb
59
+ - lib/hot_module/component_renderer.rb
59
60
  - lib/hot_module/fragment.rb
60
61
  - lib/hot_module/petite.rb
61
62
  - lib/hot_module/query_selection.rb