// Global ATON import { Controller } from "@hotwired/stimulus" import AppState from "../state.js"; import { traverseOntology } from "../ontology.js"; const html = String.raw; const domParser = new DOMParser; // TODO: hard-coded, but follows a convention... const ontologyJsonPath = location.pathname + 'ontology.json'; export default class extends Controller { static targets = ['trigger', 'layers', 'ontology']; connect() { console.log('#menu controller connected'); } /** * Open settings panel * @param {Event} event */ async toggleMenu() { ATON.UI.setSidePanelRight(); ATON.UI.showSidePanel({header: 'Menu'}); this.#buildMenuPanel(ATON.UI.elSidePanel); this.#buildLayersMenu(AppState.normalizedNodes, this.layersTarget); this.#buildOntologyMenu(await traverseOntology(ontologyJsonPath), this.ontologyTarget); } /** * @param {Event} event */ toggleNode(event) { /** * The node's id * @type {string} */ const id = event.params.node; const status = event.target.checked; ATON.getSceneNode(id).toggle(status); AppState.normalizedNodes.find(n => n.id === id).active = status; } /** * Clone a