diff --git a/web/pgadmin/static/js/backgrid.pgadmin.js b/web/pgadmin/static/js/backgrid.pgadmin.js
index 07d681aa8b..0ebcfaeb9f 100644
--- a/web/pgadmin/static/js/backgrid.pgadmin.js
+++ b/web/pgadmin/static/js/backgrid.pgadmin.js
@@ -641,7 +641,7 @@ define([
enterEditMode: function() {
this.$el.addClass('editor');
- $(this.$el.find('input[type=checkbox]')).trigger('focus');
+ $(this.$el.find('.toggle.btn')).trigger('focus');
},
exitEditMode: function() {
@@ -650,18 +650,10 @@ define([
events: {
'change input': 'onChange',
- 'keyup': 'toggleSwitch',
'blur input': 'exitEditMode',
'keydown': 'onKeyDown',
},
- toggleSwitch: function(e) {
- if (e.keyCode == 32) {
- this.$el.find('input[type=checkbox]').bootstrapToggle('toggle');
- e.preventDefault();
- }
- },
-
onKeyDown: function(e) {
let preferences = pgBrowser.get_preferences_for_module('browser');
if(keyboardShortcuts.validateShortcutKeys(preferences.add_grid_row,e)) {
@@ -677,8 +669,20 @@ define([
this.enterEditMode();
// on bootstrap change we also need to change model's value
model.set(column.get('name'), val);
+ this.setSrValue();
+ },
+ setSrValue: function() {
+ let {onText, offText} = _.defaults({}, this.column.get('options'), this.defaults.options);
+ if(this.$el.find('.toggle.btn').hasClass('off')) {
+ this.$el.find('.sr-value').text(`
+ ${offText}, ${gettext('Toggle button')}
+ `);
+ } else {
+ this.$el.find('.sr-value').text(`
+ ${onText}, ${gettext('Toggle button')}
+ `);
+ }
},
-
render: function() {
var self = this,
col = _.defaults(this.column.toJSON(), this.defaults),
@@ -688,17 +692,19 @@ define([
model.get(column.get('name')), model
),
editable = Backgrid.callByNeed(col.editable, column, model),
- options = _.defaults({}, col.options, this.defaults.options);
+ options = _.defaults({}, col.options, this.defaults.options),
+ cId = _.uniqueId('pgC_');
this.undelegateEvents();
this.$el.empty();
-
+ this.$el.append('');
this.$el.append(
$('', {
- tabIndex: 0,
+ tabIndex: -1,
type: 'checkbox',
- 'aria-label': gettext('data toggle'),
+ 'aria-hidden': 'true',
+ 'aria-label': column.get('name'),
}).prop('checked', rawValue).prop('disabled', !editable).attr('data-toggle', 'toggle')
.attr('data-size', options.size).attr('data-on', options.onText).attr('data-off', options.offText)
.attr('data-width', options.width).attr('data-height', options.height)
@@ -709,6 +715,20 @@ define([
// Override BooleanCell checkbox with Bootstraptoggle
this.$input.bootstrapToggle();
+ this.$el.find('.toggle.btn')
+ .attr('tabindex', !editable ? '-1' : '0')
+ .attr('id', cId)
+ .on('keydown', function(e) {
+ if (e.keyCode == 32) {
+ self.$el.find('input[type=checkbox]').bootstrapToggle('toggle');
+ e.preventDefault();
+ e.stopPropagation();
+ self.setSrValue();
+ }
+ });
+
+ this.$el.find('.toggle.btn .toggle-group .btn').attr('aria-hidden', true);
+ this.setSrValue();
// Listen for Tab key
this.$el.on('keydown', function(e) {
var gotoCell;