import { TOOLBAR_CLASSNAME, TOOLBAR_EXPANDED_SUFFIX, } from './config.js'; import {Header} from './tool/header.js'; export class Toolbar { sim = undefined; tools = []; expanded = undefined; header = undefined; title = undefined; // TODO: Index on something more durable than title getExpandedKey() { return [this.title, TOOLBAR_EXPANDED_SUFFIX].join(':'); } constructor(sim, title) { this.sim = sim; this.title = title; this.expanded = window.localStorage.getItem(this.getExpandedKey()) === 'true'; // Create ourselves a div, as child of sim's div const div = document.createElement('div'); this.div = div; div.classList.add(TOOLBAR_CLASSNAME); // Create a collapse/expand tool const header = new Header(this, title); this.header = header; this.addTool(header); header.updateButton(); this.applyExpanded(); } // tool: instance of Tool addTool(tool) { this.div.appendChild(tool.div); tool.setContainer(this); this.tools.push(tool); return this; } frame() { for (let tool of this.tools) { tool.frame(); } } applyExpanded() { window.localStorage.setItem(this.getExpandedKey(), this.expanded); for (const tool of this.tools) { if (tool === this.header) continue; if (this.expanded) { if (!this.div.contains(tool.div)) { this.div.appendChild(tool.div); } } else { if (this.div.contains(tool.div)) { this.div.removeChild(tool.div); } } } } }