summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js/views/form_view.js
diff options
context:
space:
mode:
authorAaron Bohy <aab@odoo.com>2015-06-30 14:37:14 +0200
committerAaron Bohy <aab@odoo.com>2015-07-01 11:36:32 +0200
commitb601ec66caa5bebdd97fc196af294c488dd78100 (patch)
treefcefe67d97a2455e7c90ec6db39979d1494ad445 /addons/web/static/src/js/views/form_view.js
parent3a511aaa700bc9965cd6967b2b8fb1b21ccdce8d (diff)
[IMP] web,mail: use of Modals to confirm changes discard
instead of the browser confirm dialogs, for the sake of uniformity.
Diffstat (limited to 'addons/web/static/src/js/views/form_view.js')
-rw-r--r--addons/web/static/src/js/views/form_view.js74
1 files changed, 46 insertions, 28 deletions
diff --git a/addons/web/static/src/js/views/form_view.js b/addons/web/static/src/js/views/form_view.js
index 35aa0223a13..488ddae9e61 100644
--- a/addons/web/static/src/js/views/form_view.js
+++ b/addons/web/static/src/js/views/form_view.js
@@ -89,10 +89,17 @@ var FormView = View.extend(common.FieldManagerMixin, {
self.on("change:actual_mode", self, self.do_update_pager);
});
self.on("load_record", self, self.load_record);
- core.bus.on('clear_uncommitted_changes', this, function(e) {
- if (!this.can_be_discarded()) {
- e.preventDefault();
- }
+ core.bus.on('clear_uncommitted_changes', this, function(chain_callbacks) {
+ var self = this;
+ chain_callbacks(function() {
+ var def = $.Deferred();
+ self.can_be_discarded().then(function() {
+ def.resolve();
+ }).fail(function() {
+ def.reject();
+ });
+ return def;
+ });
});
},
view_loading: function(r) {
@@ -402,26 +409,25 @@ var FormView = View.extend(common.FieldManagerMixin, {
this.$el.addClass('oe_form_dirty');
},
execute_pager_action: function(action) {
- if (this.can_be_discarded()) {
+ var self = this;
+ return this.can_be_discarded().then(function() {
switch (action) {
case 'first':
- this.dataset.index = 0;
+ self.dataset.index = 0;
break;
case 'previous':
- this.dataset.previous();
+ self.dataset.previous();
break;
case 'next':
- this.dataset.next();
+ self.dataset.next();
break;
case 'last':
- this.dataset.index = this.dataset.ids.length - 1;
+ self.dataset.index = self.dataset.ids.length - 1;
break;
}
- var def = this.reload();
- this.trigger('pager_action_executed');
- return def;
- }
- return $.when();
+ self.trigger('pager_action_executed');
+ return self.reload();
+ });
},
do_update_pager: function(hide_index) {
if (this.$pager) {
@@ -727,16 +733,16 @@ var FormView = View.extend(common.FieldManagerMixin, {
},
on_button_cancel: function(event) {
var self = this;
- if (this.can_be_discarded()) {
- if (this.get('actual_mode') === 'create') {
- this.trigger('history_back');
+ this.can_be_discarded().then(function() {
+ if (self.get('actual_mode') === 'create') {
+ self.trigger('history_back');
} else {
- this.to_view_mode();
- $.when.apply(null, this.render_value_defs).then(function(){
+ self.to_view_mode();
+ $.when.apply(null, self.render_value_defs).then(function(){
self.trigger('load_record', self.datarecord);
});
}
- }
+ });
this.trigger('on_button_cancel');
return false;
},
@@ -744,9 +750,9 @@ var FormView = View.extend(common.FieldManagerMixin, {
var self = this;
this.to_edit_mode();
return $.when(this.has_been_loaded).then(function() {
- if (self.can_be_discarded()) {
+ return self.can_be_discarded().then(function() {
return self.load_defaults();
- }
+ });
});
},
on_button_edit: function() {
@@ -787,13 +793,25 @@ var FormView = View.extend(common.FieldManagerMixin, {
return def.promise();
},
can_be_discarded: function() {
- if (this.$el.is('.oe_form_dirty')) {
- if (!confirm(_t("Warning, the record has been modified, your changes will be discarded.\n\nAre you sure you want to leave this page ?"))) {
- return false;
- }
- this.$el.removeClass('oe_form_dirty');
+ if (!this.$el.is('.oe_form_dirty')) {
+ return $.Deferred().resolve();
}
- return true;
+
+ var self = this;
+ var def = $.Deferred();
+ var message = _t("The record has been modified, your changes will be discarded. Are you sure you want to leave this page ?");
+ var options = {
+ title: _t("Warning"),
+ confirm_callback: function() {
+ self.$el.removeClass('oe_form_dirty');
+ def.resolve();
+ },
+ cancel_callback: function() {
+ def.reject();
+ },
+ };
+ Dialog.confirm(this, message, options);
+ return def;
},
/**
* Triggers saving the form's record. Chooses between creating a new