uss oop for nav check

This commit is contained in:
Rafael Schouten
2014-10-22 14:51:17 +11:00
parent 89ce4ba632
commit 175e430a2b
2 changed files with 39 additions and 30 deletions

View File

@@ -1,37 +1,46 @@
angular.module("admin.utils")
.factory "NavigationCheck", ($window, $rootScope) ->
callbacks = []
new class NavigationCheck
callbacks = []
constructor: ->
if $window.addEventListener
$window.addEventListener "beforeunload", @onBeforeUnloadHandler
else
$window.onbeforeunload = @onBeforeUnloadHandler
# Action for regular browser navigation.
onBeforeUnloadHandler = ($event) ->
message = getMessage()
if message
($event or $window.event).preventDefault()
$rootScope.$on "$locationChangeStart", @locationChangeStartHandler
# 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
# 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
register: (callback) =>
callbacks.push callback
# Runs callback functions to retreive most recently added non-empty message.
getMessage = ->
message = null
message = callback() ? message for callback in callbacks
message
clear: =>
if $window.addEventListener
$window.removeEventListener "beforeunload", @onBeforeUnloadHandler
else
$window.onbeforeunload = null
register = (callback) ->
callbacks.push callback
$rootScope.$on "$locationChangeStart", null
if $window.addEventListener
$window.addEventListener "beforeunload", onBeforeUnloadHandler
else
$window.onbeforeunload = onBeforeUnloadHandler
$rootScope.$on "$locationChangeStart", locationChangeStartHandler
return register: register