1.3.0 • Published 8 years ago

frog-event-dispatcher v1.3.0

Weekly downloads
1
License
MIT
Repository
github
Last release
8 years ago

EventDispatcher

Build Status

Install

npm i frog-event-dispatcher
bower i frog-event-dispatcher

Definitions for typescript:

...
  "dependencies": {
  	...
  	"frog-event-dispatcher": "github:mclaud53/event-dispatcher/event-dispatcher.d.ts#1.3.0"
  	...
  }
...

Usage

Simple example:

var fed = require('frog-event-dispatcher'),
	dispatcher = new fed.EventDispatcher();

// subscribe on event "SOME_EVENT"
dispatcher.addListener(function (e) {
	console.log('event received!');
}, this, 'SOME_EVENT');

// dispatch of event
dispatcher.dispatch(new fed.Event('SOME_EVENT', this)); // -> event received!

To listen several events in one listener:

var fed = require('frog-event-dispatcher'),
	dispatcher = new fed.EventDispatcher();

dispatcher.addListener(function (e) {
	console.log(e.type);
}, this, ['EVENT_1', 'EVENT_2', 'EVENT_3']);

dispatcher.dispatch(new fed.Event('EVENT_1', this)); // -> EVENT_1
dispatcher.dispatch(new fed.Event('EVENT_2', this)); // -> EVENT_2
dispatcher.dispatch(new fed.Event('EVENT_3', this)); // -> EVENT_3

To listen all events in one listener:

var fed = require('frog-event-dispatcher'),
	dispatcher = new fed.EventDispatcher();

dispatcher.addListener(function (e) {
	console.log(e.type);
}, this);

dispatcher.dispatch(new fed.Event('ANY_EVENT', this)); // -> ANY_EVENT

To listen all events except some:

var fed = require('frog-event-dispatcher'),
	dispatcher = new fed.EventDispatcher(),
	listener = function (e) {
		console.log(e.type);
	};

dispatcher.addListener(listener, this);
dispatcher.removeListener(listener, this, ['EXCLUDED_EVENT', 'EXLUDED_EVENT_TOO']);

dispatcher.dispatch(new fed.Event('ANY_EVENT', this)); // -> ANY_EVENT
dispatcher.dispatch(new fed.Event('EXCLUDED_EVENT', this)); // -> 

To add several listeners:

var fed = require('frog-event-dispatcher'),
	dispatcher = new fed.EventDispatcher();

dispatcher.addListeners([
	{
		listener: function (e) {
			console.log('first listener!');
		},
		scope: this,
		eventType: 'FIRST_EVENT'
	},
	{
		listener: function (e) {
			console.log('second listener!');
		},
		scope: this,
		eventType: 'SECOND_EVENT'
	},
	{
		listener: function (e) {
			console.log('third listener!');
		},
		scope: this,
		eventType: 'THIRD_EVENT'
	}
]);

dispatcher.dispatch(new fed.Event('FIRST_EVENT', this));  // -> first listener!
dispatcher.dispatch(new fed.Event('SECOND_EVENT', this)); // -> second listener!
dispatcher.dispatch(new fed.Event('THIRD_EVENT', this));  // -> second listener!

To set priority to the listener:

var fed = require('frog-event-dispatcher'),
	dispatcher = new fed.EventDispatcher();

dispatcher.addListener(function (e) {
	console.log('listener with priority 0');
}, this, 'SOME_EVENT');	

dispatcher.addListener(function (e) {
	console.log('listener with priority -100');
}, this, 'SOME_EVENT', {priority: -100});

dispatcher.addListener(function (e) {
	console.log('listener with priority 100');
}, this, 'SOME_EVENT', {priority: 100});

dispatcher.dispatch(new fed.Event('SOME_EVENT', this));

// -> listener with priority 100
// -> listener with priority 0
// -> listener with priority -100

Dispatch of cancellable event:

var fed = require('frog-event-dispatcher'),
	dispatcher = new fed.EventDispatcher();

dispatcher.addListener(function (e) {
	e.preventDefault();
}, this, 'SOME_EVENT');

dispatcher.dispatch(new fed.Event('SOME_EVENT', this, 'cancellable'));

console.log(event.isDefaultPrevented); // -> true

Dispatch event with extra data:

var fed = require('frog-event-dispatcher'),
	dispatcher = new fed.EventDispatcher();

dispatcher.addListener(function (e) {
	console.log(e.options);
}, this, 'SOME_EVENT');

dispatcher.dispatch(new fed.Event('SOME_EVENT', this, false, {extra: 'extra data'})); // -> { extra: 'extra data' }

