From 3334b1c5b3bf0e34d8b6b5c701cc90dd788d4f87 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Wed, 1 Aug 2012 18:12:04 +0200 Subject: [PATCH 1/6] [WIP] focus bzr revid: fme@openerp.com-20120801161204-33fag4hhnhdl0g1k --- addons/web/static/src/js/view_form.js | 28 +++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 0aabfbb5480..46595df5256 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -79,6 +79,7 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM _.defaults(this.options, { "not_interactible_on_create": false, "initial_mode": "view", + "disable_autofocus": false, }); this.is_initialized = $.Deferred(); this.mutating_mutex = new $.Mutex(); @@ -269,9 +270,11 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM if (this.$pager) { this.$pager.show(); } + this.$element.show().css({ + opacity: '0', + filter: 'alpha(opacity = 0)' + }); this.$element.add(this.$buttons).removeClass('oe_form_dirty'); - this.$element.css('visibility', 'visible'); - this._super(); var shown = this.has_been_loaded; if (options.reload !== false) { @@ -291,6 +294,10 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM if (options.editable) { self.to_edit_mode(); } + self.$element.css({ + opacity: '1', + filter: 'alpha(opacity = 100)' + }); }); }, do_hide: function () { @@ -350,6 +357,7 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM self.do_push_state({id:record.id}); } self.$element.add(self.$buttons).removeClass('oe_form_dirty'); + self.autofocus(); }); }, /** @@ -649,13 +657,21 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM _.each(this.fields,function(field){ field.set({"force_readonly": false}); }); - var fields_order = self.fields_order.slice(0); - if (self.default_focus_field) { - fields_order.unshift(self.default_focus_field.name); + this.autofocus(); + } + }, + autofocus: function() { + if (this.get("actual_mode") === "edit" && !this.options.disable_autofocus) { + var fields_order = this.fields_order.slice(0); + console.log('default focus = ', this.default_focus); + if (this.default_focus_field) { + fields_order.unshift(this.default_focus_field.name); } + console.log(fields_order); for (var i = 0; i < fields_order.length; i += 1) { - var field = self.fields[fields_order[i]]; + var field = this.fields[fields_order[i]]; if (!field.get('effective_invisible') && !field.get('effective_readonly')) { + console.log('FOCUS ', field.name); field.focus(); break; } From 22cc5e45e7048c4e3f6b40587c5018bd647a600a Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Wed, 1 Aug 2012 18:20:24 +0200 Subject: [PATCH 2/6] [FIX] Do not focus unfocusable fields bzr revid: fme@openerp.com-20120801162024-kzg70c729o371ami --- addons/web/static/src/js/view_form.js | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 46595df5256..1b104e972d0 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -663,17 +663,15 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM autofocus: function() { if (this.get("actual_mode") === "edit" && !this.options.disable_autofocus) { var fields_order = this.fields_order.slice(0); - console.log('default focus = ', this.default_focus); if (this.default_focus_field) { fields_order.unshift(this.default_focus_field.name); } - console.log(fields_order); for (var i = 0; i < fields_order.length; i += 1) { var field = this.fields[fields_order[i]]; if (!field.get('effective_invisible') && !field.get('effective_readonly')) { - console.log('FOCUS ', field.name); - field.focus(); - break; + if (field.focus() !== false) { + break; + } } } } From 52de6e12a2b6fe31a1b431c756378ee8a216ee79 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Wed, 1 Aug 2012 18:49:33 +0200 Subject: [PATCH 3/6] [IMP] Improved focus. Removed delay_focus bzr revid: fme@openerp.com-20120801164933-4nwphx7rt4l4n6ys --- addons/web/static/src/js/view_form.js | 30 +++++++++++---------------- 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 1b104e972d0..9bb549b9747 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -669,8 +669,11 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM for (var i = 0; i < fields_order.length; i += 1) { var field = this.fields[fields_order[i]]; if (!field.get('effective_invisible') && !field.get('effective_readonly')) { + console.log("trying to focus ", field.name, field); if (field.focus() !== false) { + console.log("----------------- YIPEEEEEEEE"); break; + } else { } } } @@ -1976,14 +1979,7 @@ instance.web.form.AbstractField = instance.web.form.FormWidget.extend(instance.w } }, focus: function() { - }, - /** - * Utility method to focus an element, but only after a small amount of time. - */ - delay_focus: function($elem) { - setTimeout(function() { - $elem[0].focus(); - }, 50); + return false; }, /** * Utility method to get the widget options defined in the field xml description. @@ -2082,7 +2078,7 @@ instance.web.form.FieldChar = instance.web.form.AbstractField.extend(instance.we return this.get('value') === '' || this._super(); }, focus: function() { - this.$element.find('input:first')[0].focus(); + this.$element.find('input:first').focus(); } }); @@ -2302,8 +2298,9 @@ instance.web.form.FieldDatetime = instance.web.form.AbstractField.extend(instanc return this.get('value') === '' || this._super(); }, focus: function() { - if (this.datewidget && this.datewidget.$input) - this.delay_focus(this.datewidget.$input); + if (this.datewidget && this.datewidget.$input) { + this.datewidget.$input.focus(); + } } }); @@ -2358,7 +2355,7 @@ instance.web.form.FieldText = instance.web.form.AbstractField.extend(instance.we return this.get('value') === '' || this._super(); }, focus: function($element) { - this.delay_focus(this.$textarea); + this.$textarea.focus(); }, do_resize: function(max_height) { max_height = parseInt(max_height, 10); @@ -2451,7 +2448,7 @@ instance.web.form.FieldBoolean = instance.web.form.AbstractField.extend({ this.$checkbox[0].checked = value_; }, focus: function() { - this.delay_focus(this.$checkbox); + this.$checkbox.focus(); } }); @@ -2543,7 +2540,7 @@ instance.web.form.FieldSelection = instance.web.form.AbstractField.extend(instan return !! value_; }, focus: function() { - this.delay_focus(this.$element.find('select:first')); + this.$element.find('select:first').focus(); } }); @@ -2933,7 +2930,7 @@ instance.web.form.FieldMany2One = instance.web.form.AbstractField.extend(instanc return ! this.get("value"); }, focus: function () { - this.delay_focus(this.$input); + this.$input.focus(); } }); @@ -4691,9 +4688,6 @@ instance.web.form.FieldStatus = instance.web.form.AbstractField.extend({ elem.css("color", color); } }, - focus: function() { - return false; - }, }); /** From d880351b6ae82c1ae66ba5c402d193c74ef11926 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Wed, 1 Aug 2012 18:58:41 +0200 Subject: [PATCH 4/6] [REM] Removed console.logs bzr revid: fme@openerp.com-20120801165841-nj5jig9txn9m55nh --- addons/web/static/src/js/view_form.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 9bb549b9747..67f1b5c5629 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -669,9 +669,7 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM for (var i = 0; i < fields_order.length; i += 1) { var field = this.fields[fields_order[i]]; if (!field.get('effective_invisible') && !field.get('effective_readonly')) { - console.log("trying to focus ", field.name, field); if (field.focus() !== false) { - console.log("----------------- YIPEEEEEEEE"); break; } else { } From 1f1770ffb782331b20b05b390348b3240faef393 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 2 Aug 2012 11:39:17 +0200 Subject: [PATCH 5/6] [IMP] Disable autofocus on editable lists bzr revid: fme@openerp.com-20120802093917-3wc9qgek6e2mba5p --- addons/web/static/src/js/view_list_editable.js | 1 + 1 file changed, 1 insertion(+) diff --git a/addons/web/static/src/js/view_list_editable.js b/addons/web/static/src/js/view_list_editable.js index 6c38495d0dc..67909f9c749 100644 --- a/addons/web/static/src/js/view_list_editable.js +++ b/addons/web/static/src/js/view_list_editable.js @@ -602,6 +602,7 @@ openerp.web.list_editable = function (instance) { this.form = new (this.options.formView)( this, this.delegate.dataset, false, { initial_mode: 'edit', + disable_autofocus: true, $buttons: $(), $pager: $() }); From 152cc49c3fcefc6e5678cacf85ca5d2455a11f0a Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 2 Aug 2012 11:53:26 +0200 Subject: [PATCH 6/6] [FIX] Autofocus on create mode bzr revid: fme@openerp.com-20120802095326-o6gc8jyvd44u9xg2 --- addons/web/static/src/js/view_form.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 67f1b5c5629..1132d096d03 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -661,7 +661,7 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM } }, autofocus: function() { - if (this.get("actual_mode") === "edit" && !this.options.disable_autofocus) { + if (this.get("actual_mode") !== "view" && !this.options.disable_autofocus) { var fields_order = this.fields_order.slice(0); if (this.default_focus_field) { fields_order.unshift(this.default_focus_field.name);