From 130e4411335e46f832d129f5ab58424f20cc555b Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Wed, 12 Oct 2011 14:49:23 +0200 Subject: [fix] fixed rare problem in the o2m when we try to get its value before it has finished refreshing bzr revid: nicolas.vanhoren@openerp.com-20111012124923-zka6mskg56iha5wc --- addons/web/static/src/js/view_form.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'addons/web/static/src/js/view_form.js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index ebc895df673..c8fef313854 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -1937,9 +1937,10 @@ openerp.web.form.FieldOne2Many = openerp.web.form.Field.extend({ if (this.dataset.index === null && this.dataset.ids.length >= 1) { this.dataset.index = 0; } - this.form_last_update.then(function() { - this.form_last_update = view.do_show(); - }); + var act = function() { + return view.do_show(); + } + this.form_last_update = this.form_last_update.pipe(act, act);; } else if (self.viewmanager.active_view === "graph") { view.do_search(this.build_domain(), this.dataset.get_context(), []); } @@ -2007,7 +2008,8 @@ openerp.web.form.FieldOne2Many = openerp.web.form.Field.extend({ var self = this; if (!this.dataset) return []; - this.save_form_view(); + if (!this.form_last_update.isResolved() && !this.form_last_update.isRejected()) + this.save_form_view(); var val = this.dataset.delete_all ? [commands.delete_all()] : []; val = val.concat(_.map(this.dataset.ids, function(id) { var alter_order = _.detect(self.dataset.to_create, function(x) {return x.id === id;}); -- cgit v1.2.3 From efa2ca1195f46b9b9427132d55b105a1c3c1a42f Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Wed, 12 Oct 2011 16:10:07 +0200 Subject: [imp] lot of concurrency improvements for form view bzr revid: nicolas.vanhoren@openerp.com-20111012141007-87w0fgemvqv2ul15 --- addons/web/static/src/js/view_form.js | 42 +++++++++++++++++++++++------------ 1 file changed, 28 insertions(+), 14 deletions(-) (limited to 'addons/web/static/src/js/view_form.js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index c8fef313854..94e175584b5 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -45,6 +45,7 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# _.defaults(this.options, {"always_show_new_button": true, "not_interactible_on_create": false}); this.save_lock = $.Deferred().resolve(); + this.reload_lock = $.Deferred().resolve(); }, start: function() { this._super(); @@ -367,6 +368,7 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# do_save: function(success, prepend_on_create) { var self = this; var action = function() { + try { if (!self.ready) { return $.Deferred().reject(); } @@ -403,6 +405,10 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# }).then(success); } } + } catch (e) { + console.error(e); + return $.Deferred().reject(); + } }; this.save_lock = this.save_lock.pipe(action, action); return this.save_lock; @@ -430,7 +436,8 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# // should not happen in the server, but may happen for internal purpose return $.Deferred().reject(); } else { - return this.reload().then(success); + this.reload(); + return $.when().then(success); } }, /** @@ -464,9 +471,8 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# this.sidebar.attachments.do_update(); } console.debug("The record has been created with id #" + this.datarecord.id); - return this.reload().pipe(function() { - return _.extend(r, {created: true}); - }).then(success); + this.reload() + return $.when(_.extend(r, {created: true})).then(success); } }, on_action: function (action) { @@ -476,15 +482,21 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# console.debug("Cancelling form"); }, reload: function() { - if (this.dataset.index == null || this.dataset.index < 0) { - return $.when(this.on_button_new()); - } else { - return this.dataset.read_index(_.keys(this.fields_view.fields), this.on_record_loaded); - } + var self = this; + var act = function() { + if (self.dataset.index == null || self.dataset.index < 0) { + return $.when(self.on_button_new()); + } else { + return self.dataset.read_index(_.keys(self.fields_view.fields), self.on_record_loaded); + } + }; + this.reload_lock = this.reload_lock.pipe(act, act); + return this.reload_lock; }, get_fields_values: function() { var values = {}; _.each(this.fields, function(value, key) { + value.is_dirty(); var val = value.get_value(); values[key] = val; }); @@ -923,7 +935,7 @@ openerp.web.form.WidgetButton = openerp.web.form.Widget.extend({ return self.on_confirmed(); } }; - if (!this.node.attrs.special && (this.view.dirty_for_user || !this.view.datarecord.id)) { + if (!this.node.attrs.special) { return this.view.recursive_save().pipe(exec_action); } else { return exec_action(); @@ -2008,8 +2020,6 @@ openerp.web.form.FieldOne2Many = openerp.web.form.Field.extend({ var self = this; if (!this.dataset) return []; - if (!this.form_last_update.isResolved() && !this.form_last_update.isRejected()) - this.save_form_view(); var val = this.dataset.delete_all ? [commands.delete_all()] : []; val = val.concat(_.map(this.dataset.ids, function(id) { var alter_order = _.detect(self.dataset.to_create, function(x) {return x.id === id;}); @@ -2372,13 +2382,17 @@ openerp.web.form.SelectCreatePopup = openerp.web.OldWidget.extend(/** @lends ope var $nbutton = $buttons.find(".oe_selectcreatepopup-form-save-new"); $nbutton.click(function() { $.when(self.view_form.do_save()).then(function() { - self.view_form.on_button_new(); + self.view_form.reload_lock.then(function() { + self.view_form.on_button_new(); + }); }); }); var $nbutton = $buttons.find(".oe_selectcreatepopup-form-save"); $nbutton.click(function() { $.when(self.view_form.do_save()).then(function() { - self.check_exit(); + self.view_form.reload_lock.then(function() { + self.check_exit(); + }); }); }); var $cbutton = $buttons.find(".oe_selectcreatepopup-form-close"); -- cgit v1.2.3 From 2ebe653f6586e266490014c3000ee1de4479ab22 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Wed, 12 Oct 2011 17:08:30 +0200 Subject: [imp] modified form view to really have on_changes that can not execute concurently bzr revid: nicolas.vanhoren@openerp.com-20111012150830-7eupfrzfeh2wh9j6 --- addons/web/static/src/js/view_form.js | 147 ++++++++++++++++++---------------- 1 file changed, 80 insertions(+), 67 deletions(-) (limited to 'addons/web/static/src/js/view_form.js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 94e175584b5..8e37dc4540b 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -33,7 +33,6 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# this.widgets_counter = 0; this.fields = {}; this.datarecord = {}; - this.ready = false; this.show_invalid = true; this.dirty_for_user = false; this.default_focus_field = null; @@ -44,7 +43,8 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# this.translatable_fields = []; _.defaults(this.options, {"always_show_new_button": true, "not_interactible_on_create": false}); - this.save_lock = $.Deferred().resolve(); + this.mutating_lock = $.Deferred(); + this.initial_mutating_lock = this.mutating_lock; this.reload_lock = $.Deferred().resolve(); }, start: function() { @@ -182,7 +182,8 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# } } this.on_form_changed(); - this.show_invalid = this.ready = true; + this.initial_mutating_lock.resolve(); + this.show_invalid = true; this.do_update_pager(record.id == null); if (this.sidebar) { this.sidebar.attachments.do_update(); @@ -225,69 +226,78 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# $pager.find('span.oe_pager_count').html(this.dataset.ids.length); }, do_onchange: function(widget, processed) { - processed = processed || []; - if (widget.node.attrs.on_change) { - var self = this; - this.ready = false; - var onchange = _.trim(widget.node.attrs.on_change); - var call = onchange.match(/^\s?(.*?)\((.*?)\)\s?$/); - if (call) { - var method = call[1], args = []; - var context_index = null; - var argument_replacement = { - 'False' : function() {return false;}, - 'True' : function() {return true;}, - 'None' : function() {return null;}, - 'context': function(i) { - context_index = i; - var ctx = widget.build_context ? widget.build_context() : {}; - return ctx; - } - }; - var parent_fields = null; - _.each(call[2].split(','), function(a, i) { - var field = _.trim(a); - if (field in argument_replacement) { - args.push(argument_replacement[field](i)); - return; - } else if (self.fields[field]) { - var value = self.fields[field].get_on_change_value(); - args.push(value == null ? false : value); - return; - } else { - var splitted = field.split('.'); - if (splitted.length > 1 && _.trim(splitted[0]) === "parent" && self.dataset.parent_view) { - if (parent_fields === null) { - parent_fields = self.dataset.parent_view.get_fields_values(); - } - var p_val = parent_fields[_.trim(splitted[1])]; - if (p_val !== undefined) { - args.push(p_val == null ? false : p_val); - return; + var self = this; + var act = function() { + try { + processed = processed || []; + if (widget.node.attrs.on_change) { + var onchange = _.trim(widget.node.attrs.on_change); + var call = onchange.match(/^\s?(.*?)\((.*?)\)\s?$/); + if (call) { + var method = call[1], args = []; + var context_index = null; + var argument_replacement = { + 'False' : function() {return false;}, + 'True' : function() {return true;}, + 'None' : function() {return null;}, + 'context': function(i) { + context_index = i; + var ctx = widget.build_context ? widget.build_context() : {}; + return ctx; + } + }; + var parent_fields = null; + _.each(call[2].split(','), function(a, i) { + var field = _.trim(a); + if (field in argument_replacement) { + args.push(argument_replacement[field](i)); + return; + } else if (self.fields[field]) { + var value = self.fields[field].get_on_change_value(); + args.push(value == null ? false : value); + return; + } else { + var splitted = field.split('.'); + if (splitted.length > 1 && _.trim(splitted[0]) === "parent" && self.dataset.parent_view) { + if (parent_fields === null) { + parent_fields = self.dataset.parent_view.get_fields_values(); + } + var p_val = parent_fields[_.trim(splitted[1])]; + if (p_val !== undefined) { + args.push(p_val == null ? false : p_val); + return; + } } } - } - throw "Could not get field with name '" + field + - "' for onchange '" + onchange + "'"; - }); - var ajax = { - url: '/web/dataset/call', - async: false - }; - return this.rpc(ajax, { - model: this.dataset.model, - method: method, - args: [(this.datarecord.id == null ? [] : [this.datarecord.id])].concat(args), - context_id: context_index === null ? null : context_index + 1 - }, function(response) { - self.on_processed_onchange(response, processed); - }); - } else { - console.log("Wrong on_change format", on_change); + throw "Could not get field with name '" + field + + "' for onchange '" + onchange + "'"; + }); + var ajax = { + url: '/web/dataset/call', + async: false + }; + return self.rpc(ajax, { + model: self.dataset.model, + method: method, + args: [(self.datarecord.id == null ? [] : [self.datarecord.id])].concat(args), + context_id: context_index === null ? null : context_index + 1 + }).pipe(function(response) { + return self.on_processed_onchange(response, processed); + }); + } else { + console.log("Wrong on_change format", on_change); + } } - } + } catch(e) { + console.error(e); + return $.Deferred().reject(); + } + }; + this.mutating_lock = this.mutating_lock.pipe(act, act); + return this.mutating_lock; }, on_processed_onchange: function(response, processed) { + try { var result = response; if (result.value) { for (var f in result.value) { @@ -320,7 +330,11 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# if (result.domain) { // TODO: } - this.ready = true; + return $.Deferred().resolve(); + } catch(e) { + console.error(e); + return $.Deferred().reject(); + } }, on_button_new: function() { var self = this; @@ -369,9 +383,8 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# var self = this; var action = function() { try { - if (!self.ready) { - return $.Deferred().reject(); - } + if (!self.initial_mutating_lock.isResolved() && !self.initial_mutating_lock.isRejected()) + return; var form_dirty = false, form_invalid = false, values = {}, @@ -410,8 +423,8 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# return $.Deferred().reject(); } }; - this.save_lock = this.save_lock.pipe(action, action); - return this.save_lock; + this.mutating_lock = this.mutating_lock.pipe(action, action); + return this.mutating_lock; }, do_save_edit: function() { this.do_save(); -- cgit v1.2.3 From 101dd015023d30994db027624cf17f1b6f067da0 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Wed, 12 Oct 2011 17:35:18 +0200 Subject: [fix] rollbacked previous fix regarding save of o2m when doing a get_value bzr revid: nicolas.vanhoren@openerp.com-20111012153518-gt8uyhagjzi8qc72 --- addons/web/static/src/js/view_form.js | 1 - 1 file changed, 1 deletion(-) (limited to 'addons/web/static/src/js/view_form.js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 8e37dc4540b..e395f593f3e 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -509,7 +509,6 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# get_fields_values: function() { var values = {}; _.each(this.fields, function(value, key) { - value.is_dirty(); var val = value.get_value(); values[key] = val; }); -- cgit v1.2.3 From 73fcb10472a970f5510816325d378488872869ae Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Wed, 12 Oct 2011 17:57:04 +0200 Subject: [fix] problem in delivery orders, when trying to click on a button in the o2m bzr revid: nicolas.vanhoren@openerp.com-20111012155704-22dgojl8ag3av4sn --- addons/web/static/src/js/view_form.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'addons/web/static/src/js/view_form.js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index e395f593f3e..7ed7bcd200e 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -45,6 +45,7 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# "not_interactible_on_create": false}); this.mutating_lock = $.Deferred(); this.initial_mutating_lock = this.mutating_lock; + this.on_change_lock = $.Deferred().resolve(); this.reload_lock = $.Deferred().resolve(); }, start: function() { @@ -293,8 +294,8 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# return $.Deferred().reject(); } }; - this.mutating_lock = this.mutating_lock.pipe(act, act); - return this.mutating_lock; + this.on_change_lock = this.on_change_lock.pipe(act, act); + return this.on_change_lock; }, on_processed_onchange: function(response, processed) { try { @@ -2055,9 +2056,10 @@ openerp.web.form.FieldOne2Many = openerp.web.form.Field.extend({ var view = this.viewmanager.views[this.viewmanager.active_view].controller; if (this.viewmanager.active_view === "form") { var res = $.when(view.do_save()); - if (!res.isResolved() && !res.isRejected()) { - throw "Asynchronous get_value() is not supported in form view."; - } + // it seems line there are some cases when this happens + /*if (!res.isResolved() && !res.isRejected()) { + console.warn("Asynchronous get_value() is not supported in form view."); + }*/ return res; } } -- cgit v1.2.3 From fc823e76bd0c5cdb28f5e20190c0a13cabddc33c Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Wed, 12 Oct 2011 18:13:22 +0200 Subject: [fix] rare problem in o2m bzr revid: nicolas.vanhoren@openerp.com-20111012161322-rnjei1os2xjb0qax --- addons/web/static/src/js/view_form.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'addons/web/static/src/js/view_form.js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 7ed7bcd200e..b0dce062519 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -1887,6 +1887,7 @@ openerp.web.form.FieldOne2Many = openerp.web.form.Field.extend({ this._super(view, node); this.is_started = $.Deferred(); this.form_last_update = $.Deferred(); + this.init_form_last_update = this.form_last_update; this.disable_utility_classes = true; }, start: function() { @@ -1928,7 +1929,7 @@ openerp.web.form.FieldOne2Many = openerp.web.form.Field.extend({ form: 'openerp.web.form.One2ManyFormView' }); var once = $.Deferred().then(function() { - self.form_last_update.resolve(); + self.init_form_last_update.resolve(); }); this.viewmanager.on_controller_inited.add_last(function(view_type, controller) { if (view_type == "list") { -- cgit v1.2.3 From c7a888f343c7fa11e266d3f2e75a6bcd092d5910 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Thu, 13 Oct 2011 11:38:14 +0200 Subject: [fix] buttons do not use an evalutation context despite the fact the context on buttons can depend on it bzr revid: nicolas.vanhoren@openerp.com-20111013093814-xalvnvp6vajslruo --- addons/web/static/src/js/view_form.js | 99 +++++++++++++++++++---------------- 1 file changed, 53 insertions(+), 46 deletions(-) (limited to 'addons/web/static/src/js/view_form.js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index b0dce062519..7e5871166dc 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -735,6 +735,51 @@ openerp.web.form.Widget = openerp.web.Widget.extend(/** @lends openerp.web.form. render: function() { var template = this.template; return QWeb.render(template, { "widget": this }); + }, + _build_view_fields_values: function() { + var a_dataset = this.view.dataset; + var fields_values = this.view.get_fields_values(); + var parent_values = a_dataset.parent_view ? a_dataset.parent_view.get_fields_values() : {}; + fields_values.parent = parent_values; + return fields_values; + }, + _build_eval_context: function() { + var a_dataset = this.view.dataset; + return new openerp.web.CompoundContext(a_dataset.get_context(), this._build_view_fields_values()); + }, + /** + * Builds a new context usable for operations related to fields by merging + * the fields'context with the action's context. + */ + build_context: function() { + var f_context = (this.field || {}).context || {}; + if (!!f_context.__ref) { + var fields_values = this._build_eval_context(); + f_context = new openerp.web.CompoundDomain(f_context).set_eval_context(fields_values); + } + // maybe the default_get should only be used when we do a default_get? + var v_contexts = _.compact([this.node.attrs.default_get || null, + this.node.attrs.context || null]); + var v_context = new openerp.web.CompoundContext(); + _.each(v_contexts, function(x) {v_context.add(x);}); + if (_.detect(v_contexts, function(x) {return !!x.__ref;})) { + var fields_values = this._build_eval_context(); + v_context.set_eval_context(fields_values); + } + // if there is a context on the node, overrides the model's context + var ctx = v_contexts.length > 0 ? v_context : f_context; + return ctx; + }, + build_domain: function() { + var f_domain = this.field.domain || []; + var n_domain = this.node.attrs.domain || null; + // if there is a domain on the node, overrides the model's domain + var final_domain = n_domain !== null ? n_domain : f_domain; + if (!(final_domain instanceof Array)) { + var fields_values = this._build_eval_context(); + final_domain = new openerp.web.CompoundDomain(final_domain).set_eval_context(fields_values); + } + return final_domain; } }); @@ -956,9 +1001,16 @@ openerp.web.form.WidgetButton = openerp.web.form.Widget.extend({ }, on_confirmed: function() { var self = this; + + var context = this.node.attrs.context; + if (context && context.__ref) { + context = new openerp.web.CompoundContext(context); + context.set_eval_context(this._build_eval_context()); + } return this.view.do_execute_action( - this.node.attrs, this.view.dataset, this.view.datarecord.id, function () { + _.extend({}, this.node.attrs, {context: context}), + this.view.dataset, this.view.datarecord.id, function () { self.view.reload(); }); }, @@ -1105,51 +1157,6 @@ openerp.web.form.Field = openerp.web.form.Widget.extend(/** @lends openerp.web.f this.invalid = false; }, focus: function() { - }, - _build_view_fields_values: function() { - var a_dataset = this.view.dataset; - var fields_values = this.view.get_fields_values(); - var parent_values = a_dataset.parent_view ? a_dataset.parent_view.get_fields_values() : {}; - fields_values.parent = parent_values; - return fields_values; - }, - _build_eval_context: function() { - var a_dataset = this.view.dataset; - return new openerp.web.CompoundContext(a_dataset.get_context(), this._build_view_fields_values()); - }, - /** - * Builds a new context usable for operations related to fields by merging - * the fields'context with the action's context. - */ - build_context: function() { - var f_context = this.field.context || {}; - if (!!f_context.__ref) { - var fields_values = this._build_eval_context(); - f_context = new openerp.web.CompoundDomain(f_context).set_eval_context(fields_values); - } - // maybe the default_get should only be used when we do a default_get? - var v_contexts = _.compact([this.node.attrs.default_get || null, - this.node.attrs.context || null]); - var v_context = new openerp.web.CompoundContext(); - _.each(v_contexts, function(x) {v_context.add(x);}); - if (_.detect(v_contexts, function(x) {return !!x.__ref;})) { - var fields_values = this._build_eval_context(); - v_context.set_eval_context(fields_values); - } - // if there is a context on the node, overrides the model's context - var ctx = v_contexts.length > 0 ? v_context : f_context; - return ctx; - }, - build_domain: function() { - var f_domain = this.field.domain || []; - var n_domain = this.node.attrs.domain || null; - // if there is a domain on the node, overrides the model's domain - var final_domain = n_domain !== null ? n_domain : f_domain; - if (!(final_domain instanceof Array)) { - var fields_values = this._build_eval_context(); - final_domain = new openerp.web.CompoundDomain(final_domain).set_eval_context(fields_values); - } - return final_domain; } }); -- cgit v1.2.3 From 15e73da3304b9771baa33d22699d0d821be90b12 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 13 Oct 2011 10:51:00 +0200 Subject: [FIX] FormView.on_saved should resolve on a result, ideally the same as FormView.on_created minus the 'created' key bzr revid: xmo@openerp.com-20111013085100-xpl29e2f2jnqmt1v --- addons/web/static/src/js/view_form.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'addons/web/static/src/js/view_form.js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 7e5871166dc..8bc31d4e015 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -451,7 +451,7 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# return $.Deferred().reject(); } else { this.reload(); - return $.when().then(success); + return $.when(r).then(success); } }, /** @@ -485,7 +485,7 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# this.sidebar.attachments.do_update(); } console.debug("The record has been created with id #" + this.datarecord.id); - this.reload() + this.reload(); return $.when(_.extend(r, {created: true})).then(success); } }, -- cgit v1.2.3 From 00b269d1c0a3507a01a296587e96bcb9e8e6da86 Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Thu, 13 Oct 2011 12:26:53 +0200 Subject: [IMP] nivification of Notification Widget bzr revid: chs@openerp.com-20111013102653-wox1v4o9mfplzt2b --- addons/web/static/src/js/view_form.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'addons/web/static/src/js/view_form.js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index b0dce062519..e3f147d1e4d 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -443,7 +443,7 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# } }); msg += ""; - this.notification.warn("The following fields are invalid :", msg); + this.do_warn("The following fields are invalid :", msg); }, on_saved: function(r, success) { if (!r.result) { @@ -616,7 +616,7 @@ openerp.web.form.SidebarAttachments = openerp.web.Widget.extend({ ids: [parseInt($e.attr('data-id'))] }, function(r) { $e.parent().remove(); - self.notification.notify("Delete an attachment", "The attachment '" + name + "' has been deleted"); + self.do_notify("Delete an attachment", "The attachment '" + name + "' has been deleted"); }); } } @@ -1195,7 +1195,7 @@ openerp.web.form.FieldEmail = openerp.web.form.FieldChar.extend({ }, on_button_clicked: function() { if (!this.value || !this.is_valid()) { - this.notification.warn("E-mail error", "Can't send email to invalid e-mail address"); + this.do_warn("E-mail error", "Can't send email to invalid e-mail address"); } else { location.href = 'mailto:' + this.value; } @@ -1210,7 +1210,7 @@ openerp.web.form.FieldUrl = openerp.web.form.FieldChar.extend({ }, on_button_clicked: function() { if (!this.value) { - this.notification.warn("Resource error", "This resource is empty"); + this.do_warn("Resource error", "This resource is empty"); } else { window.open(this.value); } @@ -2626,7 +2626,7 @@ openerp.web.form.FieldBinary = openerp.web.form.Field.extend({ on_file_uploaded: function(size, name, content_type, file_base64) { delete(window[this.iframe]); if (size === false) { - this.notification.warn("File Upload", "There was a problem while uploading your file"); + this.do_warn("File Upload", "There was a problem while uploading your file"); // TODO: use openerp web crashmanager console.warn("Error while uploading file : ", name); } else { @@ -2640,7 +2640,7 @@ openerp.web.form.FieldBinary = openerp.web.form.Field.extend({ }, on_save_as: function() { if (!this.view.datarecord.id) { - this.notification.warn("Can't save file", "The record has not yet been saved"); + this.do_warn("Can't save file", "The record has not yet been saved"); } else { var url = '/web/binary/saveas?session_id=' + this.session.session_id + '&model=' + this.view.dataset.model +'&id=' + (this.view.datarecord.id || '') + '&field=' + this.name + -- cgit v1.2.3 From 1e507afcc9b29638718cd798826497ef0512e11e Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Thu, 13 Oct 2011 13:58:28 +0200 Subject: [fix] When we click a button in a m2o popup it closes the popup lp bug: https://launchpad.net/bugs/873272 fixed bzr revid: nicolas.vanhoren@openerp.com-20111013115828-ctbslk34qif4cfwt --- addons/web/static/src/js/view_form.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'addons/web/static/src/js/view_form.js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 8bc31d4e015..fce00e797c0 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -2483,7 +2483,6 @@ openerp.web.form.FormOpenPopup = openerp.web.OldWidget.extend(/** @lends openerp this.setup_form_view(); }, on_write: function(id, data) { - this.stop(); if (!this.options.auto_write) return; var self = this; @@ -2506,7 +2505,9 @@ openerp.web.form.FormOpenPopup = openerp.web.OldWidget.extend(/** @lends openerp $buttons.html(QWeb.render("FormOpenPopup.form.buttons")); var $nbutton = $buttons.find(".oe_formopenpopup-form-save"); $nbutton.click(function() { - self.view_form.do_save(); + self.view_form.do_save().then(function() { + self.stop(); + }); }); var $cbutton = $buttons.find(".oe_formopenpopup-form-close"); $cbutton.click(function() { -- cgit v1.2.3 From 8b1e88a47a5c566ad0ebb2e79f67b16d242a2bd2 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Mon, 17 Oct 2011 12:03:10 +0200 Subject: [REM] Removed '& Edit' label in FormView's Save and Create buttons bzr revid: fme@openerp.com-20111017100310-sxhudt74oi7eia10 --- addons/web/static/src/js/view_form.js | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) (limited to 'addons/web/static/src/js/view_form.js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 65ce114fb4b..569ac4f72ff 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -102,7 +102,6 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# }); this.$form_header.find('button.oe_form_button_save').click(this.do_save); - this.$form_header.find('button.oe_form_button_save_edit').click(this.do_save_edit); this.$form_header.find('button.oe_form_button_cancel').click(this.do_cancel); this.$form_header.find('button.oe_form_button_new').click(this.on_button_new); this.$form_header.find('button.oe_form_button_duplicate').click(this.on_button_duplicate); @@ -427,10 +426,6 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# this.mutating_lock = this.mutating_lock.pipe(action, action); return this.mutating_lock; }, - do_save_edit: function() { - this.do_save(); - //this.switch_readonly(); Use promises - }, switch_readonly: function() { }, switch_editable: function() { @@ -1948,7 +1943,7 @@ openerp.web.form.FieldOne2Many = openerp.web.form.Field.extend({ controller.on_pager_action.add_first(function() { self.save_form_view(); }); - controller.$element.find(".oe_form_button_save_edit").hide(); + controller.$element.find(".oe_form_button_save").hide(); } else if (view_type == "graph") { self.reload_current_view() } -- cgit v1.2.3 From 81d84899a1fcbd24af92599503475ca68910ecb0 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Mon, 17 Oct 2011 13:38:59 +0200 Subject: [imp] css improvements of the statusbar bzr revid: nicolas.vanhoren@openerp.com-20111017113859-zlt1zxy15n2c25o7 --- addons/web/static/src/js/view_form.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'addons/web/static/src/js/view_form.js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 569ac4f72ff..c3baf8c44f9 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -2745,7 +2745,7 @@ openerp.web.form.FieldStatus = openerp.web.form.Field.extend({ render_list: function() { var self = this; var shown = _.map(((this.node.attrs || {}).statusbar_visible || "").split(","), - function(x) { return x.trim(); }); + function(x) { return _.trim(x); }); shown = _.select(shown, function(x) { return x.length > 0; }); if (shown.length == 0) { -- cgit v1.2.3 From f3b67f4f7129876ef5f90e6879391c7542d3185a Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Mon, 17 Oct 2011 14:09:01 +0200 Subject: [imp] added text in white if status bar if arrow color is too dark bzr revid: nicolas.vanhoren@openerp.com-20111017120901-zuxcqat247jfbgc9 --- addons/web/static/src/js/view_form.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'addons/web/static/src/js/view_form.js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index c3baf8c44f9..e998b3b2afc 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -2764,12 +2764,32 @@ openerp.web.form.FieldStatus = openerp.web.form.Field.extend({ if (color) { var elem = this.$element.find("li.oe-arrow-list-selected span"); elem.css("border-color", color); + if (this.check_white(color)) + elem.css("color", "white"); elem = this.$element.find("li.oe-arrow-list-selected .oe-arrow-list-before"); elem.css("border-left-color", "rgba(0,0,0,0)"); elem = this.$element.find("li.oe-arrow-list-selected .oe-arrow-list-after"); elem.css("border-color", "rgba(0,0,0,0)"); elem.css("border-left-color", color); } + }, + check_white: function(color) { + var div = $("
"); + div.css("display", "none"); + div.css("color", color); + div.appendTo($("body")); + var ncolor = div.css("color"); + div.remove(); + var res = /^\s*rgb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)\s*$/.exec(ncolor); + if (!res) { + return false; + } + var comps = [parseInt(res[1]), parseInt(res[2]), parseInt(res[3])]; + var lum = comps[0] * 0.3 + comps[1] * 0.59 + comps[1] * 0.11; + if (lum < 128) { + return true; + } + return false; } }); -- cgit v1.2.3 From 548a809ff5853f3c97d6cd6bc3c71fa850d58289 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Mon, 17 Oct 2011 16:58:49 +0200 Subject: [FIX] downloading files from an unsaved/in-memory wizard fallback on default_get if record does not exist in db, as for e.g. Thunderbird and Outlook plugins lp bug: https://launchpad.net/bugs/856487 fixed bzr revid: xmo@openerp.com-20111017145849-p8dq0eprkru4xtl1 --- addons/web/static/src/js/view_form.js | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) (limited to 'addons/web/static/src/js/view_form.js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index e998b3b2afc..06171ed1d73 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -2642,14 +2642,10 @@ openerp.web.form.FieldBinary = openerp.web.form.Field.extend({ on_file_uploaded_and_valid: function(size, name, content_type, file_base64) { }, on_save_as: function() { - if (!this.view.datarecord.id) { - this.do_warn("Can't save file", "The record has not yet been saved"); - } else { - var url = '/web/binary/saveas?session_id=' + this.session.session_id + '&model=' + - this.view.dataset.model +'&id=' + (this.view.datarecord.id || '') + '&field=' + this.name + - '&fieldname=' + (this.node.attrs.filename || '') + '&t=' + (new Date().getTime()); - window.open(url); - } + var url = '/web/binary/saveas?session_id=' + this.session.session_id + '&model=' + + this.view.dataset.model +'&id=' + (this.view.datarecord.id || '') + '&field=' + this.name + + '&fieldname=' + (this.node.attrs.filename || '') + '&t=' + (new Date().getTime()); + window.open(url); }, on_clear: function() { if (this.value !== false) { -- cgit v1.2.3 From a789d421cbe013a27931ee6482f081d7b22165d8 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Mon, 17 Oct 2011 17:29:23 +0200 Subject: [FIX] Binary fields does not honnor readonly property bzr revid: fme@openerp.com-20111017152923-rfyc16l3cr0cwmm3 --- addons/web/static/src/js/view_form.js | 1 + 1 file changed, 1 insertion(+) (limited to 'addons/web/static/src/js/view_form.js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 06171ed1d73..a5fa2451641 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -2662,6 +2662,7 @@ openerp.web.form.FieldBinaryFile = openerp.web.form.FieldBinary.extend({ update_dom: function() { this._super.apply(this, arguments); this.$element.find('.oe-binary-file-set, .oe-binary-file-clear').toggle(!this.readonly); + this.$element.find('input[type=text]').attr('disabled', this.readonly); }, set_value: function(value) { this._super.apply(this, arguments); -- cgit v1.2.3 From 1eee4a0833954b1d0b59cc9dfb03a3123eafb109 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Mon, 17 Oct 2011 17:33:26 +0200 Subject: [FIX] Button widget does not honnor readonly property bzr revid: fme@openerp.com-20111017153326-77z2xmtqcnfpadom --- addons/web/static/src/js/view_form.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'addons/web/static/src/js/view_form.js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index a5fa2451641..b65194d1c0f 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -1014,7 +1014,7 @@ openerp.web.form.WidgetButton = openerp.web.form.Widget.extend({ this.check_disable(); }, check_disable: function() { - if (this.force_disabled || !this.view.is_interactible_record()) { + if (this.readonly || this.force_disabled || !this.view.is_interactible_record()) { this.$element.find("button").attr("disabled", "disabled"); this.$element.find("button").css("color", "grey"); } else { -- cgit v1.2.3 From fc01a139bee409fcef1dc8fb57b01417a5cdb0f0 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Mon, 17 Oct 2011 18:22:28 +0200 Subject: [fix] attempt to fix a race condition where a o2m will try to make a get_value on each field in the form before they are setted lp bug: https://launchpad.net/bugs/865048 fixed bzr revid: nicolas.vanhoren@openerp.com-20111017162228-0xazc4zhd9dwj28k --- addons/web/static/src/js/view_form.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'addons/web/static/src/js/view_form.js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index b65194d1c0f..83e15bda759 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -1888,6 +1888,7 @@ openerp.web.form.FieldOne2Many = openerp.web.form.Field.extend({ init: function(view, node) { this._super(view, node); this.is_started = $.Deferred(); + this.is_setted = $.Deferred(); this.form_last_update = $.Deferred(); this.init_form_last_update = this.form_last_update; this.disable_utility_classes = true; @@ -1952,9 +1953,11 @@ openerp.web.form.FieldOne2Many = openerp.web.form.Field.extend({ this.viewmanager.on_mode_switch.add_first(function() { self.save_form_view(); }); - setTimeout(function () { - self.viewmanager.appendTo(self.$element); - }, 0); + this.is_setted.then(function() { + setTimeout(function () { + self.viewmanager.appendTo(self.$element); + }, 0); + }); }, reload_current_view: function() { var self = this; @@ -2031,6 +2034,7 @@ openerp.web.form.FieldOne2Many = openerp.web.form.Field.extend({ $.when(this.is_started).then(function() { self.reload_current_view(); }); + this.is_setted.resolve(); }, get_value: function() { var self = this; -- cgit v1.2.3 From 27869cac8b76baea212575cf95c351a3cf5aa7d2 Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Mon, 10 Oct 2011 14:34:32 +0200 Subject: [IMP] change the way the sections and items are added to the sidebar bzr revid: chs@openerp.com-20111010123432-619o61elz09jm9sy --- addons/web/static/src/js/view_form.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'addons/web/static/src/js/view_form.js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index f1fab7702c3..af0a9370933 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -119,7 +119,7 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# this.sidebar = new openerp.web.Sidebar(this, this.options.sidebar_id); this.sidebar.start(); this.sidebar.do_unfold(); - this.sidebar.attachments = new openerp.web.form.SidebarAttachments(this.sidebar, this.sidebar.add_section('attachments', "Attachments"), this); + this.sidebar.attachments = new openerp.web.form.SidebarAttachments(this.sidebar, this); this.sidebar.add_toolbar(this.fields_view.toolbar); this.set_common_sidebar_sections(this.sidebar); } @@ -541,8 +541,12 @@ openerp.web.FormDialog = openerp.web.Dialog.extend({ openerp.web.form = {}; openerp.web.form.SidebarAttachments = openerp.web.Widget.extend({ - init: function(parent, element_id, form_view) { - this._super(parent, element_id); + init: function(parent, form_view) { + var $section = parent.add_section('Attachments'); + this.$div = $('
'); + $section.append(this.$div); + + this._super(parent, $section.attr('id')); this.view = form_view; }, do_update: function() { @@ -560,7 +564,7 @@ openerp.web.form.SidebarAttachments = openerp.web.Widget.extend({ }, on_attachments_loaded: function(attachments) { this.attachments = attachments; - this.$element.html(QWeb.render('FormView.sidebar.attachments', this)); + this.$div.html(QWeb.render('FormView.sidebar.attachments', this)); this.$element.find('.oe-binary-file').change(this.on_attachment_changed); this.$element.find('.oe-sidebar-attachment-delete').click(this.on_attachment_delete); }, -- cgit v1.2.3 From 23f6c03942c03bdd0823bbee44f7692250da6eb4 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Wed, 12 Oct 2011 10:25:34 +0200 Subject: [fix] forgot to return promise in the do_save() of the form view bzr revid: nicolas.vanhoren@openerp.com-20111012082534-dzz1upvvntjs4b1s --- addons/web/static/src/js/view_form.js | 1 + 1 file changed, 1 insertion(+) (limited to 'addons/web/static/src/js/view_form.js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index c940f4909e9..3121a91b7dc 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -405,6 +405,7 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# } }; this.save_lock = this.save_lock.pipe(action, action); + return this.save_lock; }, do_save_edit: function() { this.do_save(); -- cgit v1.2.3 From 12e97f3e8e0fa87da5eabcd62c61cf586ac48c6f Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Wed, 12 Oct 2011 10:58:52 +0200 Subject: [fix] problem with get_value() on o2m when it is called without calling is_dirty() first. bzr revid: nicolas.vanhoren@openerp.com-20111012085852-6tcqn1rmn00qoaqy --- addons/web/static/src/js/view_form.js | 1 + 1 file changed, 1 insertion(+) (limited to 'addons/web/static/src/js/view_form.js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 3121a91b7dc..55957388720 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -2003,6 +2003,7 @@ openerp.web.form.FieldOne2Many = openerp.web.form.Field.extend({ var self = this; if (!this.dataset) return []; + this.save_form_view(); var val = this.dataset.delete_all ? [commands.delete_all()] : []; val = val.concat(_.map(this.dataset.ids, function(id) { var alter_order = _.detect(self.dataset.to_create, function(x) {return x.id === id;}); -- cgit v1.2.3 From bd8f7a36a65f40b8f9112de219297daa725ae320 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Wed, 12 Oct 2011 11:11:47 +0200 Subject: [fix] occasional problem when a form try to validate a o2m before it finished updating bzr revid: nicolas.vanhoren@openerp.com-20111012091147-k9nm1yzftm2oalo1 --- addons/web/static/src/js/view_form.js | 2 ++ 1 file changed, 2 insertions(+) (limited to 'addons/web/static/src/js/view_form.js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 55957388720..02832f49250 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -2041,6 +2041,8 @@ openerp.web.form.FieldOne2Many = openerp.web.form.Field.extend({ }, validate: function() { this.invalid = false; + if (!this.viewmanager.views[this.viewmanager.active_view]) + return; var view = this.viewmanager.views[this.viewmanager.active_view].controller; if (this.viewmanager.active_view === "form") { for (var f in view.fields) { -- cgit v1.2.3 From 7b6309dd1537e6b653cfb901c7a424c56a63ca9b Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Wed, 12 Oct 2011 13:57:44 +0200 Subject: [FIX] translation of attachment and calendar sidebar sections bzr revid: chs@openerp.com-20111012115744-sv7kvwqbt2p5vdio --- addons/web/static/src/js/view_form.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'addons/web/static/src/js/view_form.js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index af0a9370933..de360500c4e 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -542,7 +542,7 @@ openerp.web.form = {}; openerp.web.form.SidebarAttachments = openerp.web.Widget.extend({ init: function(parent, form_view) { - var $section = parent.add_section('Attachments'); + var $section = parent.add_section(_t('Attachments'), 'attachments'); this.$div = $('
'); $section.append(this.$div); -- cgit v1.2.3 From 2069b260b01703514c792774acaab884855a3873 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Tue, 18 Oct 2011 13:07:40 +0200 Subject: [FIX] FormFrame layout now supports 'always invisible' widgets bzr revid: fme@openerp.com-20111018110740-1ik1nykpsipt7uqo --- addons/web/static/src/js/view_form.js | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) (limited to 'addons/web/static/src/js/view_form.js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 83e15bda759..a5a56c2d46e 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -694,6 +694,7 @@ openerp.web.form.Widget = openerp.web.Widget.extend(/** @lends openerp.web.form. this.view = view; this.node = node; this.modifiers = JSON.parse(this.node.attrs.modifiers || '{}'); + this.always_invisible = (this.modifiers.invisible && this.modifiers.invisible === true); this.type = this.type || node.tag; this.element_name = this.element_name || this.type; this.element_class = [ @@ -809,18 +810,26 @@ openerp.web.form.WidgetFrame = openerp.web.form.Widget.extend({ }, set_row_cells_with: function(row) { var bypass = 0, - max_width = 100; + max_width = 100, + row_length = row.length; for (var i = 0; i < row.length; i++) { - bypass += row[i].width === undefined ? 0 : 1; - max_width -= row[i].decrease_max_width; + if (row[i].always_invisible) { + row_length--; + } else { + bypass += row[i].width === undefined ? 0 : 1; + max_width -= row[i].decrease_max_width; + } } var size_unit = Math.round(max_width / (this.columns - bypass)), colspan_sum = 0; for (var i = 0; i < row.length; i++) { var w = row[i]; + if (w.always_invisible) { + continue; + } colspan_sum += w.colspan; if (w.width === undefined) { - var width = (i === row.length - 1 && colspan_sum === this.columns) ? max_width : Math.round(size_unit * w.colspan); + var width = (i === row_length - 1 && colspan_sum === this.columns) ? max_width : Math.round(size_unit * w.colspan); max_width -= width; w.width = width + '%'; } @@ -850,13 +859,15 @@ openerp.web.form.WidgetFrame = openerp.web.form.Widget.extend({ this.add_widget(widget); }, add_widget: function(widget, colspan) { - colspan = colspan || widget.colspan; var current_row = this.table[this.table.length - 1]; - if (current_row.length && (this.x + colspan) > this.columns) { - current_row = this.add_row(); + if (!widget.always_invisible) { + colspan = colspan || widget.colspan; + if (current_row.length && (this.x + colspan) > this.columns) { + current_row = this.add_row(); + } + this.x += widget.colspan; } current_row.push(widget); - this.x += widget.colspan; return widget; } }); -- cgit v1.2.3 From fecb2ee680df6076ac72e6215e2670393cfc9f24 Mon Sep 17 00:00:00 2001 From: "Yogesh (OpenERP)" Date: Wed, 19 Oct 2011 18:20:34 +0530 Subject: [FIX] call super method in m2oreadonly widget. lp bug: https://launchpad.net/bugs/878033 fixed bzr revid: ysa@tinyerp.com-20111019125034-2n7d9yrp53la4zdc --- addons/web/static/src/js/view_form.js | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) (limited to 'addons/web/static/src/js/view_form.js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index a5a56c2d46e..4e4a950bd99 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -15,7 +15,7 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# /** * @constructs openerp.web.FormView * @extends openerp.web.View - * + * * @param {openerp.web.Session} session the current openerp session * @param {openerp.web.DataSet} dataset the dataset this view will work with * @param {String} view_id the identifier of the OpenERP view object @@ -1007,7 +1007,7 @@ openerp.web.form.WidgetButton = openerp.web.form.Widget.extend({ }, on_confirmed: function() { var self = this; - + var context = this.node.attrs.context; if (context && context.__ref) { context = new openerp.web.CompoundContext(context); @@ -2745,13 +2745,13 @@ openerp.web.form.FieldStatus = openerp.web.form.Field.extend({ start: function() { this._super(); this.selected_value = null; - + this.render_list(); }, set_value: function(value) { this._super(value); this.selected_value = value; - + this.render_list(); }, render_list: function() { @@ -2759,7 +2759,7 @@ openerp.web.form.FieldStatus = openerp.web.form.Field.extend({ var shown = _.map(((this.node.attrs || {}).statusbar_visible || "").split(","), function(x) { return _.trim(x); }); shown = _.select(shown, function(x) { return x.length > 0; }); - + if (shown.length == 0) { this.to_show = this.field.selection; } else { @@ -2767,10 +2767,10 @@ openerp.web.form.FieldStatus = openerp.web.form.Field.extend({ return _.indexOf(shown, x[0]) !== -1 || x[0] === self.selected_value; }); } - + var content = openerp.web.qweb.render("FieldStatus.content", {widget: this, _:_}); this.$element.html(content); - + var colors = JSON.parse((this.node.attrs || {}).statusbar_colors || "{}"); var color = colors[this.selected_value]; if (color) { @@ -2872,6 +2872,7 @@ openerp.web.form.FieldSelectionReadonly = openerp.web.form.FieldReadonly.extend( openerp.web.form.FieldMany2OneReadonly = openerp.web.form.FieldCharReadonly.extend({ set_value: function (value) { value = value || null; + this._super(value); this.invalid = false; var self = this; this.tmp_value = value; -- cgit v1.2.3 From f88c553d45b5d7a58a3e675880e549ee8d019160 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Wed, 19 Oct 2011 16:07:09 +0200 Subject: [FIX] completely broken readonly URL form field bzr revid: xmo@openerp.com-20111019140709-hj86g28izgnb9imy --- addons/web/static/src/js/view_form.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'addons/web/static/src/js/view_form.js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index a5a56c2d46e..d66002ef2dc 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -2835,10 +2835,10 @@ openerp.web.form.FieldEmailReadonly = openerp.web.form.FieldURIReadonly.extend({ }); openerp.web.form.FieldUrlReadonly = openerp.web.form.FieldURIReadonly.extend({ set_value: function (value) { - var s = /(\w+):(\.+)/.match(value); - if (!(s[0] === 'http' || s[0] === 'https')) { return; } - this.scheme = s[0]; - this._super(s[1]); + var s = /(\w+):(.+)/.exec(value); + if (!s || !(s[1] === 'http' || s[1] === 'https')) { return; } + this.scheme = s[1]; + this._super(s[2]); } }); openerp.web.form.FieldBooleanReadonly = openerp.web.form.FieldCharReadonly.extend({ -- cgit v1.2.3 From 2ed32d7cf67ee8945153ece9637e583009f254b8 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Wed, 19 Oct 2011 18:07:09 +0200 Subject: [FIX] Datetime wodget does not correctly parse date when passing value to jQuery ui date picker lp bug: https://launchpad.net/bugs/878206 fixed bzr revid: fme@openerp.com-20111019160709-dwdpcz8hpy34k6d4 --- addons/web/static/src/js/view_form.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'addons/web/static/src/js/view_form.js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index d66002ef2dc..0c95cc6bba8 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -1257,7 +1257,7 @@ openerp.web.DateTimeWidget = openerp.web.Widget.extend({ }); this.$element.find('img.oe_datepicker_trigger').click(function() { if (!self.readonly) { - self.picker('setDate', self.value || new Date()); + self.picker('setDate', self.value ? openerp.web.auto_str_to_date(self.value) : new Date()); self.$element.find('.oe_datepicker').toggle(); } }); -- cgit v1.2.3 From 70d9e3b7eddff2e3596d099926153a3848ba5379 Mon Sep 17 00:00:00 2001 From: "Yogesh (OpenERP)" Date: Thu, 20 Oct 2011 10:50:16 +0530 Subject: [FIX] Set value in this.value instead of this.tmp_value in many2onereadonly widget. bzr revid: ysa@tinyerp.com-20111020052016-8exqlj462rahvyfe --- addons/web/static/src/js/view_form.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'addons/web/static/src/js/view_form.js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 321070f3080..8380a2c6a4a 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -2872,10 +2872,9 @@ openerp.web.form.FieldSelectionReadonly = openerp.web.form.FieldReadonly.extend( openerp.web.form.FieldMany2OneReadonly = openerp.web.form.FieldCharReadonly.extend({ set_value: function (value) { value = value || null; - this._super(value); this.invalid = false; var self = this; - this.tmp_value = value; + this.value = value; self.update_dom(); self.on_value_changed(); var real_set_value = function(rval) { -- cgit v1.2.3 From faafa77c46916069b624a1272499c546f64fbf22 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 20 Oct 2011 18:30:08 +0200 Subject: [REM] Removed FormDialog#load_id(). Use FormDialog#select_id() instead bzr revid: fme@openerp.com-20111020163008-8qy874po2lgedxay --- addons/web/static/src/js/view_form.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'addons/web/static/src/js/view_form.js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 8380a2c6a4a..f8168d21466 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -551,11 +551,13 @@ openerp.web.FormDialog = openerp.web.Dialog.extend({ this.form.on_saved.add_last(this.on_form_dialog_saved); return this; }, - load_id: function(id) { - var self = this; - return this.dataset.read_ids([id], _.keys(this.form.fields_view.fields), function(records) { - self.form.on_record_loaded(records[0]); - }); + select_id: function(id) { + if (this.form.dataset.select_id(id)) { + return this.form.do_show(); + } else { + this.do_warn("Could not find id in dataset"); + return $.Deferred().reject(); + } }, on_form_dialog_saved: function(r) { this.close(); -- cgit v1.2.3 From 0e9d7318fc2c47a1b3fe495bf12f90c968e36ea9 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Fri, 21 Oct 2011 14:22:56 +0200 Subject: [FIX] float formatting in form view should take digits/@digits in account lp bug: https://launchpad.net/bugs/879346 fixed bzr revid: xmo@openerp.com-20111021122256-ld3gm8u3yt4kdn71 --- addons/web/static/src/js/view_form.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'addons/web/static/src/js/view_form.js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index f8168d21466..8736f2d69e3 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -1233,6 +1233,19 @@ openerp.web.form.FieldUrl = openerp.web.form.FieldChar.extend({ }); openerp.web.form.FieldFloat = openerp.web.form.FieldChar.extend({ + init: function (view, node) { + this._super(view, node); + if (node.attrs.digits) { + this.parse_digits(node.attrs.digits); + } else { + this.digits = view.fields_view.fields[node.attrs.name].digits; + } + }, + parse_digits: function (digits_attr) { + // could use a Python parser instead. + var match = /^\s*[\(\[](\d+),\s*(\d+)/.exec(digits_attr); + return [parseInt(match[1], 10), parseInt(match[2], 10)]; + }, set_value: function(value) { if (value === false || value === undefined) { // As in GTK client, floats default to 0 -- cgit v1.2.3 From 84a383d5aa7c3ef6a2fc38fb06953b447d831651 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Mon, 24 Oct 2011 17:11:58 +0200 Subject: [IMP] make notebooks in page view identical to those of normal form view as requested by fp bzr revid: xmo@openerp.com-20111024151158-7hqox4k6xrjujxnb --- addons/web/static/src/js/view_form.js | 4 ---- 1 file changed, 4 deletions(-) (limited to 'addons/web/static/src/js/view_form.js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 7d3f96925e0..aa1fbab90e1 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -2813,9 +2813,6 @@ openerp.web.form.FieldStatus = openerp.web.form.Field.extend({ } }); -openerp.web.form.WidgetNotebookReadonly = openerp.web.form.WidgetNotebook.extend({ - template: 'WidgetNotebook.readonly' -}); openerp.web.form.FieldReadonly = openerp.web.form.Field.extend({ }); @@ -2934,7 +2931,6 @@ openerp.web.form.widgets = new openerp.web.Registry({ 'statusbar': 'openerp.web.form.FieldStatus' }); openerp.web.form.readonly = openerp.web.form.widgets.clone({ - 'notebook': 'openerp.web.form.WidgetNotebookReadonly', 'char': 'openerp.web.form.FieldCharReadonly', 'email': 'openerp.web.form.FieldEmailReadonly', 'url': 'openerp.web.form.FieldUrlReadonly', -- cgit v1.2.3 From 19bb1dda1a0d59b3010f06b53e47473ee0923105 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Mon, 24 Oct 2011 17:20:13 +0200 Subject: [IMP] use empty box/check mark for page boolean fields, instead of cross vs check mark bzr revid: xmo@openerp.com-20111024152013-nhi8kwra46se0yva --- addons/web/static/src/js/view_form.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'addons/web/static/src/js/view_form.js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index aa1fbab90e1..a8ccfcb3e46 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -2848,7 +2848,7 @@ openerp.web.form.FieldUrlReadonly = openerp.web.form.FieldURIReadonly.extend({ }); openerp.web.form.FieldBooleanReadonly = openerp.web.form.FieldCharReadonly.extend({ set_value: function (value) { - this._super(value ? '\u2714' : '\u2718'); + this._super(value ? '\u2611' : '\u2610'); } }); openerp.web.form.FieldSelectionReadonly = openerp.web.form.FieldReadonly.extend({ -- cgit v1.2.3 From 6cb7f2b6f9cad1bd02dda34ad283342e1565995e Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Mon, 24 Oct 2011 17:20:56 +0200 Subject: [imp] m2o now supports readonly mode bzr revid: nicolas.vanhoren@openerp.com-20111024152056-2nfx7zk4kc9py17k --- addons/web/static/src/js/view_form.js | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'addons/web/static/src/js/view_form.js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index a8ccfcb3e46..1f1b5b8ef6f 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -1628,6 +1628,11 @@ openerp.web.form.FieldMany2One = openerp.web.form.Field.extend({ } else { $("#" + self.cm_id + " .oe_m2o_menu_item_mandatory").addClass("oe-m2o-disabled-cm"); } + if (!self.readonly) { + $("#" + self.cm_id + " .oe_m2o_menu_item_noreadonly").removeClass("oe-m2o-disabled-cm"); + } else { + $("#" + self.cm_id + " .oe_m2o_menu_item_noreadonly").addClass("oe-m2o-disabled-cm"); + } return true; }, menuStyle: {width: "200px"} }); @@ -1647,6 +1652,8 @@ openerp.web.form.FieldMany2One = openerp.web.form.Field.extend({ } }); this.$drop_down.click(function() { + if (self.readonly) + return; if (self.$input.autocomplete("widget").is(":visible")) { self.$input.autocomplete("close"); } else { @@ -1853,6 +1860,10 @@ openerp.web.form.FieldMany2One = openerp.web.form.Field.extend({ }, focus: function () { this.$input.focus(); + }, + update_dom: function() { + this._super.apply(this, arguments); + this.$input.attr('disabled', this.readonly); } }); -- cgit v1.2.3