Node group colors and toggling (draft)

This commit is contained in:
2026-05-14 16:32:06 +02:00
parent 589b551558
commit 87245233b7
7 changed files with 82 additions and 19 deletions

View File

@@ -34,8 +34,46 @@ export default class extends Controller {
*/
const id = event?.params.node;
const status = event?.target?.checked;
ATON.getSceneNode(id).toggle(status);
AppState.normalizedNodes.find(n => n.id === id).active = status;
const node = AppState.normalizedNodes.find(n => n.id === id);
if (node.children.length > 0) {
this.#toggleGroup(node, status);
this.#syncGroupCheckboxes(node, status, this.layersTarget);
} else {
ATON.getSceneNode(id).toggle(status);
node.active = status;
}
}
/**
* Recursively toggle children in a nodes group
* @param {Object} groupNode
* @param {Boolean} status
*/
#toggleGroup(groupNode, status) {
for (const child of groupNode.children) {
if (child.model) {
ATON.getSceneNode(child.id).toggle(status);
child.active = status;
}
if (child.children.length > 0) {
this.#toggleGroup(child, status);
}
}
}
#syncGroupCheckboxes(groupNode, status, container) {
for (const child of groupNode.children) {
const checkbox = container.querySelector(
`[data-menu-node-param="${child.id}"]`
);
console.debug(checkbox, child.id);
if (checkbox) checkbox.checked = status;
if (child.children.length > 0) {
this.#syncGroupCheckboxes(child, status, container);
}
}
}
/**
* Clone a <template> by id