Hi,

Please find patch to add preferences for brace matching and auto brace
closing in SQL editor.
RM#2513

--
Regards,
Murtuza Zabuawala
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company
diff --git a/web/pgadmin/browser/__init__.py b/web/pgadmin/browser/__init__.py
index c6c5545..77e052f 100644
--- a/web/pgadmin/browser/__init__.py
+++ b/web/pgadmin/browser/__init__.py
@@ -549,6 +549,12 @@ def browser_js():
     editor_wrap_code_pref = prefs.preference('wrap_code')
     editor_wrap_code = editor_wrap_code_pref.get()
 
+    brace_matching_pref = prefs.preference('brace_matching')
+    brace_matching = brace_matching_pref.get()
+
+    insert_pair_brackets_perf = prefs.preference('insert_pair_brackets')
+    insert_pair_brackets = insert_pair_brackets_perf.get()
+
     for submodule in current_blueprint.submodules:
         snippets.extend(submodule.jssnippets)
     return make_response(
@@ -561,6 +567,8 @@ def browser_js():
             editor_tab_size=editor_tab_size,
             editor_use_spaces=editor_use_spaces,
             editor_wrap_code=editor_wrap_code,
+            editor_brace_matching=brace_matching,
+            editor_insert_pair_brackets=insert_pair_brackets,
             _=gettext
         ),
         200, {'Content-Type': 'application/x-javascript'})
diff --git a/web/pgadmin/browser/templates/browser/js/browser.js 
b/web/pgadmin/browser/templates/browser/js/browser.js
index 4494e7a..e587348 100644
--- a/web/pgadmin/browser/templates/browser/js/browser.js
+++ b/web/pgadmin/browser/templates/browser/js/browser.js
@@ -7,7 +7,8 @@ define(
     'pgadmin.alertifyjs', 'pgadmin.browser.messages',
     'pgadmin.browser.menu', 'pgadmin.browser.panel',
     'pgadmin.browser.error', 'pgadmin.browser.frame',
-    'pgadmin.browser.node', 'pgadmin.browser.collection'
+    'pgadmin.browser.node', 'pgadmin.browser.collection',
+    'codemirror/addon/edit/matchbrackets', 
'codemirror/addon/edit/closebrackets'
   ], function(
     gettext, url_for, require, $, _, S, Bootstrap, pgAdmin, Alertify,
     CodeMirror, checkNodeVisibility
@@ -384,7 +385,9 @@ define(
             readOnly: true,
             extraKeys: pgAdmin.Browser.editor_shortcut_keys,
             tabSize: pgAdmin.Browser.editor_options.tabSize,
-            lineWrapping: pgAdmin.Browser.editor_options.wrapCode
+            lineWrapping: pgAdmin.Browser.editor_options.wrapCode,
+            autoCloseBrackets: 
pgAdmin.Browser.editor_options.insert_pair_brackets,
+            matchBrackets: pgAdmin.Browser.editor_options.brace_matching
           });
 
       setTimeout(function() {
@@ -1830,7 +1833,9 @@ define(
     },
     editor_options: {
       tabSize: '{{ editor_tab_size }}',
-      wrapCode: '{{ editor_wrap_code }}' == 'True'
+      wrapCode: '{{ editor_wrap_code }}' == 'True',
+      insert_pair_brackets: '{{ editor_insert_pair_brackets }}' == 'True',
+      brace_matching: '{{ editor_brace_matching }}' == 'True'
     }
 
   });
