hot_module 1.0.0.alpha7 → 1.0.0.alpha9
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/CHANGELOG.md +10 -0
- data/Gemfile.lock +1 -1
- data/lib/hot_module/component_renderer.rb +1 -1
- data/lib/hot_module/shadow_effects.rb +113 -0
- data/lib/hot_module/version.rb +1 -1
- data/lib/hot_module.rb +6 -2
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8ee386965712348631ddb7f2727e757c6a3665de96bad4ce22e5d92cc41bff07
|
4
|
+
data.tar.gz: 4ae0fce88ec73e62512105db857cd6406778dbf75d850bfce3bdb1ef02a7321b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 829ba7ad837dd654893f48c381930ec50144094d0c4c2efd06efbd9925175d35e784a9a6097aedbf756cd018cfe11737be6f59d9eb994e4ff1ccba7d3fd04096
|
7
|
+
data.tar.gz: 5435dc0c0e835c12ce9458787a8681d1a86d259af1fd086edc8e8844f082ce6e75e820914befb5bb2ac88848a57d61219dacef3813d629b8bc554090c05199aa
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,15 @@
|
|
1
1
|
## [Unreleased]
|
2
2
|
|
3
|
+
## [1.0.0.alpha9] - 2023-04-02
|
4
|
+
|
5
|
+
- Add support for [@crystallized/shadow-effects](https://github.com/whitefusionhq/crystallized/tree/main/packages/shadow-effects) template syntax
|
6
|
+
- Let `camelcased` handle symbol arrays, so it works with `attr_reader`
|
7
|
+
|
8
|
+
## [1.0.0.alpha8] - 2023-03-23
|
9
|
+
|
10
|
+
- Alias `HoTModuLe` to `HotModule` for people who are annoyed :)
|
11
|
+
- Fix bug with view context
|
12
|
+
|
3
13
|
## [1.0.0.alpha7] - 2023-03-23
|
4
14
|
|
5
15
|
- Provide original child nodes through the view context
|
data/Gemfile.lock
CHANGED
@@ -19,7 +19,7 @@ module HoTModuLe
|
|
19
19
|
|
20
20
|
def render_html_modules(registered_tags) # rubocop:todo Metrics
|
21
21
|
inspect_html do |doc, resource| # rubocop:todo Metrics
|
22
|
-
view_context =
|
22
|
+
view_context = HoTModuLe::View.new(resource)
|
23
23
|
|
24
24
|
registered_tags.each do |tag_name, component|
|
25
25
|
doc.xpath("//#{tag_name}").reverse.each do |node|
|
@@ -0,0 +1,113 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "hot_module"
|
4
|
+
|
5
|
+
module HoTModuLe
|
6
|
+
module ShadowEffects
|
7
|
+
# rubocop:disable Naming/MethodName
|
8
|
+
module JSPropertyAliases
|
9
|
+
def textContent=(value)
|
10
|
+
self.content = value
|
11
|
+
end
|
12
|
+
|
13
|
+
def innerHTML=(value)
|
14
|
+
self.inner_html = value
|
15
|
+
end
|
16
|
+
|
17
|
+
def method_missing(meth, *args, **kwargs) # rubocop:disable Style/MissingRespondToMissing
|
18
|
+
return super unless meth.to_s.end_with?("=")
|
19
|
+
|
20
|
+
kebob_cased = meth.to_s
|
21
|
+
.gsub(/([A-Z]+)([A-Z][a-z])/, '\1-\2')
|
22
|
+
.gsub(/([a-z\d])([A-Z])/, '\1-\2')
|
23
|
+
.downcase
|
24
|
+
|
25
|
+
self[kebob_cased.delete_suffix("=")] = args[0]
|
26
|
+
end
|
27
|
+
end
|
28
|
+
# rubocop:enable Naming/MethodName
|
29
|
+
|
30
|
+
Nokolexbor::Element.include JSPropertyAliases unless Nokolexbor::Element.instance_methods.include?(:textContent=)
|
31
|
+
|
32
|
+
module ClassMethods
|
33
|
+
def directive(name, &block)
|
34
|
+
@directives ||= {}
|
35
|
+
@directives[name.to_s] = block
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
# @param klass [Class]
|
40
|
+
# @return [void]
|
41
|
+
def self.included(klass)
|
42
|
+
klass.attribute_binding "host-effect", :_shadow_effect_binding
|
43
|
+
|
44
|
+
klass.singleton_class.attr_reader :directives
|
45
|
+
|
46
|
+
klass.extend ClassMethods
|
47
|
+
|
48
|
+
klass.class_eval do
|
49
|
+
directive :show do |_, element, value|
|
50
|
+
element["hidden"] = "" unless value
|
51
|
+
end
|
52
|
+
|
53
|
+
directive :hide do |_, element, value|
|
54
|
+
element["hidden"] = "" if value
|
55
|
+
end
|
56
|
+
|
57
|
+
directive :classMap do |_, element, obj|
|
58
|
+
obj.each do |k, v|
|
59
|
+
element.add_class k.to_s if v
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def _shadow_effect_binding(attribute:, node:) # rubocop:disable Metrics
|
66
|
+
syntax = attribute.value
|
67
|
+
statements = syntax.split(";").map(&:strip)
|
68
|
+
|
69
|
+
statements.each do |statement| # rubocop:disable Metrics
|
70
|
+
if statement.start_with?("$el.")
|
71
|
+
# property assignment
|
72
|
+
expression = statement.split("=").map(&:strip)
|
73
|
+
expression[0] = expression[0][4..]
|
74
|
+
|
75
|
+
value = send(expression[1])
|
76
|
+
|
77
|
+
node.send("#{expression[0]}=", value_to_attribute(value))
|
78
|
+
elsif statement.start_with?("$")
|
79
|
+
# directive
|
80
|
+
directive_name, args_str = statement.strip.match(/(.*)\((.*)\)/).captures
|
81
|
+
arg_strs = args_str.split(",").map(&:strip)
|
82
|
+
arg_strs.unshift("$el")
|
83
|
+
|
84
|
+
if self.class.directives[directive_name.strip[1..]]
|
85
|
+
args = arg_strs.map do |arg_str|
|
86
|
+
next node if arg_str == "$el"
|
87
|
+
|
88
|
+
next arg_str[1...-1] if arg_str.start_with?("'") # string literal
|
89
|
+
|
90
|
+
send(arg_str)
|
91
|
+
end
|
92
|
+
|
93
|
+
self.class.directives[directive_name.strip[1..]]&.(self, *args)
|
94
|
+
end
|
95
|
+
else
|
96
|
+
# method call
|
97
|
+
method_name, args_str = statement.strip.match(/(.*)\((.*)\)/).captures
|
98
|
+
arg_strs = args_str.split(",").map(&:strip)
|
99
|
+
|
100
|
+
args = arg_strs.map do |arg_str|
|
101
|
+
next node if arg_str == "$el"
|
102
|
+
|
103
|
+
next arg_str[1...-1] if arg_str.start_with?("'") # string literal
|
104
|
+
|
105
|
+
send(arg_str)
|
106
|
+
end
|
107
|
+
|
108
|
+
send(method_name.strip, *args)
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
data/lib/hot_module/version.rb
CHANGED
data/lib/hot_module.rb
CHANGED
@@ -35,8 +35,10 @@ module HoTModuLe
|
|
35
35
|
|
36
36
|
# Extends the component class
|
37
37
|
module ClassMethods
|
38
|
-
def camelcased(
|
39
|
-
|
38
|
+
def camelcased(method_symbols)
|
39
|
+
Array(method_symbols).each do |method_symbol|
|
40
|
+
alias_method(method_symbol.to_s.gsub(/(?!^)_[a-z0-9]/) { |match| match[1].upcase }, method_symbol)
|
41
|
+
end
|
40
42
|
end
|
41
43
|
|
42
44
|
def html_file_extensions = %w[module.html tmpl.html html].freeze
|
@@ -325,3 +327,5 @@ if defined?(Bridgetown)
|
|
325
327
|
config.builder HoTModuLe::ComponentRenderer
|
326
328
|
end
|
327
329
|
end
|
330
|
+
|
331
|
+
HotModule = HoTModuLe # alias for people who are annoyed :)
|
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.alpha9
|
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-04-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nokolexbor
|
@@ -60,6 +60,7 @@ files:
|
|
60
60
|
- lib/hot_module/fragment.rb
|
61
61
|
- lib/hot_module/petite.rb
|
62
62
|
- lib/hot_module/query_selection.rb
|
63
|
+
- lib/hot_module/shadow_effects.rb
|
63
64
|
- lib/hot_module/version.rb
|
64
65
|
homepage: https://github.com/whitefusionhq/hot_module#readme
|
65
66
|
licenses:
|