app/assets/javascripts/watch_form_changes.js.coffee

Summary

Maintainability
Test Coverage
App.WatchFormChanges =
  forms: ->
    return $('form[data-watch-changes]')

  msg: ->
    if($('[data-watch-form-message]').length)
      return $('[data-watch-form-message]').data('watch-form-message')

  checkChanges: (event) ->
    changes = false
    App.WatchFormChanges.forms().each ->
      form = $(this)
      if form.serialize() != form.data('watchChanges')
        changes = true
    if changes
      return confirm(App.WatchFormChanges.msg())
    else
      return true

  initialize: ->
    if App.WatchFormChanges.forms().length == 0 || App.WatchFormChanges.msg() == undefined
      return

    $(document).off('page:before-change').on('page:before-change', (e) -> App.WatchFormChanges.checkChanges(e))

    App.WatchFormChanges.forms().each ->
      form = $(this)
      form.data('watchChanges', form.serialize())

    false