grafana/src/app/services/unsavedChangesSrv.js

102 lines
2.5 KiB
JavaScript
Raw Normal View History

2014-04-25 08:23:17 -05:00
define([
'angular',
'underscore',
'config',
2014-04-25 08:23:17 -05:00
],
function (angular, _, config) {
2014-04-25 08:23:17 -05:00
'use strict';
if (!config.unsaved_changes_warning) {
return;
}
2014-04-25 08:23:17 -05:00
var module = angular.module('kibana.services');
module.service('unsavedChangesSrv', function($rootScope, $modal, dashboard, $q, $location, $timeout) {
2014-04-25 08:23:17 -05:00
var self = this;
var modalScope = $rootScope.$new();
window.onbeforeunload = function () {
if (self.has_unsaved_changes()) {
return "There are unsaved changes to this dashboard";
}
};
this.init = function() {
$rootScope.$on("$locationChangeStart", function(event, next) {
if (self.has_unsaved_changes()) {
event.preventDefault();
self.next = next;
self.open_modal();
}
});
};
2014-04-25 08:23:17 -05:00
this.open_modal = function () {
2014-04-25 08:23:17 -05:00
var confirmModal = $modal({
template: './app/partials/unsaved-changes.html',
persist: true,
show: false,
scope: modalScope,
keyboard: false
});
$q.when(confirmModal).then(function(modalEl) {
modalEl.modal('show');
});
};
this.has_unsaved_changes = function () {
2014-04-25 08:23:17 -05:00
if (!dashboard.original) {
return false;
}
var current = angular.copy(dashboard.current);
var original = dashboard.original;
// ignore timespan changes
current.services.filter.time = original.services.filter.time = {};
current.refresh = original.refresh;
var currentTimepicker = _.findWhere(current.nav, { type: 'timepicker' });
var originalTimepicker = _.findWhere(original.nav, { type: 'timepicker' });
if (currentTimepicker && originalTimepicker) {
currentTimepicker.now = originalTimepicker.now;
}
2014-04-25 08:23:17 -05:00
var currentJson = angular.toJson(current);
var originalJson = angular.toJson(original);
2014-04-25 08:23:17 -05:00
if (currentJson !== originalJson) {
return true;
2014-04-25 08:23:17 -05:00
}
return false;
};
this.goto_next = function () {
var baseLen = $location.absUrl().length - $location.url().length;
var nextUrl = self.next.substring(baseLen);
$location.url(nextUrl);
};
modalScope.ignore = function() {
dashboard.original = null;
self.goto_next();
};
modalScope.save = function() {
var unregister = $rootScope.$on('dashboard-saved', function() {
self.goto_next();
});
$timeout(unregister, 2000);
$rootScope.$emit('save-dashboard');
2014-04-25 08:23:17 -05:00
};
}).run(function(unsavedChangesSrv) {
unsavedChangesSrv.init();
2014-04-25 08:23:17 -05:00
});
});