From 055edd779038e2bbbc71718c3cf33254eb58e293 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 14 Jun 2012 14:37:31 +0200 Subject: [PATCH] [ADD] automatic save of o2m rows being created/edited when clicking/focusing outside bzr revid: xmo@openerp.com-20120614123731-x2owyp4nc1yi1ocj --- addons/web/static/src/js/view_form.js | 38 +++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 6257633b8d2..d1dd352bae3 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -2555,6 +2555,11 @@ openerp.web.form.One2ManyDataSet = openerp.web.BufferedDataSet.extend({ openerp.web.form.One2ManyListView = openerp.web.ListView.extend({ _template: 'One2Many.listview', + init: function (parent, dataset, view_id, options) { + this._super(parent, dataset, view_id, _.extend(options || {}, { + ListType: openerp.web.form.One2ManyList + })); + }, is_valid: function () { var form; // A list not being edited is always valid @@ -2657,6 +2662,39 @@ openerp.web.form.One2ManyListView = openerp.web.ListView.extend({ return this._super(name, id, _.bind(def.resolve, def)); } }); +openerp.web.form.One2ManyList = openerp.web.ListView.List.extend({ + render_row_as_form: function () { + var self = this; + return this._super.apply(this, arguments).then(function () { + self.setup_save_on_row_blur(); + }); + }, + bind_blur_focus: function (new_row, onblur, onfocus) { + if (new_row.addEventListener) { + new_row.addEventListener('blur', onblur, true); + new_row.addEventListener('focus', onfocus, true); + } else { + new_row.onfocusout = onblur; + new_row.onfocusin = onfocus; + } + }, + setup_save_on_row_blur: function () { + var self = this; + var form = this.edition_form; + this.bind_blur_focus(this.edition_form.$element[0], function () { + self._save_row_timeout = setTimeout(function () { + if (form.widget_is_stopped) { + // Saved or cancelled already, maybe? + return; + } + self.view.ensure_saved(); + }, 0); + }, function () { + clearTimeout(self._save_row_timeout); + delete self._save_row_timeout; + }); + } +}); openerp.web.form.One2ManyFormView = openerp.web.FormView.extend({ form_template: 'One2Many.formview',