mirror of
https://github.com/pgadmin-org/pgadmin4.git
synced 2026-08-19 01:15:04 -05:00
Introduced an ‘Editor’ preferences category and migrated all editor related settings into it. #8861
This commit is contained in:
@@ -52,6 +52,8 @@ from pgadmin.utils.csrf import pgCSRFProtect
|
||||
from pgadmin.utils.preferences import Preferences
|
||||
from pgadmin.browser.register_browser_preferences import \
|
||||
register_browser_preferences
|
||||
from pgadmin.browser.register_editor_preferences import \
|
||||
register_editor_preferences
|
||||
from pgadmin.utils.master_password import validate_master_password, \
|
||||
set_masterpass_check_text, cleanup_master_password, get_crypt_key, \
|
||||
set_crypt_key, process_masterpass_disabled, \
|
||||
@@ -87,6 +89,7 @@ class BrowserModule(PgAdminModule):
|
||||
|
||||
def register_preferences(self):
|
||||
register_browser_preferences(self)
|
||||
register_editor_preferences(self)
|
||||
|
||||
def get_exposed_url_endpoints(self):
|
||||
"""
|
||||
|
||||
@@ -0,0 +1,357 @@
|
||||
##########################################################################
|
||||
#
|
||||
# pgAdmin 4 - PostgreSQL Tools
|
||||
#
|
||||
# Copyright (C) 2013 - 2025, The pgAdmin Development Team
|
||||
# This software is released under the PostgreSQL Licence
|
||||
#
|
||||
##########################################################################
|
||||
|
||||
from flask_babel import gettext
|
||||
from pgadmin.utils.preferences import Preferences
|
||||
from pgadmin.utils.constants import PREF_LABEL_OPTIONS,\
|
||||
PREF_LABEL_KEYBOARD_SHORTCUTS, PREF_LABEL_SQL_FORMATTING
|
||||
from pgadmin.utils import SHORTCUT_FIELDS as shortcut_fields
|
||||
|
||||
UPPER_CASE_STR = gettext('Upper case')
|
||||
LOWER_CASE_STR = gettext('Lower case')
|
||||
PRESERVE_STR = gettext('Preserve')
|
||||
|
||||
|
||||
def register_editor_preferences(self, migration_gettext=None):
|
||||
"""
|
||||
Registers the editor preferences
|
||||
"""
|
||||
# migration_getttext is used once in case of migration
|
||||
# In that case gettext will be used from migration_gettext
|
||||
# instead of flask_babel gettext.
|
||||
from flask_babel import gettext
|
||||
if migration_gettext is not None:
|
||||
gettext = migration_gettext
|
||||
|
||||
self.editor_preference = Preferences(
|
||||
'editor', gettext('Editor')
|
||||
)
|
||||
|
||||
self.editor_preference.register(
|
||||
'keyboard_shortcuts',
|
||||
'find',
|
||||
gettext('Find'),
|
||||
'keyboardshortcut',
|
||||
{
|
||||
'alt': False,
|
||||
'shift': False,
|
||||
'control': True,
|
||||
'ctrl_is_meta': True,
|
||||
'key': {
|
||||
'key_code': 70,
|
||||
'char': 'f'
|
||||
}
|
||||
},
|
||||
category_label=PREF_LABEL_KEYBOARD_SHORTCUTS,
|
||||
fields=shortcut_fields
|
||||
)
|
||||
|
||||
self.editor_preference.register(
|
||||
'keyboard_shortcuts',
|
||||
'replace',
|
||||
gettext('Replace'),
|
||||
'keyboardshortcut',
|
||||
{
|
||||
'alt': True,
|
||||
'shift': False,
|
||||
'control': True,
|
||||
'ctrl_is_meta': True,
|
||||
'key': {
|
||||
'key_code': 70,
|
||||
'char': 'f'
|
||||
}
|
||||
},
|
||||
category_label=PREF_LABEL_KEYBOARD_SHORTCUTS,
|
||||
fields=shortcut_fields
|
||||
)
|
||||
|
||||
self.editor_preference.register(
|
||||
'keyboard_shortcuts',
|
||||
'goto_line_col',
|
||||
gettext('Go to line/column'),
|
||||
'keyboardshortcut',
|
||||
{
|
||||
'alt': False,
|
||||
'shift': False,
|
||||
'control': True,
|
||||
'ctrl_is_meta': True,
|
||||
'key': {
|
||||
'key_code': 76,
|
||||
'char': 'l'
|
||||
}
|
||||
},
|
||||
category_label=PREF_LABEL_KEYBOARD_SHORTCUTS,
|
||||
fields=shortcut_fields
|
||||
)
|
||||
|
||||
self.editor_preference.register(
|
||||
'keyboard_shortcuts',
|
||||
'comment',
|
||||
gettext('Toggle comment'),
|
||||
'keyboardshortcut',
|
||||
{
|
||||
'alt': False,
|
||||
'shift': False,
|
||||
'control': True,
|
||||
'ctrl_is_meta': True,
|
||||
'key': {
|
||||
'key_code': 191,
|
||||
'char': '/'
|
||||
}
|
||||
},
|
||||
category_label=PREF_LABEL_KEYBOARD_SHORTCUTS,
|
||||
fields=shortcut_fields
|
||||
)
|
||||
|
||||
self.editor_preference.register(
|
||||
'keyboard_shortcuts',
|
||||
'format_sql',
|
||||
gettext('Format SQL'),
|
||||
'keyboardshortcut',
|
||||
{
|
||||
'alt': False,
|
||||
'shift': False,
|
||||
'control': True,
|
||||
'ctrl_is_meta': True,
|
||||
'key': {
|
||||
'key_code': 75,
|
||||
'char': 'k'
|
||||
}
|
||||
},
|
||||
category_label=PREF_LABEL_KEYBOARD_SHORTCUTS,
|
||||
fields=shortcut_fields
|
||||
)
|
||||
|
||||
self.editor_preference.register(
|
||||
'options', 'plain_editor_mode',
|
||||
gettext("Plain text mode?"), 'boolean', False,
|
||||
category_label=PREF_LABEL_OPTIONS,
|
||||
help_str=gettext(
|
||||
'When set to True, keywords won\'t be highlighted and code '
|
||||
'folding will be disabled. Plain text mode will improve editor '
|
||||
'performance with large files.'
|
||||
)
|
||||
)
|
||||
|
||||
self.editor_preference.register(
|
||||
'options', 'code_folding',
|
||||
gettext("Code folding?"), 'boolean', True,
|
||||
category_label=PREF_LABEL_OPTIONS,
|
||||
help_str=gettext(
|
||||
'Enable or disable code folding. In plain text mode, this will '
|
||||
'have no effect as code folding is always disabled in that mode. '
|
||||
'Disabling will improve editor performance with large files.'
|
||||
)
|
||||
)
|
||||
|
||||
self.editor_preference.register(
|
||||
'options', 'wrap_code',
|
||||
gettext("Line wrapping?"), 'boolean', False,
|
||||
category_label=PREF_LABEL_OPTIONS,
|
||||
help_str=gettext(
|
||||
'Specifies whether or not to wrap SQL code in the editor.'
|
||||
)
|
||||
)
|
||||
|
||||
self.editor_preference.register(
|
||||
'options', 'insert_pair_brackets',
|
||||
gettext("Insert bracket pairs?"), 'boolean', True,
|
||||
category_label=PREF_LABEL_OPTIONS,
|
||||
help_str=gettext(
|
||||
'Specifies whether or not to insert paired brackets in the '
|
||||
'editor.'
|
||||
)
|
||||
)
|
||||
|
||||
self.editor_preference.register(
|
||||
'options', 'highlight_selection_matches',
|
||||
gettext("Highlight selection matches?"), 'boolean', True,
|
||||
category_label=PREF_LABEL_OPTIONS,
|
||||
help_str=gettext(
|
||||
'Specifies whether or not to highlight matched selected text '
|
||||
'in the editor.'
|
||||
)
|
||||
)
|
||||
|
||||
self.editor_preference.register(
|
||||
'options', 'brace_matching',
|
||||
gettext("Brace matching?"), 'boolean', True,
|
||||
category_label=PREF_LABEL_OPTIONS,
|
||||
help_str=gettext(
|
||||
'Specifies whether or not to highlight matched braces '
|
||||
'in the editor.'
|
||||
)
|
||||
)
|
||||
|
||||
self.editor_preference.register(
|
||||
'options', 'sql_font_size',
|
||||
gettext("Font size"), 'numeric', '1',
|
||||
min_val=0.1,
|
||||
max_val=10,
|
||||
category_label=PREF_LABEL_OPTIONS,
|
||||
help_str=gettext(
|
||||
'The font size to use for the SQL text boxes and editors. '
|
||||
'The value specified is in "em" units, in which 1 is the '
|
||||
'default relative font size. For example, to increase the '
|
||||
'font size by 20 percent use a value of 1.2, or to reduce '
|
||||
'by 20 percent, use a value of 0.8. Minimum 0.1, maximum 10.'
|
||||
)
|
||||
)
|
||||
|
||||
self.editor_preference.register(
|
||||
'options', 'sql_font_ligatures',
|
||||
gettext("Font ligatures?"), 'boolean',
|
||||
False, category_label=PREF_LABEL_OPTIONS,
|
||||
help_str=gettext(
|
||||
'If set to true, ligatures will be enabled in SQL text boxes '
|
||||
'and editors provided the configured font family supports them.'
|
||||
)
|
||||
)
|
||||
|
||||
self.editor_preference.register(
|
||||
'options', 'sql_font_family',
|
||||
gettext("Font family"), 'text', 'Source Code Pro',
|
||||
category_label=PREF_LABEL_OPTIONS,
|
||||
help_str=gettext(
|
||||
'Specify the font family to be used for all SQL editors. '
|
||||
'The specified font should already be installed on your system. '
|
||||
'If the font is not found, the editor will fall back to the '
|
||||
'default font, Source Code Pro.'
|
||||
)
|
||||
)
|
||||
|
||||
self.editor_preference.register(
|
||||
'options', 'indent_new_line',
|
||||
gettext("Auto-indent new line?"), 'boolean', True,
|
||||
category_label=PREF_LABEL_OPTIONS,
|
||||
help_str=gettext(
|
||||
'Specifies whether the newly added line using enter key should '
|
||||
'be auto-indented or not'
|
||||
)
|
||||
)
|
||||
|
||||
self.editor_preference.register(
|
||||
'sql_formatting', 'keyword_case',
|
||||
gettext("Keyword case"), 'radioModern', 'upper',
|
||||
options=[{'label': UPPER_CASE_STR, 'value': 'upper'},
|
||||
{'label': LOWER_CASE_STR, 'value': 'lower'},
|
||||
{'label': PRESERVE_STR, 'value': 'preserve'}],
|
||||
category_label=PREF_LABEL_SQL_FORMATTING,
|
||||
help_str=gettext(
|
||||
'Convert keywords to upper, lower, or preserve casing.'
|
||||
)
|
||||
)
|
||||
|
||||
self.editor_preference.register(
|
||||
'sql_formatting', 'identifier_case',
|
||||
gettext("Identifier case"), 'radioModern', 'upper',
|
||||
options=[{'label': UPPER_CASE_STR, 'value': 'upper'},
|
||||
{'label': LOWER_CASE_STR, 'value': 'lower'},
|
||||
{'label': PRESERVE_STR, 'value': 'preserve'}],
|
||||
category_label=PREF_LABEL_SQL_FORMATTING,
|
||||
help_str=gettext(
|
||||
'Convert identifiers to upper, lower, or preserve casing.'
|
||||
)
|
||||
)
|
||||
|
||||
self.editor_preference.register(
|
||||
'sql_formatting', 'function_case',
|
||||
gettext("Function case"), 'radioModern', 'upper',
|
||||
options=[{'label': UPPER_CASE_STR, 'value': 'upper'},
|
||||
{'label': LOWER_CASE_STR, 'value': 'lower'},
|
||||
{'label': PRESERVE_STR, 'value': 'preserve'}],
|
||||
category_label=PREF_LABEL_SQL_FORMATTING,
|
||||
help_str=gettext(
|
||||
'Convert function names to upper, lower, or preserve casing.'
|
||||
)
|
||||
)
|
||||
|
||||
self.editor_preference.register(
|
||||
'sql_formatting', 'data_type_case',
|
||||
gettext("Data type case"), 'radioModern', 'upper',
|
||||
options=[{'label': UPPER_CASE_STR, 'value': 'upper'},
|
||||
{'label': LOWER_CASE_STR, 'value': 'lower'},
|
||||
{'label': PRESERVE_STR, 'value': 'preserve'}],
|
||||
category_label=PREF_LABEL_SQL_FORMATTING,
|
||||
help_str=gettext(
|
||||
'Convert data types to upper, lower, or preserve casing.'
|
||||
)
|
||||
)
|
||||
|
||||
self.editor_preference.register(
|
||||
'sql_formatting', 'spaces_around_operators',
|
||||
gettext("Spaces around operators?"), 'boolean', True,
|
||||
category_label=PREF_LABEL_SQL_FORMATTING,
|
||||
help_str=gettext('If set to True, spaces are used around all '
|
||||
'operators.')
|
||||
)
|
||||
|
||||
self.editor_preference.register(
|
||||
'sql_formatting', 'tab_size',
|
||||
gettext("Tab size"), 'integer', 4,
|
||||
min_val=2,
|
||||
max_val=8,
|
||||
category_label=PREF_LABEL_SQL_FORMATTING,
|
||||
help_str=gettext(
|
||||
'The number of spaces per tab. Minimum 2, maximum 8.'
|
||||
)
|
||||
)
|
||||
|
||||
self.editor_preference.register(
|
||||
'sql_formatting', 'use_spaces',
|
||||
gettext("Use spaces?"), 'boolean', False,
|
||||
category_label=PREF_LABEL_SQL_FORMATTING,
|
||||
help_str=gettext(
|
||||
'Specifies whether or not to insert spaces instead of tabs '
|
||||
'when the tab key or auto-indent are used.'
|
||||
)
|
||||
)
|
||||
|
||||
self.editor_preference.register(
|
||||
'sql_formatting', 'expression_width',
|
||||
gettext("Expression Width"), 'integer', 50,
|
||||
category_label=PREF_LABEL_SQL_FORMATTING,
|
||||
help_str=gettext(
|
||||
'maximum number of characters in parenthesized expressions to be '
|
||||
'kept on single line.'
|
||||
)
|
||||
)
|
||||
|
||||
self.editor_preference.register(
|
||||
'sql_formatting', 'logical_operator_new_line',
|
||||
gettext("Logical operator new line"), 'radioModern', 'before',
|
||||
options=[{'label': gettext('Before'), 'value': 'before'},
|
||||
{'label': gettext('After'), 'value': 'after'}],
|
||||
category_label=PREF_LABEL_SQL_FORMATTING,
|
||||
help_str=gettext(
|
||||
'Decides newline placement before or after logical operators '
|
||||
'(AND, OR, XOR).'
|
||||
)
|
||||
)
|
||||
|
||||
self.editor_preference.register(
|
||||
'sql_formatting', 'lines_between_queries',
|
||||
gettext("Lines between queries"), 'integer', 1,
|
||||
min_val=0,
|
||||
max_val=5,
|
||||
category_label=PREF_LABEL_SQL_FORMATTING,
|
||||
help_str=gettext(
|
||||
'Decides how many empty lines to leave between SQL statements. '
|
||||
'If zero it puts no new line.'
|
||||
)
|
||||
)
|
||||
|
||||
self.editor_preference.register(
|
||||
'sql_formatting', 'new_line_before_semicolon',
|
||||
gettext("New line before semicolon?"), 'boolean', False,
|
||||
category_label=PREF_LABEL_SQL_FORMATTING,
|
||||
help_str=gettext(
|
||||
'Whether to place query separator (;) on a separate line.'
|
||||
)
|
||||
)
|
||||
Reference in New Issue
Block a user