diff --git a/src/app/services/dashboard.js b/src/app/services/dashboard.js index 002e8e05156..5872df9bcb2 100644 --- a/src/app/services/dashboard.js +++ b/src/app/services/dashboard.js @@ -60,6 +60,12 @@ function (angular, $, kbn, _, config, moment, Modernizr) { this.last = {}; this.availablePanels = []; + $rootScope.$on("$locationChangeStart", function(event, next, current) { + if (!self.confirm_dash_change()) { + event.preventDefault(); + } + }); + $rootScope.$on('$routeChangeSuccess',function(){ // Clear the current dashboard to prevent reloading self.current = {}; @@ -156,6 +162,7 @@ function (angular, $, kbn, _, config, moment, Modernizr) { // Set the current dashboard self.current = angular.copy(dashboard); + self.original = angular.copy(dashboard); // Delay this until we're sure that querySrv and filterSrv are ready $timeout(function() { @@ -184,6 +191,22 @@ function (angular, $, kbn, _, config, moment, Modernizr) { return true; }; + this.confirm_dash_change = function() { + if (!self.original) { + return true; + } + + var current = angular.copy(self.current); + var currentJson = angular.toJson(current); + var originalJson = angular.toJson(self.original); + + if (currentJson !== originalJson) { + return confirm('There are unsaved changes, are you sure you want to change dashboard?'); + } + + return true; + }; + this.gist_id = function(string) { if(self.is_gist(string)) { return string.match(gist_pattern)[0].replace(/.*\//, '');