mirror of
				https://github.com/BookStackApp/BookStack.git
				synced 2025-11-03 02:13:16 +03:00 
			
		
		
		
	- Created new dropzone component. - Added standard component event system using custom DOM events. - Added tabs component. - Added ajax-delete-row component.
		
			
				
	
	
		
			51 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/**
 | 
						|
 * Tabs
 | 
						|
 * Works by matching 'tabToggle<Key>' with 'tabContent<Key>' sections.
 | 
						|
 * @extends {Component}
 | 
						|
 */
 | 
						|
import {onSelect} from "../services/dom";
 | 
						|
 | 
						|
class Tabs {
 | 
						|
 | 
						|
    setup() {
 | 
						|
        this.tabContentsByName = {};
 | 
						|
        this.tabButtonsByName = {};
 | 
						|
        this.allContents = [];
 | 
						|
        this.allButtons = [];
 | 
						|
 | 
						|
        for (const [key, elems] of Object.entries(this.$manyRefs || {})) {
 | 
						|
            if (key.startsWith('toggle')) {
 | 
						|
                const cleanKey = key.replace('toggle', '').toLowerCase();
 | 
						|
                onSelect(elems, e => this.show(cleanKey));
 | 
						|
                this.allButtons.push(...elems);
 | 
						|
                this.tabButtonsByName[cleanKey] = elems;
 | 
						|
            }
 | 
						|
            if (key.startsWith('content')) {
 | 
						|
                const cleanKey = key.replace('content', '').toLowerCase();
 | 
						|
                this.tabContentsByName[cleanKey] = elems;
 | 
						|
                this.allContents.push(...elems);
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    show(key) {
 | 
						|
        this.allContents.forEach(c => {
 | 
						|
            c.classList.add('hidden');
 | 
						|
            c.classList.remove('selected');
 | 
						|
        });
 | 
						|
        this.allButtons.forEach(b => b.classList.remove('selected'));
 | 
						|
 | 
						|
        const contents = this.tabContentsByName[key] || [];
 | 
						|
        const buttons = this.tabButtonsByName[key] || [];
 | 
						|
        if (contents.length > 0) {
 | 
						|
            contents.forEach(c => {
 | 
						|
                c.classList.remove('hidden')
 | 
						|
                c.classList.add('selected')
 | 
						|
            });
 | 
						|
            buttons.forEach(b => b.classList.add('selected'));
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
export default Tabs; |