mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-08-11 22:13:20 +03:00
1. Версия v1.16 → v1.17 во всех заголовках движка.
2. browser.mjs стал чистым facade — только re-exports, 0 функций определено.
Было: 249 LOC с 4 настоящими функциями (saveClipboard, restoreClipboard,
pasteText, getFormState) — теперь 57 LOC чистых re-export'ов.
3. engine/core/clipboard.mjs — новый модуль:
pasteText + saveClipboard + restoreClipboard (~85 LOC, был в browser.mjs).
4. engine/core/form-state.mjs — новый модуль:
getFormState — центральный читатель состояния формы (~30 LOC).
5. Убрано 12 циклических импортов из engine/* → ../../browser.mjs:
- Все читатели pasteText теперь импортят из engine/core/clipboard.mjs
- Все читатели getFormState — из engine/core/form-state.mjs
- session.mjs → nav/navigation.mjs (getPageState напрямую)
- filter.mjs → core/click.mjs (clickElement напрямую)
Граф зависимостей стал деревом (без обратных рёбер).
6. Убраны _-префиксы у 9 функций, которые стали приватными внутри своих
модулей (раньше _ означало "приватная для browser.mjs"):
_detectPlatformDialogs → detectPlatformDialogs
_closePlatformDialogs → closePlatformDialogs
_parseErrorStack → parseErrorStack
_fetchStackViaReport → fetchStackViaReport
_fetchStackViaHamburger → fetchStackViaHamburger
_logoutSlot → logoutSlot
_saveActiveSlot → saveActiveSlot
_activateSlot → activateSlot
_attachSessionListeners → attachSessionListeners
Публичный API: 56 экспортов, идентичный исходному.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
61 lines
2.4 KiB
JavaScript
61 lines
2.4 KiB
JavaScript
// web-test forms/close v1.17 — Close current form via Escape, handle save-changes confirmation.
|
|
// Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
|
|
|
import { page, recorder, ensureConnected } from '../core/state.mjs';
|
|
import { detectFormScript } from '../../dom.mjs';
|
|
import { dismissPendingErrors, checkForErrors, detectPlatformDialogs, closePlatformDialogs } from '../core/errors.mjs';
|
|
import { waitForStable } from '../core/wait.mjs';
|
|
import { getFormState } from '../core/form-state.mjs';
|
|
|
|
/**
|
|
* Close the current form/dialog via Escape.
|
|
* @param {Object} [opts]
|
|
* @param {boolean} [opts.save] - Handle "Save changes?" confirmation automatically:
|
|
* true → click "Да" (save and close)
|
|
* false → click "Нет" (discard and close)
|
|
* undefined → return confirmation as hint for caller to decide
|
|
*/
|
|
export async function closeForm({ save } = {}) {
|
|
ensureConnected();
|
|
await dismissPendingErrors();
|
|
// If platform dialogs are open, close them instead of pressing Escape
|
|
const pd = await detectPlatformDialogs();
|
|
if (pd.length) {
|
|
await closePlatformDialogs();
|
|
await page.waitForTimeout(300);
|
|
const state = await getFormState();
|
|
state.closed = true;
|
|
state.closedPlatformDialogs = pd;
|
|
return state;
|
|
}
|
|
const beforeForm = await page.evaluate(detectFormScript());
|
|
await page.keyboard.press('Escape');
|
|
await waitForStable(beforeForm);
|
|
const state = await getFormState();
|
|
const err = await checkForErrors();
|
|
if (err?.confirmation) {
|
|
if (save === true || save === false) {
|
|
const label = save ? 'Да' : 'Нет';
|
|
const btnSel = `#form${err.confirmation.formNum}_container a.press.pressButton`;
|
|
const btns = await page.$$(btnSel);
|
|
for (const b of btns) {
|
|
const txt = (await b.textContent()).trim();
|
|
if (txt === label) {
|
|
if (recorder) await page.waitForTimeout(500); // show confirmation to viewer during recording
|
|
await b.click({ force: true });
|
|
await waitForStable(beforeForm);
|
|
break;
|
|
}
|
|
}
|
|
const afterState = await getFormState();
|
|
afterState.closed = afterState.form !== beforeForm;
|
|
return afterState;
|
|
}
|
|
state.confirmation = err.confirmation;
|
|
state.hint = 'Confirmation dialog shown. Click "Да" to confirm or "Нет" to cancel';
|
|
return state;
|
|
}
|
|
state.closed = state.form !== beforeForm;
|
|
return state;
|
|
}
|