diff --git a/dist/unsavedChanges.js b/dist/unsavedChanges.js index 41882bd..18cc25e 100644 --- a/dist/unsavedChanges.js +++ b/dist/unsavedChanges.js @@ -14,6 +14,7 @@ angular.module('unsavedChanges', ['resettable']) var routeEvent = ['$locationChangeStart', '$stateChangeStart']; var navigateMessage = 'You will lose unsaved changes if you leave this page'; var reloadMessage = 'You will lose unsaved changes if you reload this page'; + var disableReloadConfirm = false; Object.defineProperty(_this, 'navigateMessage', { get: function() { @@ -33,6 +34,15 @@ angular.module('unsavedChanges', ['resettable']) } }); + Object.defineProperty(_this, 'disableReloadConfirm', { + get: function() { + return disableReloadConfirm; + }, + set: function(value) { + disableReloadConfirm = value; + } + }); + Object.defineProperty(_this, 'useTranslateService', { get: function() { return useTranslateService; @@ -92,6 +102,12 @@ angular.module('unsavedChanges', ['resettable']) } }); + Object.defineProperty(publicInterface, 'disableReloadConfirm', { + get: function() { + return disableReloadConfirm; + } + }); + Object.defineProperty(publicInterface, 'reloadMessage', { get: function() { return translateIfAble(reloadMessage) || reloadMessage; @@ -197,7 +213,9 @@ angular.module('unsavedChanges', ['resettable']) function setup() { unsavedWarningsConfig.log('Setting up'); - window.onbeforeunload = _this.confirmExit; + if (!unsavedWarningsConfig.disableReloadConfirm) { + window.onbeforeunload = _this.confirmExit; + } var eventsToWatchFor = unsavedWarningsConfig.routeEvent; diff --git a/dist/unsavedChanges.min.js b/dist/unsavedChanges.min.js index 29bc868..18cad16 100644 --- a/dist/unsavedChanges.min.js +++ b/dist/unsavedChanges.min.js @@ -1 +1 @@ -"use strict";angular.module("unsavedChanges",["resettable"]).provider("unsavedWarningsConfig",function(){var f=this;var e=false;var b=true;var d=["$locationChangeStart","$stateChangeStart"];var c="You will lose unsaved changes if you leave this page";var a="You will lose unsaved changes if you reload this page";Object.defineProperty(f,"navigateMessage",{get:function(){return c},set:function(g){c=g}});Object.defineProperty(f,"reloadMessage",{get:function(){return a},set:function(g){a=g}});Object.defineProperty(f,"useTranslateService",{get:function(){return b},set:function(g){b=!!(g)}});Object.defineProperty(f,"routeEvent",{get:function(){return d},set:function(g){if(typeof g==="string"){g=[g]}d=g}});Object.defineProperty(f,"logEnabled",{get:function(){return e},set:function(g){e=!!(g)}});this.$get=["$injector",function(h){function i(j){if(h.has("$translate")&&b){return h.get("$translate")(j)}else{return false}}var g={log:function(){if(console.log&&e&&arguments.length){var j=[].slice.call(arguments);if(typeof console.log==="object"){log.apply.call(console.log,console,j)}else{console.log.apply(console,j)}}}};Object.defineProperty(g,"useTranslateService",{get:function(){return b}});Object.defineProperty(g,"reloadMessage",{get:function(){return i(a)||a}});Object.defineProperty(g,"navigateMessage",{get:function(){return i(c)||c}});Object.defineProperty(g,"routeEvent",{get:function(){return d}});Object.defineProperty(g,"logEnabled",{get:function(){return e}});return g}]}).service("unsavedWarningSharedService",["$rootScope","unsavedWarningsConfig","$injector",function(j,c,k){var i=this;var a=[];var g=true;var d=[angular.noop];this.allForms=function(){return a};var f={navigate:c.navigateMessage,reload:c.reloadMessage};function h(){g=true;angular.forEach(a,function(m,l){c.log("Form : "+m.$name+" dirty : "+m.$dirty);if(m.$dirty){g=false}});return g}this.init=function(l){if(a.length===0){e()}c.log("Registering form",l);a.push(l)};this.removeForm=function(m){var l=a.indexOf(m);if(l===-1){return}a.splice(l,1);c.log("Removing form from watch list",m);if(a.length===0){b()}};function b(){c.log("No more forms, tearing down");angular.forEach(d,function(l){l()});window.onbeforeunload=null}this.confirmExit=function(){if(!h()){return f.reload}j.$broadcast("resetResettables");b()};function e(){c.log("Setting up");window.onbeforeunload=i.confirmExit;var l=c.routeEvent;angular.forEach(l,function(m){var n=j.$on(m,function(p,o,q){c.log("user is moving with "+m);if(!h()){c.log("a form is dirty");if(!confirm(f.navigate)){c.log("user wants to cancel leaving");p.preventDefault()}else{c.log("user doesn't care about loosing stuff");j.$broadcast("resetResettables")}}else{c.log("all forms are clean")}});d.push(n)})}}]).directive("unsavedWarningClear",["unsavedWarningSharedService",function(a){return{scope:{},require:"^form",priority:10,link:function(d,c,b,e){c.bind("click",function(f){e.$setPristine()})}}}]).directive("unsavedWarningForm",["unsavedWarningSharedService","$rootScope",function(b,a){return{scope:{},require:"form",link:function(e,d,c,f){b.init(f);d.bind("submit",function(g){if(f.$valid){f.$setPristine()}});d.bind("reset",function(g){g.preventDefault();e.$apply(a.$broadcast("resetResettables"));f.$setPristine()});e.$on("$destroy",function(){b.removeForm(f)})}}}]);angular.module("resettable",[]).directive("resettable",["$parse","$compile","$rootScope",function(d,c,b){return{scope:true,restrict:"A",link:function a(m,g,j,e){var h,k,l;j.$observe("ngModel",function(n){k=d(j.ngModel);h=k.assign;l=k(m)});var i=function(){h(m,l)};var f=m.$on("resetResettables",i);m.$on("$destroy",f)}}}]); \ No newline at end of file +"use strict";angular.module("unsavedChanges",["resettable"]).provider("unsavedWarningsConfig",function(){var g=this;var e=false;var b=true;var d=["$locationChangeStart","$stateChangeStart"];var c="You will lose unsaved changes if you leave this page";var a="You will lose unsaved changes if you reload this page";var f=false;Object.defineProperty(g,"navigateMessage",{get:function(){return c},set:function(h){c=h}});Object.defineProperty(g,"reloadMessage",{get:function(){return a},set:function(h){a=h}});Object.defineProperty(g,"disableReloadConfirm",{get:function(){return f},set:function(h){f=h}});Object.defineProperty(g,"useTranslateService",{get:function(){return b},set:function(h){b=!!(h)}});Object.defineProperty(g,"routeEvent",{get:function(){return d},set:function(h){if(typeof h==="string"){h=[h]}d=h}});Object.defineProperty(g,"logEnabled",{get:function(){return e},set:function(h){e=!!(h)}});this.$get=["$injector",function(i){function j(k){if(i.has("$translate")&&b){return i.get("$translate")(k)}else{return false}}var h={log:function(){if(console.log&&e&&arguments.length){var k=[].slice.call(arguments);if(typeof console.log==="object"){log.apply.call(console.log,console,k)}else{console.log.apply(console,k)}}}};Object.defineProperty(h,"useTranslateService",{get:function(){return b}});Object.defineProperty(h,"disableReloadConfirm",{get:function(){return f}});Object.defineProperty(h,"reloadMessage",{get:function(){return j(a)||a}});Object.defineProperty(h,"navigateMessage",{get:function(){return j(c)||c}});Object.defineProperty(h,"routeEvent",{get:function(){return d}});Object.defineProperty(h,"logEnabled",{get:function(){return e}});return h}]}).service("unsavedWarningSharedService",["$rootScope","unsavedWarningsConfig","$injector",function(j,c,k){var i=this;var a=[];var g=true;var d=[angular.noop];this.allForms=function(){return a};var f={navigate:c.navigateMessage,reload:c.reloadMessage};function h(){g=true;angular.forEach(a,function(m,l){c.log("Form : "+m.$name+" dirty : "+m.$dirty);if(m.$dirty){g=false}});return g}this.init=function(l){if(a.length===0){e()}c.log("Registering form",l);a.push(l)};this.removeForm=function(m){var l=a.indexOf(m);if(l===-1){return}a.splice(l,1);c.log("Removing form from watch list",m);if(a.length===0){b()}};function b(){c.log("No more forms, tearing down");angular.forEach(d,function(l){l()});window.onbeforeunload=null}this.confirmExit=function(){if(!h()){return f.reload}j.$broadcast("resetResettables");b()};function e(){c.log("Setting up");if(!c.disableReloadConfirm){window.onbeforeunload=i.confirmExit}var l=c.routeEvent;angular.forEach(l,function(m){var n=j.$on(m,function(p,o,q){c.log("user is moving with "+m);if(!h()){c.log("a form is dirty");if(!confirm(f.navigate)){c.log("user wants to cancel leaving");p.preventDefault()}else{c.log("user doesn't care about loosing stuff");j.$broadcast("resetResettables")}}else{c.log("all forms are clean")}});d.push(n)})}}]).directive("unsavedWarningClear",["unsavedWarningSharedService",function(a){return{scope:{},require:"^form",priority:10,link:function(d,c,b,e){c.bind("click",function(f){e.$setPristine()})}}}]).directive("unsavedWarningForm",["unsavedWarningSharedService","$rootScope",function(b,a){return{scope:{},require:"form",link:function(e,d,c,f){b.init(f);d.bind("submit",function(g){if(f.$valid){f.$setPristine()}});d.bind("reset",function(g){g.preventDefault();e.$apply(a.$broadcast("resetResettables"));f.$setPristine()});e.$on("$destroy",function(){b.removeForm(f)})}}}]);angular.module("resettable",[]).directive("resettable",["$parse","$compile","$rootScope",function(d,c,b){return{scope:true,restrict:"A",link:function a(m,g,j,e){var h,k,l;j.$observe("ngModel",function(n){k=d(j.ngModel);h=k.assign;l=k(m)});var i=function(){h(m,l)};var f=m.$on("resetResettables",i);m.$on("$destroy",f)}}}]); \ No newline at end of file diff --git a/src/unsavedChanges.js b/src/unsavedChanges.js index 41882bd..18cc25e 100644 --- a/src/unsavedChanges.js +++ b/src/unsavedChanges.js @@ -14,6 +14,7 @@ angular.module('unsavedChanges', ['resettable']) var routeEvent = ['$locationChangeStart', '$stateChangeStart']; var navigateMessage = 'You will lose unsaved changes if you leave this page'; var reloadMessage = 'You will lose unsaved changes if you reload this page'; + var disableReloadConfirm = false; Object.defineProperty(_this, 'navigateMessage', { get: function() { @@ -33,6 +34,15 @@ angular.module('unsavedChanges', ['resettable']) } }); + Object.defineProperty(_this, 'disableReloadConfirm', { + get: function() { + return disableReloadConfirm; + }, + set: function(value) { + disableReloadConfirm = value; + } + }); + Object.defineProperty(_this, 'useTranslateService', { get: function() { return useTranslateService; @@ -92,6 +102,12 @@ angular.module('unsavedChanges', ['resettable']) } }); + Object.defineProperty(publicInterface, 'disableReloadConfirm', { + get: function() { + return disableReloadConfirm; + } + }); + Object.defineProperty(publicInterface, 'reloadMessage', { get: function() { return translateIfAble(reloadMessage) || reloadMessage; @@ -197,7 +213,9 @@ angular.module('unsavedChanges', ['resettable']) function setup() { unsavedWarningsConfig.log('Setting up'); - window.onbeforeunload = _this.confirmExit; + if (!unsavedWarningsConfig.disableReloadConfirm) { + window.onbeforeunload = _this.confirmExit; + } var eventsToWatchFor = unsavedWarningsConfig.routeEvent;