#= require ./snapshot #= require ./snapshot_renderer #= require ./error_renderer

class Turbolinks.View

constructor: (@delegate) ->
  @element = document.documentElement

getRootLocation: ->
  @getSnapshot().getRootLocation()

getSnapshot: ->
  Turbolinks.Snapshot.fromElement(@element)

render: ({snapshot, error, isPreview}, callback) ->
  @markAsPreview(isPreview)
  if snapshot?
    @renderSnapshot(snapshot, callback)
  else
    @renderError(error, callback)

# Private

markAsPreview: (isPreview) ->
  if isPreview
    @element.setAttribute("data-turbolinks-preview", "")
  else
    @element.removeAttribute("data-turbolinks-preview")

renderSnapshot: (snapshot, callback) ->
  Turbolinks.SnapshotRenderer.render(@delegate, callback, @getSnapshot(), Turbolinks.Snapshot.wrap(snapshot))

renderError: (error, callback) ->
  Turbolinks.ErrorRenderer.render(@delegate, callback, error)