Skip to content

Commit

Permalink
Extract ErrorRenderer
Browse files Browse the repository at this point in the history
  • Loading branch information
sstephenson committed Mar 31, 2016
1 parent 9b3c899 commit c8928a7
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 21 deletions.
21 changes: 21 additions & 0 deletions src/turbolinks/error_renderer.coffee
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#= require ./renderer

class Turbolinks.ErrorRenderer extends Turbolinks.Renderer
constructor: (@html) ->

render: (callback) ->
@renderView =>
@replaceDocumentHTML()
@activateScriptElements()
callback()

replaceDocumentHTML: ->
document.documentElement.innerHTML = @html

activateBodyScriptElements: ->
for replaceableElement in @getScriptElements()
element = @activateScriptElement(replaceableElement)
replaceableElement.parentNode.replaceChild(element, replaceableElement)

getScriptElements: ->
document.documentElement.querySelectorAll("script")
27 changes: 7 additions & 20 deletions src/turbolinks/view.coffee
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#= require ./snapshot
#= require ./snapshot_renderer
#= require ./error_renderer

class Turbolinks.View
constructor: (@delegate) ->
Expand All @@ -15,12 +16,12 @@ class Turbolinks.View
element = if clone then @element.cloneNode(true) else @element
Turbolinks.Snapshot.fromElement(element)

render: ({snapshot, html, isPreview}, callback) ->
render: ({snapshot, error, isPreview}, callback) ->
@markAsPreview(isPreview)
if snapshot?
@renderSnapshot(Turbolinks.Snapshot.wrap(snapshot), callback)
else
@renderHTML(html, callback)
@renderError(error, callback)

# Private

Expand All @@ -35,21 +36,7 @@ class Turbolinks.View
renderer.delegate = @delegate
renderer.render(callback)

renderHTML: (html, callback) ->
document.documentElement.innerHTML = html
activateScripts()
callback?()
@delegate.viewRendered()

activateScripts = ->
for oldChild in document.querySelectorAll("script")
newChild = cloneScript(oldChild)
oldChild.parentNode.replaceChild(newChild, oldChild)

cloneScript = (script) ->
element = document.createElement("script")
if script.hasAttribute("src")
element.src = script.getAttribute("src")
else
element.textContent = script.textContent
element
renderError: (error, callback) ->
renderer = new Turbolinks.ErrorRenderer html
renderer.delegate = @delegate
renderer.render(callback)
2 changes: 1 addition & 1 deletion src/turbolinks/visit.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ class Turbolinks.Visit
@render ->
@cacheSnapshot()
if @request.failed
@controller.render(html: @response, @performScroll)
@controller.render(error: @response, @performScroll)
@adapter.visitRendered?(this)
@fail()
else
Expand Down

0 comments on commit c8928a7

Please sign in to comment.