-
Notifications
You must be signed in to change notification settings - Fork 0
/
Emitter.min.js
5 lines (5 loc) · 1.25 KB
/
Emitter.min.js
1
2
3
4
5
/**
* @license The MIT License (MIT) - [https://github.com/subversivo58/Emitter/blob/master/LICENSE]
* @copyright Copyright (c) 2020 Lauro Moraes - [https://github.com/subversivo58]
* @version 0.1.0 [development stage] - [https://github.com/subversivo58/Emitter/blob/master/VERSIONING.md]
*/const sticky=Symbol();class Emitter extends EventTarget{constructor(){super(),this.listeners={"*":[]},this[sticky]=(a,b,c)=>{a in this.listeners?this.listeners[a].forEach(a=>a===b?a(c.detail):null):null}}on(a,b,c=!1){this.listeners[a]?this.listeners[a].push(b):this.listeners[a]=[b],c?this.addEventListener(a,this[sticky].bind(this,a,b),{once:!0}):this.addEventListener(a,this[sticky].bind(this,a,b))}off(a,b=!1){if(this.listeners[a]){let c=b=>{this.removeEventListener(a,b)};b&&"function"==typeof b?(()=>{this.listeners[a]=this.listeners[a].filter(a=>a===b?c(a):a),0===this.listeners[a].length?"*"===a?null:delete this.listeners[a]:null})():(()=>{for(let b=this.listeners[a].length;b--;)c(this.listeners[a][b]);"*"===a?this.listeners[a]=[]:delete this.listeners[a]})()}}emit(a,b){0<this.listeners["*"].length?this.dispatchEvent(new CustomEvent("*",{detail:b})):null,this.dispatchEvent(new CustomEvent(a,{detail:b}))}once(a,b){this.on(a,b,!0)}}window.Emitter=Emitter;