summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js/views
diff options
context:
space:
mode:
authorqsm-odoo <qsm@odoo.com>2015-06-16 11:38:20 +0200
committerqsm-odoo <qsm@odoo.com>2015-06-17 09:49:46 +0200
commit46bf047e86c2a5dd93aae3b6ac77873aa6180a1e (patch)
tree9fa2fd229f0c577c7342b91f39b957bea09277e6 /addons/web/static/src/js/views
parentd6d3d0983fa936be90f05a6ebacb83d632414c75 (diff)
[IMP] web, web_*, mail, board : New modals and dialogs
Diffstat (limited to 'addons/web/static/src/js/views')
-rw-r--r--addons/web/static/src/js/views/form_common.js359
-rw-r--r--addons/web/static/src/js/views/form_relational_widgets.js142
-rw-r--r--addons/web/static/src/js/views/form_view.js16
-rw-r--r--addons/web/static/src/js/views/form_widgets.js36
4 files changed, 263 insertions, 290 deletions
diff --git a/addons/web/static/src/js/views/form_common.js b/addons/web/static/src/js/views/form_common.js
index e365e61a0b8..7786a516894 100644
--- a/addons/web/static/src/js/views/form_common.js
+++ b/addons/web/static/src/js/views/form_common.js
@@ -115,7 +115,6 @@ var DefaultFieldManager = Widget.extend({
},
});
-
/**
* A mixin to apply on any FormWidget that has to completely re-render when its readonly state
* switch.
@@ -273,22 +272,19 @@ var CompletionFieldMixin = {
// all search/create popup handling
_search_create_popup: function(view, ids, context) {
var self = this;
- var pop = new SelectCreatePopup(this);
- pop.select_element(
- self.field.relation,
- {
- title: (view === 'search' ? _t("Search: ") : _t("Create: ")) + this.string,
- initial_ids: ids ? _.map(ids, function(x) {return x[0];}) : undefined,
- initial_view: view,
- disable_multiple_selection: true
- },
- self.build_domain(),
- new data.CompoundContext(self.build_context(), context || {})
- );
- pop.on("elements_selected", self, function(element_ids) {
- self.add_id(element_ids[0]);
- self.focus();
- });
+ new SelectCreateDialog(this, {
+ res_model: self.field.relation,
+ domain: self.build_domain(),
+ context: new data.CompoundContext(self.build_context(), context || {}),
+ title: (view === 'search' ? _t("Search: ") : _t("Create: ")) + this.string,
+ initial_ids: ids ? _.map(ids, function(x) {return x[0];}) : undefined,
+ initial_view: view,
+ disable_multiple_selection: true,
+ on_selected: function(element_ids) {
+ self.add_id(element_ids[0]);
+ self.focus();
+ }
+ }).open();
},
/**
* To implement.
@@ -305,8 +301,6 @@ var CompletionFieldMixin = {
},
};
-
-
/**
* Must be applied over an class already possessing the PropertiesMixin.
*
@@ -389,7 +383,6 @@ var NotebookInvisibilityChanger = InvisibilityChanger.extend({
},
});
-
/**
Base class for all fields, custom widgets and buttons to be displayed in the form view.
@@ -779,10 +772,9 @@ var AbstractField = FormWidget.extend(FieldInterface, {
});
/**
- * Class with everything which is common between FormOpenPopup and SelectCreatePopup.
+ * Class with everything which is common between FormViewDialog and SelectCreateDialog.
*/
-var AbstractFormPopup = Widget.extend({
- template: "AbstractFormPopup.render",
+var ViewDialog = Dialog.extend({ // FIXME should use ViewManager
/**
* options:
* -readonly: only applicable when not in creation mode, default to false
@@ -795,18 +787,27 @@ var AbstractFormPopup = Widget.extend({
* - child_name
* - form_view_options
*/
- init_popup: function(model, row_id, domain, context, options) {
- this.row_id = row_id;
- this.model = model;
- this.domain = domain || [];
- this.context = context || {};
- this.options = options;
- _.defaults(this.options, {});
+ init: function(parent, options) {
+ options = options || {};
+ options.dialogClass = options.dialogClass || '';
+ options.dialogClass += ' o_act_window';
+
+ this._super(parent, _.clone(options));
+
+ this.res_model = options.res_model || null;
+ this.res_id = options.res_id || null;
+ this.domain = options.domain || [];
+ this.context = options.context || {};
+ this.options = _.extend(this.options || {}, options || {});
+
+ this.on('closed', this, this.select);
+ this.on_selected = options.on_selected || (function() {});
},
+
init_dataset: function() {
var self = this;
this.created_elements = [];
- this.dataset = new data.ProxyDataSet(this, this.model, this.context);
+ this.dataset = new data.ProxyDataSet(this, this.res_model, this.context);
this.dataset.read_function = this.options.read_function;
this.dataset.create_function = function(data, options, sup) {
var fct = self.options.create_function || sup;
@@ -824,114 +825,102 @@ var AbstractFormPopup = Widget.extend({
this.dataset.parent_view = this.options.parent_view;
this.dataset.child_name = this.options.child_name;
},
- display_popup: function() {
+
+ select: function() {
+ if (this.created_elements.length > 0) {
+ this.on_selected(this.created_elements);
+ this.created_elements = [];
+ }
+ }
+});
+
+/**
+ * Create and edit dialog (displays a form view record and leave once saved)
+ */
+var FormViewDialog = ViewDialog.extend({
+ init: function(parent, options) {
var self = this;
- this.renderElement();
- var dialog = new Dialog(this, {
- dialogClass: 'oe_act_window',
- title: this.options.title || "",
- }, this.$el).open();
- dialog.on('closing', this, function (e){
- self.check_exit(true);
- });
- this.$buttonpane = dialog.$buttons;
- this.start();
+
+ var multi_select = options.res_id === null && ! options.disable_multiple_selection;
+ var readonly = options.res_id !== null && options.readonly;
+
+ if(!options || !options.buttons) {
+ options = options || {};
+ options.buttons = [
+ {text: (readonly ? _t("Close") : _t("Discard")), classes: "btn-default o_form_button_cancel", close: true, click: function() {
+ self.view_form.trigger('on_button_cancel');
+ }}
+ ];
+
+ if(!readonly) {
+ options.buttons.splice(0, 0, {text: _t("Save") + ((multi_select)? _t(" & Close") : ""), classes: "btn-primary", click: function() {
+ $.when(self.view_form.save()).done(function() {
+ self.view_form.reload_mutex.exec(function() {
+ self.trigger('record_saved');
+ self.close();
+ });
+ });
+ }
+ });
+
+ if(multi_select) {
+ options.buttons.splice(1, 0, {text: _t("Save & New"), classes: "btn-primary", click: function() {
+ $.when(self.view_form.save()).done(function() {
+ self.view_form.reload_mutex.exec(function() {
+ self.view_form.on_button_new();
+ });
+ });
+ }});
+ }
+ }
+ }
+
+ this._super(parent, options);
},
- setup_form_view: function() {
+
+ open: function() {
var self = this;
- if (this.row_id) {
- this.dataset.ids = [this.row_id];
- this.dataset.index = 0;
+ self._super();
+ self.init_dataset();
+
+ if (self.res_id) {
+ self.dataset.ids = [self.res_id];
+ self.dataset.index = 0;
} else {
- this.dataset.index = null;
+ self.dataset.index = null;
}
var options = _.clone(self.options.form_view_options) || {};
- if (this.row_id !== null) {
- options.initial_mode = this.options.readonly ? "view" : "edit";
+ if (self.res_id !== null) {
+ options.initial_mode = self.options.readonly ? "view" : "edit";
}
_.extend(options, {
- $buttons: this.$buttonpane,
+ $buttons: self.$buttons,
});
var FormView = core.view_registry.get('form');
- this.view_form = new FormView(this, this.dataset, this.options.view_id || false, options);
- if (this.options.alternative_form_view) {
- this.view_form.set_embedded_view(this.options.alternative_form_view);
+ self.view_form = new FormView(self, self.dataset, self.options.view_id || false, options);
+ if (self.options.alternative_form_view) {
+ self.view_form.set_embedded_view(self.options.alternative_form_view);
}
- this.view_form.appendTo(this.$(".oe_popup_form").show());
- this.view_form.on("form_view_loaded", self, function() {
- var multi_select = self.row_id === null && ! self.options.disable_multiple_selection;
- self.$buttonpane.html(QWeb.render("AbstractFormPopup.buttons", {
- multi_select: multi_select,
- readonly: self.row_id !== null && self.options.readonly,
- }));
- var $snbutton = self.$buttonpane.find(".oe_abstractformpopup-form-save-new");
- $snbutton.click(function() {
- $.when(self.view_form.save()).done(function() {
- self.view_form.reload_mutex.exec(function() {
- self.view_form.on_button_new();
- });
- });
- });
- var $sbutton = self.$buttonpane.find(".oe_abstractformpopup-form-save");
- $sbutton.click(function() {
- $.when(self.view_form.save()).done(function() {
- self.view_form.reload_mutex.exec(function() {
- self.check_exit();
- });
- });
- });
- var $cbutton = self.$buttonpane.find(".oe_abstractformpopup-form-close");
- $cbutton.click(function() {
- self.view_form.trigger('on_button_cancel');
- self.check_exit();
+
+ self.$el.hide();
+ self.view_form.appendTo(self.$el);
+ self.view_form.on("form_view_loaded", self, function() {
+ self.view_form.do_show().then(function() {
+ self.$el.show();
});
- self.view_form.do_show();
});
- },
- select_elements: function(element_ids) {
- this.trigger("elements_selected", element_ids);
- },
- check_exit: function(no_destroy) {
- if (this.created_elements.length > 0) {
- this.select_elements(this.created_elements);
- this.created_elements = [];
- }
- this.trigger('closed');
- this.destroy();
- },
- destroy: function () {
- this.trigger('closed');
- if (this.$el.is(":data(bs.modal)")) {
- this.$el.parents('.modal').modal('hide');
- }
- this._super();
- },
-});
-/**
- * Class to display a popup containing a form view.
- */
-var FormOpenPopup = AbstractFormPopup.extend({
- show_element: function(model, row_id, context, options) {
- this.init_popup(model, row_id, [], context, options);
- _.defaults(this.options, {
- });
- this.display_popup();
- },
- start: function() {
- this._super();
- this.init_dataset();
- this.setup_form_view();
+ return this;
},
});
var SelectCreateListView = ListView.extend({
do_add_record: function () {
- this.popup.new_object();
+ this.popup.create_edit_record();
},
select_record: function(index) {
- this.popup.select_elements([this.dataset.ids[index]]);
- this.popup.destroy();
+ this.popup.on_selected([this.dataset.ids[index]]);
+ this.popup.close();
},
do_select: function(ids, records) {
this._super(ids, records);
@@ -940,10 +929,9 @@ var SelectCreateListView = ListView.extend({
});
/**
- * Class to display a popup to display a list to search a row. It also allows
- * to switch to a form view to create a new row.
+ * Search dialog (displays a list of records and permits to create a new one by switching to a form view)
*/
-var SelectCreatePopup = AbstractFormPopup.extend({
+var SelectCreateDialog = ViewDialog.extend({
/**
* options:
* - initial_ids
@@ -951,15 +939,15 @@ var SelectCreatePopup = AbstractFormPopup.extend({
* - disable_multiple_selection
* - list_view_options
*/
- select_element: function(model, options, domain, context) {
- this.init_popup(model, null, domain, context, options);
- _.defaults(this.options, {
- initial_view: "search",
- });
+ init: function(parent, options) {
+ this._super(parent, options);
+
+ _.defaults(this.options, { initial_view: "search" });
this.initial_ids = this.options.initial_ids;
- this.display_popup();
},
- start: function() {
+
+ open: function() {
+ this._super();
this.init_dataset();
if (this.options.initial_view == "search") {
var context = pyeval.sync_eval_domains_and_contexts({
@@ -973,19 +961,21 @@ var SelectCreatePopup = AbstractFormPopup.extend({
search_defaults[match[1]] = value_;
}
});
- this.setup_search_view(search_defaults);
+ this.setup(search_defaults);
} else { // "form"
- this.new_object();
+ this.create_edit_record();
}
+ return this;
},
- setup_search_view: function(search_defaults) {
+
+ setup: function(search_defaults) {
var self = this;
if (this.searchview) {
this.searchview.destroy();
}
- var $buttons = this.$('.o-search-options');
- this.searchview = new SearchView(this,
- this.dataset, false, search_defaults, {$buttons: $buttons});
+ var $header = $('<div/>').addClass('o_modal_header').appendTo(this.$el);
+ var $buttons = $('<div/>').addClass('o_search_options').appendTo($header);
+ this.searchview = new SearchView(this, this.dataset, false, search_defaults, {$buttons: $buttons});
this.searchview.on('search_data', self, function(domains, contexts, groupbys) {
if (self.initial_ids) {
self.do_search(domains.concat([[["id", "in", self.initial_ids]], self.domain]),
@@ -995,22 +985,22 @@ var SelectCreatePopup = AbstractFormPopup.extend({
self.do_search(domains.concat([self.domain]), contexts.concat(self.context), groupbys);
}
});
- this.searchview.appendTo(this.$(".o-popup-search")).done(function() {
+ this.searchview.prependTo($header).done(function() {
self.searchview.toggle_visibility(true);
self.view_list = new SelectCreateListView(self,
- self.dataset, false,
- _.extend({'deletable': false,
- 'selectable': !self.options.disable_multiple_selection,
- 'import_enabled': false,
- '$buttons': self.$buttonpane,
- 'disable_editable_mode': true,
- '$pager': self.$('.oe_popup_list_pager'),
- }, self.options.list_view_options || {}));
+ self.dataset, false,
+ _.extend({'deletable': false,
+ 'selectable': !self.options.disable_multiple_selection,
+ 'import_enabled': false,
+ '$buttons': self.$footer,
+ 'disable_editable_mode': true,
+ '$pager': self.$('.o_popup_list_pager'),
+ }, self.options.list_view_options || {}));
self.view_list.on('edit:before', self, function (e) {
e.cancel = true;
});
self.view_list.popup = self;
- self.view_list.appendTo(self.$(".oe_popup_list").show()).then(function() {
+ self.view_list.appendTo(self.$el).then(function() {
self.view_list.do_show();
}).then(function() {
if (self.options.initial_facet) {
@@ -1020,23 +1010,22 @@ var SelectCreatePopup = AbstractFormPopup.extend({
}
self.searchview.do_search();
});
- self.view_list.on("list_view_loaded", self, function() {
- self.$buttonpane.html(QWeb.render("SelectCreatePopup.search.buttons", {widget:self}));
- var $cbutton = self.$buttonpane.find(".oe_selectcreatepopup-search-close");
- $cbutton.click(function() {
- self.destroy();
- });
- var $sbutton = self.$buttonpane.find(".oe_selectcreatepopup-search-select");
- $sbutton.click(function() {
- self.select_elements(self.selected_ids);
- self.destroy();
- });
- $cbutton = self.$buttonpane.find(".oe_selectcreatepopup-search-create");
- $cbutton.click(function() {
- self.new_object();
- });
- });
- });
+
+ var buttons = [
+ {text: _t("Cancel"), classes: "btn-default o_form_button_cancel", close: true}
+ ];
+ if(!self.options.no_create) {
+ buttons.splice(0, 0, {text: _t("Create"), classes: "btn-primary", click: function() {
+ self.create_edit_record();
+ }});
+ }
+ if(!self.options.disable_multiple_selection) {
+ buttons.splice(0, 0, {text: _t("Select"), classes: "btn-primary o_selectcreatepopup_search_select", disabled: true, close: true, click: function() {
+ self.on_selected(self.selected_ids);
+ }});
+ }
+ self.set_buttons(buttons);
+ });
},
do_search: function(domains, contexts, groupbys) {
var results = pyeval.sync_eval_domains_and_contexts({
@@ -1047,43 +1036,35 @@ var SelectCreatePopup = AbstractFormPopup.extend({
this.view_list.do_search(results.domain, results.context, results.group_by);
},
on_click_element: function(ids) {
- var self = this;
this.selected_ids = ids || [];
- if(this.selected_ids.length > 0) {
- self.$buttonpane.find(".oe_selectcreatepopup-search-select").removeAttr('disabled');
- } else {
- self.$buttonpane.find(".oe_selectcreatepopup-search-select").attr('disabled', "disabled");
- }
+ this.$footer.find(".o_selectcreatepopup_search_select").prop('disabled', this.selected_ids.length <= 0);
},
- new_object: function() {
- if (this.searchview) {
- this.searchview.toggle_visibility(false);
- }
- if (this.view_list) {
- this.view_list.do_hide();
- this.view_list.$el.parent().hide();
- }
- this.setup_form_view();
+ create_edit_record: function() {
+ new FormViewDialog(this.getParent(), this.options).open();
+ this.close();
},
});
-var DomainEditorPopup = SelectCreatePopup.extend({
- select_element: function (model, options, domain, context) {
+var DomainEditorDialog = SelectCreateDialog.extend({
+ init: function(parent, options) {
if (options.readonly) {
- return this._super(model, options, domain, context);
+ this._super(parent, options);
+ return;
}
- options.initial_facet = {
+ options = _.defaults(options, {initial_facet: {
category: _t("Custom Filter"),
icon: 'fa-star',
field: {
- get_context: function () { return context; },
+ get_context: function () { return options.context; },
get_groupby: function () { return []; },
- get_domain: function () { return domain; },
+ get_domain: function () { return options.default_domain; },
},
values: [{label: _t("Selected domain"), value: null}],
- };
- this._super(model, options, [], context);
+ }});
+
+ this._super(parent, options);
},
+
get_domain: function (selected_ids) {
var group_domain = [],
domain;
@@ -1125,11 +1106,11 @@ return {
commands: commands,
AbstractField: AbstractField,
- // popup dialogs
- AbstractFormPopup: AbstractFormPopup,
- FormOpenPopup: FormOpenPopup,
- SelectCreatePopup: SelectCreatePopup,
- DomainEditorPopup: DomainEditorPopup,
+ // Dialogs
+ ViewDialog: ViewDialog,
+ FormViewDialog: FormViewDialog,
+ SelectCreateDialog: SelectCreateDialog,
+ DomainEditorDialog: DomainEditorDialog,
};
}); \ No newline at end of file
diff --git a/addons/web/static/src/js/views/form_relational_widgets.js b/addons/web/static/src/js/views/form_relational_widgets.js
index df8e0150aa1..f2e3d77fff4 100644
--- a/addons/web/static/src/js/views/form_relational_widgets.js
+++ b/addons/web/static/src/js/views/form_relational_widgets.js
@@ -144,20 +144,17 @@ var FieldMany2One = common.AbstractField.extend(common.CompletionFieldMixin, com
self.focus();
return;
}
- var pop = new common.FormOpenPopup(self);
var context = self.build_context().eval();
var model_obj = new Model(self.field.relation);
model_obj.call('get_formview_id', [self.get("value"), context]).then(function(view_id){
- pop.show_element(
- self.field.relation,
- self.get("value"),
- self.build_context(),
- {
- title: _t("Open: ") + self.string,
- view_id: view_id,
- readonly: !self.can_write
- }
- );
+ var pop = new common.FormViewDialog(self, {
+ res_model: self.field.relation,
+ res_id: self.get("value"),
+ context: self.build_context(),
+ title: _t("Open: ") + self.string,
+ view_id: view_id,
+ readonly: !self.can_write
+ }).open();
pop.on('write_completed', self, function(){
self.display_value = {};
self.display_value_backup = {};
@@ -261,7 +258,7 @@ var FieldMany2One = common.AbstractField.extend(common.CompletionFieldMixin, com
// autocomplete open
if (ignore_blur) { $(this).focus(); return; }
if (_(self.getChildren()).any(function (child) {
- return child instanceof common.AbstractFormPopup;
+ return child instanceof common.ViewDialog;
})) { return; }
self.trigger('blurred');
}
@@ -997,35 +994,34 @@ var One2ManyListView = ListView.extend({
this._super.apply(this, arguments);
} else {
var self = this;
- var pop = new common.SelectCreatePopup(this);
- pop.select_element(
- self.o2m.field.relation,
- {
- title: _t("Create: ") + self.o2m.string,
- initial_view: "form",
- alternative_form_view: self.o2m.field.views ? self.o2m.field.views.form : undefined,
- create_function: function(data, options) {
- return self.o2m.data_create(data, options);
- },
- read_function: function(ids, fields, options) {
- return self.o2m.data_read(ids, fields, options);
- },
- parent_view: self.o2m.view,
- child_name: self.o2m.name,
- form_view_options: {'not_interactible_on_create':true}
+ new common.SelectCreateDialog(this, {
+ res_model: self.o2m.field.relation,
+ domain: self.o2m.build_domain(),
+ context: self.o2m.build_context(),
+ title: _t("Create: ") + self.o2m.string,
+ initial_view: "form",
+ alternative_form_view: self.o2m.field.views ? self.o2m.field.views.form : undefined,
+ create_function: function(data, options) {
+ return self.o2m.data_create(data, options);
},
- self.o2m.build_domain(),
- self.o2m.build_context()
- );
- pop.on("elements_selected", self, function() {
- self.o2m.reload_current_view();
- });
+ read_function: function(ids, fields, options) {
+ return self.o2m.data_read(ids, fields, options);
+ },
+ parent_view: self.o2m.view,
+ child_name: self.o2m.name,
+ form_view_options: {'not_interactible_on_create':true},
+ on_selected: function() {
+ self.o2m.reload_current_view();
+ }
+ }).open();
}
},
do_activate_record: function(index, id) {
var self = this;
- var pop = new common.FormOpenPopup(self);
- pop.show_element(self.o2m.field.relation, id, self.o2m.build_context(), {
+ new common.FormViewDialog(self, {
+ res_model: self.o2m.field.relation,
+ res_id: id,
+ context: self.o2m.build_context(),
title: _t("Open: ") + self.o2m.string,
write_function: function(id, data) {
return self.o2m.data_update(id, data, {}).done(function() {
@@ -1040,7 +1036,7 @@ var One2ManyListView = ListView.extend({
},
form_view_options: {'not_interactible_on_create':true},
readonly: !this.is_action_enabled('edit') || self.o2m.get("effective_readonly")
- });
+ }).open();
},
do_button_action: function (name, id, callback) {
if (!_.isNumber(id)) {
@@ -1201,8 +1197,11 @@ var One2ManyViewManager = ViewManager.extend({
}
var self = this;
var id = self.o2m.dataset.index !== null ? self.o2m.dataset.ids[self.o2m.dataset.index] : null;
- var pop = new common.FormOpenPopup(this);
- pop.show_element(self.o2m.field.relation, id, self.o2m.build_context(), {
+ var pop = new common.FormViewDialog(this, {
+ res_model: self.o2m.field.relation,
+ res_id: id,
+ context: self.o2m.build_context(),
+
title: _t("Open: ") + self.o2m.string,
create_function: function(data, options) {
return self.o2m.data_create(data, options);
@@ -1220,7 +1219,7 @@ var One2ManyViewManager = ViewManager.extend({
},
form_view_options: {'not_interactible_on_create':true},
readonly: self.o2m.get("effective_readonly")
- });
+ }).open();
pop.on("elements_selected", self, function() {
self.o2m.reload_current_view();
});
@@ -1466,30 +1465,30 @@ var Many2ManyListView = ListView.extend(/** @lends instance.web.form.Many2ManyLi
}));
},
do_add_record: function () {
- var pop = new common.SelectCreatePopup(this);
- pop.select_element(
- this.model,
- {
- title: _t("Add: ") + this.m2m_field.string,
- alternative_form_view: this.m2m_field.field.views ? this.m2m_field.field.views.form : undefined,
- no_create: this.m2m_field.options.no_create,
- },
- new data.CompoundDomain(this.m2m_field.build_domain(), ["!", ["id", "in", this.m2m_field.dataset.ids]]),
- this.m2m_field.build_context()
- );
var self = this;
- pop.on("elements_selected", self, function(element_ids) {
- return self.dataset.o2m.data_link_multi(element_ids);
- });
+
+ new common.SelectCreateDialog(this, {
+ res_model: this.model,
+ domain: new data.CompoundDomain(this.m2m_field.build_domain(), ["!", ["id", "in", this.m2m_field.dataset.ids]]),
+ context: this.m2m_field.build_context(),
+ title: _t("Add: ") + this.m2m_field.string,
+ alternative_form_view: this.m2m_field.field.views ? this.m2m_field.field.views.form : undefined,
+ no_create: this.m2m_field.options.no_create,
+ on_selected: function(element_ids) {
+ return self.dataset.o2m.data_link_multi(element_ids);
+ }
+ }).open();
},
do_activate_record: function(index, id) {
var self = this;
- var pop = new common.FormOpenPopup(this);
- pop.show_element(this.dataset.model, id, this.m2m_field.build_context(), {
+ var pop = new common.FormViewDialog(this, {
+ res_model: this.dataset.model,
+ res_id: id,
+ context: this.m2m_field.build_context(),
title: _t("Open: ") + this.m2m_field.string,
alternative_form_view: this.m2m_field.field.views ? this.m2m_field.field.views.form : undefined,
readonly: this.getParent().get("effective_readonly")
- });
+ }).open();
pop.on('write_completed', self, function () {
self.dataset.evict_record(id);
self.reload_content();
@@ -1579,22 +1578,21 @@ var FieldMany2ManyKanban = AbstractManyField.extend(common.CompletionFieldMixin,
var self = this;
var pop;
if (this.dataset.index === null) {
- pop = new common.SelectCreatePopup(this);
- pop.select_element(
- this.field.relation,
- {
- title: _t("Add: ") + this.string
- },
- new data.CompoundDomain(this.build_domain(), ["!", ["id", "in", this.dataset.ids]]),
- this.build_context()
- );
- pop.on("elements_selected", self, function(element_ids) {
- return self.data_link_multi(element_ids);
- });
+ new common.SelectCreateDialog(this, {
+ res_model: this.field.relation,
+ domain: new data.CompoundDomain(this.build_domain(), ["!", ["id", "in", this.dataset.ids]]),
+ context: this.build_context(),
+ title: _t("Add: ") + this.string,
+ on_selected: function(element_ids) {
+ return self.data_link_multi(element_ids);
+ }
+ }).open();
} else {
var id = self.dataset.ids[self.dataset.index];
- pop = new common.FormOpenPopup(this);
- pop.show_element(self.field.relation, id, self.build_context(), {
+ pop = new common.FormViewDialog(this, {
+ res_model: self.field.relation,
+ res_id: id,
+ context: self.build_context(),
title: _t("Open: ") + self.string,
write_function: function(id, data, options) {
return self.data_update(id, data, {}).done(function() {
@@ -1605,7 +1603,7 @@ var FieldMany2ManyKanban = AbstractManyField.extend(common.CompletionFieldMixin,
parent_view: self.view,
child_name: self.name,
readonly: self.get("effective_readonly")
- });
+ }).open();
}
},
add_id: function(id) {
diff --git a/addons/web/static/src/js/views/form_view.js b/addons/web/static/src/js/views/form_view.js
index df570967f94..35aa0223a13 100644
--- a/addons/web/static/src/js/views/form_view.js
+++ b/addons/web/static/src/js/views/form_view.js
@@ -583,10 +583,8 @@ var FormView = View.extend(common.FieldManagerMixin, {
new Dialog(this, {
size: 'medium',
title:result.warning.title,
- buttons: [
- {text: _t("Ok"), click: function() { this.parents('.modal').modal('hide'); }}
- ]
- }, QWeb.render("CrashManager.warning", result.warning)).open();
+ $content: QWeb.render("CrashManager.warning", result.warning)
+ }).open();
}
return $.Deferred().resolve();
@@ -1081,12 +1079,8 @@ var FormView = View.extend(common.FieldManagerMixin, {
.value();
var d = new Dialog(this, {
title: _t("Set Default"),
- args: {
- fields: fields,
- conditions: conditions
- },
buttons: [
- {text: _t("Close"), click: function () { d.close(); }},
+ {text: _t("Close"), close: true},
{text: _t("Save default"), click: function () {
var $defaults = d.$el.find('#formview_default_fields');
var field_to_set = $defaults.val();
@@ -1108,6 +1102,10 @@ var FormView = View.extend(common.FieldManagerMixin, {
}}
]
});
+ d.args = {
+ fields: fields,
+ conditions: conditions
+ };
d.template = 'FormView.set_default';
d.open();
},
diff --git a/addons/web/static/src/js/views/form_widgets.js b/addons/web/static/src/js/views/form_widgets.js
index 2358ea88dec..49d909af041 100644
--- a/addons/web/static/src/js/views/form_widgets.js
+++ b/addons/web/static/src/js/views/form_widgets.js
@@ -62,10 +62,7 @@ var WidgetButton = common.FormWidget.extend({
var dialog = new Dialog(this, {
title: _t('Confirm'),
buttons: [
- {text: _t("Cancel"), click: function() {
- this.parents('.modal').modal('hide');
- }
- },
+ {text: _t("Cancel"), close: true},
{text: _t("Ok"), click: function() {
var self2 = this;
self.on_confirmed().always(function() {
@@ -74,8 +71,9 @@ var WidgetButton = common.FormWidget.extend({
}
}
],
- }, $('<div/>').text(self.node.attrs.confirm)).open();
- dialog.on("closing", null, function() {def.resolve();});
+ $content: $('<div/>').text(self.node.attrs.confirm)
+ }).open();
+ dialog.on("closed", null, function() {def.resolve();});
return def.promise();
} else {
return self.on_confirmed();
@@ -439,22 +437,20 @@ var FieldCharDomain = common.AbstractField.extend(common.ReinitializeFieldMixin,
on_click: function(event) {
event.preventDefault();
var self = this;
- var model = this.options.model || this.field_manager.get_field_value(this.options.model_field);
- var options = {
- title: this.get('effective_readonly') ? 'Selected records' : 'Select records...',
- readonly: this.get('effective_readonly'),
- disable_multiple_selection: this.get('effective_readonly'),
- no_create: this.get('effective_readonly'),
- };
- var domain = this.get('value');
- var popup = new common.DomainEditorPopup(this);
- popup.select_element(model, options, domain, {});
- popup.on("elements_selected", self, function(selected_ids) {
- if (!self.get('effective_readonly')) {
- self.set_value(popup.get_domain(selected_ids));
+ new common.DomainEditorDialog(this, {
+ model: this.options.model || this.field_manager.get_field_value(this.options.model_field),
+ domain: this.get('value'),
+ title: this.get('effective_readonly') ? 'Selected records' : 'Select records...',
+ readonly: this.get('effective_readonly'),
+ disable_multiple_selection: this.get('effective_readonly'),
+ no_create: this.get('effective_readonly'),
+ on_selected: function(selected_ids) {
+ if (!self.get('effective_readonly')) {
+ self.set_value(popup.get_domain(selected_ids));
+ }
}
- });
+ }).open();
},
});