From ccd6a46247a6c63057672e89d283d8ea7233a0f9 Mon Sep 17 00:00:00 2001 From: salexdv Date: Thu, 22 Apr 2021 22:18:43 +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=D1=80=D0=B8=20=D0=B2=D1=8B=D0=B1=D0=BE=D1=80=D0=B5=20?= =?UTF-8?q?=D1=81=D1=82=D1=80=D0=BE=D0=BA=D0=B8=20=D0=B8=D0=B7=20=D1=81?= =?UTF-8?q?=D0=BF=D0=B8=D1=81=D0=BA=D0=B0=20=D0=BF=D0=BE=D0=B4=D1=81=D0=BA?= =?UTF-8?q?=D0=B0=D0=B7=D0=BE=D0=BA=20closes=20#56?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 5 ++++- docs/before_suggest_event.md | 3 +-- docs/select_suggest_event.md | 40 ++++++++++++++++++++++++++++++++++++ src/editor.js | 25 +++++++++++++++++++--- 4 files changed, 67 insertions(+), 6 deletions(-) create mode 100644 docs/select_suggest_event.md diff --git a/README.md b/README.md index 051c423..cfcbc4b 100644 --- a/README.md +++ b/README.md @@ -70,6 +70,7 @@ | [`enableModificationEvent`](docs/modification_event.md) | Включает/выключает генерацию события, возникающего при изменении содержимого редактора| | [`enableSuggestActivationEvent`](docs/activation_event.md) | Включает/выключает генерацию события, возникающего активации пункта в списке подсказок| | [`enableBeforeShowSuggestEvent`](docs/before_suggest_event.md) | Включает/выключает генерацию события, возникающего перед появлением списка подсказок| +| [`enableSelectSuggestEvent`](docs/select_suggest_event.md) | Включает/выключает генерацию события, возникающего при выборе пункта из списка подсказок| | [`switchQueryMode`](docs/switch_query.md) | Переключение между режимом запроса и режимом редактирования кода | | [`compare`](docs/compare.md) | Включает/выключает режим сравнения текстов | | `nextDiff` | Переход с следующему изменению в режиме сравнения | @@ -103,7 +104,9 @@ | `EVENT_CONTENT_CHANGED` | При любом изменении содержимого редактора. Вкл/откл через *enableModificationEvent* | | `EVENT_GET_METADATA` | Генерируется при отсутствии метаданных. В параметрах передается имя запрашиваемых метаданных | | `EVENT_XXX` | При выборе пользовательского пункта меню. *addContextMenuItem('Мой пункт', 'EVENT_MY')* | -| `EVENT_ON_ACTIVATE_SUGGEST_ROW`| При активации пункта в текущем списке подсказок | +| `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) | *Перед началом работы с редактором из 1С Предпрития желательно вызвать функцию инициализации и передать в нее текущую версию платформы.* Пример: diff --git a/docs/before_suggest_event.md b/docs/before_suggest_event.md index 092cc52..2a14385 100644 --- a/docs/before_suggest_event.md +++ b/docs/before_suggest_event.md @@ -20,8 +20,7 @@ enableBeforeShowSuggestEvent(false); "trigger": ".", "current_word": "", "last_word": "авансовыйотчет", - "last_expression": "документы.авансовыйотчет.", - "focused": "Выбрать", + "last_expression": "документы.авансовыйотчет.", "rows": [ "Выбрать", "НайтиПоНомеру", diff --git a/docs/select_suggest_event.md b/docs/select_suggest_event.md new file mode 100644 index 0000000..53915ee --- /dev/null +++ b/docs/select_suggest_event.md @@ -0,0 +1,40 @@ +# Функция *enableSelectSuggestEvent* +## Назначение функции +Функция включает/выключает генерацию события *EVENT_ON_SELECT_SUGGEST_ROW*, которое возникает при выборе пункта из списка подсказок + +## Параметры функции +* **enabled** - *boolean*, активность события + +## Пример вызова +```javascript +// Включение генерации события +enableSelectSuggestEvent(true); + +// Отключение генерации события +enableSelectSuggestEvent(false); +``` + +## Пример параметров генерируемого события +```json +{ + "trigger": ".", + "current_word": "", + "last_word": "авансовыйотчет", + "last_expression": "документы.авансовыйотчет.", + "selected": "Выбрать", + "rows": [ + "Выбрать", + "НайтиПоНомеру", + "НайтиПоРеквизиту", + "ПолучитьДанныеВыбора", + "ПолучитьМакет", + "ПолучитьСсылку", + "ПолучитьФорму", + "ПолучитьФормуВыбора", + "ПолучитьФормуНовогоДокумента", + "ПолучитьФормуСписка", + "ПустаяСсылка", + "СоздатьДокумент" + ] +} +``` \ No newline at end of file diff --git a/src/editor.js b/src/editor.js index fde15b6..3819add 100644 --- a/src/editor.js +++ b/src/editor.js @@ -20,6 +20,7 @@ define(['bslGlobals', 'bslMetadata', 'snippets', 'bsl_language', 'vs/editor/edit err_tid = 0; suggestObserver = null; generateBeforeShowSuggestEvent = false; + generateSelectSuggestEvent = false; reserMark = function() { @@ -670,7 +671,7 @@ define(['bslGlobals', 'bslMetadata', 'snippets', 'bsl_language', 'vs/editor/edit } - genarateEventWithSuggestData = function(eventName, suggestRows, trigger, focused) { + genarateEventWithSuggestData = function(eventName, suggestRows, trigger, extra) { let bsl = new bslHelper(editor.getModel(), editor.getPosition()); @@ -678,10 +679,14 @@ define(['bslGlobals', 'bslMetadata', 'snippets', 'bsl_language', 'vs/editor/edit trigger: trigger, current_word: bsl.word, last_word: bsl.lastRawExpression, - last_expression: bsl.lastExpression, - focused: focused, + last_expression: bsl.lastExpression, rows: suggestRows } + + if (eventName == 'EVENT_ON_ACTIVATE_SUGGEST_ROW') + eventParams['focused'] = extra; + else if (eventName == 'EVENT_ON_SELECT_SUGGEST_ROW') + eventParams['selected'] = extra; sendEvent(eventName, eventParams); @@ -730,6 +735,12 @@ define(['bslGlobals', 'bslMetadata', 'snippets', 'bsl_language', 'vs/editor/edit } + enableSelectSuggestEvent = function(enabled) { + + generateSelectSuggestEvent = enabled; + + } + hideSuggestionsList = function() { let widget = document.querySelector('.suggest-widget'); @@ -808,6 +819,14 @@ define(['bslGlobals', 'bslMetadata', 'snippets', 'bsl_language', 'vs/editor/edit if (e.code == 'ArrowUp' && editor.getPosition().lineNumber == 1) scrollToTop(); + else if (e.code == 'Enter' && generateSelectSuggestEvent) { + let element = document.querySelector('.monaco-list-row.focused'); + if (element) { + let rows = getSuggestWidgetRows(element); + genarateEventWithSuggestData('EVENT_ON_SELECT_SUGGEST_ROW', rows, 'selection', element.getAttribute('aria-label')); + } + } + });