turbolinks 2.2.2 → 2.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a29652f5af8636c6c8e56062fcaee11ec2997453
4
- data.tar.gz: c90a5773bee34e8d043876e5a3b4f4520bda207c
3
+ metadata.gz: da81704fe0957d34fec719c2fc56b4e455441f1b
4
+ data.tar.gz: 97475c1cc1e7f695aff45af973ec494f8eec515e
5
5
  SHA512:
6
- metadata.gz: 6d2be7089afe4cc2c492090bd411cc325900df7515875f9917ab76ce29316eb2f8a358e39381d04aa73fdc3a4eb542ea261dd2126cab16bcd66d844b02ac4207
7
- data.tar.gz: 2dff851cfb527fdc0e6b3bb262dfb0baaea02f602b0f170da6cd020d9c45412c9346e877230d42af72b2754d11125034c61ba8721faa5a7127a10163d2ed12a4
6
+ metadata.gz: 44e9dc7c75af51edef6c7549f46d8d3778c1a45a2d3944bfc7ead3a0242699eb606c9738d46e68de737c1ea72a02041c8e14532215aa8d3ab83fad4d4df8f306
7
+ data.tar.gz: f936d6871752ea5aafbf7c55f1e630c682361defb46c5dc5aa98b1f867ceb8bca539967b3669487537ecdf810e3c1bbd59aea6698c4d51df0ad8c6cb8f17c8be
data/README.md CHANGED
@@ -59,8 +59,12 @@ When a page is removed from the cache due to the cache reaching its size limit,
59
59
 
60
60
  To implement a client-side spinner, you could listen for `page:fetch` to start it and `page:receive` to stop it.
61
61
 
62
- document.addEventListener("page:fetch", startSpinner);
63
- document.addEventListener("page:receive", stopSpinner);
62
+ ```javascript
63
+ // using jQuery for simplicity
64
+
65
+ $(document).on("page:fetch", startSpinner);
66
+ $(document).on("page:receive", stopSpinner);
67
+ ```
64
68
 
65
69
  DOM transformations that are idempotent are best. If you have transformations that are not, hook them to happen only on `page:load` instead of `page:change` (as that would run them again on the cached pages).
66
70
 
@@ -195,6 +199,7 @@ Language Ports
195
199
  *These projects are not affiliated with or endorsed by the Rails Turbolinks team.*
196
200
 
