Skip to content
This repository was archived by the owner on Jul 28, 2018. It is now read-only.

Commit 15733fc

Browse files
committed
Fire page:load on Turbolinks.replace and attach loaded nodes to the event
1 parent f593cfa commit 15733fc

File tree

4 files changed

+14
-8
lines changed

4 files changed

+14
-8
lines changed

CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@
138138
Turbolinks.visit url, scroll: false
139139
```
140140

141-
* Attach affected nodes to the `page:before-unload` and `page:change` events (in `event.data`).
141+
* Attach affected nodes to the `page:before-unload`, `page:change` and `page:load` events (in `event.data`).
142142

143143
*Thibaut Courouble*
144144

lib/assets/javascripts/turbolinks.js.coffee

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,12 +67,12 @@ fetchReplacement = (url, options) ->
6767
if doc = processResponse()
6868
reflectNewUrl url
6969
reflectRedirectedUrl()
70-
changePage doc, options
70+
loadedNodes = changePage doc, options
7171
if options.showProgressBar
7272
progressBar?.done()
7373
manuallyTriggerHashChangeForFirefox()
7474
updateScrollPosition(options.scroll)
75-
triggerEvent EVENTS.LOAD
75+
triggerEvent EVENTS.LOAD, loadedNodes
7676
else
7777
progressBar?.done()
7878
document.location.href = crossOriginRedirect() or url.absolute
@@ -125,7 +125,8 @@ constrainPageCacheTo = (limit) ->
125125
delete pageCache[key]
126126

127127
replace = (html, options = {}) ->
128-
changePage createDocument(html), options
128+
loadedNodes = changePage createDocument(html), options
129+
triggerEvent EVENTS.LOAD, loadedNodes
129130

130131
changePage = (doc, options) ->
131132
[title, targetBody, csrfToken] = extractTitleAndBody(doc)
@@ -161,6 +162,7 @@ changePage = (doc, options) ->
161162

162163
triggerEvent EVENTS.CHANGE, changedNodes
163164
triggerEvent EVENTS.UPDATE
165+
return changedNodes
164166

165167
findNodes = (body, selector) ->
166168
Array::slice.apply(body.querySelectorAll(selector))

test/javascript/turbolinks_replace_test.coffee

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,10 @@ suite 'Turbolinks.replace()', ->
5353
assert.equal event.data, body
5454
assert.notEqual permanent, event.data.querySelector('#permanent')
5555
afterRemoveFired = true
56-
@document.addEventListener 'page:change', =>
56+
@document.addEventListener 'page:load', (event) =>
5757
assert.ok beforeUnloadFired
5858
assert.ok afterRemoveFired
59+
assert.deepEqual event.data, [@document.body]
5960
assert.equal @window.j, 1
6061
assert.isUndefined @window.headScript
6162
assert.isUndefined @window.bodyScriptEvalFalse
@@ -170,9 +171,10 @@ suite 'Turbolinks.replace()', ->
170171
@document.addEventListener 'page:after-remove', (event) =>
171172
assert.isNull event.data.parentNode
172173
assert.equal event.data, afterRemoveNodes.shift()
173-
@document.addEventListener 'page:change', =>
174+
@document.addEventListener 'page:load', (event) =>
174175
assert.ok beforeUnloadFired
175176
assert.equal afterRemoveNodes.length, 0
177+
assert.deepEqual event.data, [@$('#temporary'), @$('#change'), @$('[id="change:key"]')]
176178
assert.equal @window.i, 2 # scripts are re-run
177179
assert.isUndefined @window.bodyScript
178180
assert.isUndefined @window.headScript

test/javascript/turbolinks_visit_test.coffee

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,12 @@ suite 'Turbolinks.visit()', ->
4747
@document.addEventListener 'page:change', (event) =>
4848
assert.deepEqual event.data, [@document.body]
4949
pageChangeFired = true
50-
@document.addEventListener 'page:load', =>
50+
@document.addEventListener 'page:load', (event) =>
5151
assert.ok pageReceivedFired
5252
assert.ok beforeUnloadFired
5353
assert.ok afterRemoveFired
5454
assert.ok pageChangeFired
55+
assert.deepEqual event.data, [@document.body]
5556
assert.equal @window.i, 1
5657
assert.equal @window.j, 1
5758
assert.isUndefined @window.headScript
@@ -90,9 +91,10 @@ suite 'Turbolinks.visit()', ->
9091
@document.addEventListener 'page:change', (event) =>
9192
assert.deepEqual event.data, [@$('#temporary'), @$('#change'), @$('[id="change:key"]')]
9293
pageChangeFired = true
93-
@document.addEventListener 'page:load', =>
94+
@document.addEventListener 'page:load', (event) =>
9495
assert.ok beforeUnloadFired
9596
assert.ok pageChangeFired
97+
assert.deepEqual event.data, [@$('#temporary'), @$('#change'), @$('[id="change:key"]')]
9698
assert.equal @window.i, 2
9799
assert.isUndefined @window.j
98100
assert.isUndefined @window.headScript

0 commit comments

Comments
 (0)