1
0
mirror of https://github.com/salexdv/bsl_console.git synced 2025-02-01 13:08:06 +02:00

Генерация события при активации строки списка подсказок

This commit is contained in:
salexdv 2021-04-22 11:46:55 +03:00
parent 154dc73bb2
commit cad373a31e
3 changed files with 109 additions and 2 deletions

View File

@ -68,6 +68,7 @@
| `enableQuickSuggestions` | Включает/выключает режим быстрых подсказок |
| `minimap` | Включает/выключает отображение карты кода |
| [`enableModificationEvent`](docs/modification_event.md) | Включает/выключает генерацию события, возникающего при изменении содержимого редактора|
| [`enableSuggestActivationEvent`](docs/activation_event.md) | Включает/выключает генерацию события, возникающего активации пункта в списке подсказок|
| [`switchQueryMode`](docs/switch_query.md) | Переключение между режимом запроса и режимом редактирования кода |
| [`compare`](docs/compare.md) | Включает/выключает режим сравнения текстов |
| `nextDiff` | Переход с следующему изменению в режиме сравнения |
@ -100,6 +101,7 @@
| `EVENT_CONTENT_CHANGED` | При любом изменении содержимого редактора. Вкл/откл через *enableModificationEvent* |
| `EVENT_GET_METADATA` | Генерируется при отсутствии метаданных. В параметрах передается имя запрашиваемых метаданных |
| `EVENT_XXX` | При выборе пользовательского пункта меню. *addContextMenuItem('Мой пункт', 'EVENT_MY')* |
| `EVENT_ON_ACTIVATE_SUGGEST_ROW`| При активации пункта в текущем списке подсказок |
*Перед началом работы с редактором из 1С Предпрития желательно вызвать функцию инициализации и передать в нее текущую версию платформы.*
Пример:

39
docs/activation_event.md Normal file
View File

@ -0,0 +1,39 @@
# Функция *enableSuggestActivationEvent*
## Назначение функции
Функция включает/выключает генерацию события *EVENT_ON_ACTIVATE_SUGGEST_ROW*, которое возникает при активации пункта в текущем списке подсказок
## Параметры функции
* **enabled** - *boolean*, активность события
## Пример вызова
```javascript
// Включение генерации события
enableSuggestActivationEvent(true);
// Отключение генерации события
enableSuggestActivationEvent(false);
```
## Пример генерируемого события
```json
{
"current_word": "",
"last_word": "авансовыйотчет",
"last_expression": "документы.авансовыйотчет.",
"focused": "Выбрать",
"rows": [
"Выбрать",
"НайтиПоНомеру",
"НайтиПоРеквизиту",
"ПолучитьДанныеВыбора",
"ПолучитьМакет",
"ПолучитьСсылку",
"ПолучитьФорму",
"ПолучитьФормуВыбора",
"ПолучитьФормуНовогоДокумента",
"ПолучитьФормуСписка",
"ПустаяСсылка",
"СоздатьДокумент"
]
}
```

View File

@ -18,6 +18,7 @@ define(['bslGlobals', 'bslMetadata', 'snippets', 'bsl_language', 'vs/editor/edit
customSuggestions = [];
contextMenuEnabled = false;
err_tid = 0;
suggestObserver = null;
reserMark = function() {
@ -651,6 +652,71 @@ define(['bslGlobals', 'bslMetadata', 'snippets', 'bsl_language', 'vs/editor/edit
}
function getSuggestWidgetRows(element) {
let rows = [];
for (let i = 0; i < element.parentElement.childNodes.length; i++) {
let row = element.parentElement.childNodes[i];
if (row.classList.contains('monaco-list-row'))
rows.push(row.getAttribute('aria-label'));
}
return rows;
}
enableSuggestActivationEvent = function (enabled) {
if (suggestObserver != null) {
suggestObserver.disconnect();
suggestObserver = null;
}
if (enabled) {
suggestObserver = new MutationObserver(function (mutations) {
mutations.forEach(function (mutation) {
if (mutation.target.classList.contains('monaco-list-rows') && mutation.addedNodes.length) {
let element = mutation.addedNodes[0];
if (element.classList.contains('monaco-list-row') && element.classList.contains('focused')) {
let bsl = new bslHelper(editor.getModel(), editor.getPosition());
eventParams = {
current_word: bsl.word,
last_word: bsl.lastRawExpression,
last_expression: bsl.lastExpression,
focused: element.getAttribute('aria-label'),
rows: getSuggestWidgetRows(element)
}
sendEvent('EVENT_ON_ACTIVATE_SUGGEST_ROW', eventParams);
}
}
})
});
suggestObserver.observe(document, {
childList: true,
subtree: true,
});
}
}
editor = undefined;
// Register languages
@ -685,7 +751,7 @@ define(['bslGlobals', 'bslMetadata', 'snippets', 'bsl_language', 'vs/editor/edit
theme: "bsl-white",
value: getCode(),
language: language.id,
contextmenu: true,
contextmenu: false,
wordBasedSuggestions: false,
customOptions: true
});
@ -739,5 +805,5 @@ define(['bslGlobals', 'bslMetadata', 'snippets', 'bsl_language', 'vs/editor/edit
}
});
});