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

Commit 5b26009

Browse files
committed
Fire page:load on Turbolinks.replace and attach loaded nodes to the event
1 parent a532446 commit 5b26009

File tree

3 files changed

+13
-7
lines changed

3 files changed

+13
-7
lines changed

lib/assets/javascripts/turbolinks.js.coffee

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,12 +66,12 @@ fetchReplacement = (url, options) ->
6666
if doc = processResponse()
6767
reflectNewUrl url
6868
reflectRedirectedUrl()
69-
changePage doc, options
69+
loadedNodes = changePage doc, options
7070
if options.showProgressBar
7171
progressBar?.done()
7272
manuallyTriggerHashChangeForFirefox()
7373
options.onLoadFunction?()
74-
triggerEvent EVENTS.LOAD
74+
triggerEvent EVENTS.LOAD, loadedNodes
7575
else
7676
progressBar?.done()
7777
document.location.href = crossOriginRedirect() or url.absolute
@@ -124,7 +124,8 @@ constrainPageCacheTo = (limit) ->
124124
delete pageCache[key]
125125

126126
replace = (html, options = {}) ->
127-
changePage createDocument(html), options
127+
loadedNodes = changePage createDocument(html), options
128+
triggerEvent EVENTS.LOAD, loadedNodes
128129

129130
changePage = (doc, options) ->
130131
[title, targetBody, csrfToken] = extractTitleAndBody(doc)
@@ -160,6 +161,7 @@ changePage = (doc, options) ->
160161

161162
triggerEvent EVENTS.CHANGE, changedNodes
162163
triggerEvent EVENTS.UPDATE
164+
return changedNodes
163165

164166
findNodes = (body, selector) ->
165167
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
@@ -46,11 +46,12 @@ suite 'Turbolinks.visit()', ->
4646
@document.addEventListener 'page:change', (event) =>
4747
assert.deepEqual event.data, [@document.body]
4848
pageChangeFired = true
49-
@document.addEventListener 'page:load', =>
49+
@document.addEventListener 'page:load', (event) =>
5050
assert.ok pageReceivedFired
5151
assert.ok beforeUnloadFired
5252
assert.ok afterRemoveFired
5353
assert.ok pageChangeFired
54+
assert.deepEqual event.data, [@document.body]
5455
assert.equal @window.i, 1
5556
assert.equal @window.j, 1
5657
assert.isUndefined @window.headScript
@@ -89,9 +90,10 @@ suite 'Turbolinks.visit()', ->
8990
@document.addEventListener 'page:change', (event) =>
9091
assert.deepEqual event.data, [@$('#temporary'), @$('#change'), @$('[id="change:key"]')]
9192
pageChangeFired = true
92-
@document.addEventListener 'page:load', =>
93+
@document.addEventListener 'page:load', (event) =>
9394
assert.ok beforeUnloadFired
9495
assert.ok pageChangeFired
96+
assert.deepEqual event.data, [@$('#temporary'), @$('#change'), @$('[id="change:key"]')]
9597
assert.equal @window.i, 2
9698
assert.isUndefined @window.j
9799
assert.isUndefined @window.headScript

0 commit comments

Comments
 (0)