render_async 1.2.0 → 1.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: f1e55f1d2d9bd896fcb28007fb3bfe42752d4d90
4
- data.tar.gz: ac66f3e90a93a3952b0b5f690ab1d79e85b2284c
2
+ SHA256:
3
+ metadata.gz: c7348b088d336af949c92c6132a741fac0d1ccdda790d216fcd4a8bfba852dc0
4
+ data.tar.gz: 0ad8ed64d193321f04d6c623e4ed18992cd5638f0302a8736242c135dabb17ef
5
5
  SHA512:
6
- metadata.gz: 43ffe5cf4db879ec44baf27f68435ef275206ce725085ae6c6f1f139c44fcafd215e41b79ce0b44c471698a4b2cf21353e6ae9f07bd95620321f121551d0c49b
7
- data.tar.gz: 089b856889e18dd218372284ee4cfe86dd8aa08260ad55b58e39334a694e981de7c407a237a3686bbe69c71109bbc36c29bfb90163404b0d7efeaefa1db34389
6
+ metadata.gz: 68b8ebb7fa1bc91b5dcb51f7f86bde67fa404cb4159f73e98c1d75bb54ee9775f2cf13ef5373d2c1d8750ff9130dfa28fab3a85bffe1649eb529becba0006f32
7
+ data.tar.gz: 3809facb7cb728243aaed8d215dd29607c88baec7781b2df109cc7b91223d2fc919903db3a72c6b5ba2222739323964785e7cb34c0dff8b9e841113756095e2c
@@ -106,6 +106,24 @@
106
106
  "contributions": [
107
107
  "doc"
108
108
  ]
109
+ },
110
+ {
111
+ "login": "richardvenneman",
112
+ "name": "Richard Venneman",
113
+ "avatar_url": "https://avatars1.githubusercontent.com/u/75705?v=4",
114
+ "profile": "https://www.cityspotters.com",
115
+ "contributions": [
116
+ "doc"
117
+ ]
118
+ },
119
+ {
120
+ "login": "filipewl",
121
+ "name": "Filipe W. Lima",
122
+ "avatar_url": "https://avatars3.githubusercontent.com/u/381395?v=4",
123
+ "profile": "https://github.com/filipewl",
124
+ "contributions": [
125
+ "doc"
126
+ ]
109
127
  }
110
128
  ]
111
129
  }
