public inbox for [email protected]
help / color / mirror / Atom feedFrom: Aditya Toshniwal <[email protected]>
To: pgadmin-hackers <[email protected]>
Subject: [pgAdmin][RM4993] [Accessibility] Read-only controls and disabled controls needs to be separately identified
Date: Wed, 22 Jan 2020 17:45:53 +0530
Message-ID: <CAM9w-_n8hzWzjP33g-KFy-BpBk-t6_u26U7M8atkHD8z4+3nyw@mail.gmail.com> (raw)
Hi Hackers,
Attached is the patch to allow input controls to be set as readonly instead
of disabled.
I've also changed the code for the nodes to make sure properties tab have
readonly fields wherever applicable. This will allow tab navigation in
properties tab and also allow screen readers to read it.
Please note that, I've not visited each and every node create/edit dialog
to identify what should be readonly or what should be disabled as it
depends on business logic. The patch is mainly for the properties tab.
Kindly review.
--
Thanks and Regards,
Aditya Toshniwal
pgAdmin Hacker | Sr. Software Engineer | EnterpriseDB India | Pune
"Don't Complain about Heat, Plant a TREE"
Attachments:
[application/octet-stream] RM4993.patch (81.2K, 3-RM4993.patch)
download | inline diff:
diff --git a/web/pgadmin/browser/server_groups/servers/databases/casts/static/js/cast.js b/web/pgadmin/browser/server_groups/servers/databases/casts/static/js/cast.js
index bc266260a..598b256a6 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/casts/static/js/cast.js
+++ b/web/pgadmin/browser/server_groups/servers/databases/casts/static/js/cast.js
@@ -82,10 +82,10 @@ define('pgadmin.node.cast', [
// Define the schema for cast
schema: [{
id: 'name', label: gettext('Name'), cell: 'string',
- editable: false, type: 'text', disabled: true, cellHeaderClasses: 'width_percent_50',
+ editable: false, type: 'text', readonly: true, cellHeaderClasses: 'width_percent_50',
},{
id: 'oid', label: gettext('OID'), cell: 'string',
- editable: false, type: 'text', disabled: true, mode: ['properties'],
+ editable: false, type: 'text', mode: ['properties'],
},{
id: 'srctyp', label: gettext('Source type'), url: 'get_type',
type: 'text', group: gettext('Definition'), disabled: function(m) {
@@ -132,7 +132,7 @@ define('pgadmin.node.cast', [
*/
{
id: 'srctyp', label: gettext('Source type'), type: 'text',
- group: gettext('Definition'), disabled: true, mode:['properties','edit'],
+ group: gettext('Definition'), readonly: true, mode:['properties','edit'],
},{
id: 'trgtyp', label: gettext('Target type'), url: 'get_type',
type: 'text', group: gettext('Definition'), disabled: function(m) {
@@ -177,7 +177,7 @@ define('pgadmin.node.cast', [
*/
{
id: 'trgtyp', label: gettext('Target type'), type: 'text',
- group: gettext('Definition'), disabled: true, mode:['properties','edit'],
+ group: gettext('Definition'), readonly: true, mode:['properties','edit'],
},
/*
@@ -231,7 +231,7 @@ define('pgadmin.node.cast', [
*/
{
id: 'proname', label: gettext('Function'), type: 'text',
- group: gettext('Definition'), disabled: true, mode:['properties','edit'],
+ group: gettext('Definition'), readonly: true, mode:['properties','edit'],
},{
id: 'castcontext', label: gettext('Context'),
options:{'onText':'IMPLICIT','offText':'EXPLICIT', width: '90'},
@@ -248,7 +248,7 @@ define('pgadmin.node.cast', [
* edit mode
*/
{
- id: 'castcontext', label: gettext('Context'), disabled: true,
+ id: 'castcontext', label: gettext('Context'), readonly: true,
options:[{
label: 'IMPLICIT', value: 'IMPLICIT',
},{
@@ -259,7 +259,7 @@ define('pgadmin.node.cast', [
mode:['properties', 'edit'],
},{
id: 'syscast', label: gettext('System cast?'),
- cell: 'switch', type: 'switch', mode: ['properties'], disabled: true,
+ cell: 'switch', type: 'switch', mode: ['properties'],
},{
id: 'description', label: gettext('Comment'),
type: 'multiline', cellHeaderClasses: 'width_percent_50',
diff --git a/web/pgadmin/browser/server_groups/servers/databases/extensions/static/js/extension.js b/web/pgadmin/browser/server_groups/servers/databases/extensions/static/js/extension.js
index 3c6adddad..5df482cbd 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/extensions/static/js/extension.js
+++ b/web/pgadmin/browser/server_groups/servers/databases/extensions/static/js/extension.js
@@ -182,7 +182,7 @@ define('pgadmin.node.extension', [
},
{
id: 'eid', label: gettext('OID'), cell: 'string',
- type: 'text', disabled: true, mode: ['properties'],
+ type: 'text', mode: ['properties'],
},
{
id: 'owner', label: gettext('Owner'), control: 'node-list-by-name',
@@ -231,7 +231,7 @@ define('pgadmin.node.extension', [
},
{
id: 'comment', label: gettext('Comment'), cell: 'string',
- type: 'multiline', disabled: true,
+ type: 'multiline', readonly: true,
},
],
validate: function() {
diff --git a/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/static/js/foreign_server.js b/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/static/js/foreign_server.js
index 5ac9f0b34..8b6427850 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/static/js/foreign_server.js
+++ b/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/static/js/foreign_server.js
@@ -135,7 +135,7 @@ define('pgadmin.node.foreign_server', [
},
},{
id: 'fsrvid', label: gettext('OID'), cell: 'string',
- type: 'text', disabled: true, mode: ['properties'],
+ type: 'text', mode: ['properties'],
},{
id: 'fsrvowner', label: gettext('Owner'), type: 'text',
control: Backform.NodeListByNameControl, node: 'role',
@@ -162,7 +162,7 @@ define('pgadmin.node.foreign_server', [
mode: ['edit', 'create'], canAdd: true, canDelete: true, uniqueCol : ['grantee'],
},{
id: 'acl', label: gettext('Privileges'), type: 'text',
- group: gettext('Security'), mode: ['properties'], disabled: true,
+ group: gettext('Security'), mode: ['properties'],
},
],
diff --git a/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/user_mappings/static/js/user_mapping.js b/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/user_mappings/static/js/user_mapping.js
index b7df1158c..39e0726b2 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/user_mappings/static/js/user_mapping.js
+++ b/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/user_mappings/static/js/user_mapping.js
@@ -146,7 +146,7 @@ define('pgadmin.node.user_mapping', [
},
},{
id: 'um_oid', label: gettext('OID'), cell: 'string',
- type: 'text', disabled: true, mode: ['properties'],
+ type: 'text', mode: ['properties'],
},{
id: 'umoptions', label: gettext('Options'), type: 'collection', group: gettext('Options'),
model: OptionsModel, control: 'unique-col-collection', mode: ['create', 'edit'],
diff --git a/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/static/js/foreign_data_wrapper.js b/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/static/js/foreign_data_wrapper.js
index 6fd09f0bd..5040e6191 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/static/js/foreign_data_wrapper.js
+++ b/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/static/js/foreign_data_wrapper.js
@@ -138,7 +138,7 @@ define('pgadmin.node.foreign_data_wrapper', [
},
},{
id: 'fdwoid', label: gettext('OID'), cell: 'string',
- type: 'text', disabled: true, mode: ['properties'],
+ type: 'text', mode: ['properties'],
},{
id: 'fdwowner', label: gettext('Owner'), type: 'text',
control: Backform.NodeListByNameControl, node: 'role',
@@ -168,7 +168,7 @@ define('pgadmin.node.foreign_data_wrapper', [
}), control: 'unique-col-collection',
},{
id: 'acl', label: gettext('Privileges'), type: 'text',
- group: gettext('Security'), mode: ['properties'], disabled: true,
+ group: gettext('Security'), mode: ['properties'],
}],
/* validate function is used to validate the input given by
* the user. In case of error, message will be displayed on
diff --git a/web/pgadmin/browser/server_groups/servers/databases/languages/static/js/language.js b/web/pgadmin/browser/server_groups/servers/databases/languages/static/js/language.js
index 6ca60391d..749c03bfb 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/languages/static/js/language.js
+++ b/web/pgadmin/browser/server_groups/servers/databases/languages/static/js/language.js
@@ -122,14 +122,14 @@ define('pgadmin.node.language', [
},
},{
id: 'oid', label: gettext('OID'), cell: 'string', mode: ['properties'],
- type: 'text', disabled: true,
+ type: 'text',
},{
id: 'lanowner', label: gettext('Owner'), type: 'text',
control: Backform.NodeListByNameControl, node: 'role',
mode: ['edit', 'properties', 'create'], select2: { allowClear: false },
},{
id: 'acl', label: gettext('Privileges'), type: 'text',
- group: gettext('Security'), mode: ['properties'], disabled: true,
+ group: gettext('Security'), mode: ['properties'],
},{
id: 'description', label: gettext('Comment'), cell: 'string',
type: 'multiline',
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/catalog_objects/columns/static/js/catalog_object_column.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/catalog_objects/columns/static/js/catalog_object_column.js
index a9df3a7eb..9bf003fa6 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/catalog_objects/columns/static/js/catalog_object_column.js
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/catalog_objects/columns/static/js/catalog_object_column.js
@@ -54,25 +54,25 @@ define('pgadmin.node.catalog_object_column', [
},
schema: [{
id: 'attname', label: gettext('Column'), cell: 'string',
- type: 'text', disabled: true,
+ type: 'text', readonly: true,
},{
id: 'attowner', label: gettext('Owner'), cell: 'string',
- type: 'text', disabled: true,
+ type: 'text', readonly: true,
},{
id: 'attnum', label: gettext('Position'), cell: 'string',
- type: 'text', disabled: true,
+ type: 'text', readonly: true,
},{
id: 'cltype', label: gettext('Data type'), cell: 'string',
- group: gettext('Definition'), type: 'text', disabled: true,
+ group: gettext('Definition'), type: 'text', readonly: true,
},{
id: 'collspcname', label: gettext('Collation'), cell: 'string',
- group: gettext('Definition'), type: 'text', disabled: true,
+ group: gettext('Definition'), type: 'text', readonly: true,
},{
id: 'attacl', label: gettext('Privileges'), cell: 'string',
- group: gettext('Security'), type: 'text', disabled: true,
+ group: gettext('Security'), type: 'text', readonly: true,
},{
id: 'description', label: gettext('Comment'), cell: 'string',
- type: 'multiline', disabled: true,
+ type: 'multiline', readonly: true,
}],
}),
});
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/catalog_objects/static/js/catalog_object.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/catalog_objects/static/js/catalog_object.js
index 225934541..dcf37e801 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/catalog_objects/static/js/catalog_object.js
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/catalog_objects/static/js/catalog_object.js
@@ -49,16 +49,16 @@ define('pgadmin.node.catalog_object', [
},
schema: [{
id: 'name', label: gettext('Name'), cell: 'string',
- type: 'text', disabled: true,
+ type: 'text', readonly: true,
},{
id: 'oid', label: gettext('OID'), cell: 'string',
- type: 'text', disabled: true,
+ type: 'text',
},{
id: 'owner', label: gettext('Owner'), cell: 'string',
- type: 'text', disabled: true,
+ type: 'text', readonly: true,
},{
id: 'description', label: gettext('Comment'), cell: 'string',
- type: 'multiline' , disabled: true,
+ type: 'multiline' , readonly: true,
},
],
}),
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_configurations/static/js/fts_configuration.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_configurations/static/js/fts_configuration.js
index 3c37cd592..b49ce63cf 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_configurations/static/js/fts_configuration.js
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_configurations/static/js/fts_configuration.js
@@ -492,7 +492,7 @@ define('pgadmin.node.fts_configuration', [
type: 'text', cellHeaderClasses: 'width_percent_50',
},{
id: 'oid', label: gettext('OID'), cell: 'string',
- editable: false, type: 'text', disabled: true, mode:['properties'],
+ editable: false, type: 'text', mode:['properties'],
},{
id: 'owner', label: gettext('Owner'), cell: 'string',
type: 'text', mode: ['properties', 'edit','create'], node: 'role',
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_dictionaries/static/js/fts_dictionary.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_dictionaries/static/js/fts_dictionary.js
index 5f807cc1d..71a63a040 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_dictionaries/static/js/fts_dictionary.js
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_dictionaries/static/js/fts_dictionary.js
@@ -137,7 +137,7 @@ define('pgadmin.node.fts_dictionary', [
type: 'text', cellHeaderClasses: 'width_percent_50',
},{
id: 'oid', label: gettext('OID'), cell: 'string',
- editable: false, type: 'text', disabled: true, mode:['properties'],
+ editable: false, type: 'text', mode:['properties'],
},{
id: 'owner', label: gettext('Owner'), cell: 'string',
type: 'text', mode: ['properties', 'edit','create'], node: 'role',
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parsers/static/js/fts_parser.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parsers/static/js/fts_parser.js
index 6f94e70d4..972974671 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parsers/static/js/fts_parser.js
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parsers/static/js/fts_parser.js
@@ -95,7 +95,7 @@ define('pgadmin.node.fts_parser', [
type: 'text', cellHeaderClasses: 'width_percent_50',
},{
id: 'oid', label: gettext('OID'), cell: 'string',
- editable: false, type: 'text', disabled: true, mode:['properties'],
+ editable: false, type: 'text', mode:['properties'],
},{
id: 'schema', label: gettext('Schema'), cell: 'string',
type: 'text', mode: ['create','edit'], node: 'schema',
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/static/js/fts_template.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/static/js/fts_template.js
index c3c225e45..7435423cd 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/static/js/fts_template.js
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/static/js/fts_template.js
@@ -90,7 +90,7 @@ define('pgadmin.node.fts_template', [
type: 'text', cellHeaderClasses: 'width_percent_50',
},{
id: 'oid', label: gettext('OID'), cell: 'string',
- editable: false, type: 'text', disabled: true, mode:['properties'],
+ editable: false, type: 'text', mode:['properties'],
},{
id: 'schema', label: gettext('Schema'), cell: 'string',
type: 'text', mode: ['create','edit'], node: 'schema',
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/static/js/function.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/static/js/function.js
index e828adc79..88c321e77 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/static/js/function.js
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/static/js/function.js
@@ -223,20 +223,18 @@ define('pgadmin.node.function', [
},{
id: 'proargs', label: gettext('Arguments'), cell: 'string',
type: 'text', group: gettext('Definition'), mode: ['properties'],
- disabled: 'isDisabled',
},{
id: 'proargtypenames', label: gettext('Signature arguments'), cell:
'string', type: 'text', group: gettext('Definition'), mode: ['properties'],
- disabled: 'isDisabled',
},{
id: 'prorettypename', label: gettext('Return type'), cell: 'string',
control: 'node-ajax-options', type: 'text', group: gettext('Definition'),
- url: 'get_types', disabled: 'isDisabled', first_empty: true,
+ url: 'get_types', readonly: 'isReadonly', first_empty: true,
mode: ['create'], visible: 'isVisible',
},{
id: 'prorettypename', label: gettext('Return type'), cell: 'string',
type: 'text', group: gettext('Definition'),
- mode: ['properties', 'edit'], disabled: 'isDisabled', visible: 'isVisible',
+ mode: ['properties', 'edit'], readonly: 'isReadonly', visible: 'isVisible',
}, {
id: 'lanname', label: gettext('Language'), cell: 'string',
control: 'node-ajax-options', type: 'text', group: gettext('Definition'),
@@ -305,10 +303,10 @@ define('pgadmin.node.function', [
select2: {allowClear: false},
},{
id: 'procost', label: gettext('Estimated cost'), group: gettext('Options'),
- cell:'string', type: 'text', disabled: 'isDisabled', deps: ['lanname'],
+ cell:'string', type: 'text', readonly: 'isReadonly', deps: ['lanname'],
},{
id: 'prorows', label: gettext('Estimated rows'), type: 'text',
- deps: ['proretset'], visible: 'isVisible', disabled: 'isDisabled',
+ deps: ['proretset'], visible: 'isVisible', readonly: 'isReadonly',
group: gettext('Options'),
},{
id: 'proleakproof', label: gettext('Leak proof?'),
@@ -432,27 +430,36 @@ define('pgadmin.node.function', [
if (this.name == 'sysproc') { return false; }
return true;
},
- isDisabled: function(m) {
+ isDisabled: function() {
+ if(this.node_info && 'catalog' in this.node_info) {
+ return true;
+ }
+ switch(this.name){
+ case 'prosupportfunc':
+ var item = pgAdmin.Browser.tree.selected();
+ if(pgAdmin.Browser.Nodes['function'].getTreeNodeHierarchy(item).server.user.is_superuser)
+ return false;
+ return true;
+ default:
+ return false;
+ }
+ },
+ isReadonly: function(m) {
if(this.node_info && 'catalog' in this.node_info) {
return true;
}
switch(this.name){
case 'proargs':
case 'proargtypenames':
- case 'prorettypename':
case 'proretset':
case 'proiswindow':
+ case 'prorettypename':
return !m.isNew();
case 'prorows':
if(m.get('proretset') == true) {
return false;
}
return true;
- case 'prosupportfunc':
- var item = pgAdmin.Browser.tree.selected();
- if(pgAdmin.Browser.Nodes['function'].getTreeNodeHierarchy(item).server.user.is_superuser)
- return false;
- return true;
default:
return false;
}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/static/js/edbfunc.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/static/js/edbfunc.js
index 7af9a12e2..1ff80f4ec 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/static/js/edbfunc.js
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/static/js/edbfunc.js
@@ -65,35 +65,31 @@ define('pgadmin.node.edbfunc', [
schema: [{
id: 'name', label: gettext('Name'), cell: 'string',
type: 'text', mode: ['properties'],
- disabled: true,
},{
id: 'oid', label: gettext('OID'), cell: 'string',
type: 'text' , mode: ['properties'],
},{
id: 'funcowner', label: gettext('Owner'), cell: 'string',
- type: 'text', disabled: true,
+ type: 'text', readonly: true,
},{
id: 'pronargs', label: gettext('Argument count'), cell: 'string',
type: 'text', group: gettext('Definition'), mode: ['properties'],
},{
id: 'proargs', label: gettext('Arguments'), cell: 'string',
type: 'text', group: gettext('Definition'), mode: ['properties'],
- disabled: true,
},{
id: 'proargtypenames', label: gettext('Signature arguments'), cell:
'string', type: 'text', group: gettext('Definition'), mode: ['properties'],
- disabled: true,
},{
id: 'prorettypename', label: gettext('Return type'), cell: 'string',
- type: 'text', group: gettext('Definition'), disabled: true,
+ type: 'text', group: gettext('Definition'),
mode: ['properties'], visible: 'isVisible',
},{
id: 'visibility', label: gettext('Visibility'), cell: 'string',
type: 'text', mode: ['properties'],
- disabled: true,
},{
id: 'lanname', label: gettext('Language'), cell: 'string',
- type: 'text', group: gettext('Definition'), disabled: true,
+ type: 'text', group: gettext('Definition'), readonly: true,
},{
id: 'prosrc', label: gettext('Code'), cell: 'string',
type: 'text', mode: ['properties'],
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbvars/static/js/edbvar.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbvars/static/js/edbvar.js
index 8e3fd02a1..90e2baeba 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbvars/static/js/edbvar.js
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbvars/static/js/edbvar.js
@@ -57,17 +57,15 @@ define('pgadmin.node.edbvar', [
schema: [{
id: 'name', label: gettext('Name'), cell: 'string',
type: 'text', mode: ['properties'],
- disabled: true,
},{
id: 'oid', label: gettext('OID'), cell: 'string',
type: 'text' , mode: ['properties'],
},{
id: 'datatype', label: gettext('Data type'), cell: 'string',
- type: 'text', disabled: true,
+ type: 'text', readonly: true,
},{
id: 'visibility', label: gettext('Visibility'), cell: 'string',
type: 'text', mode: ['properties'],
- disabled: true,
}],
validate: function()
{
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/static/js/package.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/static/js/package.js
index 5ead6f2be..5567b52a7 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/static/js/package.js
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/static/js/package.js
@@ -122,7 +122,7 @@ define('pgadmin.node.package', [
},{
id: 'owner', label: gettext('Owner'), cell: 'string',
type: 'text', mode: ['properties', 'create', 'edit'],
- disabled: true, editable: false, visible: function(m) {
+ readonly: true, editable: false, visible: function(m) {
return !m.isNew();
},
},{
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/static/js/sequence.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/static/js/sequence.js
index bcc8c088a..8dfa3a939 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/static/js/sequence.js
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/static/js/sequence.js
@@ -158,7 +158,7 @@ define('pgadmin.node.sequence', [
mode: ['properties', 'create', 'edit'], group: gettext('Definition'),
}, pgBrowser.SecurityGroupSchema,{
id: 'acl', label: gettext('Privileges'), type: 'text',
- group: gettext('Security'), mode: ['properties'], disabled: true,
+ group: gettext('Security'), mode: ['properties'],
},{
id: 'relacl', label: gettext('Privileges'), group: 'security',
model: pgBrowser.Node.PrivilegeRoleModel.extend({
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/static/js/catalog.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/static/js/catalog.js
index 1052b5de6..4f6d544d2 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/static/js/catalog.js
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/static/js/catalog.js
@@ -60,16 +60,16 @@ define('pgadmin.node.catalog', [
},
schema: [{
id: 'name', label: gettext('Name'), cell: 'string',
- type: 'text', disabled: true,
+ type: 'text', readonly: true,
},{
id: 'oid', label: gettext('OID'), cell: 'string', mode: ['properties'],
- type: 'text', disabled: true,
+ type: 'text',
},{
id: 'namespaceowner', label: gettext('Owner'), cell: 'string',
- type: 'text', disabled: true,
+ type: 'text', readonly: true,
},{
id: 'acl', label: gettext('Privileges'), type: 'text',
- group: gettext('Security'), mode: ['properties'], disabled: true,
+ group: gettext('Security'), mode: ['properties'],
},{
id: 'description', label: gettext('Comment'), cell: 'string',
type: 'multiline',
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/static/js/schema.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/static/js/schema.js
index 5b98d51b0..8685bb5cd 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/static/js/schema.js
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/static/js/schema.js
@@ -391,32 +391,32 @@ define('pgadmin.node.schema', [
type: 'text',
},{
id: 'oid', label: gettext('OID'), cell: 'string',
- type: 'text', disabled: true, mode: ['properties'],
+ type: 'text', mode: ['properties'],
},{
id: 'namespaceowner', label: gettext('Owner'), cell: 'string',
type: 'text', control: 'node-list-by-name', node: 'role',
select2: { allowClear: false },
},{
id: 'is_sys_object', label: gettext('System schema?'),
- cell: 'switch', type: 'switch', mode: ['properties'], disabled: true,
+ cell: 'switch', type: 'switch', mode: ['properties'],
},{
id: 'description', label: gettext('Comment'), cell: 'string',
type: 'multiline',
},{
id: 'acl', label: gettext('Privileges'), type: 'text',
- group: gettext('Security'), mode: ['properties'], disabled: true,
+ group: gettext('Security'), mode: ['properties'],
},{
id: 'tblacl', label: gettext('Default TABLE privileges'), type: 'text',
- group: gettext('Security'), mode: ['properties'], disabled: true,
+ group: gettext('Security'), mode: ['properties'],
},{
id: 'seqacl', label: gettext('Default SEQUENCE privileges'), type: 'text',
- group: gettext('Security'), mode: ['properties'], disabled: true,
+ group: gettext('Security'), mode: ['properties'],
},{
id: 'funcacl', label: gettext('Default FUNCTION privileges'),
- group: gettext('Security'), type: 'text', mode: ['properties'], disabled: true,
+ group: gettext('Security'), type: 'text', mode: ['properties'],
},{
id: 'typeacl', label: gettext('Default TYPE privileges'), type: 'text',
- group: gettext('Security'), mode: ['properties'], disabled: true, min_version: 90200,
+ group: gettext('Security'), mode: ['properties'], min_version: 90200,
visible: function() {
return this.version_compatible;
},
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/static/js/synonym.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/static/js/synonym.js
index 2c301b0ec..cc7f911d2 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/static/js/synonym.js
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/static/js/synonym.js
@@ -96,7 +96,7 @@ define('pgadmin.node.synonym', [
},{
id: 'owner', label: gettext('Owner'), cell: 'string',
type: 'text', mode: ['properties', 'create', 'edit'],
- disabled: true , control: 'node-list-by-name',
+ readonly: true , control: 'node-list-by-name',
node: 'role', visible: false,
},{
id: 'schema', label: gettext('Schema'), cell: 'string',
@@ -181,7 +181,7 @@ define('pgadmin.node.synonym', [
},
},{
id: 'is_public_synonym', label: gettext('Public synonym?'),
- disabled: true, type: 'switch', mode: ['properties'], cell: 'switch',
+ type: 'switch', mode: ['properties'], cell: 'switch',
options: { onText: gettext('Yes'), offText: gettext('No'), onColor: 'success',
offColor: 'primary', size: 'mini'},
},
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/columns/static/js/column.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/columns/static/js/column.js
index 6f8721b12..bb0cae2b3 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/columns/static/js/column.js
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/columns/static/js/column.js
@@ -344,7 +344,7 @@ define('pgadmin.node.column', [
},{
// Need to show this field only when creating new table [in SubNode control]
id: 'inheritedfrom', label: gettext('Inherited from table'),
- type: 'text', disabled: true, editable: false,
+ type: 'text', readonly: true, editable: false,
cellHeaderClasses:'width_percent_10',
visible: function(m) {
return _.isUndefined(m.top.node_info['table'] || m.top.node_info['view'] || m.top.node_info['mview']);
@@ -646,19 +646,19 @@ define('pgadmin.node.column', [
},
},{
id: 'is_pk', label: gettext('Primary key?'),
- type: 'switch', disabled: true, mode: ['properties'],
+ type: 'switch', mode: ['properties'],
group: gettext('Definition'),
},{
id: 'is_fk', label: gettext('Foreign key?'),
- type: 'switch', disabled: true, mode: ['properties'],
+ type: 'switch', mode: ['properties'],
group: gettext('Definition'),
},{
id: 'is_inherited', label: gettext('Inherited?'),
- type: 'switch', disabled: true, mode: ['properties'],
+ type: 'switch', mode: ['properties'],
group: gettext('Definition'),
},{
id: 'tbls_inherited', label: gettext('Inherited from table(s)'),
- type: 'text', disabled: true, mode: ['properties'], deps: ['is_inherited'],
+ type: 'text', mode: ['properties'], deps: ['is_inherited'],
group: gettext('Definition'),
visible: function(m) {
if (!_.isUndefined(m.get('is_inherited')) && m.get('is_inherited')) {
@@ -669,7 +669,7 @@ define('pgadmin.node.column', [
},
},{
id: 'is_sys_column', label: gettext('System column?'), cell: 'string',
- type: 'switch', disabled: true, mode: ['properties'],
+ type: 'switch', mode: ['properties'],
},{
id: 'description', label: gettext('Comment'), cell: 'string',
type: 'multiline', mode: ['properties', 'create', 'edit'],
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/static/js/compound_trigger.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/static/js/compound_trigger.js
index f9fac6d7a..58d87ab0e 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/static/js/compound_trigger.js
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/static/js/compound_trigger.js
@@ -183,7 +183,7 @@ define('pgadmin.node.compound_trigger', [
type: 'text', disabled: 'inSchema',
},{
id: 'oid', label: gettext('OID'), cell: 'string',
- type: 'int', disabled: true, mode: ['properties'],
+ type: 'int', mode: ['properties'],
},{
id: 'is_enable_trigger', label: gettext('Trigger enabled?'),
mode: ['edit', 'properties'],
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/indexes/static/js/index.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/indexes/static/js/index.js
index 186b73e7d..d0b195ce6 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/indexes/static/js/index.js
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/indexes/static/js/index.js
@@ -293,7 +293,7 @@ define('pgadmin.node.index', [
type: 'text', disabled: 'inSchema',
},{
id: 'oid', label: gettext('OID'), cell: 'string',
- type: 'int', disabled: true, mode: ['edit', 'properties'],
+ type: 'int', readonly: true, mode: ['edit', 'properties'],
},{
id: 'spcname', label: gettext('Tablespace'), cell: 'string',
control: 'node-list-by-name', node: 'tablespace',
@@ -396,15 +396,15 @@ define('pgadmin.node.index', [
group: gettext('Definition'),
},{
id: 'indisvalid', label: gettext('Valid?'), cell: 'string',
- type: 'switch', disabled: true, mode: ['properties'],
+ type: 'switch', mode: ['properties'],
group: gettext('Definition'),
},{
id: 'indisprimary', label: gettext('Primary?'), cell: 'string',
- type: 'switch', disabled: true, mode: ['properties'],
+ type: 'switch', mode: ['properties'],
group: gettext('Definition'),
},{
id: 'is_sys_idx', label: gettext('System index?'), cell: 'string',
- type: 'switch', disabled: true, mode: ['properties'],
+ type: 'switch', mode: ['properties'],
},{
id: 'isconcurrent', label: gettext('Concurrent build?'), cell: 'string',
type: 'switch', disabled: 'inSchemaWithModelCheck',
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/static/js/rule.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/static/js/rule.js
index 4cc65297a..c871415a7 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/static/js/rule.js
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/static/js/rule.js
@@ -144,7 +144,7 @@ define('pgadmin.node.rule', [
},
{
id: 'oid', label: gettext('OID'),
- type: 'text', disabled: true, mode: ['properties'],
+ type: 'text', mode: ['properties'],
},
{
id: 'schema', label:'',
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/triggers/static/js/trigger.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/triggers/static/js/trigger.js
index 4885baeda..a4e6f4ede 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/triggers/static/js/trigger.js
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/triggers/static/js/trigger.js
@@ -185,7 +185,7 @@ define('pgadmin.node.trigger', [
type: 'text', disabled: 'inSchema',
},{
id: 'oid', label: gettext('OID'), cell: 'string',
- type: 'int', disabled: true, mode: ['properties'],
+ type: 'int', mode: ['properties'],
},{
id: 'is_enable_trigger', label: gettext('Trigger enabled?'),
mode: ['edit', 'properties'], group: gettext('Definition'),
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/types/static/js/type.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/types/static/js/type.js
index 2b09bfcc8..89ec3919e 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/types/static/js/type.js
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/types/static/js/type.js
@@ -326,7 +326,7 @@ define('pgadmin.node.type', [
disabled: 'schemaCheck',
},{
id: 'oid', label: gettext('OID'), cell: 'string',
- type: 'text' , mode: ['properties'], disabled: true,
+ type: 'text' , mode: ['properties'],
},{
id: 'typeowner', label: gettext('Owner'), cell: 'string',
control: 'node-list-by-name',
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/static/js/mview.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/static/js/mview.js
index d5e2d74a3..1c33e292a 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/static/js/mview.js
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/static/js/mview.js
@@ -149,7 +149,7 @@ define('pgadmin.node.mview', [
type: 'text', disabled: 'inSchema',
},{
id: 'oid', label: gettext('OID'), cell: 'string',
- type: 'text', disabled: true, mode: ['properties'],
+ type: 'text', mode: ['properties'],
},{
id: 'owner', label: gettext('Owner'), cell: 'string',
control: 'node-list-by-name', select2: { allowClear: false },
@@ -161,7 +161,7 @@ define('pgadmin.node.mview', [
disabled: 'inSchema', select2: { allowClear: false },
},{
id: 'system_view', label: gettext('System view?'), cell: 'string',
- type: 'switch', disabled: true, mode: ['properties'],
+ type: 'switch', mode: ['properties'],
}, pgBrowser.SecurityGroupSchema, {
id: 'acl', label: gettext('Privileges'),
mode: ['properties'], type: 'text', group: gettext('Security'),
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/static/js/view.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/static/js/view.js
index 1b357fa97..72ea59c13 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/static/js/view.js
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/static/js/view.js
@@ -113,7 +113,7 @@ define('pgadmin.node.view', [
type: 'text', disabled: 'notInSchema',
},{
id: 'oid', label: gettext('OID'), cell: 'string',
- type: 'text', disabled: true, mode: ['properties'],
+ type: 'text', mode: ['properties'],
},{
id: 'owner', label: gettext('Owner'), cell: 'string', control: 'node-list-by-name',
node: 'role', disabled: 'notInSchema', select2: { allowClear: false },
@@ -124,7 +124,7 @@ define('pgadmin.node.view', [
select2: { allowClear: false }, cache_node: 'database',
},{
id: 'system_view', label: gettext('System view?'), cell: 'string',
- type: 'switch', disabled: true, mode: ['properties'],
+ type: 'switch', mode: ['properties'],
},{
id: 'acl', label: gettext('Privileges'),
mode: ['properties'], type: 'text', group: gettext('Security'),
diff --git a/web/pgadmin/browser/server_groups/servers/databases/static/js/database.js b/web/pgadmin/browser/server_groups/servers/databases/static/js/database.js
index f74dbd9a2..1568f1e79 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/static/js/database.js
+++ b/web/pgadmin/browser/server_groups/servers/databases/static/js/database.js
@@ -317,26 +317,26 @@ define('pgadmin.node.database', [
control: Backform.NodeListByNameControl, select2: { allowClear: false },
},{
id: 'acl', label: gettext('Privileges'), type: 'text',
- group: gettext('Security'), mode: ['properties'], disabled: true,
+ group: gettext('Security'), mode: ['properties'],
},{
id: 'tblacl', label: gettext('Default TABLE privileges'), type: 'text',
- group: gettext('Security'), mode: ['properties'], disabled: true,
+ group: gettext('Security'), mode: ['properties'],
},{
id: 'seqacl', label: gettext('Default SEQUENCE privileges'), type: 'text',
- group: gettext('Security'), mode: ['properties'], disabled: true,
+ group: gettext('Security'), mode: ['properties'],
},{
id: 'funcacl', label: gettext('Default FUNCTION privileges'), type: 'text',
- group: gettext('Security'), mode: ['properties'], disabled: true,
+ group: gettext('Security'), mode: ['properties'],
},{
id: 'typeacl', label: gettext('Default TYPE privileges'), type: 'text',
- group: gettext('Security'), mode: ['properties'], disabled: true, min_version: 90200,
+ group: gettext('Security'), mode: ['properties'], min_version: 90200,
},{
id: 'comments', label: gettext('Comment'),
editable: false, type: 'multiline',
},{
id: 'encoding', label: gettext('Encoding'),
editable: false, type: 'text', group: gettext('Definition'),
- disabled: function(m) { return !m.isNew(); }, url: 'get_encodings',
+ readonly: function(m) { return !m.isNew(); }, url: 'get_encodings',
control: 'node-ajax-options', cache_level: 'server',
},{
id: 'template', label: gettext('Template'),
@@ -374,12 +374,12 @@ define('pgadmin.node.database', [
},{
id: 'datcollate', label: gettext('Collation'),
editable: false, type: 'text', group: gettext('Definition'),
- disabled: function(m) { return !m.isNew(); }, url: 'get_ctypes',
+ readonly: function(m) { return !m.isNew(); }, url: 'get_ctypes',
control: 'node-ajax-options', cache_level: 'server',
},{
id: 'datctype', label: gettext('Character type'),
editable: false, type: 'text', group: gettext('Definition'),
- disabled: function(m) { return !m.isNew(); }, url: 'get_ctypes',
+ readonly: function(m) { return !m.isNew(); }, url: 'get_ctypes',
control: 'node-ajax-options', cache_level: 'server',
},{
id: 'datconnlimit', label: gettext('Connection limit'),
@@ -387,11 +387,11 @@ define('pgadmin.node.database', [
},{
id: 'is_template', label: gettext('Template?'),
editable: false, type: 'switch', group: gettext('Definition'),
- disabled: true, mode: ['properties', 'edit'],
+ readonly: true, mode: ['properties', 'edit'],
},{
id: 'datallowconn', label: gettext('Allow connections?'),
editable: false, type: 'switch', group: gettext('Definition'),
- mode: ['properties'], disabled: true,
+ mode: ['properties'],
},{
id: 'datacl', label: gettext('Privileges'), type: 'collection',
model: pgBrowser.Node.PrivilegeRoleModel.extend({
diff --git a/web/pgadmin/browser/server_groups/servers/resource_groups/static/js/resource_group.js b/web/pgadmin/browser/server_groups/servers/resource_groups/static/js/resource_group.js
index 3808cadfc..03e38b142 100644
--- a/web/pgadmin/browser/server_groups/servers/resource_groups/static/js/resource_group.js
+++ b/web/pgadmin/browser/server_groups/servers/resource_groups/static/js/resource_group.js
@@ -85,7 +85,7 @@ define('pgadmin.node.resource_group', [
// Defining schema for the resource group node
schema: [{
id: 'oid', label: gettext('OID'), type: 'text',
- editable: false, disabled: true, mode:['properties'],
+ editable: false, mode:['properties'],
},{
id: 'name', label: gettext('Name'), cell: 'string',
type: 'text',
diff --git a/web/pgadmin/browser/server_groups/servers/roles/static/js/role.js b/web/pgadmin/browser/server_groups/servers/roles/static/js/role.js
index 10cafe260..9b0c354c7 100644
--- a/web/pgadmin/browser/server_groups/servers/roles/static/js/role.js
+++ b/web/pgadmin/browser/server_groups/servers/roles/static/js/role.js
@@ -389,7 +389,7 @@ define('pgadmin.node.role', [
disabled: 'readonly',
},{
id: 'oid', label: gettext('OID'), cell: 'string', mode: ['properties'],
- editable: false, type: 'text', visible: true, disabled: true,
+ editable: false, type: 'text', visible: true,
},{
id: 'rolpassword', label: gettext('Password'), type: 'password',
group: gettext('Definition'), mode: ['edit', 'create'],
diff --git a/web/pgadmin/browser/server_groups/servers/static/js/privilege.js b/web/pgadmin/browser/server_groups/servers/static/js/privilege.js
index 8243540b7..2ef1890da 100644
--- a/web/pgadmin/browser/server_groups/servers/static/js/privilege.js
+++ b/web/pgadmin/browser/server_groups/servers/static/js/privilege.js
@@ -169,7 +169,7 @@ define(['sources/gettext', 'underscore', 'jquery', 'backbone', 'backform',
);
},
},{
- id: 'grantor', label: gettext('Grantor'), type: 'text', disabled: true,
+ id: 'grantor', label: gettext('Grantor'), type: 'text', readonly: true,
cell: 'node-list-by-name', node: 'role',
}],
diff --git a/web/pgadmin/browser/server_groups/servers/static/js/server.js b/web/pgadmin/browser/server_groups/servers/static/js/server.js
index 1ddf0e878..18a9ba38c 100644
--- a/web/pgadmin/browser/server_groups/servers/static/js/server.js
+++ b/web/pgadmin/browser/server_groups/servers/static/js/server.js
@@ -406,7 +406,7 @@ define('pgadmin.node.server', [
}),
passwordChangeFields = [{
name: 'user_name', label: gettext('User'),
- type: 'text', disabled: true, control: 'input',
+ type: 'text', readonly: true, control: 'input',
},{
name: 'password', label: gettext('Current Password'),
type: 'password', disabled: function() { return is_pgpass_file_used; },
@@ -785,16 +785,16 @@ define('pgadmin.node.server', [
mode: ['properties', 'edit', 'create'],
},{
id: 'host', label: gettext('Host name/address'), type: 'text', group: gettext('Connection'),
- mode: ['properties', 'edit', 'create'], disabled: 'isConnected',
+ mode: ['properties', 'edit', 'create'], readonly: 'isConnected',
},{
id: 'port', label: gettext('Port'), type: 'int', group: gettext('Connection'),
- mode: ['properties', 'edit', 'create'], disabled: 'isConnected', min: 1, max: 65535,
+ mode: ['properties', 'edit', 'create'], readonly: 'isConnected', min: 1, max: 65535,
},{
id: 'db', label: gettext('Maintenance database'), type: 'text', group: gettext('Connection'),
- mode: ['properties', 'edit', 'create'], disabled: 'isConnected',
+ mode: ['properties', 'edit', 'create'], readonly: 'isConnected',
},{
id: 'username', label: gettext('Username'), type: 'text', group: gettext('Connection'),
- mode: ['properties', 'edit', 'create'], disabled: 'isConnected',
+ mode: ['properties', 'edit', 'create'], readonly: 'isConnected',
},{
id: 'password', label: gettext('Password'), type: 'password',
group: gettext('Connection'), control: 'input', mode: ['create'], deps: ['connect_now'],
@@ -815,7 +815,11 @@ define('pgadmin.node.server', [
},
},{
id: 'role', label: gettext('Role'), type: 'text', group: gettext('Connection'),
- mode: ['properties', 'edit', 'create'], disabled: 'isConnected',
+ mode: ['properties', 'edit', 'create'], readonly: 'isConnected',
+ },{
+ id: 'service', label: gettext('Service'), type: 'text',
+ mode: ['properties', 'edit', 'create'], readonly: 'isConnected',
+ group: gettext('Connection'),
},{
id: 'sslmode', label: gettext('SSL mode'), type: 'options', group: gettext('SSL'),
mode: ['properties', 'edit', 'create'], disabled: 'isConnected',
@@ -909,26 +913,30 @@ define('pgadmin.node.server', [
return true;
}
- return model.get('connected');
+ return false;
},
+ readonly: 'isConnected',
},{
id: 'tunnel_host', label: gettext('Tunnel host'), type: 'text', group: gettext('SSH Tunnel'),
mode: ['properties', 'edit', 'create'], deps: ['use_ssh_tunnel'],
disabled: function(model) {
- return !model.get('use_ssh_tunnel') || model.get('connected');
+ return !model.get('use_ssh_tunnel');
},
+ readonly: 'isConnected',
},{
id: 'tunnel_port', label: gettext('Tunnel port'), type: 'int', group: gettext('SSH Tunnel'),
mode: ['properties', 'edit', 'create'], deps: ['use_ssh_tunnel'], max: 65535,
disabled: function(model) {
- return !model.get('use_ssh_tunnel') || model.get('connected');
+ return !model.get('use_ssh_tunnel');
},
+ readonly: 'isConnected',
},{
id: 'tunnel_username', label: gettext('Username'), type: 'text', group: gettext('SSH Tunnel'),
mode: ['properties', 'edit', 'create'], deps: ['use_ssh_tunnel'],
disabled: function(model) {
- return !model.get('use_ssh_tunnel') || model.get('connected');
+ return !model.get('use_ssh_tunnel');
},
+ readonly: 'isConnected',
},{
id: 'tunnel_authentication', label: gettext('Authentication'), type: 'switch',
mode: ['properties', 'edit', 'create'], group: gettext('SSH Tunnel'),
@@ -936,11 +944,12 @@ define('pgadmin.node.server', [
'offText': gettext('Password'), 'size': 'mini', width: '90'},
deps: ['use_ssh_tunnel'],
disabled: function(model) {
- return !model.get('use_ssh_tunnel') || model.get('connected');
+ return !model.get('use_ssh_tunnel');
},
+ readonly: 'isConnected',
}, {
id: 'tunnel_identity_file', label: gettext('Identity file'), type: 'text',
- group: gettext('SSH Tunnel'), mode: ['edit', 'create'],
+ group: gettext('SSH Tunnel'), mode: ['properties', 'edit', 'create'],
control: Backform.FileControl, dialog_type: 'select_file', supp_types: ['*'],
deps: ['tunnel_authentication', 'use_ssh_tunnel'],
disabled: function(model) {
@@ -952,16 +961,14 @@ define('pgadmin.node.server', [
}
return !model.get('tunnel_authentication') || !model.get('use_ssh_tunnel');
},
- },{
- id: 'tunnel_identity_file', label: gettext('Identity file'), type: 'text',
- group: gettext('SSH Tunnel'), mode: ['properties'],
},{
id: 'tunnel_password', label: gettext('Password'), type: 'password',
group: gettext('SSH Tunnel'), control: 'input', mode: ['create'],
deps: ['use_ssh_tunnel'],
disabled: function(model) {
- return !model.get('use_ssh_tunnel') || model.get('connected');
+ return !model.get('use_ssh_tunnel');
},
+ readonly: 'isConnected',
}, {
id: 'save_tunnel_password', controlLabel: gettext('Save password?'),
type: 'checkbox', group: gettext('SSH Tunnel'), mode: ['create'],
@@ -977,15 +984,15 @@ define('pgadmin.node.server', [
},
}, {
id: 'hostaddr', label: gettext('Host address'), type: 'text', group: gettext('Advanced'),
- mode: ['properties', 'edit', 'create'], disabled: 'isConnected',
+ mode: ['properties', 'edit', 'create'], readonly: 'isConnected',
},{
id: 'db_res', label: gettext('DB restriction'), type: 'select2', group: gettext('Advanced'),
- mode: ['properties', 'edit', 'create'], disabled: 'isConnected', select2: {multiple: true, allowClear: false,
+ mode: ['properties', 'edit', 'create'], readonly: 'isConnected', select2: {multiple: true, allowClear: false,
tags: true, tokenSeparators: [','], first_empty: false, selectOnClose: true, emptyOptions: true},
},{
id: 'passfile', label: gettext('Password file'), type: 'text',
group: gettext('Advanced'), mode: ['edit', 'create'],
- disabled: 'isConnectedWithValidLib', control: Backform.FileControl,
+ disabled: 'isValidLib', readonly: 'isConnected', control: Backform.FileControl,
dialog_type: 'select_file', supp_types: ['*'],
},{
id: 'passfile', label: gettext('Password file'), type: 'text',
@@ -994,14 +1001,10 @@ define('pgadmin.node.server', [
var passfile = model.get('passfile');
return !_.isUndefined(passfile) && !_.isNull(passfile);
},
- },{
- id: 'service', label: gettext('Service'), type: 'text',
- mode: ['properties', 'edit', 'create'], disabled: 'isConnected',
- group: gettext('Connection'),
},{
id: 'connect_timeout', label: gettext('Connection timeout (seconds)'),
type: 'int', group: gettext('Advanced'),
- mode: ['properties', 'edit', 'create'], disabled: 'isConnected',
+ mode: ['properties', 'edit', 'create'], readonly: 'isConnected',
min: 0,
}],
validate: function() {
@@ -1036,10 +1039,7 @@ define('pgadmin.node.server', [
}
return _.indexOf(SSL_MODES, ssl_mode) == -1;
},
- isConnectedWithValidLib: function(model) {
- if(model.get('connected')) {
- return true;
- }
+ isValidLib: function() {
// older version of libpq do not support 'passfile' parameter in
// connect method, valid libpq must have version >= 100000
return pgBrowser.utils.pg_libpq_version < 100000;
diff --git a/web/pgadmin/browser/server_groups/servers/tablespaces/static/js/tablespace.js b/web/pgadmin/browser/server_groups/servers/tablespaces/static/js/tablespace.js
index ad5c2b58e..a09414b64 100644
--- a/web/pgadmin/browser/server_groups/servers/tablespaces/static/js/tablespace.js
+++ b/web/pgadmin/browser/server_groups/servers/tablespaces/static/js/tablespace.js
@@ -342,7 +342,7 @@ define('pgadmin.node.tablespace', [
type: 'text',
},{
id: 'oid', label: gettext('OID'), cell: 'string',
- type: 'text', disabled: true, mode: ['properties'],
+ type: 'text', mode: ['properties'],
},{
id: 'spclocation', label: gettext('Location'), cell: 'string',
group: gettext('Definition'), type: 'text', mode: ['properties', 'edit','create'],
@@ -357,7 +357,7 @@ define('pgadmin.node.tablespace', [
select2: {allowClear: false},
},{
id: 'acl', label: gettext('Privileges'), type: 'text',
- group: gettext('Security'), mode: ['properties'], disabled: true,
+ group: gettext('Security'), mode: ['properties'],
},{
id: 'description', label: gettext('Comment'), cell: 'string',
type: 'multiline',
diff --git a/web/pgadmin/browser/static/js/node.js b/web/pgadmin/browser/static/js/node.js
index e3fac91f5..4cdb94a70 100644
--- a/web/pgadmin/browser/static/js/node.js
+++ b/web/pgadmin/browser/static/js/node.js
@@ -1049,7 +1049,7 @@ define('pgadmin.browser.node', [
tree = pgAdmin.Browser.tree,
j = panel.$container.find('.obj_properties').first(),
view = j.data('obj-view'),
- content = $('<div tabindex="1"></div>')
+ content = $('<div></div>')
.addClass('pg-prop-content col-12'),
confirm_close = true;
diff --git a/web/pgadmin/static/bundle/codemirror.js b/web/pgadmin/static/bundle/codemirror.js
index fda8f5af2..deecca12b 100644
--- a/web/pgadmin/static/bundle/codemirror.js
+++ b/web/pgadmin/static/bundle/codemirror.js
@@ -30,7 +30,7 @@ var cmds = CodeMirror.commands;
cmds.focusOut = function(){
event.stopPropagation();
document.activeElement.blur();
- if(event.currentTarget.parents().find('.sql-code-control')) {
+ if(event.currentTarget.hasOwnProperty('parents') && event.currentTarget.parents().find('.sql-code-control')) {
// for code mirror in dialogs
event.currentTarget.parents().find('.sql-code-control').focus();
}
diff --git a/web/pgadmin/static/js/backform.pgadmin.js b/web/pgadmin/static/js/backform.pgadmin.js
index a31eaafd2..876d8765f 100644
--- a/web/pgadmin/static/js/backform.pgadmin.js
+++ b/web/pgadmin/static/js/backform.pgadmin.js
@@ -175,7 +175,7 @@ define([
template: _.template([
'<label class="<%=Backform.controlLabelClassName%>" for="<%=cId%>"><%=label%></label>',
'<div class="<%=Backform.controlsClassName%>">',
- ' <input class="<%=Backform.controlClassName%> uneditable-input" <%=disabled ? "disabled readonly" : ""%> id="<%=cId%>" value="<%-value%>" />',
+ ' <input class="<%=Backform.controlClassName%> uneditable-input" <%=disabled ? "disabled" : ""%> <%=readonly ? "readonly aria-readonly=true" : ""%> id="<%=cId%>" value="<%-value%>" />',
' <% if (helpMessage && helpMessage.length) { %>',
' <span class="<%=Backform.helpMessageClassName%>"><%=helpMessage%></span>',
' <% } %>',
@@ -233,6 +233,7 @@ define([
// Evaluate the disabled, visible, and required option
_.extend(data, {
disabled: evalF(data.disabled, data, this.model),
+ readonly: evalF(data.readonly, data, this.model),
visible: evalF(data.visible, data, this.model),
required: evalF(data.required, data, this.model),
});
@@ -260,7 +261,7 @@ define([
template: _.template([
'<label class="<%=Backform.controlLabelClassName%>" for="<%=cId%>"><%=label%></label>',
'<div class="<%=Backform.controlContainerClassName%>">',
- ' <input type="<%=type%>" id="<%=cId%>" class="<%=Backform.controlClassName%> <%=extraClasses.join(\' \')%>" name="<%=name%>" maxlength="<%=maxlength%>" value="<%-value%>" placeholder="<%-placeholder%>" <%=disabled ? "disabled" : ""%> <%=required ? "required" : ""%> />',
+ ' <input type="<%=type%>" id="<%=cId%>" class="<%=Backform.controlClassName%> <%=extraClasses.join(\' \')%>" name="<%=name%>" maxlength="<%=maxlength%>" value="<%-value%>" placeholder="<%-placeholder%>" <%=disabled ? "disabled" : ""%> <%=readonly ? "readonly aria-readonly=true" : ""%> <%=required ? "required" : ""%> />',
' <% if (helpMessage && helpMessage.length) { %>',
' <span class="<%=Backform.helpMessageClassName%>"><%=helpMessage%></span>',
' <% } %>',
@@ -315,7 +316,7 @@ define([
' <% if (maxlength) { %>',
' maxlength="<%=maxlength%>"',
' <% } %>',
- ' placeholder="<%-placeholder%>" <%=disabled ? "disabled" : ""%>',
+ ' placeholder="<%-placeholder%>" <%=disabled ? "disabled" : ""%> <%=readonly ? "readonly aria-readonly=true" : ""%>',
' rows=<%=rows ? rows : ""%>',
' <%=required ? "required" : ""%>><%-value%></textarea>',
' <% if (helpMessage && helpMessage.length) { %>',
@@ -389,7 +390,7 @@ define([
Backform.SelectControl.prototype.template = _.template([
'<label class="<%=Backform.controlLabelClassName%>" for="<%=cId%>"><%=label%></label>',
'<div class="<%=Backform.controlContainerClassName%>">',
- ' <select id="<%=cId%>" class="<%=Backform.controlClassName%> <%=extraClasses.join(\' \')%>" name="<%=name%>" value="<%-value%>" <%=disabled ? "disabled" : ""%> <%=required ? "required" : ""%> >',
+ ' <select id="<%=cId%>" class="<%=Backform.controlClassName%> <%=extraClasses.join(\' \')%>" name="<%=name%>" value="<%-value%>" <%=disabled ? "disabled" : ""%> <%=readonly ? "disabled" : ""%> <%=required ? "required" : ""%> >',
' <% for (var i=0; i < options.length; i++) { %>',
' <% var option = options[i]; %>',
' <option value="<%-formatter.fromRaw(option.value)%>" <%=option.value === rawValue ? "selected=\'selected\'" : ""%> <%=option.disabled ? "disabled=\'disabled\'" : ""%>><%-option.label%></option>',
@@ -409,7 +410,7 @@ define([
'<% for (var i=0; i < options.length; i++) { %>',
' <% var option = options[i]; %>',
' <% if (option.value === rawValue) { %>',
- ' <input id="<%=cId%>" class="<%=Backform.controlClassName%> uneditable-input" disabled readonly value="<%-option.label%>"></span>',
+ ' <input id="<%=cId%>" class="<%=Backform.controlClassName%> uneditable-input" readonly value="<%-option.label%>"></span>',
' <% } %>',
'<% } %>',
'<% if (helpMessage && helpMessage.length) { %>',
@@ -557,7 +558,7 @@ define([
' data-size="<%=options.size%>" data-height="<%=options.height%>" ',
' data-on="<%=options.onText%>" data-off="<%=options.offText%>" ',
' data-onstyle="<%=options.onColor%>" data-offstyle="<%=options.offColor%>" data-width="<%=options.width%>" ',
- ' name="<%=name%>" <%=value ? "checked=\'checked\'" : ""%> <%=disabled ? "disabled" : ""%> <%=required ? "required" : ""%> />',
+ ' name="<%=name%>" <%=value ? "checked=\'checked\'" : ""%> <%=disabled ? "disabled" : ""%> <%=readonly ? "disabled" : ""%> <%=required ? "required" : ""%> />',
' <% if (helpMessage && helpMessage.length) { %>',
' <span class="<%=Backform.helpMessageClassName%>"><%=helpMessage%></span>',
' <% } %>',
@@ -579,11 +580,11 @@ define([
if(this.$el.find('.toggle.btn').hasClass('off')) {
this.$el.find('.sr-value').text(`
- ${label}. ${offText}. ${gettext('Toggle button')}
+ ${label}, ${offText}, ${gettext('Toggle button')}
`);
} else {
this.$el.find('.sr-value').text(`
- ${label}. ${onText}. ${gettext('Toggle button')}
+ ${label}, ${onText}, ${gettext('Toggle button')}
`);
}
},
@@ -618,6 +619,7 @@ define([
// Evaluate the disabled, visible, and required option
_.extend(data, {
disabled: evalF(field.disabled, field, this.model),
+ readonly: evalF(field.readonly, field, this.model),
visible: evalF(data.visible, field, this.model),
required: evalF(data.required, field, this.model),
});
@@ -637,8 +639,9 @@ define([
this.$el.addClass(Backform.requiredInputClassName);
}
+ /* Set disabled for both disabled and readonly */
data.options = _.defaults({
- disabled: evalF(field.disabled, field, this.model),
+ disabled: data.disabled || data.readonly,
}, this.field.get('options'), this.defaults.options,
$.fn.bootstrapToggle.defaults);
@@ -651,7 +654,7 @@ define([
this.$input.bootstrapToggle();
// When disable then set tabindex value to -1
this.$el.find('.toggle.btn')
- .attr('tabindex', data.options.disabled ? '-1' : '0')
+ .attr('tabindex', data.disabled ? '-1' : '0')
.attr('id', data.cId);
this.$el.find('.toggle.btn .toggle-group .btn').attr('aria-hidden', true);
@@ -659,6 +662,12 @@ define([
this.updateInvalid();
+ /* Bootstrap toggle does not have option for readonly
+ * If readonly, then let it focus.
+ */
+ if(data.readonly) {
+ this.$el.find('.select2-selection').attr('tabindex', 0);
+ }
return this;
},
});
@@ -830,7 +839,7 @@ define([
'header': _.template([
'<div class="<%=Backform.accordianGroupClassName%>" <%=disabled ? "disabled" : ""%>>',
' <% if (legend != false) { %>',
- ' <div class="<%=legendClass%>" <%=collapse ? "data-toggle=\'collapse\'" : ""%> data-target="#<%=cId%>" aria-controls="<%=cId%>" role="heading" tabindex="0"><%=collapse ? "<span class=\'caret\'></span>" : "" %><%=label%></legend>',
+ ' <div class="<%=legendClass%>" <%=collapse ? "data-toggle=\'collapse\'" : ""%> data-target="#<%=cId%>" aria-controls="<%=cId%>" aria-level="3" role="heading"><%=collapse ? "<span class=\'caret\'></span>" : "" %><%=label%></legend>',
' <% } %>',
'</div>',
].join('\n')),
@@ -1722,7 +1731,7 @@ define([
},
template: _.template([
'<div class="<%=controlsClassName%>">',
- ' <textarea class="<%=Backform.controlClassName%> <%=extraClasses.join(\' \')%>" name="<%=name%>" placeholder="<%-placeholder%>" <%=disabled ? "disabled" : ""%> <%=required ? "required" : ""%>><%-value%></textarea>',
+ ' <textarea class="<%=Backform.controlClassName%> <%=extraClasses.join(\' \')%>" name="<%=name%>" placeholder="<%-placeholder%>" <%=disabled ? "disabled" : ""%> <%=readonly ? "readonly aria-readonly=true" : ""%> <%=required ? "required" : ""%>><%-value%></textarea>',
' <% if (helpMessage && helpMessage.length) { %>',
' <span class="<%=Backform.helpMessageClassName%>"><%=helpMessage%></span>',
' <% } %>',
@@ -1889,7 +1898,7 @@ define([
template: _.template([
'<label for="<%=cId%>" class="<%=Backform.controlLabelClassName%>"><%=label%></label>',
'<div class="<%=Backform.controlsClassName%>">',
- ' <input type="<%=type%>" id="<%=cId%>" class="<%=Backform.controlClassName%> <%=extraClasses.join(\' \')%>" name="<%=name%>" min="<%=min%>" max="<%=max%>"maxlength="<%=maxlength%>" value="<%-value%>" placeholder="<%-placeholder%>" <%=disabled ? "disabled" : ""%> <%=required ? "required" : ""%> />',
+ ' <input type="<%=type%>" id="<%=cId%>" class="<%=Backform.controlClassName%> <%=extraClasses.join(\' \')%>" name="<%=name%>" min="<%=min%>" max="<%=max%>"maxlength="<%=maxlength%>" value="<%-value%>" placeholder="<%-placeholder%>" <%=disabled ? "disabled" : ""%> <%=readonly ? "readonly aria-readonly=true" : ""%> <%=required ? "required" : ""%> />',
' <% if (helpMessage && helpMessage.length) { %>',
' <span class="<%=Backform.helpMessageClassName%>"><%=helpMessage%></span>',
' <% } %>',
@@ -1972,8 +1981,9 @@ define([
(server_info.version <= s.max_version))));
var disabled = (
- (mode == 'properties') || !ver_in_limit || in_catalog
+ !ver_in_limit || in_catalog
),
+ readonly = (mode == 'properties'),
schema_node = (s.node && _.isString(s.node) &&
s.node in pgBrowser.Nodes && pgBrowser.Nodes[s.node]) || node;
@@ -1982,16 +1992,17 @@ define([
// This can be disabled in some cases (if not hidden)
disabled: (disabled ? true : evalASFunc(s.disabled)),
+ readonly: (readonly ? true : evalASFunc(s.readonly)),
editable: _.isUndefined(s.editable) ?
pgAdmin.editableCell : evalASFunc(s.editable),
subnode: ((_.isString(s.model) && s.model in pgBrowser.Nodes) ?
pgBrowser.Nodes[s.model].model : s.model),
- canAdd: (disabled ? false : evalASFunc(s.canAdd)),
- canAddRow: (disabled ? false : evalASFunc(s.canAddRow)),
- canEdit: (disabled ? false : evalASFunc(s.canEdit)),
- canDelete: (disabled ? false : evalASFunc(s.canDelete)),
- canEditRow: (disabled ? false : evalASFunc(s.canEditRow)),
- canDeleteRow: (disabled ? false : evalASFunc(s.canDeleteRow)),
+ canAdd: (disabled || readonly) ? false : evalASFunc(s.canAdd),
+ canAddRow: (disabled || readonly) ? false : evalASFunc(s.canAddRow),
+ canEdit: (disabled || readonly) ? false : evalASFunc(s.canEdit),
+ canDelete: (disabled || readonly) ? false : evalASFunc(s.canDelete),
+ canEditRow: (disabled || readonly) ? false : evalASFunc(s.canEditRow),
+ canDeleteRow: (disabled || readonly) ? false : evalASFunc(s.canDeleteRow),
transform: evalASFunc(s.transform),
mode: mode,
control: control,
@@ -2134,7 +2145,7 @@ define([
'<% }%>',
'<div class="<%=Backform.controlsClassName%>">',
' <select id="<%=cId%>" class="<%=Backform.controlClassName%> <%=extraClasses.join(\' \')%>"',
- ' name="<%=name%>" value="<%-value%>" <%=disabled ? "disabled" : ""%>',
+ ' name="<%=name%>" value="<%-value%>" <%=disabled ? "disabled" : ""%> <%=readonly ? "disabled" : ""%>',
' <%=required ? "required" : ""%><%= select2.multiple ? " multiple>" : ">" %>',
' <%=select2.first_empty ? " <option></option>" : ""%>',
' <% for (var i=0; i < options.length; i++) {%>',
@@ -2146,7 +2157,7 @@ define([
' <% if (!select2.multiple && option.value === rawValue) {%>selected="selected"<%}%>',
' <% if (select2.multiple && rawValue && rawValue.indexOf(option.value) != -1){%>selected="selected" data-index="rawValue.indexOf(option.value)"<%}%>',
' <%}%>',
- ' <%= disabled ? "disabled" : ""%>><%-option.label%></option>',
+ ' <%= disabled ? "disabled" : ""%> <%=readonly ? "disabled" : ""%>><%-option.label%></option>',
' <%}%>',
' </select>',
' <% if (helpMessage && helpMessage.length) { %>',
@@ -2195,8 +2206,10 @@ define([
});
// Evaluate the disabled, visible, and required option
+ // disable for readonly also and later handle readonly programmatically.
_.extend(data, {
disabled: evalF(data.disabled, data, this.model),
+ readonly: evalF(data.readonly, data, this.model),
visible: evalF(data.visible, data, this.model),
required: evalF(data.required, data, this.model),
});
@@ -2224,7 +2237,7 @@ define([
this.$el.html(this.template(data)).addClass(field.name);
var select2Opts = _.extend({
- disabled: data.disabled,
+ disabled: data.disabled || data.readonly,
}, field.select2, {
options: (this.field.get('options') || this.defaults.options),
});
@@ -2237,7 +2250,7 @@ define([
}
// If disabled then no need to show placeholder
- if (data.disabled || data.mode === 'properties') {
+ if (data.disabled || data.readonly) {
select2Opts['placeholder'] = '';
}
@@ -2282,6 +2295,15 @@ define([
});
}
+ /* Select2 does not have option for readonly
+ * If readonly, then let it focus.
+ */
+ if(data.readonly) {
+ setTimeout(()=>{
+ this.$el.find('.select2-selection').attr('tabindex', 0);
+ }, 500);
+ }
+
this.updateInvalid();
return this;
@@ -2423,7 +2445,7 @@ define([
'<div class="<%=Backform.controlsClassName%> sql_field_layout <%=extraClasses.join(\' \')%>">',
' <textarea ',
' class="<%=Backform.controlClassName%> " name="<%=name%>"',
- ' maxlength="<%=maxlength%>" placeholder="<%-placeholder%>" <%=disabled ? "disabled" : ""%>',
+ ' maxlength="<%=maxlength%>" placeholder="<%-placeholder%>" <%=disabled ? "disabled" : ""%> <%=readonly ? "readonly aria-readonly=true" : ""%>',
' rows=<%=rows%>',
' <%=required ? "required" : ""%>><%-value%></textarea>',
' <% if (helpMessage && helpMessage.length) { %>',
@@ -2508,6 +2530,7 @@ define([
// Evaluate the disabled, visible option
var isDisabled = evalF(data.disabled, data, this.model),
isVisible = evalF(data.visible, data, this.model),
+ isReadonly = evalF(data.readonly, data, this.model),
self = this;
self.sqlCtrl = CodeMirror.fromTextArea(
@@ -2524,9 +2547,13 @@ define([
});
// Disable editor
- if (isDisabled) {
+ if (isDisabled || isReadonly) {
// set read only mode to true instead of 'nocursor', and hide cursor using a class so that copying is enabled
self.sqlCtrl.setOption('readOnly', true);
+ self.sqlCtrl.setOption('extraKeys', {
+ Tab: false,
+ 'Shift-Tab': false,
+ });
var cm = self.sqlCtrl.getWrapperElement();
if (cm) {
cm.className += ' cm_disabled hide-cursor-workaround';
@@ -2596,7 +2623,7 @@ define([
'<div class="pgadmin-controls pg-el-12 <%=extraClasses.join(\' \')%>">',
' <textarea ',
' class="<%=Backform.controlClassName%> " name="<%=name%>"',
- ' maxlength="<%=maxlength%>" placeholder="<%-placeholder%>" <%=disabled ? "disabled" : ""%>',
+ ' maxlength="<%=maxlength%>" placeholder="<%-placeholder%>" <%=disabled ? "disabled" : ""%> <%=readonly ? "readonly aria-readonly=true" : ""%> ',
' rows=<%=rows%>',
' <%=required ? "required" : ""%>><%-value%></textarea>',
' <% if (helpMessage && helpMessage.length) { %>',
@@ -2658,7 +2685,7 @@ define([
'<label class="<%=Backform.controlLabelClassName%>" for="<%=cId%>"><%=label%></label>',
'<div class="<%=Backform.controlsClassName%>">',
'<div class="input-group">',
- '<input type="<%=type%>" id="<%=cId%>" class="form-control <%=extraClasses.join(\' \')%>" name="<%=name%>" min="<%=min%>" max="<%=max%>"maxlength="<%=maxlength%>" value="<%-value%>" placeholder="<%-placeholder%>" <%=disabled ? "disabled" : ""%> <%=required ? "required" : ""%> />',
+ '<input type="<%=type%>" id="<%=cId%>" class="form-control <%=extraClasses.join(\' \')%>" name="<%=name%>" min="<%=min%>" max="<%=max%>"maxlength="<%=maxlength%>" value="<%-value%>" placeholder="<%-placeholder%>" <%=disabled ? "disabled" : ""%> <%=readonly ? "readonly aria-readonly=true" : ""%> <%=required ? "required" : ""%> />',
'<div class="input-group-append">',
'<button class="btn btn-secondary fa fa-ellipsis-h select_item" <%=disabled ? "disabled" : ""%> aria-hidden="true" aria-label="Select file" title="Select file"></button>',
'</div>',
@@ -2776,7 +2803,7 @@ define([
template: _.template([
'<label class="<%=Backform.controlLabelClassName%>"><%=label%></label>',
'<div class="input-group <%=Backform.controlsClassName%>">',
- ' <input type="text" class="<%=Backform.controlClassName%> datetimepicker-input <%=extraClasses.join(\' \')%>" name="<%=name%>" value="<%-value%>" placeholder="<%-placeholder%>" <%=disabled ? "disabled" : ""%> <%=required ? "required" : ""%> data-toggle="datetimepicker"/>',
+ ' <input type="text" class="<%=Backform.controlClassName%> datetimepicker-input <%=extraClasses.join(\' \')%>" name="<%=name%>" value="<%-value%>" placeholder="<%-placeholder%>" <%=disabled ? "disabled" : ""%> <%=readonly ? "readonly aria-readonly=true" : ""%> <%=required ? "required" : ""%> data-toggle="datetimepicker"/>',
' <div class="input-group-append">',
' <span class="input-group-text fa fa-calendar"></span>',
' </div>',
@@ -2807,6 +2834,7 @@ define([
// Evaluate the disabled, visible, and required option
_.extend(data, {
disabled: evalF(data.disabled, this.model),
+ readonly: evalF(data.readonly, this.model),
visible: evalF(data.visible, this.model),
required: evalF(data.required, this.model),
});
diff --git a/web/pgadmin/static/scss/_backgrid.overrides.scss b/web/pgadmin/static/scss/_backgrid.overrides.scss
index 670f2fced..8613171bf 100644
--- a/web/pgadmin/static/scss/_backgrid.overrides.scss
+++ b/web/pgadmin/static/scss/_backgrid.overrides.scss
@@ -305,6 +305,12 @@ table.backgrid {
outline: $input-focus-border-color auto 5px !important;
}
+ & td.select-cell.editor select{
+ outline: none !important;
+ height: 100% !important;
+ width: 100% !important;
+ }
+
tr.editor-row {
background-color: $color-gray-light !important;
& > td {
diff --git a/web/pgadmin/static/scss/_select2.overrides.scss b/web/pgadmin/static/scss/_select2.overrides.scss
index d94d064af..0cbdce801 100644
--- a/web/pgadmin/static/scss/_select2.overrides.scss
+++ b/web/pgadmin/static/scss/_select2.overrides.scss
@@ -96,3 +96,18 @@
background-color: $color-primary;
margin-bottom: 3px;
}
+
+/* select2 readonly */
+select[readonly].select2-hidden-accessible + .select2-container {
+ pointer-events: none;
+ touch-action: none;
+}
+
+select[readonly].select2-hidden-accessible + .select2-container .select2-selection {
+ background: #eee;
+ box-shadow: none;
+}
+
+select[readonly].select2-hidden-accessible + .select2-container .select2-selection__arrow, select[readonly].select2-hidden-accessible + .select2-container .select2-selection__clear {
+ display: none;
+}
diff --git a/web/pgadmin/static/vendor/backform/backform.js b/web/pgadmin/static/vendor/backform/backform.js
index ae9e78218..5615621b2 100644
--- a/web/pgadmin/static/vendor/backform/backform.js
+++ b/web/pgadmin/static/vendor/backform/backform.js
@@ -193,6 +193,11 @@
// (Optional - true/false/function returning boolean)
// (Default Value: false)
disabled: false,
+ // Make the input control readonly
+ // readonly control can receive focus whereas disabled cannot
+ // (Optional - true/false/function returning boolean)
+ // (Default Value: false)
+ readonly: false,
// Visible
// (Optional - true/false/function returning boolean)
// (Default Value: true)
@@ -306,6 +311,7 @@
// Evaluate the disabled, visible, and required option
_.extend(data, {
disabled: evalF(data.disabled, this.model),
+ readonly: evalF(data.readonly, this.model),
visible: evalF(data.visible, this.model),
required: evalF(data.required, this.model)
});
@@ -427,7 +433,7 @@
template: _.template([
'<label class="<%=Backform.controlLabelClassName%>"><%=label%></label>',
'<div class="<%=Backform.controlContainerClassName%>">',
- ' <textarea class="<%=Backform.controlClassName%> <%=extraClasses.join(\' \')%>" name="<%=name%>" maxlength="<%=maxlength%>" placeholder="<%-placeholder%>" <%=disabled ? "disabled" : ""%> <%=required ? "required" : ""%>><%-value%></textarea>',
+ ' <textarea class="<%=Backform.controlClassName%> <%=extraClasses.join(\' \')%>" name="<%=name%>" maxlength="<%=maxlength%>" placeholder="<%-placeholder%>" <%=disabled ? "disabled" : ""%> <%=readonly ? "readonly" : ""%> <%=required ? "required" : ""%>><%-value%></textarea>',
' <% if (helpMessage && helpMessage.length) { %>',
' <span class="<%=Backform.helpMessageClassName%>"><%=helpMessage%></span>',
' <% } %>',
@@ -517,7 +523,7 @@
template: _.template([
'<label class="<%=Backform.controlLabelClassName%>"><%=label%></label>',
'<div class="<%=Backform.controlContainerClassName%>">',
- ' <input type="<%=type%>" class="<%=Backform.controlClassName%> <%=extraClasses.join(\' \')%>" name="<%=name%>" maxlength="<%=maxlength%>" value="<%-value%>" placeholder="<%-placeholder%>" <%=disabled ? "disabled" : ""%> <%=required ? "required" : ""%> />',
+ ' <input type="<%=type%>" class="<%=Backform.controlClassName%> <%=extraClasses.join(\' \')%>" name="<%=name%>" maxlength="<%=maxlength%>" value="<%-value%>" placeholder="<%-placeholder%>" <%=disabled ? "disabled" : ""%> <%=readonly ? "readonly aria-readonly=true" : ""%> <%=required ? "required" : ""%> />',
' <% if (helpMessage && helpMessage.length) { %>',
' <span class="<%=Backform.helpMessageClassName%>"><%=helpMessage%></span>',
' <% } %>',
@@ -544,7 +550,7 @@
'<label class="<%=Backform.controlLabelClassName%>" for="<%=id%>"><%=controlLabel%></label>',
'<div class="<%=Backform.controlContainerClassName%>">',
' <div class="form-check">',
- ' <input type="<%=type%>" class="form-check-input <%=extraClasses.join(\' \')%>" id="<%=id%>" name="<%=name%>" <%=value ? "checked=\'checked\'" : ""%> <%=disabled ? "disabled" : ""%> <%=required ? "required" : ""%> />',
+ ' <input type="<%=type%>" class="form-check-input <%=extraClasses.join(\' \')%>" id="<%=id%>" name="<%=name%>" <%=value ? "checked=\'checked\'" : ""%> <%=disabled ? "disabled" : ""%> <%=readonly ? "readonly" : ""%> <%=required ? "required" : ""%> />',
' <% if (label && label.length) { %>',
' <label class="form-check-label" for="<%=id%>"><%=label%></label>',
' <% } %>',
@@ -573,7 +579,7 @@
' <% var option = options[i]; %>',
' <% var id = _.uniqueId("bf_"); %>',
' <div class="form-check">',
- ' <input type="<%=type%>" class="<%=extraClasses.join(\' \')%>" id="<%=id%>" name="<%=name%>" value="<%-formatter.fromRaw(option.value)%>" <%=rawValue == option.value ? "checked=\'checked\'" : ""%> <%=disabled ? "disabled" : ""%> <%=required ? "required" : ""%> />',
+ ' <input type="<%=type%>" class="<%=extraClasses.join(\' \')%>" id="<%=id%>" name="<%=name%>" value="<%-formatter.fromRaw(option.value)%>" <%=rawValue == option.value ? "checked=\'checked\'" : ""%> <%=disabled ? "disabled" : ""%> <%=readonly ? "readonly" : ""%> <%=required ? "required" : ""%> />',
' <label class="form-check-label" for="<%=id%>"><%-option.label%></label>',
' </div>',
' <% } %>',
view thread (7+ messages) latest in thread
reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: [email protected]
Cc: [email protected]
Subject: Re: [pgAdmin][RM4993] [Accessibility] Read-only controls and disabled controls needs to be separately identified
In-Reply-To: <CAM9w-_n8hzWzjP33g-KFy-BpBk-t6_u26U7M8atkHD8z4+3nyw@mail.gmail.com>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox