hyper-component 1.0.alpha1.2 → 1.0.alpha1.3
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/Gemfile.lock +26 -25
- data/hyper-component.gemspec +3 -3
- data/lib/hyper-component.rb +4 -0
- data/lib/hyperstack/component.rb +19 -5
- data/lib/hyperstack/component/element.rb +1 -1
- data/lib/hyperstack/component/version.rb +1 -1
- data/lib/hyperstack/component/while_loading.rb +27 -0
- data/lib/hyperstack/ext/component/element.rb +17 -1
- data/lib/hyperstack/ext/component/string.rb +1 -1
- data/lib/hyperstack/internal/component.rb +7 -1
- data/lib/hyperstack/internal/component/class_methods.rb +64 -4
- data/lib/hyperstack/internal/component/instance_methods.rb +38 -1
- data/lib/hyperstack/internal/component/props_wrapper.rb +22 -5
- data/lib/hyperstack/internal/component/rails/controller_helper.rb +19 -0
- data/lib/hyperstack/internal/component/react_wrapper.rb +2 -2
- data/lib/hyperstack/internal/component/rendering_context.rb +16 -2
- data/lib/hyperstack/internal/component/rescue_wrapper.rb +40 -0
- data/lib/hyperstack/internal/component/should_component_update.rb +1 -1
- data/lib/hyperstack/internal/component/while_loading_wrapper.rb +29 -0
- metadata +26 -18
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 42dc80deeb92bd2de37632efacae8b8d4a801c530d65937b7535018a2d3bc91a
|
|
4
|
+
data.tar.gz: 142a8df3b61e46f55d0d56766cddff7e734fc01b5f7f594ea6a57900bc4e9e4c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 5306b0fd124bee54d7873b2b6a0f4d6713fd346e2efa3bf9ba9f0467df1348a919daf07aecedb55983e26f95076f8df67981774c3288d6eda3af346036fea791
|
|
7
|
+
data.tar.gz: ea657f7f9aae7884b5602f3be778452f9088bf9a34ca2afef10ce98e10428412a2e53d5dad6abf55a65f7edc2041460b598b5bd12c6422cb608a29423b8d12ee
|
data/Gemfile.lock
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: ../hyper-spec
|
|
3
3
|
specs:
|
|
4
|
-
hyper-spec (1.0.alpha1.
|
|
4
|
+
hyper-spec (1.0.alpha1.3)
|
|
5
5
|
capybara
|
|
6
6
|
chromedriver-helper (= 1.2.0)
|
|
7
|
-
libv8
|
|
7
|
+
libv8
|
|
8
8
|
method_source
|
|
9
|
-
mini_racer (~> 0.
|
|
9
|
+
mini_racer (~> 0.2.4)
|
|
10
10
|
opal (>= 0.11.0, < 0.12.0)
|
|
11
11
|
parser (>= 2.3.3.1)
|
|
12
12
|
pry
|
|
@@ -14,31 +14,30 @@ PATH
|
|
|
14
14
|
selenium-webdriver
|
|
15
15
|
timecop (~> 0.8.1)
|
|
16
16
|
uglifier
|
|
17
|
-
unparser
|
|
17
|
+
unparser (>= 0.2, < 0.4)
|
|
18
18
|
webdrivers
|
|
19
19
|
|
|
20
20
|
PATH
|
|
21
21
|
remote: ../hyper-state
|
|
22
22
|
specs:
|
|
23
|
-
hyper-state (1.0.alpha1.
|
|
24
|
-
hyperstack-config (= 1.0.alpha1.
|
|
23
|
+
hyper-state (1.0.alpha1.3)
|
|
24
|
+
hyperstack-config (= 1.0.alpha1.3)
|
|
25
25
|
opal (>= 0.11.0, < 0.12.0)
|
|
26
26
|
|
|
27
27
|
PATH
|
|
28
28
|
remote: ../hyper-store
|
|
29
29
|
specs:
|
|
30
|
-
hyper-store (1.0.alpha1.
|
|
31
|
-
hyper-state (= 1.0.alpha1.
|
|
32
|
-
hyperstack-config (= 1.0.alpha1.
|
|
30
|
+
hyper-store (1.0.alpha1.3)
|
|
31
|
+
hyper-state (= 1.0.alpha1.3)
|
|
32
|
+
hyperstack-config (= 1.0.alpha1.3)
|
|
33
33
|
opal (>= 0.11.0, < 0.12.0)
|
|
34
34
|
|
|
35
35
|
PATH
|
|
36
36
|
remote: ../hyperstack-config
|
|
37
37
|
specs:
|
|
38
|
-
hyperstack-config (1.0.alpha1.
|
|
39
|
-
libv8 (~> 6.3.0)
|
|
38
|
+
hyperstack-config (1.0.alpha1.3)
|
|
40
39
|
listen (~> 3.0)
|
|
41
|
-
mini_racer (~> 0.
|
|
40
|
+
mini_racer (~> 0.2.4)
|
|
42
41
|
opal (>= 0.11.0, < 0.12.0)
|
|
43
42
|
opal-browser (~> 0.2.0)
|
|
44
43
|
uglifier
|
|
@@ -47,11 +46,11 @@ PATH
|
|
|
47
46
|
PATH
|
|
48
47
|
remote: .
|
|
49
48
|
specs:
|
|
50
|
-
hyper-component (1.0.alpha1.
|
|
51
|
-
hyper-state (= 1.0.alpha1.
|
|
52
|
-
hyperstack-config (= 1.0.alpha1.
|
|
53
|
-
libv8 (~> 6.
|
|
54
|
-
mini_racer (~> 0.
|
|
49
|
+
hyper-component (1.0.alpha1.3)
|
|
50
|
+
hyper-state (= 1.0.alpha1.3)
|
|
51
|
+
hyperstack-config (= 1.0.alpha1.3)
|
|
52
|
+
libv8 (~> 6.7.0)
|
|
53
|
+
mini_racer (~> 0.2.4)
|
|
55
54
|
opal (>= 0.11.0, < 0.12.0)
|
|
56
55
|
opal-activesupport (~> 0.3.1)
|
|
57
56
|
react-rails (>= 2.4.0, < 2.5.0)
|
|
@@ -115,7 +114,7 @@ GEM
|
|
|
115
114
|
babel-source (>= 4.0, < 6)
|
|
116
115
|
execjs (~> 2.0)
|
|
117
116
|
builder (3.2.3)
|
|
118
|
-
capybara (3.
|
|
117
|
+
capybara (3.12.0)
|
|
119
118
|
addressable
|
|
120
119
|
mini_mime (>= 0.1.3)
|
|
121
120
|
nokogiri (~> 1.8)
|
|
@@ -152,7 +151,7 @@ GEM
|
|
|
152
151
|
rails-dom-testing (>= 1, < 3)
|
|
153
152
|
railties (>= 4.2.0)
|
|
154
153
|
thor (>= 0.14, < 2.0)
|
|
155
|
-
libv8 (6.
|
|
154
|
+
libv8 (6.7.288.46.1)
|
|
156
155
|
listen (3.1.5)
|
|
157
156
|
rb-fsevent (~> 0.9, >= 0.9.4)
|
|
158
157
|
rb-inotify (~> 0.9, >= 0.9.7)
|
|
@@ -173,9 +172,10 @@ GEM
|
|
|
173
172
|
mimemagic (0.3.2)
|
|
174
173
|
mini_mime (1.0.1)
|
|
175
174
|
mini_portile2 (2.3.0)
|
|
176
|
-
mini_racer (0.
|
|
177
|
-
libv8 (
|
|
175
|
+
mini_racer (0.2.4)
|
|
176
|
+
libv8 (>= 6.3)
|
|
178
177
|
minitest (5.11.3)
|
|
178
|
+
net_http_ssl_fix (0.0.10)
|
|
179
179
|
nio4r (2.3.1)
|
|
180
180
|
nokogiri (1.8.5)
|
|
181
181
|
mini_portile2 (~> 2.3.0)
|
|
@@ -308,7 +308,7 @@ GEM
|
|
|
308
308
|
timecop (0.8.1)
|
|
309
309
|
tzinfo (1.2.5)
|
|
310
310
|
thread_safe (~> 0.1)
|
|
311
|
-
uglifier (4.1.
|
|
311
|
+
uglifier (4.1.20)
|
|
312
312
|
execjs (>= 0.3.0, < 3)
|
|
313
313
|
unicode-display_width (1.4.0)
|
|
314
314
|
unparser (0.2.8)
|
|
@@ -319,7 +319,8 @@ GEM
|
|
|
319
319
|
equalizer (~> 0.0.9)
|
|
320
320
|
parser (>= 2.3.1.2, < 2.6)
|
|
321
321
|
procto (~> 0.0.2)
|
|
322
|
-
webdrivers (3.
|
|
322
|
+
webdrivers (3.6.0)
|
|
323
|
+
net_http_ssl_fix
|
|
323
324
|
nokogiri (~> 1.6)
|
|
324
325
|
rubyzip (~> 1.0)
|
|
325
326
|
selenium-webdriver (~> 3.0)
|
|
@@ -334,7 +335,7 @@ PLATFORMS
|
|
|
334
335
|
ruby
|
|
335
336
|
|
|
336
337
|
DEPENDENCIES
|
|
337
|
-
bundler (
|
|
338
|
+
bundler (>= 1.17.3, < 2.1)
|
|
338
339
|
chromedriver-helper
|
|
339
340
|
hyper-component!
|
|
340
341
|
hyper-spec!
|
|
@@ -360,4 +361,4 @@ DEPENDENCIES
|
|
|
360
361
|
timecop (~> 0.8.1)
|
|
361
362
|
|
|
362
363
|
BUNDLED WITH
|
|
363
|
-
|
|
364
|
+
2.0.1
|
data/hyper-component.gemspec
CHANGED
|
@@ -23,13 +23,13 @@ Gem::Specification.new do |spec|
|
|
|
23
23
|
|
|
24
24
|
spec.add_dependency 'hyper-state', Hyperstack::Component::VERSION
|
|
25
25
|
spec.add_dependency 'hyperstack-config', Hyperstack::Component::VERSION
|
|
26
|
-
spec.add_dependency 'libv8', '~> 6.
|
|
27
|
-
spec.add_dependency 'mini_racer', '~> 0.
|
|
26
|
+
spec.add_dependency 'libv8', '~> 6.7.0'
|
|
27
|
+
spec.add_dependency 'mini_racer', '~> 0.2.4'
|
|
28
28
|
spec.add_dependency 'opal', '>= 0.11.0', '< 0.12.0'
|
|
29
29
|
spec.add_dependency 'opal-activesupport', '~> 0.3.1'
|
|
30
30
|
spec.add_dependency 'react-rails', '>= 2.4.0', '< 2.5.0'
|
|
31
31
|
|
|
32
|
-
spec.add_development_dependency 'bundler', '
|
|
32
|
+
spec.add_development_dependency 'bundler', ['>= 1.17.3', '< 2.1']
|
|
33
33
|
spec.add_development_dependency 'chromedriver-helper'
|
|
34
34
|
spec.add_development_dependency 'hyper-spec', Hyperstack::Component::VERSION
|
|
35
35
|
spec.add_development_dependency 'jquery-rails'
|
data/lib/hyper-component.rb
CHANGED
|
@@ -27,6 +27,10 @@ if RUBY_ENGINE == 'opal'
|
|
|
27
27
|
require 'hyperstack/component/isomorphic_helpers'
|
|
28
28
|
require 'hyperstack/component/react_api'
|
|
29
29
|
require 'hyperstack/internal/component/top_level_rails_component'
|
|
30
|
+
require 'hyperstack/component/while_loading'
|
|
31
|
+
require 'hyperstack/internal/component/rescue_wrapper'
|
|
32
|
+
require 'hyperstack/internal/component/while_loading_wrapper'
|
|
33
|
+
|
|
30
34
|
require 'hyperstack/component/version'
|
|
31
35
|
else
|
|
32
36
|
require 'opal'
|
data/lib/hyperstack/component.rb
CHANGED
|
@@ -21,9 +21,11 @@ module Hyperstack
|
|
|
21
21
|
class_attribute :initial_state
|
|
22
22
|
define_callback :before_mount
|
|
23
23
|
define_callback :after_mount
|
|
24
|
-
define_callback :
|
|
24
|
+
define_callback :before_new_params
|
|
25
25
|
define_callback :before_update
|
|
26
26
|
define_callback :after_update
|
|
27
|
+
define_callback :__hyperstack_component_after_render_hook
|
|
28
|
+
define_callback :__hyperstack_component_rescue_hook
|
|
27
29
|
#define_callback :before_unmount defined already by Async module
|
|
28
30
|
define_callback(:after_error) { Hyperstack::Internal::Component::ReactWrapper.add_after_error_hook(base) }
|
|
29
31
|
end
|
|
@@ -93,13 +95,14 @@ module Hyperstack
|
|
|
93
95
|
def component_did_mount
|
|
94
96
|
observing(update_objects: true) do
|
|
95
97
|
run_callback(:after_mount)
|
|
98
|
+
Hyperstack::Internal::Component::RenderingContext.quiet_test(self)
|
|
96
99
|
end
|
|
97
100
|
end
|
|
98
101
|
|
|
99
102
|
def component_will_receive_props(next_props)
|
|
100
103
|
# need to rethink how this works in opal-react, or if its actually that useful within the react.rb environment
|
|
101
104
|
# for now we are just using it to clear processed_params
|
|
102
|
-
observing(immediate_update: true) { run_callback(:
|
|
105
|
+
observing(immediate_update: true) { run_callback(:before_new_params, next_props) }
|
|
103
106
|
@__hyperstack_component_receiving_props = true
|
|
104
107
|
end
|
|
105
108
|
|
|
@@ -112,7 +115,10 @@ module Hyperstack
|
|
|
112
115
|
end
|
|
113
116
|
|
|
114
117
|
def component_did_update(prev_props, prev_state)
|
|
115
|
-
observing(update_objects: true)
|
|
118
|
+
observing(update_objects: true) do
|
|
119
|
+
run_callback(:after_update, prev_props, prev_state)
|
|
120
|
+
Hyperstack::Internal::Component::RenderingContext.quiet_test(self)
|
|
121
|
+
end
|
|
116
122
|
end
|
|
117
123
|
|
|
118
124
|
def component_will_unmount
|
|
@@ -124,7 +130,9 @@ module Hyperstack
|
|
|
124
130
|
end
|
|
125
131
|
|
|
126
132
|
def component_did_catch(error, info)
|
|
127
|
-
observing
|
|
133
|
+
observing do
|
|
134
|
+
run_callback(:after_error, error, info)
|
|
135
|
+
end
|
|
128
136
|
end
|
|
129
137
|
|
|
130
138
|
def mutations(_objects)
|
|
@@ -156,9 +164,15 @@ module Hyperstack
|
|
|
156
164
|
@__hyperstack_component_waiting_on_resources
|
|
157
165
|
end
|
|
158
166
|
|
|
167
|
+
def __hyperstack_component_run_post_render_hooks(element)
|
|
168
|
+
run_callback(:__hyperstack_component_after_render_hook, element) { |*args| args }.first
|
|
169
|
+
end
|
|
170
|
+
|
|
159
171
|
def _render_wrapper
|
|
160
172
|
observing(rendering: true) do
|
|
161
|
-
element = Hyperstack::Internal::Component::RenderingContext.render(nil)
|
|
173
|
+
element = Hyperstack::Internal::Component::RenderingContext.render(nil) do
|
|
174
|
+
render || ''
|
|
175
|
+
end
|
|
162
176
|
@__hyperstack_component_waiting_on_resources =
|
|
163
177
|
element.waiting_on_resources if element.respond_to? :waiting_on_resources
|
|
164
178
|
element
|
|
@@ -45,7 +45,7 @@ module Hyperstack
|
|
|
45
45
|
# Used for elements that are not yet in DOM, i.e. they are provided as children
|
|
46
46
|
# or they have been explicitly removed from the rendering context using the delete method.
|
|
47
47
|
|
|
48
|
-
def render(props
|
|
48
|
+
def render(*props, &new_block)
|
|
49
49
|
if props.empty?
|
|
50
50
|
Hyperstack::Internal::Component::RenderingContext.render(self)
|
|
51
51
|
else
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
module Hyperstack
|
|
2
|
+
module Component
|
|
3
|
+
module WhileLoading
|
|
4
|
+
def __hyperstack_component_rescue_wrapper(child)
|
|
5
|
+
Hyperstack::Internal::Component::WhileLoadingWrapper(child: self, children_elements: child)
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def resources_loading?
|
|
9
|
+
@__hyperstack_while_loading_waiting_on_resources
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def resources_loaded?
|
|
13
|
+
!@__hyperstack_while_loading_waiting_on_resources
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
if Hyperstack::Component::IsomorphicHelpers.on_opal_client?
|
|
17
|
+
%x{
|
|
18
|
+
function onError(event) {
|
|
19
|
+
if (event.message.startsWith('Uncaught NotQuiet: ')) event.preventDefault();
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
window.addEventListener('error', onError);
|
|
23
|
+
}
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -45,4 +45,20 @@ Element.instance_eval do
|
|
|
45
45
|
Element.expose :mount_components
|
|
46
46
|
end
|
|
47
47
|
|
|
48
|
-
|
|
48
|
+
module Hyperstack
|
|
49
|
+
module Internal
|
|
50
|
+
module Component
|
|
51
|
+
module InstanceMethods
|
|
52
|
+
def set_jq(var)
|
|
53
|
+
->(val) { set(var).call(jQ[val]) }
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
class Object
|
|
61
|
+
def jQ
|
|
62
|
+
Element
|
|
63
|
+
end
|
|
64
|
+
end
|
|
@@ -42,18 +42,74 @@ module Hyperstack
|
|
|
42
42
|
backtrace[1..-1].each { |line| message_array << line }
|
|
43
43
|
end
|
|
44
44
|
|
|
45
|
+
def before_receive_props(*args, &block)
|
|
46
|
+
deprecation_warning "'before_receive_props' is deprecated. Use the 'before_new_params' macro instead."
|
|
47
|
+
before_new_params(*args, &block)
|
|
48
|
+
end
|
|
49
|
+
|
|
45
50
|
def render(container = nil, params = {}, &block)
|
|
46
51
|
Tags.included(self)
|
|
47
52
|
if container
|
|
48
53
|
container = container.type if container.is_a? Hyperstack::Component::Element
|
|
49
|
-
define_method
|
|
50
|
-
|
|
54
|
+
define_method(:__hyperstack_component_render) do
|
|
55
|
+
__hyperstack_component_select_wrappers do
|
|
56
|
+
RenderingContext.render(container, params) do
|
|
57
|
+
instance_eval(&block) if block
|
|
58
|
+
end
|
|
59
|
+
end
|
|
51
60
|
end
|
|
52
61
|
else
|
|
53
|
-
define_method(:__hyperstack_component_render)
|
|
62
|
+
define_method(:__hyperstack_component_render) do
|
|
63
|
+
__hyperstack_component_select_wrappers do
|
|
64
|
+
instance_eval(&block)
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# def while_loading(*args, &block)
|
|
71
|
+
# __hyperstack_component_after_render_hook do |element|
|
|
72
|
+
# element.while_loading(*args) { |*aargs| instance_exec(*aargs, &block) }
|
|
73
|
+
# end
|
|
74
|
+
# end
|
|
75
|
+
|
|
76
|
+
def on(*args, &block)
|
|
77
|
+
__hyperstack_component_after_render_hook do |element|
|
|
78
|
+
element.on(*args) { |*aargs| instance_exec(*aargs, &block) }
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def rescues(*klasses, &block)
|
|
83
|
+
klasses = [StandardError] if klasses.empty?
|
|
84
|
+
__hyperstack_component_rescue_hook do |found, *args|
|
|
85
|
+
next [found, *args] if found || !klasses.detect { |klass| args[0].is_a? klass }
|
|
86
|
+
instance_exec(*args, &block)
|
|
87
|
+
[true, *args]
|
|
54
88
|
end
|
|
55
89
|
end
|
|
56
90
|
|
|
91
|
+
def before_render(*args, &block)
|
|
92
|
+
before_mount(*args, &block)
|
|
93
|
+
before_update(*args, &block)
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def after_render(*args, &block)
|
|
97
|
+
after_mount(*args, &block)
|
|
98
|
+
after_update(*args, &block)
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
# [:while_loading, :on].each do |method|
|
|
102
|
+
# define_method(method) do |*args, &block|
|
|
103
|
+
# @@alias_id ||= 0
|
|
104
|
+
# @@alias_id += 1
|
|
105
|
+
# alias_name = "__hyperstack_attach_post_render_hook_#{@@alias_id}"
|
|
106
|
+
# alias_method alias_name, :__hyperstack_attach_post_render_hook
|
|
107
|
+
# define_method(:__hyperstack_attach_post_render_hook) do |element|
|
|
108
|
+
# send(alias_name, element.while_loading(*args) { instance_eval(&block) })
|
|
109
|
+
# end
|
|
110
|
+
# end
|
|
111
|
+
# end
|
|
112
|
+
|
|
57
113
|
# method missing will assume the method is a class name, and will treat this a render of
|
|
58
114
|
# of the component, i.e. Foo::Bar.baz === Foo::Bar().baz
|
|
59
115
|
|
|
@@ -147,8 +203,10 @@ module Hyperstack
|
|
|
147
203
|
|
|
148
204
|
alias other_params collect_other_params_as
|
|
149
205
|
alias others collect_other_params_as
|
|
206
|
+
alias other collect_other_params_as
|
|
207
|
+
alias opts collect_other_params_as
|
|
150
208
|
|
|
151
|
-
def
|
|
209
|
+
def fires(name, opts = {})
|
|
152
210
|
aka = opts[:alias] || "#{name}!"
|
|
153
211
|
name = if name =~ /^<(.+)>$/
|
|
154
212
|
name.gsub(/^<(.+)>$/, '\1')
|
|
@@ -161,6 +219,8 @@ module Hyperstack
|
|
|
161
219
|
define_method(aka) { |*args| props[name]&.call(*args) }
|
|
162
220
|
end
|
|
163
221
|
|
|
222
|
+
alias triggers fires
|
|
223
|
+
|
|
164
224
|
def define_state(*states, &block)
|
|
165
225
|
deprecation_warning "'define_state' is deprecated. Use the 'state' macro to declare states."
|
|
166
226
|
default_initial_value = (block && block.arity == 0) ? yield : nil
|
|
@@ -9,7 +9,7 @@ module Hyperstack
|
|
|
9
9
|
end
|
|
10
10
|
|
|
11
11
|
def params
|
|
12
|
-
if @__hyperstack_component_params_wrapper.param_accessor_style
|
|
12
|
+
if [:hyperstack, :accessors].include? @__hyperstack_component_params_wrapper.param_accessor_style
|
|
13
13
|
raise "params are now directly accessible via instance variables.\n"\
|
|
14
14
|
' to access the legacy behavior add `param_accessor_style = :legacy` '\
|
|
15
15
|
"to your component class\n"\
|
|
@@ -27,10 +27,24 @@ module Hyperstack
|
|
|
27
27
|
`ReactDOM.findDOMNode(#{self}.__hyperstack_component_native)` # react >= v0.15.0
|
|
28
28
|
end
|
|
29
29
|
|
|
30
|
+
def jq_node
|
|
31
|
+
::Element[dom_node]
|
|
32
|
+
end
|
|
33
|
+
|
|
30
34
|
def mounted?
|
|
31
35
|
`(#{self}.__hyperstack_component_is_mounted === undefined) ? false : #{self}.__hyperstack_component_is_mounted`
|
|
32
36
|
end
|
|
33
37
|
|
|
38
|
+
def pluralize(count, singular, plural = nil)
|
|
39
|
+
word = if (count == 1 || count =~ /^1(\.0+)?$/)
|
|
40
|
+
singular
|
|
41
|
+
else
|
|
42
|
+
plural || singular.pluralize
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
"#{count || 0} #{word}"
|
|
46
|
+
end
|
|
47
|
+
|
|
34
48
|
def force_update!
|
|
35
49
|
`#{self}.__hyperstack_component_native.forceUpdate()`
|
|
36
50
|
self
|
|
@@ -47,6 +61,29 @@ module Hyperstack
|
|
|
47
61
|
|
|
48
62
|
private
|
|
49
63
|
|
|
64
|
+
# can be overriden by the Router include
|
|
65
|
+
def __hyperstack_router_wrapper(&block)
|
|
66
|
+
->() { instance_eval(&block) }
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# can be overriden by including WhileLoading include
|
|
70
|
+
def __hyperstack_component_rescue_wrapper(child)
|
|
71
|
+
if self.class.callbacks?(:__hyperstack_component_rescue_hook)
|
|
72
|
+
Hyperstack::Internal::Component::RescueWrapper(child: self, children_elements: child)
|
|
73
|
+
else
|
|
74
|
+
child.call
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def __hyperstack_component_select_wrappers(&block)
|
|
79
|
+
RescueWrapper.after_error_args = nil
|
|
80
|
+
__hyperstack_component_run_post_render_hooks(
|
|
81
|
+
__hyperstack_component_rescue_wrapper(
|
|
82
|
+
__hyperstack_router_wrapper(&block)
|
|
83
|
+
)
|
|
84
|
+
)
|
|
85
|
+
end
|
|
86
|
+
|
|
50
87
|
def set_or_replace_state_or_prop(state_or_prop, method, &block)
|
|
51
88
|
raise "No native ReactComponent associated" unless @__hyperstack_component_native
|
|
52
89
|
`var state_prop_n = #{state_or_prop.shallow_to_n}`
|
|
@@ -9,7 +9,7 @@ module Hyperstack
|
|
|
9
9
|
def instance_var_name_for(name)
|
|
10
10
|
case Hyperstack.naming_convention
|
|
11
11
|
when :camelize_params
|
|
12
|
-
name.camelize
|
|
12
|
+
fix_suffix(name.camelize)
|
|
13
13
|
when :prefix_params
|
|
14
14
|
"_#{name}"
|
|
15
15
|
else
|
|
@@ -17,6 +17,17 @@ module Hyperstack
|
|
|
17
17
|
end
|
|
18
18
|
end
|
|
19
19
|
|
|
20
|
+
def fix_suffix(name)
|
|
21
|
+
return unless name
|
|
22
|
+
if name =~ /\?$/
|
|
23
|
+
name[0..-2] + '_q'
|
|
24
|
+
elsif name =~ /\!$/
|
|
25
|
+
name[0..-2] + '_b'
|
|
26
|
+
else
|
|
27
|
+
name
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
20
31
|
def param_accessor_style(style = nil)
|
|
21
32
|
@param_accessor_style = style if style
|
|
22
33
|
@param_accessor_style ||=
|
|
@@ -38,11 +49,14 @@ module Hyperstack
|
|
|
38
49
|
|
|
39
50
|
def define_param(name, param_type, aka = nil)
|
|
40
51
|
meth_name = aka || name
|
|
41
|
-
var_name = aka || instance_var_name_for(name)
|
|
52
|
+
var_name = fix_suffix(aka) || instance_var_name_for(name)
|
|
42
53
|
param_definitions[name] = lambda do |props|
|
|
43
|
-
@component.instance_variable_set :"@#{var_name}", fetch_from_cache(name, param_type, props)
|
|
54
|
+
@component.instance_variable_set :"@#{var_name}", val = fetch_from_cache(name, param_type, props)
|
|
55
|
+
next unless param_accessor_style == :accessors
|
|
56
|
+
`#{@component}[#{"$#{meth_name}"}] = function() { return #{val} }`
|
|
57
|
+
# @component.define_singleton_method(name) { val } if param_accessor_style == :accessors
|
|
44
58
|
end
|
|
45
|
-
return if
|
|
59
|
+
return if %i[hyperstack accessors].include? param_accessor_style
|
|
46
60
|
if param_type == Proc
|
|
47
61
|
define_method(meth_name.to_sym) do |*args, &block|
|
|
48
62
|
props[name].call(*args, &block) if props[name]
|
|
@@ -57,7 +71,10 @@ module Hyperstack
|
|
|
57
71
|
def define_all_others(name)
|
|
58
72
|
var_name = instance_var_name_for(name)
|
|
59
73
|
param_definitions[name] = lambda do |props|
|
|
60
|
-
@component.instance_variable_set :"@#{var_name}", yield(props)
|
|
74
|
+
@component.instance_variable_set :"@#{var_name}", val = yield(props)
|
|
75
|
+
next unless param_accessor_style == :accessors
|
|
76
|
+
`#{@component}[#{"$#{name}"}] = function() { return #{val} }`
|
|
77
|
+
# @component.define_singleton_method(name) { val } if param_accessor_style == :accessors
|
|
61
78
|
end
|
|
62
79
|
define_method(name.to_sym) do
|
|
63
80
|
@_all_others_cache ||= yield(props)
|
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
require 'action_controller'
|
|
2
2
|
|
|
3
|
+
module Hyperstack
|
|
4
|
+
module Internal
|
|
5
|
+
module Component
|
|
6
|
+
class Redirect < StandardError
|
|
7
|
+
attr_reader :url
|
|
8
|
+
def initialize(url)
|
|
9
|
+
@url = url
|
|
10
|
+
super("redirect to #{url}")
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
3
17
|
module ActionController
|
|
4
18
|
# adds render_component helper to ActionControllers
|
|
5
19
|
class Base
|
|
@@ -7,8 +21,13 @@ module ActionController
|
|
|
7
21
|
@component_name = (args[0].is_a? Hash) || args.empty? ? params[:action].camelize : args.shift
|
|
8
22
|
@render_params = args.shift || {}
|
|
9
23
|
options = args[0] || {}
|
|
24
|
+
return if performed?
|
|
10
25
|
render inline: '<%= react_component @component_name, @render_params %>',
|
|
11
26
|
layout: options.key?(:layout) ? options[:layout].to_s : :default
|
|
27
|
+
rescue Exception => e
|
|
28
|
+
m = /^RuntimeError: Hyperstack::Internal::Component::Redirect (.+) status: (.+)$/.match(e.message)
|
|
29
|
+
raise e unless m
|
|
30
|
+
redirect_to m[1], status: m[2]
|
|
12
31
|
end
|
|
13
32
|
end
|
|
14
33
|
end
|
|
@@ -153,7 +153,7 @@ module Hyperstack
|
|
|
153
153
|
# that responds to render to act as a component we have to make sure that
|
|
154
154
|
# we have a callbacks_for method. This all becomes much easier once issue
|
|
155
155
|
# #270 is resolved.
|
|
156
|
-
if type.respond_to?(:
|
|
156
|
+
if type.respond_to?(:callbacks?) && type.callbacks?(:after_error)
|
|
157
157
|
add_after_error_hook_to_native comp
|
|
158
158
|
end
|
|
159
159
|
comp
|
|
@@ -261,7 +261,7 @@ module Hyperstack
|
|
|
261
261
|
}
|
|
262
262
|
}
|
|
263
263
|
|
|
264
|
-
elsif key == '
|
|
264
|
+
elsif key == 'jq_ref'
|
|
265
265
|
unless value.respond_to?(:call)
|
|
266
266
|
raise "The ref and dom params must be given a Proc.\n"\
|
|
267
267
|
"If you want to capture the dom node in an instance variable use the `set` method.\n"\
|
|
@@ -2,9 +2,23 @@ module Hyperstack
|
|
|
2
2
|
module Internal
|
|
3
3
|
module Component
|
|
4
4
|
class RenderingContext
|
|
5
|
+
class NotQuiet < Exception; end
|
|
5
6
|
class << self
|
|
6
7
|
attr_accessor :waiting_on_resources
|
|
7
8
|
|
|
9
|
+
def raise_if_not_quiet?
|
|
10
|
+
@raise_if_not_quiet
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def raise_if_not_quiet=(x)
|
|
14
|
+
@raise_if_not_quiet = x
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def quiet_test(component)
|
|
18
|
+
return unless component.waiting_on_resources && raise_if_not_quiet? #&& component.class != RescueMetaWrapper <- WHY can't create a spec that this fails without this, but several fail with it.
|
|
19
|
+
raise NotQuiet.new("#{component} is waiting on resources")
|
|
20
|
+
end
|
|
21
|
+
|
|
8
22
|
def render(name, *args, &block)
|
|
9
23
|
was_outer_most = !@not_outer_most
|
|
10
24
|
@not_outer_most = true
|
|
@@ -12,7 +26,7 @@ module Hyperstack
|
|
|
12
26
|
@buffer ||= [] unless @buffer
|
|
13
27
|
if block
|
|
14
28
|
element = build do
|
|
15
|
-
saved_waiting_on_resources = waiting_on_resources
|
|
29
|
+
saved_waiting_on_resources = nil #waiting_on_resources what was the purpose of this its used below to or in with the current elements waiting_for_resources
|
|
16
30
|
self.waiting_on_resources = nil
|
|
17
31
|
run_child_block(name.nil?, &block)
|
|
18
32
|
if name
|
|
@@ -129,7 +143,7 @@ module Hyperstack
|
|
|
129
143
|
end
|
|
130
144
|
|
|
131
145
|
class Object
|
|
132
|
-
[:span, :td, :th
|
|
146
|
+
[:span, :td, :th].each do |tag|
|
|
133
147
|
define_method(tag) do |*args, &block|
|
|
134
148
|
args.unshift(tag)
|
|
135
149
|
# legacy hyperloop allowed tags to be lower case as well so if self is a component
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
module Hyperstack
|
|
2
|
+
module Internal
|
|
3
|
+
module Component
|
|
4
|
+
class RescueMetaWrapper
|
|
5
|
+
include Hyperstack::Component
|
|
6
|
+
|
|
7
|
+
param :children_elements
|
|
8
|
+
|
|
9
|
+
render do
|
|
10
|
+
@ChildrenElements.call
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
class RescueWrapper
|
|
15
|
+
class << self
|
|
16
|
+
attr_accessor :after_error_args
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
include Hyperstack::Component
|
|
20
|
+
|
|
21
|
+
param :child
|
|
22
|
+
param :children_elements
|
|
23
|
+
|
|
24
|
+
render do
|
|
25
|
+
RescueMetaWrapper(children_elements: @ChildrenElements)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
after_error do |error, info|
|
|
29
|
+
args = RescueWrapper.after_error_args || [error, info]
|
|
30
|
+
found, * = @Child.run_callback(:__hyperstack_component_rescue_hook, found, *args) { |a| a }
|
|
31
|
+
unless found
|
|
32
|
+
RescueWrapper.after_error_args = args
|
|
33
|
+
raise error
|
|
34
|
+
end
|
|
35
|
+
@Child.force_update!
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -30,7 +30,7 @@ module Hyperstack
|
|
|
30
30
|
if respond_to?(:needs_update?)
|
|
31
31
|
!!call_needs_update(next_props, next_state)
|
|
32
32
|
else
|
|
33
|
-
|
|
33
|
+
props_changed?(next_props) || native_state_changed?(next_state)
|
|
34
34
|
end
|
|
35
35
|
# rubocop:enable Style/DoubleNegation
|
|
36
36
|
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
module Hyperstack
|
|
2
|
+
module Internal
|
|
3
|
+
module Component
|
|
4
|
+
class WhileLoadingWrapper < RescueWrapper
|
|
5
|
+
render do
|
|
6
|
+
if @waiting_on_resources && !quiet?
|
|
7
|
+
RenderingContext.raise_if_not_quiet = false
|
|
8
|
+
else
|
|
9
|
+
@waiting_on_resources = false
|
|
10
|
+
@Child.instance_eval do
|
|
11
|
+
mutate if @__hyperstack_while_loading_waiting_on_resources
|
|
12
|
+
@__hyperstack_while_loading_waiting_on_resources = false
|
|
13
|
+
end
|
|
14
|
+
RenderingContext.raise_if_not_quiet = true
|
|
15
|
+
end
|
|
16
|
+
RescueMetaWrapper(children_elements: @ChildrenElements)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
before_mount do
|
|
20
|
+
wrapper = self
|
|
21
|
+
@Child.class.rescues RenderingContext::NotQuiet do
|
|
22
|
+
wrapper.instance_variable_set(:@waiting_on_resources, true)
|
|
23
|
+
@__hyperstack_while_loading_waiting_on_resources = true
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: hyper-component
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.0.alpha1.
|
|
4
|
+
version: 1.0.alpha1.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- David Chang
|
|
@@ -12,7 +12,7 @@ authors:
|
|
|
12
12
|
autorequire:
|
|
13
13
|
bindir: bin
|
|
14
14
|
cert_chain: []
|
|
15
|
-
date:
|
|
15
|
+
date: 2019-01-17 00:00:00.000000000 Z
|
|
16
16
|
dependencies:
|
|
17
17
|
- !ruby/object:Gem::Dependency
|
|
18
18
|
name: hyper-state
|
|
@@ -20,56 +20,56 @@ dependencies:
|
|
|
20
20
|
requirements:
|
|
21
21
|
- - '='
|
|
22
22
|
- !ruby/object:Gem::Version
|
|
23
|
-
version: 1.0.alpha1.
|
|
23
|
+
version: 1.0.alpha1.3
|
|
24
24
|
type: :runtime
|
|
25
25
|
prerelease: false
|
|
26
26
|
version_requirements: !ruby/object:Gem::Requirement
|
|
27
27
|
requirements:
|
|
28
28
|
- - '='
|
|
29
29
|
- !ruby/object:Gem::Version
|
|
30
|
-
version: 1.0.alpha1.
|
|
30
|
+
version: 1.0.alpha1.3
|
|
31
31
|
- !ruby/object:Gem::Dependency
|
|
32
32
|
name: hyperstack-config
|
|
33
33
|
requirement: !ruby/object:Gem::Requirement
|
|
34
34
|
requirements:
|
|
35
35
|
- - '='
|
|
36
36
|
- !ruby/object:Gem::Version
|
|
37
|
-
version: 1.0.alpha1.
|
|
37
|
+
version: 1.0.alpha1.3
|
|
38
38
|
type: :runtime
|
|
39
39
|
prerelease: false
|
|
40
40
|
version_requirements: !ruby/object:Gem::Requirement
|
|
41
41
|
requirements:
|
|
42
42
|
- - '='
|
|
43
43
|
- !ruby/object:Gem::Version
|
|
44
|
-
version: 1.0.alpha1.
|
|
44
|
+
version: 1.0.alpha1.3
|
|
45
45
|
- !ruby/object:Gem::Dependency
|
|
46
46
|
name: libv8
|
|
47
47
|
requirement: !ruby/object:Gem::Requirement
|
|
48
48
|
requirements:
|
|
49
49
|
- - "~>"
|
|
50
50
|
- !ruby/object:Gem::Version
|
|
51
|
-
version: 6.
|
|
51
|
+
version: 6.7.0
|
|
52
52
|
type: :runtime
|
|
53
53
|
prerelease: false
|
|
54
54
|
version_requirements: !ruby/object:Gem::Requirement
|
|
55
55
|
requirements:
|
|
56
56
|
- - "~>"
|
|
57
57
|
- !ruby/object:Gem::Version
|
|
58
|
-
version: 6.
|
|
58
|
+
version: 6.7.0
|
|
59
59
|
- !ruby/object:Gem::Dependency
|
|
60
60
|
name: mini_racer
|
|
61
61
|
requirement: !ruby/object:Gem::Requirement
|
|
62
62
|
requirements:
|
|
63
63
|
- - "~>"
|
|
64
64
|
- !ruby/object:Gem::Version
|
|
65
|
-
version: 0.
|
|
65
|
+
version: 0.2.4
|
|
66
66
|
type: :runtime
|
|
67
67
|
prerelease: false
|
|
68
68
|
version_requirements: !ruby/object:Gem::Requirement
|
|
69
69
|
requirements:
|
|
70
70
|
- - "~>"
|
|
71
71
|
- !ruby/object:Gem::Version
|
|
72
|
-
version: 0.
|
|
72
|
+
version: 0.2.4
|
|
73
73
|
- !ruby/object:Gem::Dependency
|
|
74
74
|
name: opal
|
|
75
75
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -128,16 +128,22 @@ dependencies:
|
|
|
128
128
|
name: bundler
|
|
129
129
|
requirement: !ruby/object:Gem::Requirement
|
|
130
130
|
requirements:
|
|
131
|
-
- - "
|
|
131
|
+
- - ">="
|
|
132
|
+
- !ruby/object:Gem::Version
|
|
133
|
+
version: 1.17.3
|
|
134
|
+
- - "<"
|
|
132
135
|
- !ruby/object:Gem::Version
|
|
133
|
-
version: 1
|
|
136
|
+
version: '2.1'
|
|
134
137
|
type: :development
|
|
135
138
|
prerelease: false
|
|
136
139
|
version_requirements: !ruby/object:Gem::Requirement
|
|
137
140
|
requirements:
|
|
138
|
-
- - "
|
|
141
|
+
- - ">="
|
|
142
|
+
- !ruby/object:Gem::Version
|
|
143
|
+
version: 1.17.3
|
|
144
|
+
- - "<"
|
|
139
145
|
- !ruby/object:Gem::Version
|
|
140
|
-
version: 1
|
|
146
|
+
version: '2.1'
|
|
141
147
|
- !ruby/object:Gem::Dependency
|
|
142
148
|
name: chromedriver-helper
|
|
143
149
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -158,14 +164,14 @@ dependencies:
|
|
|
158
164
|
requirements:
|
|
159
165
|
- - '='
|
|
160
166
|
- !ruby/object:Gem::Version
|
|
161
|
-
version: 1.0.alpha1.
|
|
167
|
+
version: 1.0.alpha1.3
|
|
162
168
|
type: :development
|
|
163
169
|
prerelease: false
|
|
164
170
|
version_requirements: !ruby/object:Gem::Requirement
|
|
165
171
|
requirements:
|
|
166
172
|
- - '='
|
|
167
173
|
- !ruby/object:Gem::Version
|
|
168
|
-
version: 1.0.alpha1.
|
|
174
|
+
version: 1.0.alpha1.3
|
|
169
175
|
- !ruby/object:Gem::Dependency
|
|
170
176
|
name: jquery-rails
|
|
171
177
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -433,6 +439,7 @@ files:
|
|
|
433
439
|
- lib/hyperstack/component/react_api.rb
|
|
434
440
|
- lib/hyperstack/component/server.rb
|
|
435
441
|
- lib/hyperstack/component/version.rb
|
|
442
|
+
- lib/hyperstack/component/while_loading.rb
|
|
436
443
|
- lib/hyperstack/ext/component/boolean.rb
|
|
437
444
|
- lib/hyperstack/ext/component/element.rb
|
|
438
445
|
- lib/hyperstack/ext/component/hash.rb
|
|
@@ -454,10 +461,12 @@ files:
|
|
|
454
461
|
- lib/hyperstack/internal/component/rails/server_rendering/hyper_asset_container.rb
|
|
455
462
|
- lib/hyperstack/internal/component/react_wrapper.rb
|
|
456
463
|
- lib/hyperstack/internal/component/rendering_context.rb
|
|
464
|
+
- lib/hyperstack/internal/component/rescue_wrapper.rb
|
|
457
465
|
- lib/hyperstack/internal/component/should_component_update.rb
|
|
458
466
|
- lib/hyperstack/internal/component/tags.rb
|
|
459
467
|
- lib/hyperstack/internal/component/top_level_rails_component.rb
|
|
460
468
|
- lib/hyperstack/internal/component/validator.rb
|
|
469
|
+
- lib/hyperstack/internal/component/while_loading_wrapper.rb
|
|
461
470
|
- lib/react/react-source-browser.rb
|
|
462
471
|
- lib/react/react-source-server.rb
|
|
463
472
|
- lib/react/react-source.rb
|
|
@@ -481,8 +490,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
481
490
|
- !ruby/object:Gem::Version
|
|
482
491
|
version: 1.3.1
|
|
483
492
|
requirements: []
|
|
484
|
-
|
|
485
|
-
rubygems_version: 2.7.8
|
|
493
|
+
rubygems_version: 3.0.2
|
|
486
494
|
signing_key:
|
|
487
495
|
specification_version: 4
|
|
488
496
|
summary: Opal Ruby wrapper of React.js library.
|