data/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  [![Build Status](https://semaphoreci.com/api/v1/renderedtext/render_async/branches/master/shields_badge.svg)](https://semaphoreci.com/renderedtext/render_async)
2
- [![All Contributors](https://img.shields.io/badge/all_contributors-10-orange.svg?style=flat-square)](#contributors)
2
+ [![All Contributors](https://img.shields.io/badge/all_contributors-12-orange.svg?style=flat-square)](#contributors)
3
3
  [![Gem Version](https://badge.fury.io/rb/render_async.svg)](https://badge.fury.io/rb/render_async)
4
4
  [![Code Climate](https://codeclimate.com/github/renderedtext/render_async/badges/gpa.svg)](https://codeclimate.com/github/renderedtext/render_async)
5
5
  [![Test Coverage](https://codeclimate.com/github/renderedtext/render_async/badges/coverage.svg)](https://codeclimate.com/github/renderedtext/render_async/coverage)
@@ -12,7 +12,7 @@
12
12
  Speed up rendering Rails pages with this gem.
13
13
 
14
14
  `render_async` renders partials to your views **asynchronously**. This is done
15
- through adding Javascript code that does AJAX request to your controller which
15
+ through adding JavaScript code that does AJAX request to your controller which
16
16
  then renders your partial into a Rails view.
17
17
 
18
18
  Workflow:
@@ -22,15 +22,15 @@ Workflow:
22
22
  3. controller renders a partial
23
23
  4. partials renders in the place where you put `render_async` helper
24
24
 
25
- Javascript is injected into `<%= content_for :render_async %>` so you choose
25
+ JavaScript is injected into `<%= content_for :render_async %>` so you choose
26
26
  where to put it.
27
27
 
28
28
  ## Installation
29
-
29
+ S
30
30
  Add this line to your application's Gemfile:
31
31
 
32
32
  ```ruby
33
- gem 'render_async'
33
+ gem 'Sender_async'
34
34
  ```
35
35
 
36
36
  And then execute:
@@ -65,7 +65,7 @@ And then execute:
65
65
  </div>
66
66
  ```
67
67
 
68
- 5. Add `content_for` in your base view file (e.g. `app/views/layouts/application.html.erb`):
68
+ 5. Add `content_for` in your base view file in the body part (e.g. `app/views/layouts/application.html.erb`):
69
69
  ```erb
70
70
  <%= content_for :render_async %>
71
71
  ```
@@ -80,6 +80,7 @@ Advanced usage includes information on different options, such as:
80
80
  - [Passing in an event name](#passing-in-an-event-name)
81
81
  - [Caching](#caching)
82
82
  - [Using with Turbolinks](#using-with-turbolinks)
83
+ - [Using with respond_to and JS format](#using-with-respond_to-and-js-format)
83
84
  - [Nested Async Renders](#nested-async-renders)
84
85
 
85
86
  ### Passing in HTML options
@@ -159,10 +160,10 @@ response.
159
160
 
160
161
  ### Passing in an event name
161
162
 
162
- `render_async` can receive `:event_name` option which will emit Javascript
163
+ `render_async` can receive `:event_name` option which will emit JavaScript
163
164
  event after it's done with fetching and rendering request content to HTML.
164
165
 
165
- This can be useful to have if you want to add some Javascript functionality
166
+ This can be useful to have if you want to add some JavaScript functionality
166
167
  after your partial is loaded through `render_async`.
167
168
 
168
169
  Example of passing it to `render_async`:
@@ -228,6 +229,37 @@ To resolve, tell turbolinks to reload your `render_async` call as follows:
228
229
  <%= render_async events_path, 'data-turbolinks-track': 'reload' %>
229
230
  ```
230
231
 
232
+ Make sure to put `<%= content_for :render_async %>` in your base view file in
233
+ the `<head>` and not the `<body>`.
234
+
235
+ ### Using with respond_to and JS format
236
+
237
+ If you need to restrict the action to only respond to AJAX requests, you'll
238
+ likely wrap it inside `respond_to`/`format.js` blocks like this:
239
+
240
+ ```ruby
241
+ def comment_stats
242
+ respond_to do |format|
243
+ format.js do
244
+ @stats = Comment.get_stats
245
+
246
+ render :partial => "comment_stats"
247
+ end
248
+ end
249
+ end
250
+ ```
251
+
252
+ When you do this, Rails will sometime set the response's `Content-Type` header
253
+ to `text/javascript`. This causes the partial not to be rendered in the HTML.
254
+ This usually happens when there's browser caching.
255
+
256
+ You can get around it by specifying the content type to `text/html` in the
257
+ render call:
258
+
259
+ ```ruby
260
+ render :partial => "comment_stats", :content_type => 'text/html'
261
+ ```
262
+
231
263
  ### Nested Async Renders
232
264
 
233
265
  It is possible to nest async templates within other async templates. When doing
@@ -276,7 +308,7 @@ Thanks goes to these wonderful people ([emoji key](https://github.com/kentcdodds
276
308
  <!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
277
309
  | [<img src="https://avatars2.githubusercontent.com/u/3028124?v=4" width="100px;"/><br /><sub>Nikola Đuza</sub>](http://nikoladjuza.me/)<br />[💬](#question-nikolalsvk "Answering Questions") [🐛](https://github.com/renderedtext/render_async/issues?q=author%3Anikolalsvk "Bug reports") [💻](https://github.com/renderedtext/render_async/commits?author=nikolalsvk "Code") [📖](https://github.com/renderedtext/render_async/commits?author=nikolalsvk "Documentation") [💡](#example-nikolalsvk "Examples") [👀](#review-nikolalsvk "Reviewed Pull Requests") | [<img src="https://avatars0.githubusercontent.com/u/3866868?v=4" width="100px;"/><br /><sub>Colin</sub>](http://www.colinxfleming.com)<br />[💻](https://github.com/renderedtext/render_async/commits?author=colinxfleming "Code") [📖](https://github.com/renderedtext/render_async/commits?author=colinxfleming "Documentation") [💡](#example-colinxfleming "Examples") | [<img src="https://avatars2.githubusercontent.com/u/334273?v=4" width="100px;"/><br /><sub>Kasper Grubbe</sub>](http://kaspergrubbe.com)<br />[💻](https://github.com/renderedtext/render_async/commits?author=kaspergrubbe "Code") | [<img src="https://avatars2.githubusercontent.com/u/163584?v=4" width="100px;"/><br /><sub>Sai Ram Kunala</sub>](https://sairam.xyz/)<br />[📖](https://github.com/renderedtext/render_async/commits?author=sairam "Documentation") | [<img src="https://avatars2.githubusercontent.com/u/3065882?v=4" width="100px;"/><br /><sub>Josh Arnold</sub>](https://github.com/nightsurge)<br />[💻](https://github.com/renderedtext/render_async/commits?author=nightsurge "Code") [📖](https://github.com/renderedtext/render_async/commits?author=nightsurge "Documentation") | [<img src="https://avatars3.githubusercontent.com/u/107798?v=4" width="100px;"/><br /><sub>Elad Shahar</sub>](https://eladshahar.com)<br />[💻](https://github.com/renderedtext/render_async/commits?author=SaladFork "Code") [💡](#example-SaladFork "Examples") | [<img src="https://avatars3.githubusercontent.com/u/232392?v=4" width="100px;"/><br /><sub>Sasha</sub>](http://www.revzin.co.il)<br />[💻](https://github.com/renderedtext/render_async/commits?author=sasharevzin "Code") [📖](https://github.com/renderedtext/render_async/commits?author=sasharevzin "Documentation") |
278
310
  | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
279
- | [<img src="https://avatars3.githubusercontent.com/u/50223?v=4" width="100px;"/><br /><sub>Ernest Surudo</sub>](http://elsurudo.com)<br />[💻](https://github.com/renderedtext/render_async/commits?author=elsurudo "Code") | [<img src="https://avatars1.githubusercontent.com/u/334809?v=4" width="100px;"/><br /><sub>Kurtis Rainbolt-Greene</sub>](https://kurtis.rainbolt-greene.online)<br />[💻](https://github.com/renderedtext/render_async/commits?author=krainboltgreene "Code") | [<img src="https://avatars2.githubusercontent.com/u/59744?v=4" width="100px;"/><br /><sub>Richard Schneeman</sub>](https://www.schneems.com)<br />[📖](https://github.com/renderedtext/render_async/commits?author=schneems "Documentation") |
311
+ | [<img src="https://avatars3.githubusercontent.com/u/50223?v=4" width="100px;"/><br /><sub>Ernest Surudo</sub>](http://elsurudo.com)<br />[💻](https://github.com/renderedtext/render_async/commits?author=elsurudo "Code") | [<img src="https://avatars1.githubusercontent.com/u/334809?v=4" width="100px;"/><br /><sub>Kurtis Rainbolt-Greene</sub>](https://kurtis.rainbolt-greene.online)<br />[💻](https://github.com/renderedtext/render_async/commits?author=krainboltgreene "Code") | [<img src="https://avatars2.githubusercontent.com/u/59744?v=4" width="100px;"/><br /><sub>Richard Schneeman</sub>](https://www.schneems.com)<br />[📖](https://github.com/renderedtext/render_async/commits?author=schneems "Documentation") | [<img src="https://avatars1.githubusercontent.com/u/75705?v=4" width="100px;"/><br /><sub>Richard Venneman</sub>](https://www.cityspotters.com)<br />[📖](https://github.com/renderedtext/render_async/commits?author=richardvenneman "Documentation") | [<img src="https://avatars3.githubusercontent.com/u/381395?v=4" width="100px;"/><br /><sub>Filipe W. Lima</sub>](https://github.com/filipewl)<br />[📖](https://github.com/renderedtext/render_async/commits?author=filipewl "Documentation") |
280
312
  <!-- ALL-CONTRIBUTORS-LIST:END -->
281
313
 
282
314
  This project follows the [all-contributors](https://github.com/kentcdodds/all-contributors) specification. Contributions of any kind welcome!
@@ -8,6 +8,9 @@
8
8
  formats: [:js],
9
9
  locals: { container_id: container_id,
10
10
  path: path,
11
- event_name: event_name } %>
11
+ method: method,
12
+ data: data,
13
+ event_name: event_name,
14
+ headers: headers } %>
12
15
  <% end %>
13
16
  <% end %>
@@ -1,7 +1,17 @@
1
1
  if (window.jQuery) {
2
2
  (function($) {
3
3
  $(document).ready(function() {
4
- $.ajax({ url: "<%= path.html_safe %>" }).always(function(response) {
4
+ var headers = <%= headers.to_json.html_safe %>;
5
+ var csrfTokenElement = document.querySelector('meta[name="csrf-token"]')
6
+ if (csrfTokenElement)
7
+ headers['X-CSRF-Token'] = csrfTokenElement.content
8
+
9
+ $.ajax({
10
+ url: '<%= path.html_safe %>',
11
+ method: '<%= method %>',
12
+ data: "<%= escape_javascript(data.to_s.html_safe) %>",
13
+ headers: headers
14
+ }).always(function(response) {
5
15
  $("#<%= container_id %>").replaceWith(response);
6
16
 
7
17
  <% if event_name.present? %>
@@ -18,11 +28,20 @@ if (window.jQuery) {
18
28
  var SUCCESS = 200;
19
29
  var ERROR = 400;
20
30
 
21
- request.open("GET", "<%= path.html_safe %>", asyncRequest);
31
+ request.open('<%= method %>', '<%= path.html_safe %>', asyncRequest);
32
+
33
+ var headers = <%= headers.to_json.html_safe %>;
34
+ var csrfTokenElement = document.querySelector('meta[name="csrf-token"]')
35
+ if (csrfTokenElement)
36
+ headers['X-CSRF-Token'] = csrfTokenElement.content
37
+
38
+ Object.keys(headers).map(function(key) {
39
+ request.setRequestHeader(key, headers[key]);
40
+ });
22
41
 
23
42
  request.onload = function() {
24
43
  if (request.status >= SUCCESS && request.status < ERROR) {
25
- var container = document.getElementById("<%= container_id %>");
44
+ var container = document.getElementById('<%= container_id %>');
26
45
  container.outerHTML = request.response;
27
46
 
28
47
  <% if event_name.present? %>
@@ -31,7 +50,8 @@ if (window.jQuery) {
31
50
  }
32
51
  };
33
52
 
34
- request.send();
53
+ var body = "<%= escape_javascript(data.to_s.html_safe) %>";
54
+ request.send(body);
35
55
  });
36
56
  })();
37
57
  }
@@ -1,3 +1,3 @@
1
1
  module RenderAsync
2
- VERSION = "1.2.0".freeze
2
+ VERSION = "1.3.0".freeze
3
3
  end
@@ -18,17 +18,23 @@ module RenderAsync
18
18
  end
19
19
 
20
20
  def render_async(path, options = {}, &placeholder)
21
- html_element_name = options.delete(:html_element_name) || "div"
21
+ html_element_name = options.delete(:html_element_name) || 'div'
22
22
  container_id = "render_async_#{SecureRandom.hex(5)}#{Time.now.to_i}"
23
23
  event_name = options.delete(:event_name)
24
24
  placeholder = capture(&placeholder) if block_given?
25
+ method = options.delete(:method) || 'GET'
26
+ data = options.delete(:data)
27
+ headers = options.delete(:headers) || {}
25
28
 
26
29
  render 'render_async/render_async', html_element_name: html_element_name,
27
30
  container_id: container_id,
28
31
  path: path,
29
32
  html_options: options,
30
33
  event_name: event_name,
31
- placeholder: placeholder
34
+ placeholder: placeholder,
35
+ method: method,
36
+ data: data,
37
+ headers: headers
32
38
  end
33
39
 
34
40
  end
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
10
10
  spec.email = ["nikolaseap@gmail.com"]
11
11
 
12
12
  spec.summary = "Render parts of the page asynchronously with AJAX"
13
- spec.description = "Load parts of your page through simple Javascript and Rails pipeline"
13
+ spec.description = "Load parts of your page through simple JavaScript and Rails pipeline"
14
14
  spec.homepage = "https://github.com/renderedtext/render_async"
15
15
  spec.license = "MIT"
16
16
 
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: 1.2.0
4
+ version: 1.3.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: 2018-01-25 00:00:00.000000000 Z
12
+ date: 2018-10-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -67,7 +67,7 @@ dependencies:
67
67
  - - "~>"
68
68
  - !ruby/object:Gem::Version
69
69
  version: 1.0.8
70
- description: Load parts of your page through simple Javascript and Rails pipeline
70
+ description: Load parts of your page through simple JavaScript and Rails pipeline
71
71
  email:
72
72
  - nikolaseap@gmail.com
73
73
  executables: []
@@ -112,7 +112,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
112
112
  version: '0'
113
113
  requirements: []
114
114
  rubyforge_project:
115
- rubygems_version: 2.6.14
115
+ rubygems_version: 2.7.6
116
116
  signing_key:
117
117
  specification_version: 4
118
118
  summary: Render parts of the page asynchronously with AJAX