From c26926148c982b8ad4c3bd52df9e529df56e083e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torkel=20=C3=96degaard?= Date: Wed, 23 Apr 2014 21:16:53 +0200 Subject: [PATCH] began work on unsaved changes warning when changing dashboard, Issue #324 --- src/app/services/dashboard.js | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) 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(/.*\//, '');