diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js
index 0b0366a9ee4..2034bfb741f 100644
--- a/addons/web/static/src/js/view_form.js
+++ b/addons/web/static/src/js/view_form.js
@@ -22,10 +22,6 @@ instance.web.form.FieldManagerMixin = {
* Must return the asked field as in fields_get.
*/
get_field: function(field_name) {},
- /**
- * Called by the field when the translate button is clicked.
- */
- open_translate_dialog: function(field) {},
/**
* Returns true when the view is in create mode.
*/
@@ -1049,9 +1045,6 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
is_create_mode: function() {
return this.get("actual_mode") === "create";
},
- open_translate_dialog: function(field) {
- return this._super(field);
- },
});
/**
@@ -1882,6 +1875,10 @@ instance.web.form.FieldInterface = {
* Must set the focus on the field. Return false if field is not focusable.
*/
focus: function() {},
+ /**
+ * Called when the translate button is clicked.
+ */
+ on_translate: function() {},
};
/**
@@ -1936,9 +1933,7 @@ instance.web.form.AbstractField = instance.web.form.FormWidget.extend(instance.w
this._super();
if (this.field.translate) {
this.$el.addClass('oe_form_field_translatable');
- this.$el.find('.oe_field_translate').click(_.bind(function() {
- this.field_manager.open_translate_dialog(this);
- }, this));
+ this.$el.find('.oe_field_translate').click(this.on_translate);
}
this.$label = this.view.$el.find('label[for=' + this.id_for_label + ']');
if (instance.session.debug) {
@@ -2000,6 +1995,13 @@ instance.web.form.AbstractField = instance.web.form.FormWidget.extend(instance.w
set_input_id: function(id) {
this.id_for_label = id;
},
+ on_translate: function() {
+ var self = this;
+ var trans = new instance.web.DataSet(this, 'ir.translation', this.view.dataset.get_context());
+ return trans.call('translate', [this.view.dataset.model, this.view.datarecord.id, this.name]).then(function(action) {
+ self.do_action(action);
+ });
+ },
});
/**
diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js
index e453ecbc905..b83ddb1cc3f 100644
--- a/addons/web/static/src/js/views.js
+++ b/addons/web/static/src/js/views.js
@@ -1050,119 +1050,6 @@ instance.web.Sidebar = instance.web.Widget.extend({
}
});
-instance.web.TranslateDialog = instance.web.Dialog.extend({
- dialog_title: {toString: function () { return _t("Translations"); }},
- init: function(view) {
- // TODO fme: should add the language to fields_view_get because between the fields view get
- // and the moment the user opens the translation dialog, the user language could have been changed
- this.view_language = view.session.user_context.lang;
- this['on_button_' + _t("Save")] = this.on_btn_save;
- this['on_button_' + _t("Close")] = this.on_btn_close;
- this._super(view, {
- width: '80%',
- height: '80%',
- destroy_on_close: false,
- });
- this.view = view;
- this.view_type = view.fields_view.type || '';
- this.$fields_form = null;
- this.$view_form = null;
- this.$sidebar_form = null;
- this.translatable_fields_keys = _.map(this.view.translatable_fields || [], function(i) { return i.name; });
- this.languages = null;
- this.languages_loaded = $.Deferred();
- (new instance.web.DataSetSearch(this, 'res.lang', this.view.dataset.get_context(),
- [['translatable', '=', '1']])).read_slice(['code', 'name'], { sort: 'id' }).then(this.on_languages_loaded);
- },
- start: function() {
- var self = this;
- this._super();
- return $.when(this.languages_loaded).then(function() {
- self.$el.html(instance.web.qweb.render('TranslateDialog', { widget: self }));
- self.$fields_form = self.$el.find('.oe_translation_form');
- self.$fields_form.find('.oe_trad_field').change(function() {
- $(this).toggleClass('touched', ($(this).val() != $(this).attr('data-value')));
- });
- });
- },
- on_languages_loaded: function(langs) {
- this.languages = langs;
- this.languages_loaded.resolve();
- },
- do_load_fields_values: function(callback) {
- var self = this,
- deffered = [];
- this.$fields_form.find('.oe_trad_field').val('').removeClass('touched');
- _.each(self.languages, function(lg) {
- var deff = $.Deferred();
- deffered.push(deff);
- var callback = function(values) {
- _.each(self.translatable_fields_keys, function(f) {
- var value = values[0][f] || '';
- self.$fields_form.find('.oe_trad_field[name="' + lg.code + '-' + f + '"]').val(value).attr('data-value', value);
- });
- deff.resolve();
- };
- if (lg.code === self.view_language) {
- var values = {};
- _.each(self.translatable_fields_keys, function(field) {
- values[field] = self.view.fields[field].get_value();
- });
- callback([values]);
- } else {
- self.view.dataset.read_ids([self.view.datarecord.id], self.translatable_fields_keys, {
- context: { 'lang': lg.code }
- }).then(callback);
- }
- });
- $.when.apply(null, deffered).then(callback);
- },
- open: function(field) {
- var self = this;
- this._super();
- $.when(this.languages_loaded).then(function() {
- if (self.view.translatable_fields && self.view.translatable_fields.length) {
- self.do_load_fields_values(function() {
- if (field) {
- var $field_input = self.$el.find('tr[data-field="' + field.name + '"] td:nth-child(2) *:first-child');
- self.$el.scrollTo($field_input);
- $field_input.focus();
- }
- });
- } else {
- sup.call(self);
- }
- });
- },
- on_btn_save: function() {
- var trads = {};
- var self = this;
- var trads_mutex = new $.Mutex();
- self.$fields_form.find('.oe_trad_field.touched').each(function() {
- var field = $(this).attr('name').split('-');
- if (!trads[field[0]]) {
- trads[field[0]] = {};
- }
- trads[field[0]][field[1]] = $(this).val();
- });
- _.each(trads, function(data, code) {
- if (code === self.view_language) {
- _.each(data, function(value, field) {
- self.view.fields[field].set_value(value);
- });
- }
- trads_mutex.exec(function() {
- return self.view.dataset.write(self.view.datarecord.id, data, { context : { 'lang': code } });
- });
- });
- this.close();
- return trads_mutex;
- },
- on_btn_close: function() {
- this.close();
- }
-});
-
instance.web.View = instance.web.Widget.extend({
// name displayed in view switchers
display_name: '',
@@ -1214,12 +1101,6 @@ instance.web.View = instance.web.Widget.extend({
action_views_ids: {}
});
},
- open_translate_dialog: function(field) {
- if (!this.translate_dialog) {
- this.translate_dialog = new instance.web.TranslateDialog(this);
- }
- this.translate_dialog.open(field);
- },
/**
* Fetches and executes the action identified by ``action_data``.
*
diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml
index 511e37f4ab4..d97cc57f5ea 100644
--- a/addons/web/static/src/xml/base.xml
+++ b/addons/web/static/src/xml/base.xml
@@ -1202,28 +1202,6 @@
-
-
-
-