mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-06-13 17:34:57 +03:00
Auto-build: opencode (python) from 6d119eb
This commit is contained in:
@@ -0,0 +1,95 @@
|
||||
// web-test table/click-row v1.0 — click handlers for grid row targets: gridGroup, gridTreeNode, gridRow.
|
||||
// Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
//
|
||||
// All handlers are called by core/click.mjs dispatcher after target is found.
|
||||
// Each takes (target, ctx) where ctx = { formNum, modifier, dblclick, toggle, expand, ... }
|
||||
// and returns a form state with `clicked: { kind, name, ... }`.
|
||||
|
||||
import { waitForStable } from '../core/wait.mjs';
|
||||
import { modifierClick, returnFormState } from '../core/helpers.mjs';
|
||||
import { getGridToggleIcon, shouldClickToggle } from './grid-toggle.mjs';
|
||||
|
||||
/**
|
||||
* Click handler for gridGroup / gridParent targets (hierarchy mode).
|
||||
* With `expand`/`toggle` — click the level-indicator icon to expand/collapse the group.
|
||||
* Without — dblclick the row to enter the group / go up to parent.
|
||||
*/
|
||||
export async function clickGridGroupTarget(target, ctx) {
|
||||
const { formNum, modifier, toggle, expand } = ctx;
|
||||
if (expand != null || toggle) {
|
||||
// Expand/collapse group — click the triangle icon (.gridListH/.gridListV).
|
||||
// expand=true: only expand (skip if already expanded), expand=false: only collapse, toggle: always click.
|
||||
const levelIconInfo = await getGridToggleIcon(target, formNum, {
|
||||
iconSelector: '.gridListH, .gridListV',
|
||||
isExpandedExpr: "icon.classList.contains('gridListV')",
|
||||
});
|
||||
const shouldClick = shouldClickToggle(levelIconInfo, expand, toggle);
|
||||
if (shouldClick) {
|
||||
if (levelIconInfo) {
|
||||
await modifierClick(levelIconInfo.x, levelIconInfo.y, modifier);
|
||||
} else {
|
||||
// Fallback: dblclick (standard hierarchy navigation)
|
||||
await modifierClick(target.x, target.y, modifier, { dbl: true });
|
||||
}
|
||||
}
|
||||
await waitForStable(formNum);
|
||||
return returnFormState({
|
||||
clicked: { kind: target.kind, name: target.name, toggled: shouldClick, ...(modifier ? { modifier } : {}) },
|
||||
hint: shouldClick ? 'Group toggled. Use readTable to see updated list.' : 'Group already in desired state.',
|
||||
});
|
||||
}
|
||||
// Default: dblclick to enter group / go up to parent
|
||||
await modifierClick(target.x, target.y, modifier, { dbl: true });
|
||||
await waitForStable(formNum);
|
||||
return returnFormState({ clicked: { kind: target.kind, name: target.name, ...(modifier ? { modifier } : {}) } });
|
||||
}
|
||||
|
||||
/**
|
||||
* Click handler for gridTreeNode targets (tree-style grid).
|
||||
* With `expand`/`toggle` — click the tree icon to expand/collapse.
|
||||
* Without — single-click to select the row (no expand).
|
||||
*/
|
||||
export async function clickGridTreeNodeTarget(target, ctx) {
|
||||
const { formNum, modifier, toggle, expand } = ctx;
|
||||
if (expand != null || toggle) {
|
||||
// Expand/collapse tree node — click the tree icon [tree="true"].
|
||||
const treeIconInfo = await getGridToggleIcon(target, formNum, {
|
||||
iconSelector: '.gridBoxImg [tree="true"]',
|
||||
isExpandedExpr: '(icon.style.backgroundImage || "").includes("gx=0")',
|
||||
});
|
||||
const shouldClick = shouldClickToggle(treeIconInfo, expand, toggle);
|
||||
if (shouldClick) {
|
||||
if (treeIconInfo) {
|
||||
await modifierClick(treeIconInfo.x, treeIconInfo.y, modifier);
|
||||
} else {
|
||||
// Fallback: dblclick on row (works for trees without clickable +/- icons)
|
||||
await modifierClick(target.x, target.y, modifier, { dbl: true });
|
||||
}
|
||||
}
|
||||
await waitForStable(formNum);
|
||||
return returnFormState({
|
||||
clicked: { kind: 'gridTreeNode', name: target.name, toggled: shouldClick, ...(modifier ? { modifier } : {}) },
|
||||
hint: shouldClick ? 'Tree node toggled. Use readTable to see updated tree.' : 'Tree node already in desired state.',
|
||||
});
|
||||
}
|
||||
// Default: select row (click text, no expand/collapse)
|
||||
await modifierClick(target.x, target.y, modifier);
|
||||
await waitForStable(formNum);
|
||||
return returnFormState({
|
||||
clicked: { kind: 'gridTreeNode', name: target.name, ...(modifier ? { modifier } : {}) },
|
||||
hint: 'Row selected. Use { expand: true } to expand/collapse.',
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Click handler for gridRow targets (flat list row).
|
||||
* Single click selects the row; `dblclick: true` opens the item.
|
||||
*/
|
||||
export async function clickGridRowTarget(target, ctx) {
|
||||
const { modifier, dblclick } = ctx;
|
||||
await modifierClick(target.x, target.y, modifier, { dbl: !!dblclick });
|
||||
await waitForStable();
|
||||
return returnFormState({
|
||||
clicked: { kind: 'gridRow', name: target.name, ...(dblclick ? { dblclick: true } : {}), ...(modifier ? { modifier } : {}) },
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user