28 lines
		
	
	
		
			759 B
		
	
	
	
		
			JavaScript
		
	
	
	
		
		
			
		
	
	
			28 lines
		
	
	
		
			759 B
		
	
	
	
		
			JavaScript
		
	
	
	
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Simple global events manager
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								class Events {
							 | 
						||
| 
								 | 
							
								    constructor() {
							 | 
						||
| 
								 | 
							
								        this.listeners = {};
							 | 
						||
| 
								 | 
							
								        this.stack = [];
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    emit(eventName, eventData) {
							 | 
						||
| 
								 | 
							
								        this.stack.push({name: eventName, data: eventData});
							 | 
						||
| 
								 | 
							
								        if (typeof this.listeners[eventName] === 'undefined') return this;
							 | 
						||
| 
								 | 
							
								        let eventsToStart = this.listeners[eventName];
							 | 
						||
| 
								 | 
							
								        for (let i = 0; i < eventsToStart.length; i++) {
							 | 
						||
| 
								 | 
							
								            let event = eventsToStart[i];
							 | 
						||
| 
								 | 
							
								            event(eventData);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        return this;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    listen(eventName, callback) {
							 | 
						||
| 
								 | 
							
								        if (typeof this.listeners[eventName] === 'undefined') this.listeners[eventName] = [];
							 | 
						||
| 
								 | 
							
								        this.listeners[eventName].push(callback);
							 | 
						||
| 
								 | 
							
								        return this;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								module.exports = Events;
							 |