← Back to team overview

openerp-community-reviewer team mailing list archive

[Merge] lp:~camptocamp/web-addons/7.0-web_translate_dialog-sync-current-view-1301218-gbr into lp:web-addons

 

Guewen Baconnier @ Camptocamp has proposed merging lp:~camptocamp/web-addons/7.0-web_translate_dialog-sync-current-view-1301218-gbr into lp:web-addons.

Commit message:
Propagate back and forth edited fields on the current language between the current view and the translate dialog.

Requested reviews:
  Web-Addons Core Editors (webaddons-core-editors)
Related bugs:
  Bug #1301218 in Web addons for OpenERP: "web_translate_dialog: current language not synchronized when edited"
  https://bugs.launchpad.net/web-addons/+bug/1301218

For more details, see:
https://code.launchpad.net/~camptocamp/web-addons/7.0-web_translate_dialog-sync-current-view-1301218-gbr/+merge/213783

Fix lp:1301218

-- 
https://code.launchpad.net/~camptocamp/web-addons/7.0-web_translate_dialog-sync-current-view-1301218-gbr/+merge/213783
Your team Web-Addons Core Editors is requested to review the proposed merge of lp:~camptocamp/web-addons/7.0-web_translate_dialog-sync-current-view-1301218-gbr into lp:web-addons.
=== modified file 'web_translate_dialog/static/src/js/web_translate_dialog.js'
--- web_translate_dialog/static/src/js/web_translate_dialog.js	2014-02-25 14:29:42 +0000
+++ web_translate_dialog/static/src/js/web_translate_dialog.js	2014-04-02 08:58:31 +0000
@@ -126,10 +126,24 @@
                 });
             });
         },
-        // use a `read_translations` method instead of a `read`
-        // this latter leave the fields empty if there is no
-        // translation for a field instead of taking the src field
-        do_load_fields_values: function(callback) {
+        set_fields_values: function(lang, values) {
+            var self = this;
+            _.each(this.translatable_fields_keys, function(f) {
+                self.$el.find('.oe_translation_field[name="' + lang.code + '-' + f + '"]')
+                    .val(values[f] || '')
+                    .attr('data-value', values[f] || '');
+
+                var $tarea = self.$el.find('.oe_form_field_html .oe_translation_field[name="' + lang.code + '-' + f + '"]');
+                if ($tarea.length) {
+                    $tarea.cleditor()[0].updateFrame();
+                }
+            });
+            var $textarea = this.$el.find('textarea.oe_translation_field');
+            $textarea.css({minHeight:'100px'});
+            $textarea.autosize();
+            $(window).resize();  // triggers the autosize
+        },
+        do_load_fields_values: function() {
             var self = this,
                 deferred = [];
 
@@ -137,31 +151,25 @@
             _.each(self.languages, function(lg) {
                 var deff = $.Deferred();
                 deferred.push(deff);
-                var callback = function(values) {
+                if (lg.code === self.view_language) {
+                    var values = {};
+                    _.each(self.translatable_fields_keys, function(field) {
+                        values[field] = self.view.fields[field].get_value();
+                    });
+                    self.set_fields_values(lg, values);
+                    deff.resolve();
+                } else {
+                    self.view.dataset.call(
+                        'read',
+                        [[self.view.datarecord.id],
+                        self.translatable_fields_keys,
+                        self.view.dataset.get_context({
+                            'lang': lg.code
+                        })]).done(function (rows) {
+                            self.set_fields_values(lg, rows[0]);
+                            deff.resolve();
+                        });
                 };
-                self.view.dataset.call(
-                    'read',
-                    [[self.view.datarecord.id],
-                     self.translatable_fields_keys,
-                     self.view.dataset.get_context({
-                        'lang': lg.code
-                     })]).done(function (values) {
-                        _.each(self.translatable_fields_keys, function(f) {
-                            self.$el.find('.oe_translation_field[name="' + lg.code + '-' + f + '"]')
-                                .val(values[0][f] || '')
-                                .attr('data-value', values[0][f] || '');
-
-                            var $tarea = self.$el.find('.oe_form_field_html .oe_translation_field[name="' + lg.code + '-' + f + '"]');
-                            if ($tarea.length) {
-                                $tarea.cleditor()[0].updateFrame();
-                            }
-                        });
-                        var $textarea = self.$el.find('textarea.oe_translation_field');
-                        $textarea.css({minHeight:'100px'});
-                        $textarea.autosize();
-                        $(window).resize();  // triggers the autosize
-                        deff.resolve();
-                     });
             });
             return deferred;
         },
@@ -178,17 +186,7 @@
             });
             _.each(translations, function(data, code) {
                 if (code === self.view_language) {
-                    _.each(data, function(value, field) {
-                        var view_field = self.view.fields[field];
-                        var is_dirty = view_field.view.$el.hasClass('oe_form_dirty');
-                        // update the field on the view
-                        view_field.set_value(value);
-                        if ( !is_dirty ) {
-                            // Avoid to set the view dirty when not necessary:
-                            // values have already been saved.
-                            view_field.view.$el.removeClass('oe_form_dirty');
-                        }
-                    });
+                    self.view.set_values(data);
                 }
                 translation_mutex.exec(function() {
                     return new instance.web.DataSet(self, self.view.dataset.model, self.view.dataset.get_context()).write(self.view.datarecord.id, data, { context : { 'lang': code }});


Follow ups