reactssr-rails 1.0.0 → 2.0.0
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/README.md +9 -0
- data/lib/assets/react_ssr.js +73 -0
- data/lib/reactssr/rails/railtie.rb +5 -0
- data/lib/reactssr/rails/version.rb +1 -1
- data/lib/reactssr/rails/view_helper.rb +14 -4
- data/lib/reactssr/server_rendering/ssr_renderer.rb +2 -1
- metadata +17 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e93f6c82f62a5c0a757c3beb5072a96ffa6523b8
|
4
|
+
data.tar.gz: d8e84513f4ceff020915b18de88e9814571aa645
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 63064cfd641cfca26faa3746693ce39c1b38fcf7747b51aa3191b07f76d045853a4deaa63607799cc57489b7639b6f9330b51e3e7ec0885248c05f54f5831666
|
7
|
+
data.tar.gz: 2526c7ff49391813c491b7079b31127064061038faaa101f1e72ae776ce57a42006b85ffdeb2986d664fc214f539b061abce1c1c104d6f5b7d16cb8afdf1f008
|
data/README.md
CHANGED
@@ -56,6 +56,15 @@ up a ssr file in components named `home.ssr.js`, just like below:
|
|
56
56
|
Components.IndexView = require('./IndexView.jsx');
|
57
57
|
```
|
58
58
|
|
59
|
+
### Make events work
|
60
|
+
|
61
|
+
Put this in your `application.js`: `//= require react_ssr` that below your Components.
|
62
|
+
This scripts will remount the component on client side so the event will be working.
|
63
|
+
|
64
|
+
According to React document, if remount the component on a markup that has been
|
65
|
+
mounted on the server side, the React will remount it in an efficient way on the
|
66
|
+
client side.
|
67
|
+
|
59
68
|
## Example
|
60
69
|
|
61
70
|
http://github.com/towry/reactssr-rails-example
|
@@ -0,0 +1,73 @@
|
|
1
|
+
/*! (c) 2015 @tovvry */
|
2
|
+
|
3
|
+
window.Components = window.Components || {};
|
4
|
+
|
5
|
+
(function (undefined) {
|
6
|
+
function ready () {
|
7
|
+
var scripts = document.getElementsByTagName('script');
|
8
|
+
Components.__loaded = Components.__loaded || {};
|
9
|
+
var _ = Components.__loaded;
|
10
|
+
|
11
|
+
if (!scripts.length) return;
|
12
|
+
if (typeof Components === 'undefined') typeof console !== 'undefined' && console.error && console.error("`Components` global object not found.");
|
13
|
+
|
14
|
+
for (var i = 0, script; i < scripts.length; i++) {
|
15
|
+
script = scripts[i];
|
16
|
+
|
17
|
+
var view;
|
18
|
+
var node;
|
19
|
+
var props;
|
20
|
+
|
21
|
+
var lastView, len;
|
22
|
+
if (script.hasAttribute && script.hasAttribute('data-reactssr-class')) {
|
23
|
+
view = script.getAttribute('data-reactssr-class');
|
24
|
+
_[view] = _[view] || [];
|
25
|
+
len = (_[view]).length;
|
26
|
+
lastView = (_[view])[len - 1];
|
27
|
+
if (!lastView) {
|
28
|
+
lastView = {};
|
29
|
+
_[view].push(lastView);
|
30
|
+
}
|
31
|
+
lastView.script = script;
|
32
|
+
} else {
|
33
|
+
continue;
|
34
|
+
}
|
35
|
+
|
36
|
+
node = script.previousSibling;
|
37
|
+
lastView.node = node;
|
38
|
+
|
39
|
+
if (!(view in Components)) {
|
40
|
+
continue;
|
41
|
+
}
|
42
|
+
|
43
|
+
view = Components[view];
|
44
|
+
if (!view) return;
|
45
|
+
|
46
|
+
if (!node.hasAttribute('data-react-props')) {
|
47
|
+
continue;
|
48
|
+
} else {
|
49
|
+
props = node.getAttribute('data-react-props');
|
50
|
+
}
|
51
|
+
|
52
|
+
if (props) {
|
53
|
+
props = JSON.parse(props);
|
54
|
+
} else {
|
55
|
+
props = {};
|
56
|
+
}
|
57
|
+
|
58
|
+
React.render(React.createElement(view, props), node);
|
59
|
+
}
|
60
|
+
}
|
61
|
+
|
62
|
+
if (document.addEventListener) {
|
63
|
+
document.addEventListener('DOMContentLoaded', ready);
|
64
|
+
} else if (document.attachEvent) {
|
65
|
+
var whenReady = function () {
|
66
|
+
if (document.readyState === 'complete') {
|
67
|
+
document.detachEvent('onreadystatechange', whenReady);
|
68
|
+
ready();
|
69
|
+
}
|
70
|
+
};
|
71
|
+
document.attachEvent('onreadystatechange', whenReady);
|
72
|
+
}
|
73
|
+
}());
|
@@ -1,6 +1,8 @@
|
|
1
1
|
module Reactssr
|
2
2
|
module Rails
|
3
3
|
class Railtie < ::Rails::Railtie
|
4
|
+
GEM_ROOT = Pathname.new('../../../../').expand_path(__FILE__)
|
5
|
+
|
4
6
|
config.reactssr = ActiveSupport::OrderedOptions.new
|
5
7
|
|
6
8
|
# The folder that contains all the stuff
|
@@ -14,6 +16,9 @@ module Reactssr
|
|
14
16
|
|
15
17
|
config.before_initialize do |app|
|
16
18
|
app.config.react.server_renderer = ::Reactssr::ServerRendering::SsrRenderer
|
19
|
+
|
20
|
+
our_asset_path = GEM_ROOT.join('lib/assets/').to_s
|
21
|
+
app.config.assets.paths << our_asset_path
|
17
22
|
end
|
18
23
|
end
|
19
24
|
end
|
@@ -8,7 +8,9 @@ module Reactssr
|
|
8
8
|
def react_ssr(name, props = {}, options = {}, &block)
|
9
9
|
options = {:tag => options} if options.is_a?(Symbol)
|
10
10
|
|
11
|
-
prerender_options = true
|
11
|
+
prerender_options = options.fetch(:prerender, true)
|
12
|
+
|
13
|
+
prerender_options = true if prerender_options == false
|
12
14
|
|
13
15
|
# All the below stuff is to send the `controller_name`
|
14
16
|
# and `action_name` to our ssr_renderer.
|
@@ -16,13 +18,15 @@ module Reactssr
|
|
16
18
|
# way, please contribute!
|
17
19
|
|
18
20
|
# Let reactssr-rails handle that.
|
21
|
+
|
19
22
|
pre_options = {
|
20
23
|
prerender_options: prerender_options,
|
21
24
|
controller_path: controller_path,
|
22
25
|
action_name: action_name
|
23
26
|
}
|
27
|
+
options.merge!(pre_options)
|
24
28
|
|
25
|
-
block = Proc.new { concat ::React::ServerRendering.render(name, props,
|
29
|
+
block = Proc.new { concat ::React::ServerRendering.render(name, props, options) }
|
26
30
|
|
27
31
|
html_options = options.reverse_merge(:data => {})
|
28
32
|
html_options[:data].tap do |data|
|
@@ -31,9 +35,15 @@ module Reactssr
|
|
31
35
|
html_tag = html_options[:tag] || :div
|
32
36
|
|
33
37
|
# remove internally used properties so they aren't rendered to DOM
|
34
|
-
html_options.except!(:tag, :
|
38
|
+
html_options.except!(:tag, :rerender, :prerender_options, :controller_path, :action_name)
|
39
|
+
|
40
|
+
output = content_tag(html_tag, '', html_options, &block)
|
41
|
+
|
42
|
+
if options.fetch(:rerender, false)
|
43
|
+
output << content_tag(:script, '', :data => {:reactssr_class => name.to_s})
|
44
|
+
end
|
35
45
|
|
36
|
-
|
46
|
+
output
|
37
47
|
end
|
38
48
|
end
|
39
49
|
end
|
@@ -103,7 +103,8 @@ module Reactssr
|
|
103
103
|
|
104
104
|
def entry
|
105
105
|
components = ::Rails.application.config.reactssr.assets_base || 'components'
|
106
|
-
|
106
|
+
path = @controller_path.to_s.split('.').join('_')
|
107
|
+
entry = File.join(components, "#{path}.ssr.js")
|
107
108
|
end
|
108
109
|
|
109
110
|
private
|
metadata
CHANGED
@@ -1,69 +1,69 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: reactssr-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- towry
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-08-
|
11
|
+
date: 2015-08-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.9'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.9'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - ~>
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '10.0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - ~>
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '10.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: react-rails
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: 1.1.0
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: 1.1.0
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: multi_json
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '1.0'
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '1.0'
|
69
69
|
description: |-
|
@@ -75,8 +75,8 @@ executables: []
|
|
75
75
|
extensions: []
|
76
76
|
extra_rdoc_files: []
|
77
77
|
files:
|
78
|
-
- .gitignore
|
79
|
-
- .travis.yml
|
78
|
+
- ".gitignore"
|
79
|
+
- ".travis.yml"
|
80
80
|
- CODE_OF_CONDUCT.md
|
81
81
|
- Gemfile
|
82
82
|
- LICENSE.txt
|
@@ -84,6 +84,7 @@ files:
|
|
84
84
|
- Rakefile
|
85
85
|
- bin/console
|
86
86
|
- bin/setup
|
87
|
+
- lib/assets/react_ssr.js
|
87
88
|
- lib/reactssr/assets/before_render.js
|
88
89
|
- lib/reactssr/rails.rb
|
89
90
|
- lib/reactssr/rails/engine.rb
|
@@ -103,18 +104,19 @@ require_paths:
|
|
103
104
|
- lib
|
104
105
|
required_ruby_version: !ruby/object:Gem::Requirement
|
105
106
|
requirements:
|
106
|
-
- -
|
107
|
+
- - ">="
|
107
108
|
- !ruby/object:Gem::Version
|
108
109
|
version: '0'
|
109
110
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
110
111
|
requirements:
|
111
|
-
- -
|
112
|
+
- - ">="
|
112
113
|
- !ruby/object:Gem::Version
|
113
114
|
version: '0'
|
114
115
|
requirements: []
|
115
116
|
rubyforge_project:
|
116
|
-
rubygems_version: 2.4.
|
117
|
+
rubygems_version: 2.4.8
|
117
118
|
signing_key:
|
118
119
|
specification_version: 4
|
119
120
|
summary: React SSR in Rails
|
120
121
|
test_files: []
|
122
|
+
has_rdoc:
|