summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXavier Morel <xmo@openerp.com>2012-07-24 17:01:12 +0200
committerXavier Morel <xmo@openerp.com>2012-07-24 17:01:12 +0200
commitdf05d2cd20f053a69a4b9ffc95bcb4e61cfe5ea5 (patch)
treeb94c55d1c377f187ce31913c61ea4c4d75da1d1a
parentb98723a1fed138068b1b1db936ab0f0ca704bb93 (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
-rw-r--r--addons/web/static/src/js/view_list_editable.js46
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()