Skip to content

Instantly share code, notes, and snippets.

@taleschaves
Created May 2, 2018 17:06
Show Gist options
  • Save taleschaves/2a9f176dc9c7ff6de8221746223fb467 to your computer and use it in GitHub Desktop.
Save taleschaves/2a9f176dc9c7ff6de8221746223fb467 to your computer and use it in GitHub Desktop.
// source http://jsbin.com
<!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>
// 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