Skip to content

Instantly share code, notes, and snippets.

@carlosvega20
Created March 1, 2018 14:52
Show Gist options
  • Save carlosvega20/9dfa31c70d31b107d76fd1e11f34131b to your computer and use it in GitHub Desktop.
Save carlosvega20/9dfa31c70d31b107d76fd1e11f34131b to your computer and use it in GitHub Desktop.
JS Bin // source https://jsbin.com/viseyon
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
</head>
<body>
<input/>
<script id="jsbin-javascript">
function Observable (subscribe) {
this._subscribe = subscribe;
}
Observable.prototype.subscribe = function (observer) {
return this._subscribe(observer);
}
Observable.prototype.map = function (projection) {
var self = this;
return new Observable(observer => {
var subscription = self.subscribe({
next(v) {
observer.next(projection(v));
}
});
});
}
Observable.fromEvent = function (dom, eventName) {
return new Observable(observer => {
var handler = e => observer.next(e);
dom.addEventListener(eventName, handler);
return {
unsubscribe () {
dom.removeEventListener(eventName, handler);
}
}
})
}
//or with es6 class
/*
class Observable {
constructor(subscribe){
this._subscribe = subscribe;
}
subscribe (observer) {
return this._subscribe(observer);
}
map(projection) {
const self = this;
return new Observable(observer => {
const subscription = self.subscribe({
next(v) {
observer.next(projection(v));
}
});
});
}
static fromEvent(dom, eventName) {
return new Observable(observer => {
const handler = e => observer.next(e);
dom.addEventListener(eventName, handler);
return {
unsubscribe () {
dom.removeEventListener(eventName, handler);
}
}
})
}
}
*/
const input = document.body.querySelector('input');
var inputStream = Observable.fromEvent(input, 'keyup');
inputStream
.map(e=>e.target.value)
.subscribe({
next: (v) => console.log(v)
});
</script>
<script id="jsbin-source-javascript" type="text/javascript">function Observable (subscribe) {
this._subscribe = subscribe;
}
Observable.prototype.subscribe = function (observer) {
return this._subscribe(observer);
}
Observable.prototype.map = function (projection) {
var self = this;
return new Observable(observer => {
var subscription = self.subscribe({
next(v) {
observer.next(projection(v));
}
});
});
}
Observable.fromEvent = function (dom, eventName) {
return new Observable(observer => {
var handler = e => observer.next(e);
dom.addEventListener(eventName, handler);
return {
unsubscribe () {
dom.removeEventListener(eventName, handler);
}
}
})
}
//or with es6 class
/*
class Observable {
constructor(subscribe){
this._subscribe = subscribe;
}
subscribe (observer) {
return this._subscribe(observer);
}
map(projection) {
const self = this;
return new Observable(observer => {
const subscription = self.subscribe({
next(v) {
observer.next(projection(v));
}
});
});
}
static fromEvent(dom, eventName) {
return new Observable(observer => {
const handler = e => observer.next(e);
dom.addEventListener(eventName, handler);
return {
unsubscribe () {
dom.removeEventListener(eventName, handler);
}
}
})
}
}
*/
const input = document.body.querySelector('input');
var inputStream = Observable.fromEvent(input, 'keyup');
inputStream
.map(e=>e.target.value)
.subscribe({
next: (v) => console.log(v)
});
</script></body>
</html>
function Observable (subscribe) {
this._subscribe = subscribe;
}
Observable.prototype.subscribe = function (observer) {
return this._subscribe(observer);
}
Observable.prototype.map = function (projection) {
var self = this;
return new Observable(observer => {
var subscription = self.subscribe({
next(v) {
observer.next(projection(v));
}
});
});
}
Observable.fromEvent = function (dom, eventName) {
return new Observable(observer => {
var handler = e => observer.next(e);
dom.addEventListener(eventName, handler);
return {
unsubscribe () {
dom.removeEventListener(eventName, handler);
}
}
})
}
//or with es6 class
/*
class Observable {
constructor(subscribe){
this._subscribe = subscribe;
}
subscribe (observer) {
return this._subscribe(observer);
}
map(projection) {
const self = this;
return new Observable(observer => {
const subscription = self.subscribe({
next(v) {
observer.next(projection(v));
}
});
});
}
static fromEvent(dom, eventName) {
return new Observable(observer => {
const handler = e => observer.next(e);
dom.addEventListener(eventName, handler);
return {
unsubscribe () {
dom.removeEventListener(eventName, handler);
}
}
})
}
}
*/
const input = document.body.querySelector('input');
var inputStream = Observable.fromEvent(input, 'keyup');
inputStream
.map(e=>e.target.value)
.subscribe({
next: (v) => console.log(v)
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment