From 4030393d981302797ecf61b1f35e02d7ad5db6f5 Mon Sep 17 00:00:00 2001 From: salexdv Date: Tue, 4 May 2021 14:40:20 +0300 Subject: [PATCH] =?UTF-8?q?=D0=93=D0=B5=D0=BD=D0=B5=D1=80=D0=B0=D1=86?= =?UTF-8?q?=D0=B8=D1=8F=20=D1=81=D0=BE=D0=B1=D1=8B=D1=82=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=BF=D0=B5=D1=80=D0=B5=D0=B4=20=D0=BF=D0=BE=D0=BA=D0=B0=D0=B7?= =?UTF-8?q?=D0=BE=D0=BC=20=D0=B2=D1=81=D0=BF=D0=BB=D1=8B=D0=B2=D0=B0=D1=8E?= =?UTF-8?q?=D1=89=D0=B5=D0=B9=20=D0=BF=D0=BE=D0=B4=D1=81=D0=BA=D0=B0=D0=B7?= =?UTF-8?q?=D0=BA=D0=B8=20=D0=B4=D0=BB=D1=8F=20=D1=81=D0=BB=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=20closes=20#77?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 ++ docs/before_hover_event.md | 29 +++++++++++++++++++++++++++++ src/bsl_helper.js | 32 ++++++++++++++++---------------- src/bsl_language.js | 14 ++++++++++++++ src/editor.js | 16 ++++++++++++++++ 5 files changed, 77 insertions(+), 16 deletions(-) create mode 100644 docs/before_hover_event.md diff --git a/README.md b/README.md index 24f2c71..40640e1 100644 --- a/README.md +++ b/README.md @@ -70,6 +70,7 @@ | [`enableSuggestActivationEvent`](docs/activation_event.md) | Включает/выключает генерацию события, возникающего активации пункта в списке подсказок| | [`enableBeforeShowSuggestEvent`](docs/before_suggest_event.md) | Включает/выключает генерацию события, возникающего перед появлением списка подсказок| | [`enableSelectSuggestEvent`](docs/select_suggest_event.md) | Включает/выключает генерацию события, возникающего при выборе пункта из списка подсказок| +| [`enableBeforeHoverEvent`](docs/before_hover_event.md) | Включает/выключает генерацию события, возникающего перед появлением всплывающей подсказки для слова| | [`switchQueryMode`](docs/switch_query.md) | Переключение между режимом запроса и режимом редактирования кода | | [`compare`](docs/compare.md) | Включает/выключает режим сравнения текстов | | `nextDiff` | Переход с следующему изменению в режиме сравнения | @@ -114,6 +115,7 @@ | `EVENT_ON_ACTIVATE_SUGGEST_ROW`| При активации пункта в текущем списке подсказок [(подробнее)](docs/activation_event.md) | | `EVENT_BEFORE_SHOW_SUGGEST` | Перед появлением списка подсказок [(подробнее)](docs/before_suggest_event.md) | | `EVENT_ON_SELECT_SUGGEST_ROW` | При выборе пункта из списка подсказок [(подробнее)](docs/select_suggest_event.md) | +| `EVENT_BEFORE_HOVER` | Перед появлением всплывающей подсказки для слова [(подробнее)](docs/before_hover_event.md.md) | *Перед началом работы с редактором из 1С Предпрития желательно вызвать функцию инициализации и передать в нее текущую версию платформы.* Пример: diff --git a/docs/before_hover_event.md b/docs/before_hover_event.md new file mode 100644 index 0000000..0bcf11b --- /dev/null +++ b/docs/before_hover_event.md @@ -0,0 +1,29 @@ +# Функция *enableBeforeHoverEvent* +## Назначение функции +Функция включает/выключает генерацию события *EVENT_BEFORE_HOVER*, которое возникает перед появлением всплывающей подсказки для слова при наведении мыши + +## Параметры функции +* **enabled** - *boolean*, активность события + +## Пример вызова +```javascript +// Включение генерации события +enableBeforeHoverEvent(true); + +// Отключение генерации события +enableBeforeHoverEvent(false); +``` + +## Пример параметров генерируемого события +```json +{ + "word": { + "word": "Документы", + "startColumn": 8, + "endColumn": 17 + }, + "token": "identifierbsl", + "line": 4, + "column": 12 +} +``` \ No newline at end of file diff --git a/src/bsl_helper.js b/src/bsl_helper.js index ea89db1..32b903f 100644 --- a/src/bsl_helper.js +++ b/src/bsl_helper.js @@ -4201,6 +4201,21 @@ class bslHelper { */ getHover() { + for (const [key, value] of Object.entries(customHovers)) { + + if (key.toLowerCase() == this.word && value) { + + return { + range: new monaco.Range(this.lineNumber, this.column, this.lineNumber, this.model.getLineMaxColumn(this.lineNumber)), + contents: [ + { value: value } + ] + }; + + } + + } + for (const [key, value] of Object.entries(bslGlobals)) { for (const [ikey, ivalue] of Object.entries(value)) { @@ -4231,22 +4246,7 @@ class bslHelper { } } - - for (const [key, value] of Object.entries(customHovers)) { - - if (key.toLowerCase() == this.word && value) { - - return { - range: new monaco.Range(this.lineNumber, this.column, this.lineNumber, this.model.getLineMaxColumn(this.lineNumber)), - contents: [ - { value: value } - ] - }; - - } - - } - + return null; } diff --git a/src/bsl_language.js b/src/bsl_language.js index 45ed9c3..665c7fc 100644 --- a/src/bsl_language.js +++ b/src/bsl_language.js @@ -427,8 +427,22 @@ define([], function () { }, hoverProvider: { provideHover: function (model, position) { + + if (generateBeforeHoverEvent) { + let bsl = new bslHelper(model, position); + let token = bsl.getLastToken(); + let params = { + word: model.getWordAtPosition(position), + token: token, + line: position.lineNumber, + column: position.column + } + sendEvent('EVENT_BEFORE_HOVER', params); + } + let bsl = new bslHelper(model, position); return bsl.getHover(); + } }, formatProvider: { diff --git a/src/editor.js b/src/editor.js index e9e9e51..31322ea 100644 --- a/src/editor.js +++ b/src/editor.js @@ -21,6 +21,7 @@ define(['bslGlobals', 'bslMetadata', 'snippets', 'bsl_language', 'vs/editor/edit suggestObserver = null; generateBeforeShowSuggestEvent = false; generateSelectSuggestEvent = false; + generateBeforeHoverEvent = false; statusBarWidget = null; reserMark = function() { @@ -742,6 +743,12 @@ define(['bslGlobals', 'bslMetadata', 'snippets', 'bsl_language', 'vs/editor/edit } + enableBeforeHoverEvent = function(enabled) { + + generateBeforeHoverEvent = enabled; + + } + hideSuggestionsList = function() { let widget = document.querySelector('.suggest-widget'); @@ -750,6 +757,15 @@ define(['bslGlobals', 'bslMetadata', 'snippets', 'bsl_language', 'vs/editor/edit } + hideHoverList = function() { + + let hovers = document.querySelectorAll('.monaco-editor-hover .hover-row'); + hovers.forEach(function(hover){ + hover.remove(); + }); + + } + openSearchWidget = function() { editor.trigger('', 'actions.find');