isomorfeus-react 16.6.6 → 16.6.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +439 -0
- data/lib/isomorfeus-react.rb +36 -38
- data/lib/isomorfeus/config.rb +66 -5
- data/lib/isomorfeus/execution_environment.rb +31 -0
- data/lib/isomorfeus/react_view_helper.rb +26 -0
- data/lib/isomorfeus/top_level_browser.rb +51 -0
- data/lib/isomorfeus/top_level_ssr.rb +18 -0
- data/lib/lucid_app/api.rb +1 -1
- data/lib/lucid_app/native_component_constructor.rb +2 -2
- data/lib/lucid_component/native_component_constructor.rb +9 -6
- data/lib/lucid_router.rb +18 -0
- data/lib/react.rb +14 -14
- data/lib/react/component/features.rb +12 -12
- data/lib/react/component/native_component_constructor.rb +2 -2
- data/lib/react/component/resolution.rb +6 -3
- data/lib/react/context_wrapper.rb +1 -1
- data/lib/react/function_component/creator.rb +1 -1
- data/lib/react/function_component/resolution.rb +7 -5
- data/lib/react/native_constant_wrapper.rb +3 -1
- data/lib/react/redux_component/app_store_proxy.rb +0 -3
- data/lib/react/redux_component/class_store_proxy.rb +0 -4
- data/lib/react/redux_component/native_component_constructor.rb +7 -4
- data/lib/react/version.rb +1 -1
- data/lib/react_dom.rb +38 -28
- data/lib/react_dom_server.rb +13 -11
- metadata +40 -9
- data/lib/isomorfeus/top_level.rb +0 -48
- data/lib/isomorfeus/view_helpers.rb +0 -22
- data/readme.md +0 -661
@@ -7,9 +7,9 @@ module React
|
|
7
7
|
var last_arg = args[args.length - 1];
|
8
8
|
if (typeof last_arg === 'string' || last_arg instanceof String) {
|
9
9
|
if (args.length === 1) { Opal.React.internal_render(React.Fragment, null, last_arg, null); }
|
10
|
-
else { Opal.React.internal_render(React.Fragment, args[0], last_arg, null); }
|
11
|
-
} else { Opal.React.internal_render(React.Fragment, args[0], null, block); }
|
12
|
-
} else { Opal.React.internal_render(React.Fragment, null, null, block); }
|
10
|
+
else { Opal.React.internal_render(Opal.global.React.Fragment, args[0], last_arg, null); }
|
11
|
+
} else { Opal.React.internal_render(Opal.global.React.Fragment, args[0], null, block); }
|
12
|
+
} else { Opal.React.internal_render(Opal.global.React.Fragment, null, null, block); }
|
13
13
|
}
|
14
14
|
end
|
15
15
|
|
@@ -27,7 +27,7 @@ module React
|
|
27
27
|
Opal.React.render_buffer[Opal.React.render_buffer.length - 1].push(block_result);
|
28
28
|
}
|
29
29
|
}
|
30
|
-
var react_element = React.createPortal(Opal.React.render_buffer.pop(), dom_node);
|
30
|
+
var react_element = Opal.global.React.createPortal(Opal.React.render_buffer.pop(), dom_node);
|
31
31
|
Opal.React.render_buffer[Opal.React.render_buffer.length - 1].push(react_element);
|
32
32
|
return null;
|
33
33
|
}
|
@@ -38,10 +38,10 @@ module React
|
|
38
38
|
if (args.length > 0) {
|
39
39
|
var last_arg = args[args.length - 1];
|
40
40
|
if (typeof last_arg === 'string' || last_arg instanceof String) {
|
41
|
-
if (args.length === 1) { Opal.React.internal_render(React.StrictMode, null, last_arg, null); }
|
42
|
-
else { Opal.React.internal_render(React.StrictMode, args[0], last_arg, null); }
|
43
|
-
} else { Opal.React.internal_render(React.StrictMode, args[0], null, block); }
|
44
|
-
} else { Opal.React.internal_render(React.StrictMode, null, null, block); }
|
41
|
+
if (args.length === 1) { Opal.React.internal_render(Opal.global.React.StrictMode, null, last_arg, null); }
|
42
|
+
else { Opal.React.internal_render(Opal.global.React.StrictMode, args[0], last_arg, null); }
|
43
|
+
} else { Opal.React.internal_render(Opal.global.React.StrictMode, args[0], null, block); }
|
44
|
+
} else { Opal.React.internal_render(Opal.global.React.StrictMode, null, null, block); }
|
45
45
|
}
|
46
46
|
end
|
47
47
|
|
@@ -50,10 +50,10 @@ module React
|
|
50
50
|
if (args.length > 0) {
|
51
51
|
var last_arg = args[args.length - 1];
|
52
52
|
if (typeof last_arg === 'string' || last_arg instanceof String) {
|
53
|
-
if (args.length === 1) { Opal.React.internal_render(React.Suspense, null, last_arg, null); }
|
54
|
-
else { Opal.React.internal_render(React.Suspense, args[0], last_arg, null); }
|
55
|
-
} else { Opal.React.internal_render(React.Suspense, args[0], null, block); }
|
56
|
-
} else { Opal.React.internal_render(React.Suspense, null, null, block); }
|
53
|
+
if (args.length === 1) { Opal.React.internal_render(Opal.global.React.Suspense, null, last_arg, null); }
|
54
|
+
else { Opal.React.internal_render(Opal.global.React.Suspense, args[0], last_arg, null); }
|
55
|
+
} else { Opal.React.internal_render(Opal.global.React.Suspense, args[0], null, block); }
|
56
|
+
} else { Opal.React.internal_render(Opal.global.React.Suspense, null, null, block); }
|
57
57
|
}
|
58
58
|
end
|
59
59
|
end
|
@@ -8,7 +8,7 @@ module React
|
|
8
8
|
component_name = base.to_s
|
9
9
|
# language=JS
|
10
10
|
%x{
|
11
|
-
base.react_component = class extends React.Component {
|
11
|
+
base.react_component = class extends Opal.global.React.Component {
|
12
12
|
constructor(props) {
|
13
13
|
super(props);
|
14
14
|
if (base.$default_state_defined()) {
|
@@ -29,7 +29,7 @@ module React
|
|
29
29
|
}
|
30
30
|
this[ref] = this[ref].bind(this);
|
31
31
|
} else {
|
32
|
-
this[ref] = React.createRef();
|
32
|
+
this[ref] = Opal.global.React.createRef();
|
33
33
|
}
|
34
34
|
}
|
35
35
|
}
|
@@ -6,8 +6,9 @@ module React
|
|
6
6
|
alias _react_component_resolution_original_const_missing const_missing
|
7
7
|
|
8
8
|
def const_missing(const_name)
|
9
|
+
# language=JS
|
9
10
|
%x{
|
10
|
-
if (typeof Opal.global[const_name]
|
11
|
+
if (typeof Opal.global[const_name] === "object") {
|
11
12
|
var new_const = #{React::NativeConstantWrapper.new(`Opal.global[const_name]`, const_name)};
|
12
13
|
#{Object.const_set(const_name, `new_const`)};
|
13
14
|
return new_const;
|
@@ -30,7 +31,8 @@ module React
|
|
30
31
|
# language=JS
|
31
32
|
%x{
|
32
33
|
var component = null;
|
33
|
-
|
34
|
+
var component_type = typeof Opal.global[component_name];
|
35
|
+
if (component_type === "function" || component_type === "object") {
|
34
36
|
component = Opal.global[component_name];
|
35
37
|
}
|
36
38
|
else {
|
@@ -43,7 +45,8 @@ module React
|
|
43
45
|
try {
|
44
46
|
module = modules.slice(0, i).join('::')
|
45
47
|
constant = self.$class().$const_get(module).$const_get(component_name, false);
|
46
|
-
|
48
|
+
component_type = typeof constant.react_component;
|
49
|
+
if (component_type === "function" || component_type === "object") {
|
47
50
|
component = constant.react_component;
|
48
51
|
break;
|
49
52
|
}
|
@@ -11,7 +11,7 @@ module React
|
|
11
11
|
|
12
12
|
if (args.length > 0) { props = args[0]; }
|
13
13
|
|
14
|
-
var react_element = React.createElement(this.native.Consumer, props, function(value) {
|
14
|
+
var react_element = Opal.global.React.createElement(this.native.Consumer, props, function(value) {
|
15
15
|
if (block !== nil) {
|
16
16
|
Opal.React.render_buffer.push([]);
|
17
17
|
block_result = block.$call();
|
@@ -44,7 +44,7 @@ module React
|
|
44
44
|
|
45
45
|
def self.memo_component(component_name, &block)
|
46
46
|
%x{
|
47
|
-
var fun = React.memo(function(props) {
|
47
|
+
var fun = Opal.global.React.memo(function(props) {
|
48
48
|
Opal.React.render_buffer.push([]);
|
49
49
|
Opal.React.active_components.push(Opal.React.FunctionComponent.Runner.event_handlers);
|
50
50
|
#{React::FunctionComponent::Runner.new(`props`).instance_exec(&block)};
|
@@ -6,8 +6,9 @@ module React
|
|
6
6
|
alias _react_component_resolution_original_const_missing const_missing
|
7
7
|
|
8
8
|
def const_missing(const_name)
|
9
|
+
# language=JS
|
9
10
|
%x{
|
10
|
-
if (typeof Opal.global[const_name]
|
11
|
+
if (typeof Opal.global[const_name] === "object") {
|
11
12
|
var new_const = #{React::NativeConstantWrapper.new(`Opal.global[const_name]`, const_name)};
|
12
13
|
#{Object.const_set(const_name, `new_const`)};
|
13
14
|
return new_const;
|
@@ -26,16 +27,18 @@ module React
|
|
26
27
|
# first check for native component and render it, we want to be fast for native components
|
27
28
|
# second check for ruby component and render it, they are a bit slower anyway
|
28
29
|
# third pass on method missing
|
29
|
-
|
30
|
+
# language=JS
|
30
31
|
%x{
|
31
32
|
var component = null;
|
32
|
-
|
33
|
+
var component_type = typeof Opal.global[component_name];
|
34
|
+
if (component_type === "function" || component_type === "object") {
|
33
35
|
component = Opal.global[component_name];
|
34
36
|
}
|
35
37
|
else {
|
36
38
|
try {
|
37
39
|
var constant = self.$class().$const_get(component_name, true);
|
38
|
-
|
40
|
+
component_type = typeof constant.react_component;
|
41
|
+
if (component_type === "function" || component_type === "object") {
|
39
42
|
component = constant.react_component;
|
40
43
|
}
|
41
44
|
}
|
@@ -44,7 +47,6 @@ module React
|
|
44
47
|
}
|
45
48
|
}
|
46
49
|
if (component) {
|
47
|
-
var props = null;
|
48
50
|
if (args.length > 0) {
|
49
51
|
var last_arg = args[args.length - 1];
|
50
52
|
if (typeof last_arg === 'string' || last_arg instanceof String) {
|
@@ -8,9 +8,11 @@ module React
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def method_missing(name, *args, &block)
|
11
|
+
# language=JS
|
11
12
|
%x{
|
12
13
|
var component = null;
|
13
|
-
|
14
|
+
var component_type = typeof #@native[name];
|
15
|
+
if (component_type === "function" || component_type === "object") {
|
14
16
|
component = #@native[name];
|
15
17
|
}
|
16
18
|
|
@@ -10,13 +10,10 @@ module React
|
|
10
10
|
|
11
11
|
def method_missing(key, *args, &block)
|
12
12
|
@native_component_instance.JS.register_used_store_path(['application_state', key])
|
13
|
-
|
14
13
|
if `args.length > 0`
|
15
14
|
# set class state, simply a dispatch
|
16
|
-
|
17
15
|
action = { type: 'APPLICATION_STATE', name: (`key.endsWith('=')` ? key.chop : key), value: args[0] }
|
18
16
|
Isomorfeus.store.dispatch(action)
|
19
|
-
|
20
17
|
else
|
21
18
|
# check if we have a component local state value
|
22
19
|
if `this.native_component_instance[this.access_key]["isomorfeus_store"]["application_state"].hasOwnProperty(key)`
|
@@ -13,13 +13,10 @@ module React
|
|
13
13
|
@native_component_instance.JS.register_used_store_path(['component_class_state', @component_name, key])
|
14
14
|
if `args.length > 0`
|
15
15
|
# set class state, simply a dispatch
|
16
|
-
|
17
16
|
action = { type: 'COMPONENT_CLASS_STATE', class: @component_name, name: (`key.endsWith('=')` ? key.chop : key), value: args[0] }
|
18
17
|
Isomorfeus.store.dispatch(action)
|
19
|
-
|
20
18
|
else
|
21
19
|
# get class state
|
22
|
-
|
23
20
|
# check if we have a component local state value
|
24
21
|
if @native_component_instance.JS[@access_key].JS[:isomorfeus_store].JS[:component_class_state].JS[@component_name] &&
|
25
22
|
@native_component_instance.JS[@access_key].JS[:isomorfeus_store].JS[:component_class_state].JS[@component_name].JS.hasOwnProperty(key)
|
@@ -28,7 +25,6 @@ module React
|
|
28
25
|
# check if a default value was given
|
29
26
|
return @component_instance.class.class_store.to_h[key]
|
30
27
|
end
|
31
|
-
|
32
28
|
# otherwise return nil
|
33
29
|
return nil
|
34
30
|
end
|
@@ -8,7 +8,7 @@ module React
|
|
8
8
|
component_name = base.to_s
|
9
9
|
# language=JS
|
10
10
|
%x{
|
11
|
-
base.react_component = class extends React.Component {
|
11
|
+
base.react_component = class extends Opal.global.React.Component {
|
12
12
|
constructor(props) {
|
13
13
|
super(props);
|
14
14
|
if (base.$default_state_defined()) {
|
@@ -41,7 +41,7 @@ module React
|
|
41
41
|
}
|
42
42
|
this[ref] = this[ref].bind(this);
|
43
43
|
} else {
|
44
|
-
this[ref] = React.createRef();
|
44
|
+
this[ref] = Opal.global.React.createRef();
|
45
45
|
}
|
46
46
|
}
|
47
47
|
this.listener = this.listener.bind(this);
|
@@ -84,10 +84,13 @@ module React
|
|
84
84
|
} else if (next_props[property] !== this.props[property]) { return true; };
|
85
85
|
}
|
86
86
|
}
|
87
|
+
var used_store_result;
|
87
88
|
for (var property in next_state) {
|
88
89
|
if (property === "isomorfeus_store") {
|
89
|
-
|
90
|
-
if (
|
90
|
+
used_store_result = this.scu_for_used_store_paths(this, this.state.isomorfeus_store, next_state.isomorfeus_store);
|
91
|
+
if (used_store_result) {
|
92
|
+
return true;
|
93
|
+
}
|
91
94
|
} else if (next_state.hasOwnProperty(property)) {
|
92
95
|
if (!this.state.hasOwnProperty(property)) { return true; };
|
93
96
|
if (typeof next_state[property]['$!='] !== "undefined" && typeof this.state[property]['$!='] !== "undefined") {
|
data/lib/react/version.rb
CHANGED
data/lib/react_dom.rb
CHANGED
@@ -1,31 +1,41 @@
|
|
1
1
|
module ReactDOM
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
2
|
+
class << self
|
3
|
+
def create_portal(child, container)
|
4
|
+
# container is a native DOM node
|
5
|
+
`Opal.global.ReactDOM.createPortal(child, container)`
|
6
|
+
end
|
7
|
+
|
8
|
+
def find_dom_node(native_react_component)
|
9
|
+
`Opal.global.ReactDOM.findDomNode(native_react_component)`
|
10
|
+
end
|
11
|
+
|
12
|
+
def hydrate(native_react_element, container, &block)
|
13
|
+
# container is a native DOM element
|
14
|
+
`Opal.React.render_buffer.push([]);`
|
15
|
+
result = if block_given?
|
16
|
+
`Opal.global.ReactDOM.hydrate(native_react_element, container, function() { block.$call() })`
|
17
|
+
else
|
18
|
+
`Opal.global.ReactDOM.hydrate(native_react_element, container)`
|
19
|
+
end
|
20
|
+
`Opal.React.render_buffer.pop()`
|
21
|
+
result
|
22
|
+
end
|
23
|
+
|
24
|
+
def render(native_react_element, container, &block)
|
25
|
+
# container is a native DOM element
|
26
|
+
`Opal.React.render_buffer.push([]);`
|
27
|
+
result = if block_given?
|
28
|
+
`Opal.global.ReactDOM.render(native_react_element, container, function() { block.$call() })`
|
29
|
+
else
|
30
|
+
`Opal.global.ReactDOM.render(native_react_element, container)`
|
31
|
+
end
|
32
|
+
`Opal.React.render_buffer.pop()`
|
33
|
+
result
|
34
|
+
end
|
35
|
+
|
36
|
+
def unmount_component_at_node(container)
|
37
|
+
# container is a native DOM element
|
38
|
+
`Opal.global.ReactDOM.unmountComponentAtNode(container)`
|
39
|
+
end
|
30
40
|
end
|
31
41
|
end
|
data/lib/react_dom_server.rb
CHANGED
@@ -1,17 +1,19 @@
|
|
1
1
|
module ReactDOMServer
|
2
|
-
|
2
|
+
class << self
|
3
|
+
def render_to_string(native_react_element)
|
4
|
+
`Opal.global.ReactDOMServer.renderToString(native_react_element)`
|
5
|
+
end
|
3
6
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
end
|
9
|
-
|
10
|
-
def render_to_node_stream
|
11
|
-
|
12
|
-
end
|
7
|
+
def render_to_static_markup(native_react_element)
|
8
|
+
`Opal.global.ReactDOMServer.renderToStaticMarkup(native_react_element)`
|
9
|
+
end
|
13
10
|
|
14
|
-
|
11
|
+
def render_to_node_stream(native_react_element)
|
12
|
+
`Opal.global.ReactDOMServer.renderToNodeStream(native_react_element)`
|
13
|
+
end
|
15
14
|
|
15
|
+
def render_to_static_node_stream(native_react_element)
|
16
|
+
`Opal.global.ReactDOMServer.renderToStaticNodeStream(native_react_element)`
|
17
|
+
end
|
16
18
|
end
|
17
19
|
end
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: isomorfeus-react
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 16.6.
|
4
|
+
version: 16.6.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jan Biedermann
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-05-
|
11
|
+
date: 2019-05-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: oj
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3.6'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '3.6'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: opal
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -52,34 +66,48 @@ dependencies:
|
|
52
66
|
- - "~>"
|
53
67
|
- !ruby/object:Gem::Version
|
54
68
|
version: 0.2.0
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: opal-webpack-loader
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 0.8.4
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 0.8.4
|
55
83
|
- !ruby/object:Gem::Dependency
|
56
84
|
name: isomorfeus-redux
|
57
85
|
requirement: !ruby/object:Gem::Requirement
|
58
86
|
requirements:
|
59
87
|
- - "~>"
|
60
88
|
- !ruby/object:Gem::Version
|
61
|
-
version: 4.0.
|
89
|
+
version: 4.0.4
|
62
90
|
type: :runtime
|
63
91
|
prerelease: false
|
64
92
|
version_requirements: !ruby/object:Gem::Requirement
|
65
93
|
requirements:
|
66
94
|
- - "~>"
|
67
95
|
- !ruby/object:Gem::Version
|
68
|
-
version: 4.0.
|
96
|
+
version: 4.0.4
|
69
97
|
- !ruby/object:Gem::Dependency
|
70
98
|
name: isomorfeus-speednode
|
71
99
|
requirement: !ruby/object:Gem::Requirement
|
72
100
|
requirements:
|
73
101
|
- - "~>"
|
74
102
|
- !ruby/object:Gem::Version
|
75
|
-
version: 0.2.
|
103
|
+
version: 0.2.3
|
76
104
|
type: :runtime
|
77
105
|
prerelease: false
|
78
106
|
version_requirements: !ruby/object:Gem::Requirement
|
79
107
|
requirements:
|
80
108
|
- - "~>"
|
81
109
|
- !ruby/object:Gem::Version
|
82
|
-
version: 0.2.
|
110
|
+
version: 0.2.3
|
83
111
|
description: Write React Components in Ruby.
|
84
112
|
email:
|
85
113
|
- jan@kursator.com
|
@@ -87,10 +115,13 @@ executables: []
|
|
87
115
|
extensions: []
|
88
116
|
extra_rdoc_files: []
|
89
117
|
files:
|
118
|
+
- README.md
|
90
119
|
- lib/isomorfeus-react.rb
|
91
120
|
- lib/isomorfeus/config.rb
|
92
|
-
- lib/isomorfeus/
|
93
|
-
- lib/isomorfeus/
|
121
|
+
- lib/isomorfeus/execution_environment.rb
|
122
|
+
- lib/isomorfeus/react_view_helper.rb
|
123
|
+
- lib/isomorfeus/top_level_browser.rb
|
124
|
+
- lib/isomorfeus/top_level_ssr.rb
|
94
125
|
- lib/lucid_app/api.rb
|
95
126
|
- lib/lucid_app/base.rb
|
96
127
|
- lib/lucid_app/context.rb
|
@@ -102,6 +133,7 @@ files:
|
|
102
133
|
- lib/lucid_component/initializer.rb
|
103
134
|
- lib/lucid_component/mixin.rb
|
104
135
|
- lib/lucid_component/native_component_constructor.rb
|
136
|
+
- lib/lucid_router.rb
|
105
137
|
- lib/react.rb
|
106
138
|
- lib/react/active_support_support.rb
|
107
139
|
- lib/react/component/api.rb
|
@@ -145,7 +177,6 @@ files:
|
|
145
177
|
- lib/react/version.rb
|
146
178
|
- lib/react_dom.rb
|
147
179
|
- lib/react_dom_server.rb
|
148
|
-
- readme.md
|
149
180
|
homepage: http://isomorfeus.com
|
150
181
|
licenses:
|
151
182
|
- MIT
|