mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-25 20:46:48 +00:00
uss oop for nav check
This commit is contained in:
@@ -3,7 +3,7 @@ angular.module("admin.utils").directive "navCheck", (NavigationCheck)->
|
||||
scope:
|
||||
navCallback: '&'
|
||||
link: (scope,element,attributes) ->
|
||||
# Define navigationCallback on a controller in $scope, otherwise this default will be used:
|
||||
# Define navigationCallback on a controller in scope, otherwise this default will be used:
|
||||
scope.navCallback ||= ->
|
||||
"You will lose any unsaved work!"
|
||||
NavigationCheck.register(scope.navCallback)
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user