hot_module 1.0.0.alpha2 → 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: 213948e4061c8dfb1da32e9621365caaa4d5594125f03c63802ff3fb53aa3b24
4
- data.tar.gz: b4077c814479ea1d65d2143eaf6f6b7abba996787408846474c3933ffccf1fa9
3
+ metadata.gz: 8f1f98447dc175047e9ff9158705fb70736244cea4f1dcd8f014a9d7c19bd525
4
+ data.tar.gz: 65fa70bbba49a2e0077716315e976f5cc61db9228df638c5ef318d08e5d787b6
5
5
  SHA512:
6
- metadata.gz: 76b4783da63ac259d17c0fa78c1a30b51f2919fbbbe1a5e007c315d3facb3249ffab2c0538d42322654868faf5b45f342a70b79f4b91c64ee67638644583a283
7
- data.tar.gz: 00c1db27bd91bc5ea110af3bc26db58dc254b43960b182f327f938ea2f6e1eb440cde6ff4c9e40c2732d215600d671c0e73eeb005178174aa9005e6a3bdfb746
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,21 +1,21 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- hot_module (1.0.0.alpha2)
5
- nokolexbor (~> 0.3)
4
+ hot_module (1.0.0.alpha4)
5
+ nokolexbor (~> 0.4)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- activesupport (7.0.4)
10
+ activesupport (7.0.4.3)
11
11
  concurrent-ruby (~> 1.0, >= 1.0.2)
12
12
  i18n (>= 1.6, < 2)
13
13
  minitest (>= 5.1)
14
14
  tzinfo (~> 2.0)
15
15
  ast (2.4.2)
16
16
  backport (1.2.0)
17
- benchmark (0.2.0)
18
- concurrent-ruby (1.1.10)
17
+ benchmark (0.2.1)
18
+ concurrent-ruby (1.2.2)
19
19
  diff-lcs (1.5.0)
20
20
  e2mmap (0.1.0)
21
21
  hash_with_dot_access (1.2.0)
@@ -23,44 +23,44 @@ GEM
23
23
  i18n (1.12.0)
24
24
  concurrent-ruby (~> 1.0)
25
25
  jaro_winkler (1.5.4)
26
- json (2.6.2)
26
+ json (2.6.3)
27
27
  kramdown (2.4.0)
28
28
  rexml
29
29
  kramdown-parser-gfm (1.1.0)
30
30
  kramdown (~> 2.0)
31
- minitest (5.16.3)
32
- nokogiri (1.13.8-arm64-darwin)
31
+ minitest (5.18.0)
32
+ nokogiri (1.14.2-arm64-darwin)
33
33
  racc (~> 1.4)
34
- nokogiri (1.13.8-x86_64-linux)
34
+ nokogiri (1.14.2-x86_64-linux)
35
35
  racc (~> 1.4)
36
- nokolexbor (0.3.7-arm64-darwin)
36
+ nokolexbor (0.4.0-arm64-darwin)
37
37
  parallel (1.22.1)
38
- parser (3.1.2.1)
38
+ parser (3.2.1.1)
39
39
  ast (~> 2.4.1)
40
- racc (1.6.0)
40
+ racc (1.6.2)
41
41
  rainbow (3.1.1)
42
42
  rake (13.0.6)
43
- regexp_parser (2.5.0)
43
+ regexp_parser (2.7.0)
44
44
  reverse_markdown (2.1.1)
45
45
  nokogiri
46
46
  rexml (3.2.5)
47
- rubocop (1.36.0)
47
+ rubocop (1.48.1)
48
48
  json (~> 2.3)
49
49
  parallel (~> 1.10)
50
- parser (>= 3.1.2.1)
50
+ parser (>= 3.2.0.0)
51
51
  rainbow (>= 2.2.2, < 4.0)
52
52
  regexp_parser (>= 1.8, < 3.0)
53
53
  rexml (>= 3.2.5, < 4.0)
54
- rubocop-ast (>= 1.20.1, < 2.0)
54
+ rubocop-ast (>= 1.26.0, < 2.0)
55
55
  ruby-progressbar (~> 1.7)
56
- unicode-display_width (>= 1.4.0, < 3.0)
57
- rubocop-ast (1.21.0)
58
- parser (>= 3.1.1.0)
59
- rubocop-minitest (0.22.1)
56
+ unicode-display_width (>= 2.4.0, < 3.0)
57
+ rubocop-ast (1.27.0)
58
+ parser (>= 3.2.1.0)
59
+ rubocop-minitest (0.22.2)
60
60
  rubocop (>= 0.90, < 2.0)
61
61
  rubocop-rake (0.6.0)
62
62
  rubocop (~> 1.0)
63
- ruby-progressbar (1.11.0)
63
+ ruby-progressbar (1.13.0)
64
64
  solargraph (0.47.2)
65
65
  backport (~> 1.2)
66
66
  benchmark
