UNPKG

framework7

Version:

Full featured mobile HTML framework for building iOS & Android apps

95 lines 3.15 kB
class EventsClass { constructor(parents) { if (parents === void 0) { parents = []; } const self = this; self.eventsParents = parents; self.eventsListeners = {}; } on(events, handler, priority) { const self = this; if (typeof handler !== 'function') return self; const method = priority ? 'unshift' : 'push'; events.split(' ').forEach(event => { if (!self.eventsListeners[event]) self.eventsListeners[event] = []; self.eventsListeners[event][method](handler); }); return self; } once(events, handler, priority) { const self = this; if (typeof handler !== 'function') return self; function onceHandler() { self.off(events, onceHandler); if (onceHandler.f7proxy) { delete onceHandler.f7proxy; } for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } handler.apply(self, args); } onceHandler.f7proxy = handler; return self.on(events, onceHandler, priority); } off(events, handler) { const self = this; if (!self.eventsListeners) return self; events.split(' ').forEach(event => { if (typeof handler === 'undefined') { self.eventsListeners[event] = []; } else if (self.eventsListeners[event]) { self.eventsListeners[event].forEach((eventHandler, index) => { if (eventHandler === handler || eventHandler.f7proxy && eventHandler.f7proxy === handler) { self.eventsListeners[event].splice(index, 1); } }); } }); return self; } emit() { const self = this; if (!self.eventsListeners) return self; let events; let data; let context; let eventsParents; for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { args[_key2] = arguments[_key2]; } if (typeof args[0] === 'string' || Array.isArray(args[0])) { events = args[0]; data = args.slice(1, args.length); context = self; eventsParents = self.eventsParents; } else { events = args[0].events; data = args[0].data; context = args[0].context || self; eventsParents = args[0].local ? [] : args[0].parents || self.eventsParents; } const eventsArray = Array.isArray(events) ? events : events.split(' '); const localEvents = eventsArray.map(eventName => eventName.replace('local::', '')); const parentEvents = eventsArray.filter(eventName => eventName.indexOf('local::') < 0); localEvents.forEach(event => { if (self.eventsListeners && self.eventsListeners[event]) { const handlers = []; self.eventsListeners[event].forEach(eventHandler => { handlers.push(eventHandler); }); handlers.forEach(eventHandler => { eventHandler.apply(context, data); }); } }); if (eventsParents && eventsParents.length > 0) { eventsParents.forEach(eventsParent => { eventsParent.emit(parentEvents, ...data); }); } return self; } } export default EventsClass;