diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 677b7cf7c4e..b615c9af6cd 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -80,7 +80,7 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM this.reload_mutex = new $.Mutex(); this.__clicked_inside = false; this.__blur_timeout = null; - this.rendering_engine = new instance.web.form.FormRenderingEngine(this); + this.rendering_engine = new instance.web.form.FormRenderingEngineReadonly(this); this.qweb = null; // A QWeb instance will be created if the view is a QWeb template }, destroy: function() { @@ -239,13 +239,6 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM } } }, - /** - * - * @param {Object} [options] - * @param {Boolean} [editable=false] whether the form should be switched to edition mode. A value of ``false`` will keep the current mode. - * @param {Boolean} [reload=true] whether the form should reload its content on show, or use the currently loaded record - * @return {$.Deferred} - */ do_show: function (options) { var self = this; options = options || {}; @@ -260,24 +253,23 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM } this.$element.show().css('visibility', 'hidden'); this.$element.add(this.$buttons).removeClass('oe_form_dirty'); - - var shown = this.has_been_loaded; - if (options.reload !== false) { - shown = shown.pipe(function() { - if (self.dataset.index === null) { - // null index means we should start a new record - return self.on_button_new(); - } - return self.dataset.read_index(_.keys(self.fields_view.fields), { - context: { 'bin_size': true } + return this.has_been_loaded.pipe(function() { + var result; + if (self.dataset.index === null) { + // null index means we should start a new record + result = self.on_button_new(); + } else { + result = self.dataset.read_index(_.keys(self.fields_view.fields), { + context : { 'bin_size' : true } }).pipe(self.on_record_loaded); - }); - } - return shown.pipe(function() { - if (options.editable) { - self.set({mode: "edit"}); } - self.$element.css('visibility', 'visible'); + result.pipe(function() { + if (options.editable) { + self.set({mode: "edit"}); + } + self.$element.css('visibility', 'visible'); + }); + return result; }); }, do_hide: function () { @@ -338,20 +330,6 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM self.$element.add(self.$buttons).removeClass('oe_form_dirty'); }); }, - /** - * Loads and sets up the default values for the model as the current - * record - * - * @return {$.Deferred} - */ - load_defaults: function () { - var keys = _.keys(this.fields_view.fields); - if (keys.length) { - return this.dataset.default_get(keys) - .pipe(this.on_record_loaded); - } - return this.on_record_loaded({}); - }, on_form_changed: function() { this.trigger("view_content_has_changed"); }, @@ -622,11 +600,22 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM on_button_new: function() { var self = this; this.set({mode: "edit"}); - return $.when(this.has_been_loaded).pipe(function() { + var def = $.Deferred(); + $.when(this.has_been_loaded).then(function() { if (self.can_be_discarded()) { - return self.load_defaults(); + var keys = _.keys(self.fields_view.fields); + if (keys.length) { + self.dataset.default_get(keys).pipe(self.on_record_loaded).then(function() { + def.resolve(); + }); + } else { + self.on_record_loaded({}).then(function() { + def.resolve(); + }); + } } }); + return def.promise(); }, on_button_edit: function() { return this.set({mode: "edit"}); @@ -685,14 +674,13 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM values = {}, first_invalid_field = null; for (var f in self.fields) { - if (!self.fields.hasOwnProperty(f)) { continue; } f = self.fields[f]; if (!f.is_valid()) { form_invalid = true; if (!first_invalid_field) { first_invalid_field = f; } - } else if (f.name !== 'id' && (!self.datarecord.id || (!f.get("readonly") && f._dirty_flag))) { + } else if (f.name !== 'id' && !f.get("readonly") && (!self.datarecord.id || f._dirty_flag)) { // Special case 'id' field, do not save this field // on 'create' : save all non readonly fields // on 'edit' : save non readonly modified fields @@ -701,9 +689,8 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM } if (form_invalid) { self.set({'display_invalid_fields': true}); - for (var g in self.fields) { - if (!self.fields.hasOwnProperty(g)) { continue; } - self.fields[g]._check_css_flags(); + for (var f in self.fields) { + self.fields[f]._check_css_flags(); } first_invalid_field.focus(); self.on_invalid(); @@ -735,15 +722,14 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM });}); }, on_invalid: function() { - var warnings = _(this.fields).chain() - .filter(function (f) { return !f.is_valid(); }) - .map(function (f) { - return _.str.sprintf('
  • %s
  • ', - _.escape(f.string)); - }).value(); - warnings.unshift(''); - this.do_warn("The following fields are invalid :", warnings.join('')); + var msg = ""; + this.do_warn("The following fields are invalid :", msg); }, on_saved: function(r, success) { if (!r.result) { @@ -821,10 +807,10 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM var ids = this.get_selected_ids(); values["id"] = ids.length > 0 ? ids[0] : false; _.each(this.fields, function(value_, key) { - if (_.include(blacklist, key)) { + if (_.include(blacklist, key)) return; - } - values[key] = value_.get_value(); + var val = value_.get_value(); + values[key] = val; }); return values; }, @@ -879,9 +865,6 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM return option[0] === value; })[1]; break; - case 'many2one': - displayed = field.get_displayed(); - break; } return { @@ -959,9 +942,6 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM is_create_mode: function() { return !this.datarecord.id; }, - open_translate_dialog: function(field) { - return this._super(field); - }, }); /** @@ -1005,6 +985,7 @@ instance.web.form.FormRenderingEngine = instance.web.form.FormRenderingEngineInt } }); } + selector = 'form[version!="7.0"] page,form[version!="7.0"]'; }, render_to: function($target) { var self = this; @@ -1138,7 +1119,7 @@ instance.web.form.FormRenderingEngine = instance.web.form.FormRenderingEngineInt if (found) return; - var $label = $('