diff --git a/web/pgadmin/static/css/codemirror.overrides.css 
b/web/pgadmin/static/css/codemirror.overrides.css
new file mode 100644
index 0000000..b486ee4
--- /dev/null
+++ b/web/pgadmin/static/css/codemirror.overrides.css
@@ -0,0 +1,5 @@
+/* To override inbuilt Green color for matchingbracket */
+.cm-s-default .CodeMirror-matchingbracket {
+    color: #333333 !important;
+    background-color: #e8e8e8 !important;
+}
\ No newline at end of file
diff --git a/web/pgadmin/static/js/backform.pgadmin.js 
b/web/pgadmin/static/js/backform.pgadmin.js
index a82205e..27d5b4c 100644
--- a/web/pgadmin/static/js/backform.pgadmin.js
+++ b/web/pgadmin/static/js/backform.pgadmin.js
@@ -5,7 +5,8 @@
     define([
       'sources/gettext', 'underscore', 'underscore.string', 'jquery',
       'backbone', 'backform', 'backgrid', 'codemirror', 'pgadmin.backgrid',
-      'codemirror/mode/sql/sql', 'select2'
+      'codemirror/mode/sql/sql', 'select2', 
'codemirror/addon/edit/matchbrackets',
+      'codemirror/addon/edit/closebrackets'
       ],
      function(gettext, _, S, $, Backbone, Backform, Backgrid, CodeMirror) {
       // Export global even in AMD case in case this script is loaded with
@@ -1405,7 +1406,9 @@
         readOnly: true,
         extraKeys: pgAdmin.Browser.editor_shortcut_keys,
         tabSize: pgAdmin.Browser.editor_options.tabSize,
-        lineWrapping: pgAdmin.Browser.editor_options.wrapCode
+        lineWrapping: pgAdmin.Browser.editor_options.wrapCode,
+        autoCloseBrackets: pgAdmin.Browser.editor_options.insert_pair_brackets,
+        matchBrackets: pgAdmin.Browser.editor_options.brace_matching
       });
 
       /*
@@ -2014,10 +2017,12 @@
       self.sqlCtrl = CodeMirror.fromTextArea(
             (self.$el.find("textarea")[0]), {
             lineNumbers: true,
-            mode: "text/x-sql",
+            mode: "text/x-pgsql",
             extraKeys: pgAdmin.Browser.editor_shortcut_keys,
             tabSize: pgAdmin.Browser.editor_options.tabSize,
-            lineWrapping: pgAdmin.Browser.editor_options.wrapCode
+            lineWrapping: pgAdmin.Browser.editor_options.wrapCode,
+            autoCloseBrackets: 
pgAdmin.Browser.editor_options.insert_pair_brackets,
+            matchBrackets: pgAdmin.Browser.editor_options.brace_matching
           });
 
       // Disable editor
diff --git a/web/pgadmin/templates/base.html b/web/pgadmin/templates/base.html
index 83736b8..cf9cfd2 100755
--- a/web/pgadmin/templates/base.html
+++ b/web/pgadmin/templates/base.html
@@ -56,6 +56,7 @@
     <link type="text/css" rel="stylesheet" href="{{ url_for('static', 
filename='css/bootstrap.overrides.css') }}"/>
     <link type="text/css" rel="stylesheet" href="{{ url_for('static', 
filename='css/aci_tree.overrides.css') }}"/>
     <link type="text/css" rel="stylesheet" href="{{ url_for('static', 
filename='css/select2.overrides.css') }}"/>
+    <link type="text/css" rel="stylesheet" href="{{ url_for('static', 
filename='css/codemirror.overrides.css') }}"/>
     <link type="text/css" rel="stylesheet" href="{{ url_for('static', 
filename='css/pgadmin.css') }}"/>
     <link type="text/css" rel="stylesheet" href="{{ url_for('static', 
filename='css/pgadmin.style.css') }}"/>
     {% block css_link %}{% endblock %}
diff --git a/web/pgadmin/tools/datagrid/templates/datagrid/js/datagrid.js 
b/web/pgadmin/tools/datagrid/templates/datagrid/js/datagrid.js
index 768e119..aa04c2f 100644
--- a/web/pgadmin/tools/datagrid/templates/datagrid/js/datagrid.js
+++ b/web/pgadmin/tools/datagrid/templates/datagrid/js/datagrid.js
@@ -1,6 +1,8 @@
 define([
   'sources/gettext', 'sources/url_for', 'jquery','alertify', 
'pgadmin','codemirror',
-  'sources/sqleditor_utils', 'pgadmin.browser', 'wcdocker'
+  'sources/sqleditor_utils', 'pgadmin.browser', 'wcdocker',
+  'codemirror/addon/edit/matchbrackets', 'codemirror/addon/edit/closebrackets'
+
 ], function(gettext, url_for, $, alertify, pgAdmin, codemirror, 
sqlEditorUtils) {
     // Some scripts do export their object in the window only.
     // Generally the one, which do no have AMD support.
@@ -263,13 +265,13 @@ define([
                 // Apply CodeMirror to filter text area.
                 this.filter_obj = CodeMirror.fromTextArea($sql_filter.get(0), {
                   lineNumbers: true,
-                  lineWrapping: true,
-                  matchBrackets: true,
                   indentUnit: 4,
                   mode: "text/x-pgsql",
                   extraKeys: pgBrowser.editor_shortcut_keys,
                   tabSize: pgBrowser.editor_options.tabSize,
-                  lineWrapping: pgAdmin.Browser.editor_options.wrapCode
+                  lineWrapping: pgAdmin.Browser.editor_options.wrapCode,
+                  autoCloseBrackets: 
pgAdmin.Browser.editor_options.insert_pair_brackets,
+                  matchBrackets: pgAdmin.Browser.editor_options.brace_matching
                 });
               },
 
diff --git a/web/pgadmin/tools/debugger/templates/debugger/js/direct.js 
b/web/pgadmin/tools/debugger/templates/debugger/js/direct.js
index fc01b21..9e5b7d5 100644
--- a/web/pgadmin/tools/debugger/templates/debugger/js/direct.js
+++ b/web/pgadmin/tools/debugger/templates/debugger/js/direct.js
@@ -4,7 +4,9 @@ define([
   'pgadmin.tools.debugger.ui', 'wcdocker', 'pgadmin.backform',
   'pgadmin.backgrid', 'codemirror/addon/selection/active-line',
   'codemirror/addon/fold/foldgutter', 'codemirror/addon/fold/foldcode',
-  'pgadmin-sqlfoldcode'
+  'pgadmin-sqlfoldcode', 'codemirror/addon/edit/matchbrackets',
+  'codemirror/addon/edit/closebrackets',
+
 ], function(
   gettext, $, _, S, Alertify, pgAdmin, pgBrowser, Backbone, Backgrid,
   CodeMirror, Backform, debug_function_again
@@ -1605,7 +1607,9 @@ define([
           readOnly: true,
           extraKeys: pgAdmin.Browser.editor_shortcut_keys,
           tabSize: pgAdmin.Browser.editor_options.tabSize,
-          lineWrapping: pgAdmin.Browser.editor_options.wrapCode
+          lineWrapping: pgAdmin.Browser.editor_options.wrapCode,
+          autoCloseBrackets: 
pgAdmin.Browser.editor_options.insert_pair_brackets,
+          matchBrackets: pgAdmin.Browser.editor_options.brace_matching
         });
 
         // On loading the docker, register the callbacks
diff --git a/web/pgadmin/tools/sqleditor/__init__.py 
b/web/pgadmin/tools/sqleditor/__init__.py
index c6fcdc3..bfa59c6 100644
--- a/web/pgadmin/tools/sqleditor/__init__.py
+++ b/web/pgadmin/tools/sqleditor/__init__.py
@@ -193,6 +193,21 @@ class SqlEditorModule(PgAdminModule):
             help_str=gettext('Specifies whether or not to wrap SQL code in 
editor.')
         )
 
+        self.insert_pair_brackets = self.preference.register(
+            'Options', 'insert_pair_brackets',
+            gettext("Insert pair brackets?"), 'boolean', False,
+            category_label=gettext('Options'),
+            help_str=gettext('Specifies whether or not to insert pair brackets 
in editor.')
+        )
+
+        self.brace_matching = self.preference.register(
+            'Options', 'brace_matching',
+            gettext("Brace matching?"), 'boolean', False,
+            category_label=gettext('Options'),
+            help_str=gettext('Specifies whether or not to highlight matched 
braces in editor.')
+        )
+
+
 blueprint = SqlEditorModule(MODULE_NAME, __name__, static_url_path='/static')
 
 
diff --git a/web/pgadmin/tools/sqleditor/templates/sqleditor/js/sqleditor.js 
b/web/pgadmin/tools/sqleditor/templates/sqleditor/js/sqleditor.js
index eeb320e..6d8ce1e 100644
--- a/web/pgadmin/tools/sqleditor/templates/sqleditor/js/sqleditor.js
+++ b/web/pgadmin/tools/sqleditor/templates/sqleditor/js/sqleditor.js
@@ -25,6 +25,8 @@ define([
     'codemirror/addon/search/search',
     'codemirror/addon/search/searchcursor',
     'codemirror/addon/search/jump-to-line',
+    'codemirror/addon/edit/matchbrackets',
+    'codemirror/addon/edit/closebrackets',
 
     'backgrid.sizeable.columns',
     'slick.pgadmin.formatters',
@@ -111,7 +113,6 @@ define([
         $('.editor-title').text(_.unescape(self.editor_title));
         self.filter_obj = CodeMirror.fromTextArea(filter.get(0), {
             lineNumbers: true,
-            matchBrackets: true,
             indentUnit: 4,
             mode: "text/x-pgsql",
             foldOptions: {
@@ -124,7 +125,9 @@ define([
             gutters: ["CodeMirror-linenumbers", "CodeMirror-foldgutter"],
             extraKeys: pgBrowser.editor_shortcut_keys,
             tabSize: pgAdmin.Browser.editor_options.tabSize,
-            lineWrapping: pgAdmin.Browser.editor_options.wrapCode
+            lineWrapping: pgAdmin.Browser.editor_options.wrapCode,
+            autoCloseBrackets: 
pgAdmin.Browser.editor_options.insert_pair_brackets,
+            matchBrackets: pgAdmin.Browser.editor_options.brace_matching
         });
 
         // Create main wcDocker instance
@@ -154,7 +157,6 @@ define([
 
         self.query_tool_obj = CodeMirror.fromTextArea(text_container.get(0), {
             lineNumbers: true,
-            matchBrackets: true,
             indentUnit: 4,
             styleSelectedText: true,
             mode: "text/x-pgsql",
@@ -169,7 +171,9 @@ define([
             extraKeys: pgBrowser.editor_shortcut_keys,
             tabSize: pgAdmin.Browser.editor_options.tabSize,
             lineWrapping: pgAdmin.Browser.editor_options.wrapCode,
-            scrollbarStyle: 'simple'
+            scrollbarStyle: 'simple',
+            autoCloseBrackets: 
pgAdmin.Browser.editor_options.insert_pair_brackets,
+            matchBrackets: pgAdmin.Browser.editor_options.brace_matching
         });
 
         // Refresh Code mirror on SQL panel resize to

Reply via email to