From 36cc003dc8dd9bb05b64e82753dad66a5bef95ce Mon Sep 17 00:00:00 2001 From: "Hiral Patel (OpenERP)" Date: Fri, 19 Oct 2012 13:01:32 +0530 Subject: [IMP] Remove Uncaught TypeError bzr revid: hip@tinyerp.com-20121019073132-0mk9ty7rttcy0c59 --- addons/web/static/src/js/view_list.js | 1 - 1 file changed, 1 deletion(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/view_list.js b/addons/web/static/src/js/view_list.js index 29bc81ea9ec..79963561715 100644 --- a/addons/web/static/src/js/view_list.js +++ b/addons/web/static/src/js/view_list.js @@ -1112,7 +1112,6 @@ instance.web.ListView.List = instance.web.Class.extend( /** @lends instance.web. }, this); if (!this.$current) { return; } this.$current.remove(); - this.$current = null; }, get_records: function () { return this.records.map(function (record) { -- cgit v1.2.3 From 8a12c46307b2225739cf9e434f91b0167bc44523 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Tue, 30 Oct 2012 16:53:13 +0100 Subject: [IMP] added commit_value() bzr revid: nicolas.vanhoren@openerp.com-20121030155313-g2cx14h4rl6zks6z --- addons/web/static/src/js/view_form.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 5ecad26e5df..95a21877bd0 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -1991,6 +1991,11 @@ instance.web.form.FieldInterface = { * Called when the translate button is clicked. */ on_translate: function() {}, + /** + This method is called by the form view before reading on_change values and before saving. It tells + the field to save its value before reading it using get_value(). Must return a deferred. + */ + commit_value: function() {}, }; /** @@ -2134,7 +2139,10 @@ instance.web.form.AbstractField = instance.web.form.FormWidget.extend(instance.w } this.$el.attr('style', style); this.$el.css('minHeight', height); - } + }, + commit_value: function() { + return $.when(); + }, }); /** -- cgit v1.2.3 From 2ea22c52340f3a8485b89173efeb2793a6260ec8 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Wed, 31 Oct 2012 11:32:33 +0100 Subject: [FIX] first field of editable list o2ms not showing their content Bug introduced in xmo@openerp.com-20121019100725-izotstggoxpfjk6k (and xmo@openerp.com-20121022103935-78bm40gfotpt1ds6 to the extent that in the former the cell would disappear altogether and in the latter its content would be blanked out). As it was the last 15 times I made this mistake, adding a "!" before an `instanceof` call and forgetting parens just negates the object (first argument to `instanceof`), not the whole expression, and thus the expression is *always false* (the result of !a is a `boolean` primitive, and `primitive instanceof ObjectType` is always false) bzr revid: xmo@openerp.com-20121031103233-9qw40l6m2vy0l3m1 --- addons/web/static/src/js/view_form.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 5ecad26e5df..76ddeb86acf 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -3321,7 +3321,7 @@ instance.web.form.FieldOne2Many = instance.web.form.AbstractField.extend({ e.cancel = true; }); _(controller.columns).find(function (column) { - if (!column instanceof instance.web.list.Handle) { + if (!(column instanceof instance.web.list.Handle)) { return false; } column.modifiers.invisible = true; -- cgit v1.2.3 From b6af4f22cb69bb018fd92284c72499dcd56ec873 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Wed, 31 Oct 2012 15:06:41 +0100 Subject: [FIX] [ESC] key closing dialogs when editing a list bzr revid: xmo@openerp.com-20121031140641-l1nf68jxiye8fyi8 --- addons/web/static/src/js/view_list_editable.js | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/view_list_editable.js b/addons/web/static/src/js/view_list_editable.js index acc1d781976..17ee06500e9 100644 --- a/addons/web/static/src/js/view_list_editable.js +++ b/addons/web/static/src/js/view_list_editable.js @@ -410,15 +410,15 @@ openerp.web.list_editable = function (instance) { }); this.editor.$el.on('keyup keydown', function (e) { - if (!self.editor.is_editing()) { return; } + if (!self.editor.is_editing()) { return true; } var key = _($.ui.keyCode).chain() .map(function (v, k) { return {name: k, code: v}; }) .find(function (o) { return o.code === e.which; }) .value(); - if (!key) { return; } + if (!key) { return true; } var method = e.type + '_' + key.name; - if (!(method in self)) { return; } - self[method](e); + if (!(method in self)) { return true; } + return self[method](e); }); }, /** @@ -446,7 +446,10 @@ openerp.web.list_editable = function (instance) { keyup_ENTER: function () { return this._next(); }, - keyup_ESCAPE: function () { + keydown_ESCAPE: function (e) { + return false; + }, + keyup_ESCAPE: function (e) { return this.cancel_edition(); }, /** -- cgit v1.2.3 From 62f4d999f4f293771b819c66f05ff7b2d271b21e Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Wed, 31 Oct 2012 15:07:18 +0100 Subject: [IMP] positioning of edition fields within a scrolled dialog they still don't work every time, but should be slightly more reliable bzr revid: xmo@openerp.com-20121031140718-j3e4r9djyq34rqu7 --- addons/web/static/src/js/view_list_editable.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/view_list_editable.js b/addons/web/static/src/js/view_list_editable.js index 17ee06500e9..021e5549c18 100644 --- a/addons/web/static/src/js/view_list_editable.js +++ b/addons/web/static/src/js/view_list_editable.js @@ -252,9 +252,10 @@ openerp.web.list_editable = function (instance) { var position = $cell.position(); field.set_dimensions($cell.outerHeight(), $cell.outerWidth()); - field.$el.css({ - top: position.top, - left: position.left, + field.$el.position({ + my: 'left top', + at: 'left top', + of: $cell }); }, /** -- cgit v1.2.3 From 1622caae274ec507f9d94f7977d1fee5a9279885 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Wed, 31 Oct 2012 15:30:36 +0100 Subject: Changed the onchange handling to be async bzr revid: nicolas.vanhoren@openerp.com-20121031143036-eventomyjpwgalxb --- addons/web/static/src/js/view_form.js | 106 +++++++++++++++------------------- 1 file changed, 47 insertions(+), 59 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index c145b05a75f..c536ea0afe5 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -427,7 +427,7 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM var onchange = _.str.trim(on_change); var call = onchange.match(/^\s?(.*?)\((.*?)\)\s?$/); if (!call) { - return null; + throw new Error("Wrong on change format: " + onchange); } var method = call[1]; @@ -494,71 +494,59 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM var self = this; return this.on_change_mutex.exec(function() { try { - var response = {}, can_process_onchange = $.Deferred(); + var def; processed = processed || []; processed.push(widget.name); var on_change = widget.node.attrs.on_change; if (on_change) { var change_spec = self.parse_on_change(on_change, widget); - if (change_spec) { - var ajax = { - url: '/web/dataset/onchange', - async: false - }; - can_process_onchange = self.rpc(ajax, { - model: self.dataset.model, - method: change_spec.method, - args: [(self.datarecord.id == null ? [] : [self.datarecord.id])].concat(change_spec.args), - context_id: change_spec.context_index == undefined ? null : change_spec.context_index + 1 - }).then(function(r) { - _.extend(response, r); - }); - } else { - console.warn("Wrong on_change format", on_change); - } - } - // fail if onchange failed - if (can_process_onchange.isRejected()) { - return can_process_onchange; + def = self.rpc('/web/dataset/onchange', { + model: self.dataset.model, + method: change_spec.method, + args: [(self.datarecord.id == null ? [] : [self.datarecord.id])].concat(change_spec.args), + context_id: change_spec.context_index == undefined ? null : change_spec.context_index + 1 + }); + } else { + def = $.when({}); } - - if (widget.field['change_default']) { - var fieldname = widget.name, value_; - if (response.value && (fieldname in response.value)) { - // Use value from onchange if onchange executed - value_ = response.value[fieldname]; - } else { - // otherwise get form value for field - value_ = self.fields[fieldname].get_value(); - } - var condition = fieldname + '=' + value_; - - if (value_) { - can_process_onchange = self.rpc({ - url: '/web/dataset/call', - async: false - }, { - model: 'ir.values', - method: 'get_defaults', - args: [self.model, condition] - }).then(function (results) { - if (!results.length) { return; } - if (!response.value) { - response.value = {}; - } - for(var i=0; i Date: Wed, 31 Oct 2012 15:37:23 +0100 Subject: [FIX] dataset methods to get their request context through Dataset#get_context if they go directly through the embedded model, child classes to DataSet don't get the occasion to override the generation/fetching of the context, and e.g. relational fields thus don't work correctly (as their field context isn't forwarded). bzr revid: xmo@openerp.com-20121031143723-j4q0t8cbzttela1r --- addons/web/static/src/js/data.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/data.js b/addons/web/static/src/js/data.js index e279ade6fb3..63c90f53758 100644 --- a/addons/web/static/src/js/data.js +++ b/addons/web/static/src/js/data.js @@ -471,7 +471,7 @@ instance.web.DataSet = instance.web.CallbackEnabled.extend({ default_get: function(fields, options) { options = options || {}; return this._model.call('default_get', - [fields], {context: this._model.context(options.context)}); + [fields], {context: this.get_context(options.context)}); }, /** * Creates a new record in db @@ -480,7 +480,7 @@ instance.web.DataSet = instance.web.CallbackEnabled.extend({ * @returns {$.Deferred} */ create: function(data) { - return this._model.call('create', [data], {context: this._model.context()}); + return this._model.call('create', [data], {context: this.get_context()}); }, /** * Saves the provided data in an existing db record @@ -493,7 +493,7 @@ instance.web.DataSet = instance.web.CallbackEnabled.extend({ */ write: function (id, data, options) { options = options || {}; - return this._model.call('write', [[id], data], {context: this._model.context(options.context)}).then(this.trigger('dataset_changed', id, data, options)); + return this._model.call('write', [[id], data], {context: this.get_context(options.context)}).then(this.trigger('dataset_changed', id, data, options)); }, /** * Deletes an existing record from the database @@ -501,7 +501,7 @@ instance.web.DataSet = instance.web.CallbackEnabled.extend({ * @param {Number|String} ids identifier of the record to delete */ unlink: function(ids) { - return this._model.call('unlink', [ids], {context: this._model.context()}).then(this.trigger('dataset_changed', ids)); + return this._model.call('unlink', [ids], {context: this.get_context()}).then(this.trigger('dataset_changed', ids)); }, /** * Calls an arbitrary RPC method @@ -532,7 +532,7 @@ instance.web.DataSet = instance.web.CallbackEnabled.extend({ * @returns {$.Deferred} */ name_get: function(ids) { - return this._model.call('name_get', [ids], {context: this._model.context()}); + return this._model.call('name_get', [ids], {context: this.get_context()}); }, /** * @@ -556,7 +556,7 @@ instance.web.DataSet = instance.web.CallbackEnabled.extend({ * @param name */ name_create: function(name) { - return this._model.call('name_create', [name], {context: this._model.context()}); + return this._model.call('name_create', [name], {context: this.get_context()}); }, exec_workflow: function (id, signal) { return this._model.exec_workflow(id, signal); @@ -606,7 +606,7 @@ instance.web.DataSet = instance.web.CallbackEnabled.extend({ return instance.session.rpc('/web/dataset/resequence', { model: this.model, ids: ids, - context: this._model.context(options.context), + context: this.get_context(options.context), }).pipe(function (results) { return results; }); -- cgit v1.2.3 From 00fc09890bfe6d26c77e50c496101e3b71c1b1c3 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Wed, 31 Oct 2012 16:03:24 +0100 Subject: temporary revert of 3331 bzr revid: nicolas.vanhoren@openerp.com-20121031150324-dxlhh3wxhob8numi --- addons/web/static/src/js/view_form.js | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index c536ea0afe5..e0727b99259 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -1979,11 +1979,6 @@ instance.web.form.FieldInterface = { * Called when the translate button is clicked. */ on_translate: function() {}, - /** - This method is called by the form view before reading on_change values and before saving. It tells - the field to save its value before reading it using get_value(). Must return a deferred. - */ - commit_value: function() {}, }; /** @@ -2127,10 +2122,7 @@ instance.web.form.AbstractField = instance.web.form.FormWidget.extend(instance.w } this.$el.attr('style', style); this.$el.css('minHeight', height); - }, - commit_value: function() { - return $.when(); - }, + } }); /** -- cgit v1.2.3 From 72a447bd95b2abc026e6ffbc9807e0229aa2dae1 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Fri, 2 Nov 2012 15:13:48 +0100 Subject: [FIX] tabbing out of an m2o which opens some sort of weird dialog thing while in an editable o2m The tab blurs the current fields, focuses the next one, then the dialog thing opens and steals the focus from the *next* field (not the one which created it), which thus triggers *blur* ultimately blurring (and saving) the row being edited. Add a trigger call in some random place which seems to make things not fail. bzr revid: xmo@openerp.com-20121102141348-5au6sarq0mw2ct67 --- addons/web/static/src/js/view_form.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index e0727b99259..9dd6e34c161 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -2955,7 +2955,7 @@ instance.web.form.FieldMany2One = instance.web.form.AbstractField.extend(instanc self.uned_def = $.Deferred(); var ed_delay = 200; var ed_duration = 15000; - var anyoneLoosesFocus = function() { + var anyoneLoosesFocus = function (e) { var used = false; if (self.floating) { if (self.last_search.length > 0) { @@ -2979,7 +2979,10 @@ instance.web.form.FieldMany2One = instance.web.form.AbstractField.extend(instanc self.ed_def = $.Deferred(); self.ed_def.then(function() { self.show_error_displayer(); + ignore_blur = false; + self.trigger('focused'); }); + ignore_blur = true; setTimeout(function() { self.ed_def.resolve(); self.uned_def.reject(); -- cgit v1.2.3