diff options
| author | Xavier Morel <xmo@openerp.com> | 2012-07-24 17:01:12 +0200 |
|---|---|---|
| committer | Xavier Morel <xmo@openerp.com> | 2012-07-24 17:01:12 +0200 |
| commit | df05d2cd20f053a69a4b9ffc95bcb4e61cfe5ea5 (patch) | |
| tree | b94c55d1c377f187ce31913c61ea4c4d75da1d1a /addons | |
| parent | b98723a1fed138068b1b1db936ab0f0ca704bb93 (diff) | |
[ADD] focus previous/next field when using the left/right arrow while at the start/end of a field
bzr revid: xmo@openerp.com-20120724150112-r8liahdyaxmx49o8
Diffstat (limited to 'addons')
| -rw-r--r-- | addons/web/static/src/js/view_list_editable.js | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/addons/web/static/src/js/view_list_editable.js b/addons/web/static/src/js/view_list_editable.js index 707e0d196f1..f2ce08f12ca 100644 --- a/addons/web/static/src/js/view_list_editable.js +++ b/addons/web/static/src/js/view_list_editable.js @@ -473,6 +473,52 @@ openerp.web.list_editable = function (instance) { return index === el.value.length; }); }, + + keydown_LEFT: function (e) { + // If the cursor is at the beginning of the field + var source_field = $(e.target).closest('[data-fieldname]') + .attr('data-fieldname'); + var index = this._text_cursor(e.target); + if (index !== 0) { return $.when(); } + + var fields_order = this.editor.form.fields_order; + var field_index = _(fields_order).indexOf(source_field); + + // Look for the closest visible form field to the left + var fields = this.editor.form.fields; + var field; + do { + if (--field_index < 0) { return $.when(); } + + field = fields[fields_order[field_index]]; + } while (!field.$element.is(':visible')); + + // and focus it + field.focus(); + return $.when(); + }, + keydown_RIGHT: function (e) { + // same as above, but with cursor at the end of the field and + // looking for new fields at the right + var source_field = $(e.target).closest('[data-fieldname]') + .attr('data-fieldname'); + var index = this._text_cursor(e.target); + if (index !== e.target.value.length) { return $.when(); } + + var fields_order = this.editor.form.fields_order; + var field_index = _(fields_order).indexOf(source_field); + + var fields = this.editor.form.fields; + var field; + do { + if (++field_index >= fields_order.length) { return $.when(); } + + field = fields[fields_order[field_index]]; + } while (!field.$element.is(':visible')); + + field.focus(); + return $.when(); + }, keydown_TAB: function (e) { var form = this.editor.form; var last_field = _(form.fields_order).chain() |
