first
This commit is contained in:
99
node_modules/event-pubsub/es6.js
generated
vendored
Normal file
99
node_modules/event-pubsub/es6.js
generated
vendored
Normal file
@ -0,0 +1,99 @@
|
||||
'use strict';
|
||||
|
||||
class EventPubSub {
|
||||
constructor( scope ) {
|
||||
this._events_ = {};
|
||||
this.publish = this.trigger = this.emit;
|
||||
this.subscribe = this.on;
|
||||
this.unSubscribe = this.off;
|
||||
}
|
||||
|
||||
on( type, handler, once ) {
|
||||
if ( !handler ) {
|
||||
throw new ReferenceError( 'handler not defined.' );
|
||||
}
|
||||
|
||||
if ( !this._events_[ type ] ) {
|
||||
this._events_[ type ] = [];
|
||||
}
|
||||
|
||||
if(once){
|
||||
handler._once_ = once;
|
||||
}
|
||||
|
||||
this._events_[ type ].push( handler );
|
||||
return this;
|
||||
}
|
||||
|
||||
once( type, handler ) {
|
||||
return this.on( type, handler, true );
|
||||
}
|
||||
|
||||
off( type, handler ) {
|
||||
if ( !this._events_[ type ] ) {
|
||||
return this;
|
||||
}
|
||||
|
||||
if ( !handler ) {
|
||||
throw new ReferenceError( 'handler not defined. if you wish to remove all handlers from the event please pass "*" as the handler' );
|
||||
}
|
||||
|
||||
if ( handler == '*' ) {
|
||||
delete this._events_[ type ];
|
||||
return this;
|
||||
}
|
||||
|
||||
const handlers = this._events_[ type ];
|
||||
|
||||
while ( handlers.includes( handler ) ) {
|
||||
handlers.splice(
|
||||
handlers.indexOf( handler ),
|
||||
1
|
||||
);
|
||||
}
|
||||
|
||||
if ( handlers.length < 1 ) {
|
||||
delete this._events_[ type ];
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
emit( type, ...args ) {
|
||||
if ( !this._events_[ type ] ) {
|
||||
return this.emit$( type, ...args );
|
||||
}
|
||||
|
||||
const handlers = this._events_[ type ];
|
||||
const onceHandled=[];
|
||||
|
||||
for ( let handler of handlers ) {
|
||||
handler.apply( this, args );
|
||||
if(handler._once_){
|
||||
onceHandled.push(handler);
|
||||
}
|
||||
}
|
||||
|
||||
for(let handler of onceHandled){
|
||||
this.off(type,handler);
|
||||
}
|
||||
|
||||
return this.emit$( type, ...args );
|
||||
}
|
||||
|
||||
emit$( type, ...args ) {
|
||||
if ( !this._events_[ '*' ] ) {
|
||||
return this;
|
||||
}
|
||||
|
||||
const catchAll = this._events_[ '*' ];
|
||||
|
||||
for ( let handler of catchAll ) {
|
||||
handler.call( this, type, ...args );
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = EventPubSub;
|
Reference in New Issue
Block a user