hot_module 1.0.0.alpha3 → 1.0.0.alpha4

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: bc20758effe540a0a4bbb8627fcdd7b3cf528792795de33dd039542e495ad8f9
4
- data.tar.gz: e6dd965829f44ec8402c8c3a8664ac6c63a203050c945bba89eec02081629e48
3
+ metadata.gz: 8f1f98447dc175047e9ff9158705fb70736244cea4f1dcd8f014a9d7c19bd525
4
+ data.tar.gz: 65fa70bbba49a2e0077716315e976f5cc61db9228df638c5ef318d08e5d787b6
5
5
  SHA512:
6
- metadata.gz: 1600644deca41a43f7e9fdd3a33b880d20867cedbcc3251d025c3d0db9c0a0e63239328f46a57ad23a7e71de1793c5c987acb815023fb7496481dadca65d597f
7
- data.tar.gz: 8901f9bfccaadbde5655bc5b60b5a03120ad422b8fb664b8305a1b4fe2489453608953bdc67f57a85a6125e55e25811af451e11440cdf873a48f89f905939296
6
+ metadata.gz: 126deaf01781d54059a03645e1ae894b169702b37a622427010ce6e87523428ed937d18877025bbcab1900b0887b7b17bf25ece52076689db75ae6d19f60e553
7
+ data.tar.gz: 94ebbe7fa9f2a084e1babf420b71f96ede5e01e73190272d0168d26fde8d6dbb032cf93ed9bea3ccb9ec91843f5a27f260fb27dc1a73f912aa822f14bc8a2319
data/CHANGELOG.md CHANGED
@@ -1,5 +1,5 @@
1
1
  ## [Unreleased]
2
2
 
3
- ## [0.1.0] - 2022-09-21
3
+ ## [1.0.0.alpha4] - 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.alpha4)
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.alpha4"
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
+ 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.alpha4
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