Automatic removal of the listener after receiving the first event:

var fed = require('frog-event-dispatcher'),
	dispatcher = new fed.EventDispatcher();

dispatcher.addListener(function (e) {
	console.log(e.type);
}, this, ['FIRST', 'SECOND'], {single: true});

dispatcher.dispatch(new fed.Event('FIRST', this)); // -> FIRST
dispatcher.dispatch(new fed.Event('SECOND', this)); // -> 

Addition of the deferred listener:

var fed = require('frog-event-dispatcher'),
	dispatcher = new fed.EventDispatcher();

dispatcher.addListener(function (e) {
	console.log('event received!');
}, this, null, {delay: true});

dispatcher.dispatch(new fed.Event('SOME_EVENT', this));
console.log('event dispatched!');

// -> event dispatched!
// -> event received!

Addition of the delayed listener:

var fed = require('frog-event-dispatcher'),
	dispatcher = new fed.EventDispatcher(),
	time = (new Date()).valueOf();

dispatcher.addListener(function (e) {
	var delay = (new Date()).valueOf() - time;
	console.log('event received! delay: ' + delay);
}, this, null, {delay: 100});

dispatcher.dispatch(new fed.Event('SOME_EVENT', this));
console.log('event dispatched!');

// -> event dispatched!
// -> event received! delay: 102

Addition of the buffered listener:

var fed = require('frog-event-dispatcher'),
	dispatcher = new fed.EventDispatcher(),
	time = (new Date()).valueOf();

dispatcher.addListener(function (e) {
	var delay = (new Date()).valueOf() - time;
	console.log('event received! delay: ' + delay);
}, this, null, {buffer: 100});

dispatcher.dispatch(new fed.Event('SOME_EVENT', this));
setTimeout(function () {
	dispatcher.dispatch(new fed.Event('SOME_EVENT', this));
}, 50);

// -> event received! delay: 152

To check whether listeners were added:

var fed = require('frog-event-dispatcher'),
	dispatcher = new fed.EventDispatcher(),
	listener = function (e) {};

console.log(dispatcher.hasListeners); // -> false
dispatcher.addListener(listener, this);
console.log(dispatcher.hasListeners); // -> true
dispatcher.removeListener(listener, this);
console.log(dispatcher.hasListeners); // -> false

To check there are listeners for an event:

var fed = require('frog-event-dispatcher'),
	dispatcher = new fed.EventDispatcher(),
	listener = function (e) {};

console.log(dispatcher.willDispatch('SOME_EVENT')); // -> false
dispatcher.addListener(listener, this, 'SOME_EVENT');
console.log(dispatcher.willDispatch('SOME_EVENT')); // -> true
dispatcher.removeListener(listener, this, 'SOME_EVENT');
console.log(dispatcher.willDispatch('SOME_EVENT')); // -> false

To check whether a listener is added

var fed = require('frog-event-dispatcher'),
	dispatcher = new fed.EventDispatcher(),
	listener = function (e) {};

console.log(dispatcher.hasListener(listener, this)); // -> false
dispatcher.addListener(listener, this, 'SOME_EVENT');
console.log(dispatcher.hasListener(listener, this)); // -> true
dispatcher.removeListener(listener, this, 'SOME_EVENT');
console.log(dispatcher.hasListener(listener, this)); // -> false

To suspend a dispatching of events:

var fed = require('frog-event-dispatcher'),
	dispatcher = new fed.EventDispatcher();

dispatcher.addListener(function (e) {
	console.log(e.type);
}, this, ['FIRST', 'SECOND']);

console.log(dispatcher.suspended); // -> false
dispatcher.suspend('To enqueue the suspended events');
console.log(dispatcher.suspended); // -> true

dispatcher.dispatch(new fed.Event('FIRST', this)); // -> 

// Warning! The cancellable events can't be suspended
dispatcher.dispatch(new fed.Event('SECOND', this, 'cancellable')); // -> SECOND 

dispatcher.resume(); // -> FIRST
console.log(dispatcher.suspended); // -> false

To clear queue of the suspended events:

var fed = require('frog-event-dispatcher'),
	dispatcher = new fed.EventDispatcher();

dispatcher.addListener(function (e) {
	console.log(e.type);
}, this, ['FIRST', 'SECOND']);

dispatcher.suspend('To enqueue the suspended events');

dispatcher.dispatch(new fed.Event('FIRST', this)); // -> 
dispatcher.dispatch(new fed.Event('SECOND', this)); // -> 

dispatcher.purgeQueue();

dispatcher.resume(); // -> 

To remove all listeners:

var fed = require('frog-event-dispatcher'),
	dispatcher = new fed.EventDispatcher();

