JSPM

  • Created
  • Published
  • Downloads 1829
  • Score
    100M100P100Q104673F
  • License unlicensed

Tiny event emitter for everything. Asbestos-free.

Package Exports

  • emmy
  • emmy/delegate
  • emmy/emit
  • emmy/keypass
  • emmy/later
  • emmy/not
  • emmy/off
  • emmy/on
  • emmy/once
  • emmy/throttle

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (emmy) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

Emmy Build Status Code Climate

Emmy is asbestos-free event emitter and event utils for green components development.

  1. Emits events on any target: plain object, element, jQuery, Backbone model, color etc.

  2. Fully compliant with component-emitter.

  3. Works both in browsers and io.

  4. Provides delegate, throttle, later and keypass methods.

  5. 2.3 kb gzipped.

  6. Select methods as require('emmy/<method>'); to reduce build size more.

Test it, feel it.

Use

For browser use browserify or standalone emmy.js.

Install:

$ npm install emmy

Wrapping methods:

var Emitter = require('emmy');

Emitter.on(target, 'evt', function(){});
Emitter.emit(target, 'evt', data1, data2);
Emitter.off(target, 'evt');

//typical use-case
Emitter.once(webWorker, 'message', function(){...});

Use: bind events to any object in an unobtrusive way.

Create Emitter instance

var Emitter = require('emmy');

var emitter = new Emitter;
emitter.emit('something');

Use: сreate a new object with event methods.

Mixin object

var Emitter = require('emmy');

user = Emitter({name: 'John'});

user.emit('hello');

Use: extend existing object with event methods.

Mixin prototype

var Emitter = require('emmy');
Emitter(User.prototype);

Use: extend existing class prototype with event methods.

Inherit Emitter

var Emitter = require('emmy');

function Actor(){};

//Give out emmy to an actor :)
Actor.prototype = Object.create(Emitter);

var actor = new Actor();

actor
//Bind events
.on('event', handler)
.on('otherEvent', handler)
.on('event2', [handler1, handler2]) //bind list of handlers


//Unbind events
.off('event', handler)
.off('otherEvent') //unbind all 'otherEvent' callbacks
.off('event2', [handler1, handler2]); //unbind list of handlers
.off(target) //unbind all events


//Emit events
.emit('a')
.emit('b', data, bubbles);

Use: make instances of class instanceof Emitter.

Standalone

var once = require('emmy/once');

once(worker, 'message', function(){});

Use: if only one specific event method is required or to reduce size of build.

API

Standalone functions

Process single target/event/callback.

Function Arguments Description
on target, event, callback Bind event handler to a target.
once target, event, callback Bind single-shot event handler to a target.
off target, event?, callback? Unbind event handler from a target. If calback isn’t passed - unbind all callbacks for an event. If no event passed - unbind all.
emit target, event, callback, data1, data2, ... Emit an event on a target, passing dataN. If target is an element then data1 is e.details, data2 is bubbles. So to fire bubbling event, call emit
later target, event, callback, delay Bind an event handler which triggers a delay later than actual event occures.
throttle target, event, callback, interval Bind an event handler which won’t be called more often than an interval.
delegate target, event, callback, selector Bind an event handler catching bubbling events from target’s descendants.
not target, event, callback, selector Bind an event handler catching events from target’s descendants ignoring ones that match selector.
keypass target, event, callback, keylist Bind an event handler which triggers only if e.which or e.keyCode is one from the defined keylist. Any keyname can be declared instead of a code.
listeners target [, event] Get list of listeners registered for an event.

Emmy methods

Can be used both as static and prototype methods: Emmy.on(<target>, <event>, <method>, ...<data>) and emitter.on(<event>, <handler>, ...<data>).

Method Arguments Description
.on event, handler Register handler for event.
.once event, handler Register single-shot event handler.
.off event, handler Remove an event handler. If no handler passed - remove all registered handlers. In no event passed - remove all registered listeners for all events.
.emit event, data1, data2, ... Emit an event with params passed. Each argument after event will be passed to the callback.
.listeners event Get list of listeners for an event.
.hasListeners event Check if emitter has event handlers.

Afterword

Emmy implements maximally minimal coverage for main use-cases. It’s not supposed to recognize broad range of input values. For that take a look at ENot (event notation system) — an easy wrapper for emmy with humanized event notation.

There’s also a similar project - emmitt, but it can’t emit bubbling events nor DOM-events, it does not provide an Emitter class and a bunch of useful methods.

NPM