Files
openfoodnetwork/app/assets/javascripts/admin/utils/services/navigation_check.js.coffee
2014-10-14 00:26:04 +11:00

38 lines
1.1 KiB
CoffeeScript

angular.module("admin.utils")
.factory "NavigationCheck", ($window, $rootScope) ->
callbacks = []
# Action for regular browser navigation.
onBeforeUnloadHandler = ($event) ->
message = getMessage()
if message
($event or $window.event).preventDefault()
message
# Action for angular navigation.
locationChangeStartHandler = ($event) ->
message = getMessage()
if message and not $window.confirm(message)
$event.stopPropagation() if $event.stopPropagation
$event.preventDefault() if $event.preventDefault
$event.cancelBubble = true
$event.returnValue = false
# Runs callback functions to retreive most recently added non-empty message.
getMessage = ->
message = null
message = callback() ? message for callback in callbacks
message
register = (callback) ->
callbacks.push callback
if $window.addEventListener
$window.addEventListener "beforeunload", onBeforeUnloadHandler
else
$window.onbeforeunload = onBeforeUnloadHandler
$rootScope.$on "$locationChangeStart", locationChangeStartHandler
return register: register