dispatcher.addListener(function (e) {
	console.log('first listener');
}, this);

dispatcher.addListener(function (e) {
	console.log('second listener');
}, this);

dispatcher.purgeListeners();

dispatcher.dispatch(new fed.Event('SOME_EVENT', this)); // -> 

To remove all listeners by scope:

var fed = require('frog-event-dispatcher'),
	scope1 = {},
	scope2 = {},
	dispatcher = new fed.EventDispatcher();

dispatcher.addListener(function (e) {
	console.log('first listener');
}, scope1);

dispatcher.addListener(function (e) {
	console.log('second listener');
}, scope2);

dispatcher.purgeListeners(scope1);

dispatcher.dispatch(new fed.Event('SOME_EVENT', this)); // -> second listener

To proxy events from other dispatcher:

var fed = require('frog-event-dispatcher'),
	first = new fed.EventDispatcher(),
	second = new fed.EventDispatcher();

first.addListener(function (e) {
	console.log('event received!');
}, this);

first.relay(second);

second.dispatch(new fed.Event('SOME_EVENT', this)); // -> event received!

To stop proxying of events from other dispatcher:

var fed = require('frog-event-dispatcher'),
	first = new fed.EventDispatcher(),
	second = new fed.EventDispatcher();

first.addListener(function (e) {
	console.log('event received!');
}, this);

first.relay(second);

second.dispatch(new fed.Event('SOME_EVENT', this)); // -> event received!

first.unrelay(second);

second.dispatch(new fed.Event('SOME_EVENT', this)); // ->

To stop proxying of events from all dispatchers:

var fed = require('frog-event-dispatcher'),
	first = new fed.EventDispatcher(),
	second = new fed.EventDispatcher();

first.addListener(function (e) {
	console.log('event received!');
}, this);

first.relay(second);

second.dispatch(new fed.Event('SOME_EVENT', this)); // -> event received!

first.purgeDispatchers();

second.dispatch(new fed.Event('SOME_EVENT', this)); // ->

To check whether events are dispatching from a dispatcher:

var fed = require('frog-event-dispatcher'),
	first = new fed.EventDispatcher(),
	second = new fed.EventDispatcher();

console.log(first.relayed(second)); // -> false
first.relay(second);
console.log(first.relayed(second)); // -> true
first.unrelayAll([second]);
console.log(first.relayed(second)); // -> false

To send event with multiple targets (Added in release 1.2.0):

var fed = require('frog-event-dispatcher'),
	dispatcher = new fed.EventDispatcher(),
	event;

dispatcher.addListener(function (e) {
	console.log('first listener');
}, this, 'EVENT:FIRST');

dispatcher.addListener(function (e) {
	console.log('second listener');
}, this, 'EVENT:SECOND');

event = new fed.Event({
	EVENT: ['FIRST', 'SECOND'] // The same as ['EVENT:FIRST', 'EVENT:SECOND']
}, this, false);

dispatcher.dispatch(event);

// -> first listener
// -> second listener

To add listener with extra data (Added in release 1.2.1):

var fed = require('frog-event-dispatcher'),
	dispatcher = new fed.EventDispatcher(),
	event;

dispatcher.addListener(function (e, extra) {
	console.log(extra);
}, this, 'EVENT:FIRST', {extra: 'first listener'});

dispatcher.addListener(function (e, extra) {
	console.log(extra);
}, this, 'EVENT:SECOND', {extra: 'second listener'});

event = new fed.Event({
	EVENT: ['FIRST', 'SECOND'] // The same as ['EVENT:FIRST', 'EVENT:SECOND']
}, this, false);

dispatcher.dispatch(event);

// -> first listener
// -> second listener

Cross relay events (Added in release 1.2.2)

var fed = require('frog-event-dispatcher'),
	firstDispatcher = new fed.EventDispatcher(),
	secondDispatcher = new fed.EventDispatcher(),
	event = new fed.Event(['FIRST', 'SECOND'], this);

firstDispatcher.addListener(function (e, extra) {
	console.log('first listener');
}, this, 'FIRST');

secondDispatcher.addListener(function (e, extra) {
	console.log('second listener');
}, this, 'SECOND');

firstDispatcher.relay(secondDispatcher);
secondDispatcher.relay(firstDispatcher);

firstDispatcher.dispatch(event);
// -> first listener
// -> second listener

secondDispatcher.dispatch(event);
// -> second listener
// -> first listener

License

MIT

1.3.0

8 years ago

1.2.2

8 years ago

1.2.1

8 years ago

1.2.0

8 years ago

1.1.1

8 years ago