render_async 0.4.1 → 1.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 +48 -22
- data/app/views/render_async/_render_async.html.erb +4 -7
- data/lib/render_async/version.rb +1 -1
- data/lib/render_async/view_helper.rb +7 -5
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4cb50b82faad4e5b955dee426984e606277e5000
|
4
|
+
data.tar.gz: 30b577cb393842086bb39b0b52c3913d62cec3c0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cefdcad421559d06858b1b13e9e70f6c4c79781d7dbb8255ea6265c4e09079733092ea25238c7610c0e803c326b11f8fe34ff50bd953582cdf3ca4fcf4a1bea6
|
7
|
+
data.tar.gz: e01ae7a2d71bec7d25f853e0edc640b3f83786e1d3143943e0eee46ab549584fa9b1280f19f5359b52105525cc19c066658a753524735672a6ae2aca5e234e70
|
data/README.md
CHANGED
@@ -12,9 +12,9 @@ your partial.
|
|
12
12
|
|
13
13
|
Workflow:
|
14
14
|
|
15
|
-
1. user visits a page
|
16
|
-
2. AJAX request on the controller action
|
17
|
-
3. controller renders a partial
|
15
|
+
1. user visits a page
|
16
|
+
2. AJAX request on the controller action
|
17
|
+
3. controller renders a partial
|
18
18
|
4. partials renders in the place where you put `render_async` helper
|
19
19
|
|
20
20
|
Javascript is injected into `<%= content_for :render_async %>` so you choose
|
@@ -77,12 +77,16 @@ And then execute:
|
|
77
77
|
|
78
78
|
## Advanced usage
|
79
79
|
|
80
|
+
### Passing in HTML options
|
81
|
+
|
80
82
|
`render_async` takes two arguments, `path` and `html_options`.
|
81
83
|
|
82
|
-
* `path` is the
|
83
|
-
|
84
|
+
* `path` is the AJAX-capable controller action you're looking to call via
|
85
|
+
`GET`. e.g. `comments_stats_path`, `posts_path`, etc.
|
86
|
+
* `html_options` is an optional hash that gets passed to a rails
|
87
|
+
`javascript_tag`, to drop html tags into the `script` element.
|
84
88
|
|
85
|
-
Example utilizing `html_options` with a `nonce`:
|
89
|
+
Example of utilizing `html_options` with a `nonce`:
|
86
90
|
```erb
|
87
91
|
<%= render_async users_path, nonce: 'lWaaV6eYicpt+oyOfcShYINsz0b70iR+Q1mohZqNaag=' %>
|
88
92
|
```
|
@@ -90,34 +94,56 @@ Example utilizing `html_options` with a `nonce`:
|
|
90
94
|
Rendered code in the view:
|
91
95
|
```html
|
92
96
|
<div id="render_async_18b8a6cd161499117471">
|
93
|
-
<div id="render_async_18b8a6cd161499117471_spinner" class="sk-spinner sk-spinner-double-bounce">
|
94
|
-
<div class="sk-double-bounce1"></div>
|
95
|
-
<div class="sk-double-bounce2"></div>
|
96
|
-
</div>
|
97
97
|
</div>
|
98
98
|
|
99
99
|
<script nonce="lWaaV6eYicpt+oyOfcShYINsz0b70iR+Q1mohZqNaag=">
|
100
100
|
//<![CDATA[
|
101
101
|
|
102
102
|
(function($){
|
103
|
-
$.ajax({
|
104
|
-
|
105
|
-
|
106
|
-
.done(function(response, status) {
|
107
|
-
$("#render_async_18b8a6cd161499117471").html(response);
|
108
|
-
})
|
109
|
-
.fail(function(response, status) {
|
110
|
-
$("#render_async_18b8a6cd161499117471").html(response);
|
111
|
-
})
|
112
|
-
.always(function(response, status) {
|
113
|
-
$("#render_async_18b8a6cd161499117471_spinner").hide();
|
114
|
-
});
|
103
|
+
$.ajax({ url: "/users" }).always(function(response) {
|
104
|
+
$("#render_async_18b8a6cd161499117471").replaceWith(response);
|
105
|
+
});
|
115
106
|
}(jQuery));
|
116
107
|
|
117
108
|
//]]>
|
118
109
|
</script>
|
119
110
|
```
|
120
111
|
|
112
|
+
### Passing in a placeholder
|
113
|
+
|
114
|
+
`render_async` can be called with a block that will act as a placeholder before
|
115
|
+
your AJAX call finishes.
|
116
|
+
|
117
|
+
Example of passing in a block:
|
118
|
+
|
119
|
+
```erb
|
120
|
+
<%= render_async users_path do %>
|
121
|
+
<h1>Users are loading...</h1>
|
122
|
+
<% end %>
|
123
|
+
```
|
124
|
+
|
125
|
+
Rendered code in the view:
|
126
|
+
```html
|
127
|
+
<div id="render_async_14d7ac165d1505993721">
|
128
|
+
<h1>Users are loading...</h1>
|
129
|
+
</div>
|
130
|
+
|
131
|
+
<script>
|
132
|
+
//<![CDATA[
|
133
|
+
|
134
|
+
(function($){
|
135
|
+
$.ajax({ url: "/users" }).always(function(response) {
|
136
|
+
$("#render_async_14d7ac165d1505993721").replaceWith(response);
|
137
|
+
});
|
138
|
+
}(jQuery));
|
139
|
+
|
140
|
+
//]]>
|
141
|
+
</script>
|
142
|
+
```
|
143
|
+
|
144
|
+
After AJAX is finished, placeholder will be replaced with the request's
|
145
|
+
response.
|
146
|
+
|
121
147
|
## Caching
|
122
148
|
|
123
149
|
`render_async` can utilize view fragment caching to avoid extra AJAX calls.
|
@@ -1,15 +1,12 @@
|
|
1
|
-
<div id="<%=
|
2
|
-
|
3
|
-
<div class="sk-double-bounce1"></div>
|
4
|
-
<div class="sk-double-bounce2"></div>
|
5
|
-
</div>
|
1
|
+
<div id="<%= container_id %>">
|
2
|
+
<%= placeholder %>
|
6
3
|
</div>
|
7
4
|
|
8
5
|
<% content_for :render_async do %>
|
9
6
|
<%= javascript_tag html_options do %>
|
10
7
|
(function($){
|
11
|
-
$.ajax({ url: "<%= path %>"}).always(function(response) {
|
12
|
-
$("#<%=
|
8
|
+
$.ajax({ url: "<%= path %>" }).always(function(response) {
|
9
|
+
$("#<%= container_id %>").replaceWith(response);
|
13
10
|
});
|
14
11
|
}(jQuery));
|
15
12
|
<% end %>
|
data/lib/render_async/version.rb
CHANGED
@@ -16,12 +16,14 @@ module RenderAsync
|
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
|
-
def render_async(path, html_options = {})
|
20
|
-
|
19
|
+
def render_async(path, html_options = {}, &placeholder)
|
20
|
+
container_id = "render_async_#{SecureRandom.hex(5)}#{Time.now.to_i}"
|
21
|
+
placeholder = capture(&placeholder) if block_given?
|
21
22
|
|
22
|
-
render
|
23
|
-
:
|
24
|
-
:
|
23
|
+
render 'render_async/render_async', container_id: container_id,
|
24
|
+
path: path,
|
25
|
+
html_options: html_options,
|
26
|
+
placeholder: placeholder
|
25
27
|
end
|
26
28
|
|
27
29
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: render_async
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kasper Grubbe
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-09-
|
12
|
+
date: 2017-09-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|