1
0
mirror of https://github.com/salexdv/bsl_console.git synced 2025-09-16 09:06:17 +02:00

Декорация разделителя запроса в зависимости от выделения #319

This commit is contained in:
salexdv
2023-04-17 20:47:03 +03:00
parent 8b73aaf220
commit 64dce7ff41
2 changed files with 62 additions and 11 deletions

View File

@@ -193,10 +193,18 @@
background-color: #e8ffe8;
}
.query-delimiter-selected {
background-color: #ffe877;
}
.query-delimiter-dark {
background-color: #404040;
}
.query-delimiter-dark-selected {
background-color: #062f4a;
}
.code-marker {
width: 0 !important;
height: 0 !important;

View File

@@ -37,7 +37,8 @@ define(['bslGlobals', 'bslMetadata', 'snippets', 'bsl_language', 'vs/editor/edit
editor_options = [];
snippets = {};
treeview = null;
lineNumbersDedocrations = []
lineNumbersDedocrations = [];
selectedQueryDelimiters = new Map();
// #endregion
// #region public API
@@ -1848,6 +1849,7 @@ define(['bslGlobals', 'bslMetadata', 'snippets', 'bsl_language', 'vs/editor/edit
updateStatusBar();
onChangeSnippetSelection(e);
updateSelectedQueryDelimiters(e);
});
@@ -1860,7 +1862,44 @@ define(['bslGlobals', 'bslMetadata', 'snippets', 'bsl_language', 'vs/editor/edit
}
// #endregion
// #region non-public functions
// #region non-public functions
function mapsAreEqual(map1, map2) {
let testVal;
if (map1.size !== map2.size)
return false;
for (let [key, val] of map1) {
testVal = map2.get(key);
if (testVal !== val || (testVal === undefined && !map2.has(key))) {
return false;
}
}
return true;
}
function updateSelectedQueryDelimiters(e) {
if (queryMode && editor.renderQueryDelimiters) {
let prevSelectedDelimiters = new Map(selectedQueryDelimiters);
selectedQueryDelimiters = new Map();
const matches = editor.getModel().findMatches('^\\s*;\\s*$', e.selection, true, false, null, true);
for (let idx = 0; idx < matches.length; idx++)
selectedQueryDelimiters.set(matches[idx].range.toString(), true);
if (!mapsAreEqual(prevSelectedDelimiters, selectedQueryDelimiters)) {
editor.updateDecorations([]);
}
}
}
generateEscapeEvent = function() {
let position = editor.getPosition();
@@ -2320,20 +2359,24 @@ define(['bslGlobals', 'bslMetadata', 'snippets', 'bsl_language', 'vs/editor/edit
if (queryMode && editor.renderQueryDelimiters) {
const matches = editor.getModel().findMatches('^\\s*;\\s*$', false, true, false, null, true);
let color = '#f2f2f2';
let class_name = 'query-delimiter';
const current_theme = getCurrentThemeName();
const is_dark_theme = (0 <= current_theme.indexOf('dark'));
if (is_dark_theme) {
class_name = 'query-delimiter-dark';
color = '#2d2d2d'
}
for (let idx = 0; idx < matches.length; idx++) {
let color = '#f2f2f2';
let class_name = 'query-delimiter';
if (is_dark_theme) {
class_name = 'query-delimiter-dark';
color = '#2d2d2d'
}
let match = matches[idx];
if (selectedQueryDelimiters.get(match.range.toString()))
class_name += '-selected';
decorations.push({
range: new monaco.Range(match.range.startLineNumber, 1, match.range.startLineNumber),
options: {