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 @@ + {% 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