diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/column/templates/column/js/column.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/column/templates/column/js/column.js index 04e07d417..8058d501d 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/column/templates/column/js/column.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/column/templates/column/js/column.js @@ -248,17 +248,27 @@ function($, _, S, pgAdmin, pgBrowser, Backform, alertify) { this.$el.removeClass('editor'); // Once user have selected a value // we can shift to next cell if it is editable - var el_length_cell = this.$el.next(); + var next_cell, length_cell = this.$el.next(), + not_null_cell = this.$el.next().next().next(); + // Add delay so that Select2 cell tab event is captured // first before triggerring backgrid:edited event. setTimeout(function() { - if(el_length_cell && el_length_cell.hasClass('editable') && e) { + // First check Length column if it is disable then goto + // Not Null column + if(length_cell && length_cell.hasClass('editable') && e) { + next_cell = length_cell; + } else if(not_null_cell && not_null_cell.hasClass('editable') && e) { + next_cell = not_null_cell; + } + + if(next_cell) { e.preventDefault(); e.stopPropagation(); var command = new Backgrid.Command({key: "Tab", keyCode: 9, which: 9}); self.model.trigger("backgrid:edited", self.model, self.column, command); - el_length_cell.focus(); + next_cell.focus(); } }, 20); } diff --git a/web/pgadmin/static/js/backgrid/backgrid.pgadmin.js b/web/pgadmin/static/js/backgrid/backgrid.pgadmin.js index 5fee3b93d..1d2a3c40d 100644 --- a/web/pgadmin/static/js/backgrid/backgrid.pgadmin.js +++ b/web/pgadmin/static/js/backgrid/backgrid.pgadmin.js @@ -352,6 +352,7 @@ enterEditMode: function() { this.$el.addClass('editor'); + $(this.$el.find('input')).focus(); }, exitEditMode: function() { @@ -372,7 +373,7 @@ }, render: function () { - var col = _.defaults(this.column.toJSON(), this.defaults), + var self = this, col = _.defaults(this.column.toJSON(), this.defaults), attributes = this.model.toJSON(), attrArr = col.name.split('.'), name = attrArr.shift(), @@ -401,6 +402,32 @@ this.defaults.options )); + // Listen for Tab key + this.$el.on('keydown', function(e) { + var gotoCell; + if(e.keyCode == 9) { + // go to Next Cell & if Shift is also pressed go to Previous Cell + gotoCell = e.shiftKey ? self.$el.prev() : self.$el.next(); + } + + if(gotoCell) { + setTimeout(function() { + if(gotoCell.hasClass('editable')) { + e.preventDefault(); + e.stopPropagation(); + var command = new Backgrid.Command({ + key: "Tab", keyCode: 9, + which: 9, shiftKey: e.shiftKey + }); + self.model.trigger("backgrid:edited", self.model, + self.column, command); + gotoCell.focus(); + } + }, 20); + } + + }); + this.delegateEvents(); return this;