197
201
  * [Flask Turbolinks](https://github.com/lepture/flask-turbolinks) (Python Flask)
202
+ * [Django Turbolinks](https://github.com/dgladkov/django-turbolinks) (Python Django)
198
203
  * [ASP.NET MVC Turbolinks](https://github.com/kazimanzurrashid/aspnetmvcturbolinks)
199
204
  * [PHP Turbolinks Component](https://github.com/helthe/Turbolinks) (Symfony Component)
200
205
  * [PHP Turbolinks Package](https://github.com/frenzyapp/turbolinks) (Laravel Package)
@@ -45,6 +45,7 @@ fetchReplacement = (url, onLoadFunction = =>) ->
45
45
 
46
46
  if doc = processResponse()
47
47
  changePage extractTitleAndBody(doc)...
48
+ manuallyTriggerHashChangeForFirefox()
48
49
  reflectRedirectedUrl()
49
50
  onLoadFunction()
50
51
  triggerEvent 'page:load'
@@ -95,6 +96,7 @@ changePage = (title, body, csrfToken, runScripts) ->
95
96
  document.title = title
96
97
  document.documentElement.replaceChild body, document.body
97
98
  CSRFToken.update csrfToken if csrfToken?
99
+ setAutofocusElement()
98
100
  executeScriptTags() if runScripts
99
101
  currentState = window.history.state
100
102
  triggerEvent 'page:change'
@@ -115,6 +117,12 @@ removeNoscriptTags = (node) ->
115
117
  node.innerHTML = node.innerHTML.replace /<noscript[\S\s]*?<\/noscript>/ig, ''
116
118
  node
117
119
 
120
+ # Firefox bug: Doesn't autofocus fields that are inserted via JavaScript
121
+ setAutofocusElement = ->
122
+ autofocusElement = (list = document.querySelectorAll 'input[autofocus], textarea[autofocus]')[list.length - 1]
123
+ if autofocusElement and document.activeElement isnt autofocusElement
124
+ autofocusElement.focus()
125
+
118
126
  reflectNewUrl = (url) ->
119
127
  if (url = new ComponentUrl url).absolute isnt referer
120
128
  window.history.pushState { turbolinks: true, url: url.absolute }, '', url.absolute
@@ -134,6 +142,18 @@ rememberCurrentUrl = ->
134
142
  rememberCurrentState = ->
135
143
  currentState = window.history.state
136
144
 
145
+ # Unlike other browsers, Firefox doesn't trigger hashchange after changing the
146
+ # location (via pushState) to an anchor on a different page. For example:
147
+ #
148
+ # /pages/one => /pages/two#with-hash
149
+ #
150
+ # By forcing Firefox to trigger hashchange, the rest of the code can rely on more
151
+ # consistent behavior across browsers.
152
+ manuallyTriggerHashChangeForFirefox = ->
153
+ if navigator.userAgent.match(/Firefox/) and !(url = (new ComponentUrl)).hasNoHash()
154
+ window.history.replaceState currentState, '', url.withoutHash()
155
+ document.location.hash = url.hash
156
+
137
157
  recallScrollPosition = (page) ->
138
158
  window.scrollTo page.positionX, page.positionY
139
159
 
@@ -371,6 +391,10 @@ initializeTurbolinks = ->
371
391
 
372
392
  document.addEventListener 'click', Click.installHandlerLast, true
373
393
 
394
+ window.addEventListener 'hashchange', (event) ->
395
+ rememberCurrentUrl()
396
+ rememberCurrentState()
397
+ , false
374
398
  bypassOnLoadPopstate ->
375
399
  window.addEventListener 'popstate', installHistoryChangeHandler, false
376
400
 
data/lib/turbolinks.rb CHANGED
@@ -27,7 +27,7 @@ module Turbolinks
27
27
  (ActionView::RoutingUrlFor rescue ActionView::Helpers::UrlHelper).module_eval do
28
28
  include XHRUrlFor
29
29
  end
30
- end
30
+ end unless RUBY_VERSION =~ /^1\.8/
31
31
  end
32
32
  end
33
33
  end
@@ -1,3 +1,3 @@
1
1
  module Turbolinks
2
- VERSION = '2.2.2'
2
+ VERSION = '2.2.3'
3
3
  end
@@ -11,21 +11,19 @@ module Turbolinks
11
11
  module XHRHeaders
12
12
  extend ActiveSupport::Concern
13
13
 
14
- included do
15
- alias_method_chain :_compute_redirect_to_location, :xhr_referer
16
- end
14
+ def _compute_redirect_to_location(*args)
15
+ options, request = _normalize_redirect_params(args)
17
16
 
18
- private
19
- def _compute_redirect_to_location_with_xhr_referer(options)
20
- store_for_turbolinks begin
21
- if options == :back && request.headers["X-XHR-Referer"]
22
- _compute_redirect_to_location_without_xhr_referer(request.headers["X-XHR-Referer"])
23
- else
24
- _compute_redirect_to_location_without_xhr_referer(options)
25
- end
17
+ store_for_turbolinks begin
18
+ if options == :back && request.headers["X-XHR-Referer"]
19
+ super(*[(request if args.length == 2), request.headers["X-XHR-Referer"]].compact)
20
+ else
21
+ super(*args)
26
22
  end
27
23
  end
24
+ end
28
25
 
26
+ private
29
27
  def store_for_turbolinks(url)
30
28
  session[:_turbolinks_redirect_to] = url if request.headers["X-XHR-Referer"]
31
29
  url
@@ -36,5 +34,13 @@ module Turbolinks
36
34
  response.headers['X-XHR-Redirected-To'] = session.delete :_turbolinks_redirect_to
37
35
  end
38
36
  end
37
+
38
+ # Ensure backwards compatibility
39
+ # Rails < 4.2: _compute_redirect_to_location(options)
40
+ # Rails >= 4.2: _compute_redirect_to_location(request, options)
41
+ def _normalize_redirect_params(args)
42
+ options, req = args.reverse
43
+ [options, req || request]
44
+ end
39
45
  end
40
- end
46
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: turbolinks
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.2
4
+ version: 2.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Heinemeier Hansson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-06 00:00:00.000000000 Z
11
+ date: 2014-08-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: coffee-rails