47 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
		
		
			
		
	
	
			47 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
|  | 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'); | ||
|  |     } | ||
|  | 
 | ||
|  |     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.add('open'); | ||
|  |     } | ||
|  | 
 | ||
|  | } | ||
|  | 
 | ||
|  | module.exports = EditorToolbox; |