tiny-emitter
Advanced tools
Comparing version 1.0.0 to 1.0.1
@@ -1,2 +0,2 @@ | ||
!function(e){if("object"==typeof exports)module.exports=e();else if("function"==typeof define&&define.amd)define(e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.TinyEmitter=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ | ||
(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.TinyEmitter = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ | ||
function E () { | ||
@@ -10,3 +10,3 @@ // Keep this empty so it's easier to inherit from | ||
var e = this.e || (this.e = {}); | ||
(e[name] || (e[name] = [])).push({ | ||
@@ -16,3 +16,3 @@ fn: callback, | ||
}); | ||
return this; | ||
@@ -23,8 +23,9 @@ }, | ||
var self = this; | ||
var fn = function () { | ||
self.off(name, fn); | ||
function listener () { | ||
self.off(name, listener); | ||
callback.apply(ctx, arguments); | ||
}; | ||
return this.on(name, fn, ctx); | ||
listener._ = callback | ||
return this.on(name, listener, ctx); | ||
}, | ||
@@ -37,7 +38,7 @@ | ||
var len = evtArr.length; | ||
for (i; i < len; i++) { | ||
evtArr[i].fn.apply(evtArr[i].ctx, data); | ||
} | ||
return this; | ||
@@ -50,9 +51,10 @@ }, | ||
var liveEvents = []; | ||
if (evts && callback) { | ||
for (var i = 0, len = evts.length; i < len; i++) { | ||
if (evts[i].fn !== callback) liveEvents.push(evts[i]); | ||
if (evts[i].fn !== callback && evts[i].fn._ !== callback) | ||
liveEvents.push(evts[i]); | ||
} | ||
} | ||
// Remove event from queue to prevent memory leak | ||
@@ -62,6 +64,6 @@ // Suggested by https://github.com/lazd | ||
(liveEvents.length) | ||
(liveEvents.length) | ||
? e[name] = liveEvents | ||
: delete e[name]; | ||
return this; | ||
@@ -73,4 +75,3 @@ } | ||
},{}]},{},[1]) | ||
(1) | ||
},{}]},{},[1])(1) | ||
}); |
@@ -1,1 +0,1 @@ | ||
!function(e){if("object"==typeof exports)module.exports=e();else if("function"==typeof define&&define.amd)define(e);else{var n;"undefined"!=typeof window?n=window:"undefined"!=typeof global?n=global:"undefined"!=typeof self&&(n=self),n.TinyEmitter=e()}}(function(){var e,n,t;return function r(e,n,t){function i(o,u){if(!n[o]){if(!e[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(f)return f(o,!0);throw new Error("Cannot find module '"+o+"'")}var s=n[o]={exports:{}};e[o][0].call(s.exports,function(n){var t=e[o][1][n];return i(t?t:n)},s,s.exports,r,e,n,t)}return n[o].exports}var f=typeof require=="function"&&require;for(var o=0;o<t.length;o++)i(t[o]);return i}({1:[function(e,n,t){function r(){}r.prototype={on:function(e,n,t){var r=this.e||(this.e={});(r[e]||(r[e]=[])).push({fn:n,ctx:t});return this},once:function(e,n,t){var r=this;var i=function(){r.off(e,i);n.apply(t,arguments)};return this.on(e,i,t)},emit:function(e){var n=[].slice.call(arguments,1);var t=((this.e||(this.e={}))[e]||[]).slice();var r=0;var i=t.length;for(r;r<i;r++){t[r].fn.apply(t[r].ctx,n)}return this},off:function(e,n){var t=this.e||(this.e={});var r=t[e];var i=[];if(r&&n){for(var f=0,o=r.length;f<o;f++){if(r[f].fn!==n)i.push(r[f])}}i.length?t[e]=i:delete t[e];return this}};n.exports=r},{}]},{},[1])(1)}); | ||
(function(e){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=e()}else if(typeof define==="function"&&define.amd){define([],e)}else{var n;if(typeof window!=="undefined"){n=window}else if(typeof global!=="undefined"){n=global}else if(typeof self!=="undefined"){n=self}else{n=this}n.TinyEmitter=e()}})(function(){var e,n,t;return function r(e,n,t){function i(o,u){if(!n[o]){if(!e[o]){var s=typeof require=="function"&&require;if(!u&&s)return s(o,!0);if(f)return f(o,!0);var a=new Error("Cannot find module '"+o+"'");throw a.code="MODULE_NOT_FOUND",a}var l=n[o]={exports:{}};e[o][0].call(l.exports,function(n){var t=e[o][1][n];return i(t?t:n)},l,l.exports,r,e,n,t)}return n[o].exports}var f=typeof require=="function"&&require;for(var o=0;o<t.length;o++)i(t[o]);return i}({1:[function(e,n,t){function r(){}r.prototype={on:function(e,n,t){var r=this.e||(this.e={});(r[e]||(r[e]=[])).push({fn:n,ctx:t});return this},once:function(e,n,t){var r=this;function i(){r.off(e,i);n.apply(t,arguments)}i._=n;return this.on(e,i,t)},emit:function(e){var n=[].slice.call(arguments,1);var t=((this.e||(this.e={}))[e]||[]).slice();var r=0;var i=t.length;for(r;r<i;r++){t[r].fn.apply(t[r].ctx,n)}return this},off:function(e,n){var t=this.e||(this.e={});var r=t[e];var i=[];if(r&&n){for(var f=0,o=r.length;f<o;f++){if(r[f].fn!==n&&r[f].fn._!==n)i.push(r[f])}}i.length?t[e]=i:delete t[e];return this}};n.exports=r},{}]},{},[1])(1)}); |
28
index.js
@@ -9,3 +9,3 @@ function E () { | ||
var e = this.e || (this.e = {}); | ||
(e[name] || (e[name] = [])).push({ | ||
@@ -15,3 +15,3 @@ fn: callback, | ||
}); | ||
return this; | ||
@@ -22,8 +22,9 @@ }, | ||
var self = this; | ||
var fn = function () { | ||
self.off(name, fn); | ||
function listener () { | ||
self.off(name, listener); | ||
callback.apply(ctx, arguments); | ||
}; | ||
return this.on(name, fn, ctx); | ||
listener._ = callback | ||
return this.on(name, listener, ctx); | ||
}, | ||
@@ -36,7 +37,7 @@ | ||
var len = evtArr.length; | ||
for (i; i < len; i++) { | ||
evtArr[i].fn.apply(evtArr[i].ctx, data); | ||
} | ||
return this; | ||
@@ -49,9 +50,10 @@ }, | ||
var liveEvents = []; | ||
if (evts && callback) { | ||
for (var i = 0, len = evts.length; i < len; i++) { | ||
if (evts[i].fn !== callback) liveEvents.push(evts[i]); | ||
if (evts[i].fn !== callback && evts[i].fn._ !== callback) | ||
liveEvents.push(evts[i]); | ||
} | ||
} | ||
// Remove event from queue to prevent memory leak | ||
@@ -61,6 +63,6 @@ // Suggested by https://github.com/lazd | ||
(liveEvents.length) | ||
(liveEvents.length) | ||
? e[name] = liveEvents | ||
: delete e[name]; | ||
return this; | ||
@@ -67,0 +69,0 @@ } |
{ | ||
"name": "tiny-emitter", | ||
"version": "1.0.0", | ||
"version": "1.0.1", | ||
"description": "A tiny (less than 1k) event emitter library", | ||
@@ -31,7 +31,7 @@ "main": "index.js", | ||
"devDependencies": { | ||
"tape": "~2.3.2", | ||
"tap-spec": "~0.1.3", | ||
"browserify": "~3.18.0", | ||
"uglify-js": "~2.4.8", | ||
"testling": "~1.5.6" | ||
"browserify": "^11.2.0", | ||
"tap-spec": "^4.1.0", | ||
"tape": "^4.2.1", | ||
"testling": "^1.7.1", | ||
"uglify-js": "^2.5.0" | ||
}, | ||
@@ -38,0 +38,0 @@ "testling": { |
@@ -7,3 +7,3 @@ var Emitter = require('../index.js'); | ||
emitter.on('test', function () {}); | ||
t.equal(emitter.e.test.length, 1, 'subscribed to event'); | ||
@@ -18,3 +18,3 @@ t.end(); | ||
}; | ||
emitter.on('test', function () { | ||
@@ -24,3 +24,3 @@ t.ok(this.contextValue, 'is in context'); | ||
}, context); | ||
emitter.emit('test'); | ||
@@ -31,3 +31,3 @@ }); | ||
var emitter = new Emitter(); | ||
emitter.once('test', function () { | ||
@@ -37,3 +37,3 @@ t.notOk(emitter.e.test, 'removed event from list'); | ||
}); | ||
emitter.emit('test'); | ||
@@ -47,3 +47,3 @@ }); | ||
}; | ||
emitter.once('test', function () { | ||
@@ -54,3 +54,3 @@ t.ok(this.contextValue, 'is in context'); | ||
}, context); | ||
emitter.emit('test'); | ||
@@ -61,3 +61,3 @@ }); | ||
var emitter = new Emitter(); | ||
emitter.on('test', function () { | ||
@@ -67,3 +67,3 @@ t.ok(true, 'triggered event'); | ||
}); | ||
emitter.emit('test'); | ||
@@ -74,3 +74,3 @@ }); | ||
var emitter = new Emitter(); | ||
emitter.on('test', function (arg1, arg2) { | ||
@@ -81,3 +81,3 @@ t.equal(arg1, 'arg1', 'passed the first argument'); | ||
}); | ||
emitter.emit('test', 'arg1', 'arg2'); | ||
@@ -93,3 +93,3 @@ }); | ||
emitter.emit('test') | ||
process.nextTick(function () { | ||
@@ -105,7 +105,7 @@ t.end(); | ||
} | ||
emitter.on('test', fn); | ||
emitter.off('test', fn); | ||
emitter.emit('test') | ||
process.nextTick(function () { | ||
@@ -126,6 +126,6 @@ t.end(); | ||
emitter.on('test', fn); | ||
emitter.off('test', fn); | ||
emitter.emit('test'); | ||
process.nextTick(function () { | ||
@@ -161,12 +161,12 @@ t.notOk(emitter.e['test'], 'removes all events'); | ||
var emitter = new Emitter(); | ||
emitter.on('test', function () { | ||
t.equal(emitter.e.test.length, 1, 'event is still in list'); | ||
emitter.off('test'); | ||
t.notOk(emitter.e.test, 0, 'event is gone from list'); | ||
t.end(); | ||
}); | ||
emitter.emit('test'); | ||
@@ -182,13 +182,13 @@ }); | ||
}; | ||
emitter.on('test', fn); | ||
emitter.on('test', function () { | ||
calls += 1; | ||
}); | ||
emitter.on('test', function () { | ||
calls += 1; | ||
}); | ||
process.nextTick(function () { | ||
@@ -198,3 +198,3 @@ t.equal(calls, 3, 'all callbacks were called'); | ||
}); | ||
emitter.emit('test'); | ||
@@ -211,5 +211,18 @@ }); | ||
var emitter = new Emitter(); | ||
emitter.emit('some-event', 'some message'); | ||
t.end(); | ||
}); | ||
test('unsubscribes single event with name and callback which was subscribed once', function (t) { | ||
var emitter = new Emitter(); | ||
var fn = function () { | ||
t.fail('event not unsubscribed'); | ||
} | ||
emitter.once('test', fn); | ||
emitter.off('test', fn); | ||
emitter.emit('test'); | ||
t.end(); | ||
}); |
14052
302