@@ -77,10 +77,10 @@ GEM
77
77
  tilt (~> 2.0)
78
78
  yard (~> 0.9, >= 0.9.24)
79
79
  thor (1.2.1)
80
- tilt (2.0.11)
81
- tzinfo (2.0.5)
80
+ tilt (2.1.0)
81
+ tzinfo (2.0.6)
82
82
  concurrent-ruby (~> 1.0)
83
- unicode-display_width (2.3.0)
83
+ unicode-display_width (2.4.2)
84
84
  webrick (1.7.0)
85
85
  yard (0.9.28)
86
86
  webrick (~> 1.7.0)
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
 
data/hot_module.gemspec CHANGED
@@ -27,7 +27,7 @@ Gem::Specification.new do |spec|
27
27
  end
28
28
  spec.require_paths = ["lib"]
29
29
 
30
- spec.add_dependency "nokolexbor", "~> 0.3"
30
+ spec.add_dependency "nokolexbor", "~> 0.4"
31
31
 
32
32
  spec.add_development_dependency "hash_with_dot_access", "~> 1.2"
33
33
  end
@@ -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
@@ -23,7 +23,7 @@ module HoTModuLe
23
23
  process_list(
24
24
  attribute: attribute,
25
25
  node: node,
26
- item_node: node.children[0].children.find(&:element?),
26
+ item_node: node.children[0].element_children.first,
27
27
  for_in: expression
28
28
  )
29
29
  end
@@ -12,6 +12,5 @@ module HoTModuLe
12
12
  def query_selector_all(selector) = css(selector)
13
13
  end
14
14
 
15
- # TODO: do we need this, or no?
16
- # Nokogiri::XML::Node.include QuerySelection unless Nokogiri::XML::Node.instance_methods.include?(:query_selector)
15
+ Nokolexbor::Element.include QuerySelection unless Nokolexbor::Element.instance_methods.include?(:query_selector)
17
16
  end
@@ -2,5 +2,5 @@
2
2
 
3
3
  module HoTModuLe
4
4
  # @return [String]
5
- VERSION = "1.0.0.alpha2"
5
+ VERSION = "1.0.0.alpha4"
6
6
  end
data/lib/hot_module.rb CHANGED
@@ -21,7 +21,7 @@ module HoTModuLe
21
21
  AttributeBinding = Struct.new(:matcher, :method_name, :method, :only_for_tag, keyword_init: true) # rubocop:disable Lint/StructNewOverride
22
22
 
23
23
  require_relative "hot_module/fragment"
24
- # require_relative "hot_module/query_selection"
24
+ require_relative "hot_module/query_selection"
25
25
 
26
26
  # @param klass [Class]
27
27
  # @return [void]
@@ -92,7 +92,7 @@ module HoTModuLe
92
92
  def doc
93
93
  @doc ||= Nokolexbor::DocumentFragment.parse(
94
94
  "<#{tag_name}>#{File.read(html_module).strip}</#{tag_name}>"
95
- ).children.find(&:element?)
95
+ ).element_children.first
96
96
  end
97
97
 
98
98
  def attribute_bindings
@@ -126,18 +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
- # NOTE: have to fix cloned templates
130
- doc.css("template").each do |bad_tmpl|
131
- frag = bad_tmpl.children.last
132
- new_tmpl = doc.document.create_element("template")
133
- bad_tmpl.attributes.each do |k, v|
134
- new_tmpl[k] = v
135
- end
136
- new_tmpl.children[0].children = frag
137
- bad_tmpl.swap(new_tmpl)
138
- end
139
-
140
- tmpl_el = doc.css("> template").find { _1.attributes.length.zero? }
129
+ tmpl_el = doc.css("> template").find { _1.attributes.empty? }
141
130
 
142
131
  unless tmpl_el
143
132
  tmpl_el = doc.document.create_element("template")
@@ -249,18 +238,6 @@ module HoTModuLe
249
238
  _in_context_nodes do |previous_context|
250
239
  list_items.each_with_index do |list_item, index|
251
240
  new_node = item_node.clone
252
-
253
- # NOTE: have to fix cloned templates
254
- new_node.css("template").each do |bad_tmpl|
255
- frag = bad_tmpl.children.last
256
- new_tmpl = item_node.document.create_element("template")
257
- bad_tmpl.attributes.each do |k, v|
258
- new_tmpl[k] = v
259
- end
260
- new_tmpl.children[0].children = frag
261
- bad_tmpl.swap(new_tmpl)
262
- end
263
-
264
241
  node.parent << new_node
265
242
  new_node["hmod-added"] = ""
266
243
 
@@ -325,3 +302,26 @@ module HoTModuLe
325
302
  @_context_locals = previous_context
326
303
  end
327
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.alpha2
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-16 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
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0.3'
19
+ version: '0.4'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0.3'
26
+ version: '0.4'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: hash_with_dot_access
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -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