Skip to content

Latest commit

 

History

History
34 lines (26 loc) · 955 Bytes

dirty.coffee.md

File metadata and controls

34 lines (26 loc) · 955 Bytes

Dirty

Handle dirty tracking and onbeforeunload event for editors.

module.exports = (I, self) ->
  # TODO: May want to not stash this on I, possibly have a volatileAccessor?
  self.attrAccessor "savedCommand"

  self.extend
    dirty: ->
      self.savedCommand() != self.lastCommand()
    lastCommand: ->
      self.history().last()
    markClean: ->
      self.savedCommand self.lastCommand()

  self.markClean()

  # HACK: This assumes we're the only app in the page
  # NOTE: Track `prompted` so in an iframe it won't trigger twice
  prompted = false
  window.addEventListener "beforeunload", (e) ->
    unless prompted
      if self.dirty()
        e.returnValue = "Your changes haven't yet been saved. If you leave now you will lose your work."
      prompted = true

    setTimeout ->
      prompted = false

    return e.returnValue

  return self