From 5e4186587117eb57917e5f85045e3be2a43152cb Mon Sep 17 00:00:00 2001 From: Rafael Schouten Date: Tue, 14 Oct 2014 00:25:46 +1100 Subject: [PATCH] add utils angular module and navigation check factory --- app/assets/javascripts/admin/all.js | 1 + .../enterprise_controller.js.coffee | 10 +++-- .../admin/enterprises/enterprises.js.coffee | 2 +- .../utils/services/navigation_check.js.coffee | 37 +++++++++++++++++++ .../javascripts/admin/utils/utils.js.coffee | 1 + 5 files changed, 47 insertions(+), 4 deletions(-) create mode 100644 app/assets/javascripts/admin/utils/services/navigation_check.js.coffee create mode 100644 app/assets/javascripts/admin/utils/utils.js.coffee diff --git a/app/assets/javascripts/admin/all.js b/app/assets/javascripts/admin/all.js index f8d3ceb721..7dc9d1116f 100644 --- a/app/assets/javascripts/admin/all.js +++ b/app/assets/javascripts/admin/all.js @@ -22,6 +22,7 @@ //= require ./payment_methods/payment_methods //= require ./products/products //= require ./shipping_methods/shipping_methods +//= require ./utils/utils //= require ./users/users //= require textAngular.min.js //= require textAngular-sanitize.min.js diff --git a/app/assets/javascripts/admin/enterprises/controllers/enterprise_controller.js.coffee b/app/assets/javascripts/admin/enterprises/controllers/enterprise_controller.js.coffee index 045b6e3422..6558c789a2 100644 --- a/app/assets/javascripts/admin/enterprises/controllers/enterprise_controller.js.coffee +++ b/app/assets/javascripts/admin/enterprises/controllers/enterprise_controller.js.coffee @@ -1,11 +1,15 @@ angular.module("admin.enterprises") - .controller "enterpriseCtrl", ($scope, Enterprise, longDescription, PaymentMethods, ShippingMethods) -> + .controller "enterpriseCtrl", ($scope, longDescription, Enterprise, PaymentMethods, ShippingMethods, NavigationCheck) -> $scope.Enterprise = Enterprise.enterprise $scope.PaymentMethods = PaymentMethods.paymentMethods $scope.ShippingMethods = ShippingMethods.shippingMethods + # htmlVariable is used by textAngular wysiwyg for the long descrtiption. $scope.htmlVariable = longDescription - $scope.$on "$routeChangeStart", (event, newUrl, oldUrl) -> - event.preventDefault() + # Provide a callback for a warning message displayed when leaving the page. + navigationCallback = -> + "You are editing an enterprise!" + + NavigationCheck.register navigationCallback for payment_method in $scope.PaymentMethods payment_method.selected = payment_method.id in $scope.Enterprise.payment_method_ids diff --git a/app/assets/javascripts/admin/enterprises/enterprises.js.coffee b/app/assets/javascripts/admin/enterprises/enterprises.js.coffee index 9b67bc14f4..e1e43854d1 100644 --- a/app/assets/javascripts/admin/enterprises/enterprises.js.coffee +++ b/app/assets/javascripts/admin/enterprises/enterprises.js.coffee @@ -1 +1 @@ -angular.module("admin.enterprises", ["admin.payment_methods", "admin.shipping_methods", "admin.users", "textAngular"]) \ No newline at end of file +angular.module("admin.enterprises", ["admin.payment_methods", "admin.utils", "admin.shipping_methods", "admin.users", "textAngular"]) \ No newline at end of file diff --git a/app/assets/javascripts/admin/utils/services/navigation_check.js.coffee b/app/assets/javascripts/admin/utils/services/navigation_check.js.coffee new file mode 100644 index 0000000000..1aea4e087f --- /dev/null +++ b/app/assets/javascripts/admin/utils/services/navigation_check.js.coffee @@ -0,0 +1,37 @@ +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 diff --git a/app/assets/javascripts/admin/utils/utils.js.coffee b/app/assets/javascripts/admin/utils/utils.js.coffee new file mode 100644 index 0000000000..4d58ae930a --- /dev/null +++ b/app/assets/javascripts/admin/utils/utils.js.coffee @@ -0,0 +1 @@ +angular.module("admin.utils", []) \ No newline at end of file