Merge remote-tracking branch 'odoo/saas-5' into saas-5-report-translation-fix-sle
[odoo/odoo.git] / addons / web / static / src / js / view_list_editable.js
index e2c63eb..144de8e 100644 (file)
             if (this.editable()) {
                 this.$el.find('table:first').show();
                 this.$el.find('.oe_view_nocontent').remove();
-                this.start_edition().then(function(){
-                    var fields = self.editor.form.fields;
-                    self.editor.form.fields_order.some(function(field){
-                        if (fields[field].$el.is(':visible')){
-                            fields[field].$el.find("input").select();
-                            return true;
-                        }
-                    });
-                });
+                this.start_edition();
             } else {
                 this._super();
             }
             return this.ensure_saved().then(function () {
                 var $recordRow = self.groups.get_row_for(record);
                 var cells = self.get_cells_for($recordRow);
+                var fields = {};
                 self.fields_for_resize.splice(0, self.fields_for_resize.length);
                 return self.with_event('edit', {
                     record: record.attributes,
 
                         // FIXME: need better way to get the field back from bubbling (delegated) DOM events somehow
                         field.$el.attr('data-fieldname', field_name);
+                        fields[field_name] = field;
                         self.fields_for_resize.push({field: field, cell: cell});
                     }, options).then(function () {
                         $recordRow.addClass('oe_edition');
                         self.resize_fields();
+                        var focus_field = options && options.focus_field ? options.focus_field : undefined;
+                        if (!focus_field){
+                            focus_field = _.find(self.editor.form.fields_order, function(field){ return fields[field] && fields[field].$el.is(':visible:has(input)'); });
+                        }
+                        if (focus_field) fields[focus_field].$el.find('input').select();
                         return record.attributes;
                     });
                 }).fail(function () {
             if (!this.editor.is_editing()) { return; }
             for(var i=0, len=this.fields_for_resize.length; i<len; ++i) {
                 var item = this.fields_for_resize[i];
-                if (!item.field.get('effective_invisible')) {
-                    this.resize_field(item.field, item.cell);
-                }
+                this.resize_field(item.field, item.cell);
             }
         },
         /**
                 at: 'left top',
                 of: $cell
             });
+            if (field.get('effective_readonly')) {
+                field.$el.addClass('oe_readonly');
+            }
+            if(field.widget == "handle")
+                field.$el.addClass('oe_list_field_handle');
         },
         /**
          * @return {jQuery.Deferred}
         setup_events: function () {
             var self = this;
             _.each(this.editor.form.fields, function(field, field_name) {
-                var set_invisible = function() {
-                    field.set({'force_invisible': field.get('effective_readonly')});
-                };
-                field.on("change:effective_readonly", self, set_invisible);
-                set_invisible();
-                field.on('change:effective_invisible', self, function () {
-                    if (field.get('effective_invisible')) { return; }
+                field.on("change:effective_readonly", self, function(){
                     var item = _(self.fields_for_resize).find(function (item) {
                         return item.field === field;
                     });
             throw new Error("is_editing's state filter must be either `new` or" +
                             " `edit` if provided");
         },
-        _focus_setup: function (focus_field) {
-            var form = this.form;
-
-            var field;
-            // If a field to focus was specified
-            if (focus_field
-                    // Is actually in the form
-                    && (field = form.fields[focus_field])
-                    // And is visible
-                    && field.$el.is(':visible')) {
-                // focus it
-                field.focus();
-                return;
-            }
-
-            _(form.fields_order).detect(function (name) {
-                // look for first visible field in fields_order, focus it
-                var field = form.fields[name];
-                if (!field.$el.is(':visible')) {
-                    return false;
-                }
-                // Stop as soon as a field got focused
-                return field.focus() !== false;
-            });
-        },
         edit: function (record, configureField, options) {
             // TODO: specify sequence of edit calls
             var self = this;
                 _(form.fields).each(function (field, name) {
                     configureField(name, field);
                 });
-                self._focus_setup(options && options.focus_field);
                 return form;
             });
         },