Created
May 2, 2018 17:06
-
-
Save taleschaves/2a9f176dc9c7ff6de8221746223fb467 to your computer and use it in GitHub Desktop.
// source http://jsbin.com
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html> | |
<head> | |
<meta charset="utf-8"> | |
<meta name="viewport" content="width=device-width"> | |
<title>JS Bin</title> | |
</head> | |
<body> | |
<script id="jsbin-javascript"> | |
// class Test { | |
// foo() { | |
// return "something"; | |
// } | |
// } | |
// var Mocha = require('mocha') | |
// var assert = require('assert') | |
// var mocha = new Mocha() | |
// // Bit of a hack, sorry! | |
// mocha.suite.emit('pre-require', this, 'solution', mocha) | |
// describe('Test suite', function() { | |
// it('should work', function() { | |
// let test = new Test(); | |
// assert.equal(test.foo(), "something"); | |
// }) | |
// }) | |
// mocha.run() | |
/* | |
Create an event library with 3 methods. You should be able to send this to a coworker to use. | |
.on(EVENT_NAME, CALLBACK_FUNCTION) - accepts a string, and a callback function. When event fires, | |
should call the callback function and pass params. | |
.off(EVENT_NAME, ?) - accepts a string, and a ?. Removes event listener. | |
.trigger(EVENT_NAME, arg1, arg2, ...argN) - accepts a string, and a variable number of arguments. Method is | |
used to trigger an event which results in all registered event listeners to fire. | |
*/ | |
class Eventter { | |
constructor() { | |
this.events = []; | |
} | |
on(event_name, callback) { | |
this.events.push({ | |
event_name: event_name, | |
callback: callback | |
}); | |
} | |
off(event_name) { | |
let index = this.findEventIndex(event_name); | |
if (typeof(index) === 'undefined') { | |
console.log('Event not found'); | |
return; | |
} | |
let elementsBefore = []; | |
if (index > 0) { | |
elementsBefore = this.events.slice(0, index); | |
} | |
let elementsAfter = this.events.slice(index + 1); | |
this.events = [].concat(elementsBefore, elementsAfter); | |
} | |
trigger(event_name, args) { | |
let index = this.findEventIndex(event_name); | |
let event = this.events[index]; | |
if (event) { | |
event.callback(args); | |
} else { | |
console.log('Event not found'); | |
} | |
} | |
findEventIndex(event_name) { | |
return this.events.findIndex((event_hash) => { | |
return event_hash.event_name === event_name | |
}); | |
} | |
} | |
let eventter = new Eventter(); | |
eventter.on('EVENT1', () => { console.log('EVENT1') }); | |
eventter.on('EVENT2', () => { console.log('EVENT2') }); | |
eventter.on('EVENT3', () => { console.log('EVENT3') }); | |
eventter.on('EVENT3', () => { console.log('EVENT3 - 2') }); | |
console.log('triggering 1'); | |
eventter.trigger('EVENT1'); | |
console.log('triggering 2'); | |
eventter.trigger('EVENT2'); | |
console.log('triggering 3'); | |
eventter.trigger('EVENT3'); | |
eventter.off('EVENT2'); | |
eventter.trigger('EVENT2'); | |
eventter.on('EVENT2', () => { console.log('EVENT2') }); | |
eventter.trigger('EVENT2'); | |
</script> | |
<script id="jsbin-source-javascript" type="text/javascript">// class Test { | |
// foo() { | |
// return "something"; | |
// } | |
// } | |
// var Mocha = require('mocha') | |
// var assert = require('assert') | |
// var mocha = new Mocha() | |
// // Bit of a hack, sorry! | |
// mocha.suite.emit('pre-require', this, 'solution', mocha) | |
// describe('Test suite', function() { | |
// it('should work', function() { | |
// let test = new Test(); | |
// assert.equal(test.foo(), "something"); | |
// }) | |
// }) | |
// mocha.run() | |
/* | |
Create an event library with 3 methods. You should be able to send this to a coworker to use. | |
.on(EVENT_NAME, CALLBACK_FUNCTION) - accepts a string, and a callback function. When event fires, | |
should call the callback function and pass params. | |
.off(EVENT_NAME, ?) - accepts a string, and a ?. Removes event listener. | |
.trigger(EVENT_NAME, arg1, arg2, ...argN) - accepts a string, and a variable number of arguments. Method is | |
used to trigger an event which results in all registered event listeners to fire. | |
*/ | |
class Eventter { | |
constructor() { | |
this.events = []; | |
} | |
on(event_name, callback) { | |
this.events.push({ | |
event_name: event_name, | |
callback: callback | |
}); | |
} | |
off(event_name) { | |
let index = this.findEventIndex(event_name); | |
if (typeof(index) === 'undefined') { | |
console.log('Event not found'); | |
return; | |
} | |
let elementsBefore = []; | |
if (index > 0) { | |
elementsBefore = this.events.slice(0, index); | |
} | |
let elementsAfter = this.events.slice(index + 1); | |
this.events = [].concat(elementsBefore, elementsAfter); | |
} | |
trigger(event_name, args) { | |
let index = this.findEventIndex(event_name); | |
let event = this.events[index]; | |
if (event) { | |
event.callback(args); | |
} else { | |
console.log('Event not found'); | |
} | |
} | |
findEventIndex(event_name) { | |
return this.events.findIndex((event_hash) => { | |
return event_hash.event_name === event_name | |
}); | |
} | |
} | |
let eventter = new Eventter(); | |
eventter.on('EVENT1', () => { console.log('EVENT1') }); | |
eventter.on('EVENT2', () => { console.log('EVENT2') }); | |
eventter.on('EVENT3', () => { console.log('EVENT3') }); | |
eventter.on('EVENT3', () => { console.log('EVENT3 - 2') }); | |
console.log('triggering 1'); | |
eventter.trigger('EVENT1'); | |
console.log('triggering 2'); | |
eventter.trigger('EVENT2'); | |
console.log('triggering 3'); | |
eventter.trigger('EVENT3'); | |
eventter.off('EVENT2'); | |
eventter.trigger('EVENT2'); | |
eventter.on('EVENT2', () => { console.log('EVENT2') }); | |
eventter.trigger('EVENT2'); | |
</script></body> | |
</html> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// class Test { | |
// foo() { | |
// return "something"; | |
// } | |
// } | |
// var Mocha = require('mocha') | |
// var assert = require('assert') | |
// var mocha = new Mocha() | |
// // Bit of a hack, sorry! | |
// mocha.suite.emit('pre-require', this, 'solution', mocha) | |
// describe('Test suite', function() { | |
// it('should work', function() { | |
// let test = new Test(); | |
// assert.equal(test.foo(), "something"); | |
// }) | |
// }) | |
// mocha.run() | |
/* | |
Create an event library with 3 methods. You should be able to send this to a coworker to use. | |
.on(EVENT_NAME, CALLBACK_FUNCTION) - accepts a string, and a callback function. When event fires, | |
should call the callback function and pass params. | |
.off(EVENT_NAME, ?) - accepts a string, and a ?. Removes event listener. | |
.trigger(EVENT_NAME, arg1, arg2, ...argN) - accepts a string, and a variable number of arguments. Method is | |
used to trigger an event which results in all registered event listeners to fire. | |
*/ | |
class Eventter { | |
constructor() { | |
this.events = []; | |
} | |
on(event_name, callback) { | |
this.events.push({ | |
event_name: event_name, | |
callback: callback | |
}); | |
} | |
off(event_name) { | |
let index = this.findEventIndex(event_name); | |
if (typeof(index) === 'undefined') { | |
console.log('Event not found'); | |
return; | |
} | |
let elementsBefore = []; | |
if (index > 0) { | |
elementsBefore = this.events.slice(0, index); | |
} | |
let elementsAfter = this.events.slice(index + 1); | |
this.events = [].concat(elementsBefore, elementsAfter); | |
} | |
trigger(event_name, args) { | |
let index = this.findEventIndex(event_name); | |
let event = this.events[index]; | |
if (event) { | |
event.callback(args); | |
} else { | |
console.log('Event not found'); | |
} | |
} | |
findEventIndex(event_name) { | |
return this.events.findIndex((event_hash) => { | |
return event_hash.event_name === event_name | |
}); | |
} | |
} | |
let eventter = new Eventter(); | |
eventter.on('EVENT1', () => { console.log('EVENT1') }); | |
eventter.on('EVENT2', () => { console.log('EVENT2') }); | |
eventter.on('EVENT3', () => { console.log('EVENT3') }); | |
eventter.on('EVENT3', () => { console.log('EVENT3 - 2') }); | |
console.log('triggering 1'); | |
eventter.trigger('EVENT1'); | |
console.log('triggering 2'); | |
eventter.trigger('EVENT2'); | |
console.log('triggering 3'); | |
eventter.trigger('EVENT3'); | |
eventter.off('EVENT2'); | |
eventter.trigger('EVENT2'); | |
eventter.on('EVENT2', () => { console.log('EVENT2') }); | |
eventter.trigger('EVENT2'); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment