Skip to content

Commit

Permalink
feature: emitter isntance
Browse files Browse the repository at this point in the history
  • Loading branch information
harttle committed Oct 9, 2016
1 parent c462b2b commit c709228
Show file tree
Hide file tree
Showing 9 changed files with 125 additions and 171 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -35,3 +35,4 @@ jspm_packages

# Optional REPL history
.node_repl_history
.*.swp
11 changes: 6 additions & 5 deletions demo/browser/amd.html
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,16 @@
<body>
<h2>See the Console</h2>
<script>
require(['MicroEvent'], function(Event) {
Event
.on('boom!', function(e) {
require(['Emitter'], function(Emitter) {
var emitter = Emitter();

emitter.on('boom!', function(e) {
console.log(e.type, e.timeStamp);
})
.trigger('boom!')
.trigger(new Event('boom!'));
.trigger(new Emitter.Event('boom!'));

Event
emitter
.on('ha!', function(e, foo, bar) {
console.log(e.type, foo, bar);
})
Expand Down
8 changes: 4 additions & 4 deletions demo/browser/global.html
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,16 @@
<body>
<h2>See the Console</h2>
<script>
var Event = window.MicroEvent;
var emitter = window.Emitter();

Event
emitter
.on('boom!', function(e) {
console.log(e.type, e.timeStamp);
})
.trigger('boom!')
.trigger(new Event('boom!'));
.trigger(new window.Emitter.Event('boom!'));

Event
emitter
.on('ha!', function(e, foo, bar) {
console.log(e.type, foo, bar);
})
Expand Down
9 changes: 5 additions & 4 deletions demo/node/index.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
var Event = require('../..');
var Emitter = require('../..');
var emitter = Emitter();

Event
emitter
.on('boom!', function(e){
console.log(e.type, e.timeStamp);
})
.trigger('boom!')
.trigger(new Event('boom!'));
.trigger(new Emitter.Event('boom!'));

Event
emitter
.on('ha!', function(e, foo, bar){
console.log(e.type, foo, bar);
})
Expand Down
83 changes: 0 additions & 83 deletions dist/micro-event.js
Original file line number Diff line number Diff line change
@@ -1,83 +0,0 @@
'use strict';

(function () {
var events = {};

function Event(type) {
this.type = type;
this.timeStamp = new Date();
}

Event.on = function (type, handler) {
if (events.hasOwnProperty(type)) {
events[type].push(handler);
} else {
events[type] = [handler];
}
return Event;
};

Event.off = function (type, handler) {
if (arguments.length === 0) {
return _offAll();
}
if (handler === undefined) {
return _offByType(type);
}
return _offByHandler(type, handler);
};

Event.trigger = function (event, args) {
if (!(event instanceof Event)) {
event = new Event(event);
}
return _dispatch(event, args);
};

function _dispatch(event, args) {
if (!events.hasOwnProperty(event.type)) return;
args = args || [];
args.unshift(event);

var handlers = events[event.type] || [];
handlers.forEach(function (handler) {
return handler.apply(null, args);
});
return Event;
}

function _offByHandler(type, handler) {
if (!events.hasOwnProperty(type)) return;
var i = events[type].indexOf(handler);
if (i > -1) {
events[type].splice(i, 1);
}
return Event;
}

function _offByType(type) {
if (events.hasOwnProperty(type)) {
delete events[type];
}
return Event;
}

function _offAll() {
events = {};
return Event;
}

// CommonJS
if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
module.exports = Event;
}
// Browser
else if (typeof define === 'function' && define.amd) {
define('MicroEvent', [], function () {
return Event;
});
} else {
window.MicroEvent = Event;
}
})();

2 changes: 1 addition & 1 deletion dist/micro-event.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

88 changes: 52 additions & 36 deletions index.js
Original file line number Diff line number Diff line change
@@ -1,79 +1,95 @@
(function() {
var events = {};
function Emitter() {
var e = Object.create(emitter);
e.events = {};
return e;
}

function Event(type) {
this.type = type;
this.timeStamp = new Date();
}

Event.on = function(type, handler) {
if (events.hasOwnProperty(type)) {
events[type].push(handler);
var emitter = {};

emitter.on = function(type, handler) {
if (this.events.hasOwnProperty(type)) {
this.events[type].push(handler);
} else {
events[type] = [handler];
this.events[type] = [handler];
}
return Event;
return this;
};

Event.off = function(type, handler) {
emitter.off = function(type, handler) {
if (arguments.length === 0) {
return _offAll();
return this._offAll();
}
if (handler === undefined) {
return _offByType(type);
return this._offByType(type);
}
return _offByHandler(type, handler);
return this._offByHandler(type, handler);
};

Event.trigger = function(event, args) {
emitter.trigger = function(event, args) {
if (!(event instanceof Event)) {
event = new Event(event);
}
return _dispatch(event, args);
return this._dispatch(event, args);
};

function _dispatch(event, args) {
if (!events.hasOwnProperty(event.type)) return;
emitter._dispatch = function(event, args) {
if (!this.events.hasOwnProperty(event.type)) return;
args = args || [];
args.unshift(event);

var handlers = events[event.type] || [];
var handlers = this.events[event.type] || [];
handlers.forEach(handler => handler.apply(null, args));
return Event;
}
return this;
};

function _offByHandler(type, handler) {
if (!events.hasOwnProperty(type)) return;
var i = events[type].indexOf(handler);
emitter._offByHandler = function(type, handler) {
if (!this.events.hasOwnProperty(type)) return;
var i = this.events[type].indexOf(handler);
if (i > -1) {
events[type].splice(i, 1);
this.events[type].splice(i, 1);
}
return Event;
}
return this;
};

function _offByType(type) {
if (events.hasOwnProperty(type)) {
delete events[type];
emitter._offByType = function(type) {
if (this.events.hasOwnProperty(type)) {
delete this.events[type];
}
return Event;
}
return this;
};

function _offAll() {
events = {};
return Event;
}
emitter._offAll = function() {
this.events = {};
return this;
};

Emitter.Event = Event;

Emitter.mixin = function(obj, arr){
var emitter = new Emitter();
arr.map(function(name){
obj[name] = function(){
return emitter[name].apply(emitter, arguments);
};
});
};

// CommonJS
if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
module.exports = Event;
module.exports = Emitter;
}
// Browser
else if (typeof define === 'function' && define.amd) {
define('MicroEvent', [], function() {
return Event;
define('Emitter', [], function() {
return Emitter;
});
} else {
window.MicroEvent = Event;
window.Emitter = Emitter;
}
})();
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "micro-event",
"version": "1.0.1",
"version": "1.1.0",
"description": "A JavaScript Event Emmiter for Node.js and Browsers",
"main": "index.js",
"scripts": {
Expand Down
Loading

0 comments on commit c709228

Please sign in to comment.