mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-07-19 00:59:40 +03:00
bd86ece90e
getFormState().groups → [{name, title, collapsed}] для сворачиваемых
групп (оба варианта ControlRepresentation: заголовок-гиперссылка и
картинка-каретка #titleBtn). Обычные несворачиваемые группы не
попадают. Состояние — по display первого контент-сиблинга за #title_div
(переживает свободные элементы между группами: при обходе Form.xml дети
группы идут до следующего сиблинга).
clickElement(title, {expand}/{expand:false}/{toggle}) раскрывает/
сворачивает группу — единый словарь с грид-узлами/деревьями, клик по
#titleBtn (вариант «картинка») или заголовку-гиперссылке. Новый
kind:'formGroup' в findClickTargetScript + хендлер click-group.mjs.
Фикстура СтраницаНастроек расширена вариантами A/B + негатив (обычная
группа) + стресс-привязка (свободный элемент между группами); тест
25-decoration-form покрывает чтение и expand/collapse/toggle. Полный
регресс 29 passed.
Popup-группы: содержимое в отдельном слое, состояние пока не читается
надёжно (follow-up).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
30 lines
1.8 KiB
JavaScript
30 lines
1.8 KiB
JavaScript
// web-test forms/click-group v1.0 — click handler for collapsible/popup form-group titles.
|
|
// Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
|
//
|
|
// Reuses the tree/grid expand vocabulary so the model has ONE mental model:
|
|
// clickElement('<заголовок группы>', { expand: true }) — раскрыть (идемпотентно)
|
|
// clickElement('<заголовок группы>', { expand: false }) — свернуть (идемпотентно)
|
|
// clickElement('<заголовок группы>', { toggle: true }) — переключить
|
|
// clickElement('<заголовок группы>') — переключить (голый клик)
|
|
//
|
|
// target.collapsed приходит из findClickTargetScript (по display первого контент-сиблинга).
|
|
|
|
import { waitForStable } from '../core/wait.mjs';
|
|
import { modifierClick, returnFormState } from '../core/helpers.mjs';
|
|
import { shouldClickToggle } from '../table/grid-toggle.mjs';
|
|
|
|
export async function clickFormGroupTarget(target, ctx) {
|
|
const { formNum, modifier, toggle, expand } = ctx;
|
|
// shouldClickToggle ждёт { isExpanded }; при неизвестном состоянии (undefined) кликаем всегда.
|
|
const state = target.collapsed == null ? null : { isExpanded: !target.collapsed };
|
|
const shouldClick = shouldClickToggle(state, expand, toggle);
|
|
if (shouldClick) await modifierClick(target.x, target.y, modifier);
|
|
await waitForStable(formNum);
|
|
return returnFormState({
|
|
clicked: { kind: 'formGroup', name: target.name, toggled: shouldClick, ...(modifier ? { modifier } : {}) },
|
|
hint: shouldClick
|
|
? 'Group toggled. Call getFormState — its groups[].collapsed and revealed/hidden content update.'
|
|
: 'Group already in desired state.',
|
|
});
|
|
}
|