class EditorToolbox { constructor(elem) { // Elements this.elem = elem; this.buttons = elem.querySelectorAll('[toolbox-tab-button]'); this.contentElements = elem.querySelectorAll('[toolbox-tab-content]'); this.toggleButton = elem.querySelector('[toolbox-toggle]'); // Toolbox toggle button click this.toggleButton.addEventListener('click', this.toggle.bind(this)); // Tab button click this.elem.addEventListener('click', event => { let button = event.target.closest('[toolbox-tab-button]'); if (button === null) return; let name = button.getAttribute('toolbox-tab-button'); this.setActiveTab(name, true); }); // Set the first tab as active on load this.setActiveTab(this.contentElements[0].getAttribute('toolbox-tab-content')); } toggle() { this.elem.classList.toggle('open'); const expanded = this.elem.classList.contains('open') ? 'true' : 'false'; this.toggleButton.setAttribute('aria-expanded', expanded); } setActiveTab(tabName, openToolbox = false) { // Set button visibility for (let i = 0, len = this.buttons.length; i < len; i++) { this.buttons[i].classList.remove('active'); let bName = this.buttons[i].getAttribute('toolbox-tab-button'); if (bName === tabName) this.buttons[i].classList.add('active'); } // Set content visibility for (let i = 0, len = this.contentElements.length; i < len; i++) { this.contentElements[i].style.display = 'none'; let cName = this.contentElements[i].getAttribute('toolbox-tab-content'); if (cName === tabName) this.contentElements[i].style.display = 'block'; } if (openToolbox && !this.elem.classList.contains('open')) { this.toggle(); } } } export default EditorToolbox;