Skip to content

Instantly share code, notes, and snippets.

Created October 23, 2015 23:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save anonymous/4bd5ac87e649d89562fe to your computer and use it in GitHub Desktop.
Save anonymous/4bd5ac87e649d89562fe to your computer and use it in GitHub Desktop.
JS Bin // source http://jsbin.com/mugomu
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JS Bin</title>
</head>
<body>
Test
<button id="button">Click me</button>
<script id="jsbin-javascript">
"use strict";
function Observable(forEach) {
this._forEach = forEach;
}
var noop = function noop() {};
Observable.prototype.forEach = function (onNextOrObserver, onError, onCompleted) {
if (typeof onNextOrObserver === "function") {
return this._forEach({
onNext: onNextOrObserver,
onError: onError || noop,
onCompleted: onCompleted || noop
});
} else {
return this._forEach(onNextOrObserver);
}
};
Observable.of = function () {
debugger;
var args = Array.prototype.slice.call(arguments);
return new Observable(function (observer) {
var handle = setTimeout(function () {
args.forEach(function (arg) {
return observer.onNext(arg);
});
observer.onCompleted();
});
return {
dispose: function dispose() {
clearTimeout(handle);
}
};
});
};
Observable.prototype.map = function (projection) {
var self = this;
return new Observable(function forEach(observer) {
return self.forEach(function onNext(x) {
observer.onNext(projection(x));
}, function onError(e) {
observer.onError(e);
}, function onCompleted() {
observer.onCompleted();
});
});
};
Observable.prototype.filter = function (predicate) {
var self = this;
return new Observable(function forEach(observer) {
return self.forEach(function onNext(x) {
if (predicate(x)) {
observer.onNext(x);
}
}, function onError(e) {
observer.onError(e);
}, function onCompleted() {
observer.onCompleted();
});
});
};
Observable.fromEvent = function (dom, eventName) {
return new Observable(function forEach(observer) {
var handler = function handler(e) {
observer.onNext(e);
};
dom.addEventListener(eventName, handler);
return {
dispose: function dispose() {
dom.removeEventListener(eventName, handler);
}
};
});
};
var button = document.getElementById('button');
var clicks = Observable.fromEvent(button, "click");
clicks.forEach(function (x) {
return console.log("click");
});
//subscription.dispose();
</script>
<script id="jsbin-source-javascript" type="text/javascript">
function Observable(forEach) {
this._forEach = forEach;
}
var noop = function() {};
Observable.prototype.forEach = function(onNextOrObserver, onError, onCompleted) {
if (typeof onNextOrObserver === "function") {
return this._forEach({
onNext: onNextOrObserver,
onError: onError || noop,
onCompleted: onCompleted || noop
});
}
else {
return this._forEach(onNextOrObserver);
}
}
Observable.of = function() {
debugger;
var args = Array.prototype.slice.call(arguments);
return new Observable(function(observer) {
var handle = setTimeout(function() {
args.forEach(arg => observer.onNext(arg));
observer.onCompleted();
});
return {
dispose: function() {
clearTimeout(handle);
}
}
});
};
Observable.prototype.map = function(projection) {
var self = this;
return new Observable(function forEach(observer) {
return self.forEach(
function onNext(x) {
observer.onNext(projection(x));
},
function onError(e) {
observer.onError(e);
},
function onCompleted() {
observer.onCompleted();
});
});
}
Observable.prototype.filter = function(predicate) {
var self = this;
return new Observable(function forEach(observer) {
return self.forEach(
function onNext(x) {
if (predicate(x)) {
observer.onNext(x);
}
},
function onError(e) {
observer.onError(e);
},
function onCompleted() {
observer.onCompleted();
});
});
}
Observable.fromEvent = function(dom, eventName) {
return new Observable(function forEach(observer) {
var handler = function(e) {
observer.onNext(e);
}
dom.addEventListener(eventName, handler);
return {
dispose: function() {
dom.removeEventListener(eventName, handler);
}
}
});
}
var button = document.getElementById('button');
var clicks =
Observable.fromEvent(
button,
"click");
clicks.forEach(x => console.log("click"));
//subscription.dispose();</script></body>
</html>
"use strict";
function Observable(forEach) {
this._forEach = forEach;
}
var noop = function noop() {};
Observable.prototype.forEach = function (onNextOrObserver, onError, onCompleted) {
if (typeof onNextOrObserver === "function") {
return this._forEach({
onNext: onNextOrObserver,
onError: onError || noop,
onCompleted: onCompleted || noop
});
} else {
return this._forEach(onNextOrObserver);
}
};
Observable.of = function () {
debugger;
var args = Array.prototype.slice.call(arguments);
return new Observable(function (observer) {
var handle = setTimeout(function () {
args.forEach(function (arg) {
return observer.onNext(arg);
});
observer.onCompleted();
});
return {
dispose: function dispose() {
clearTimeout(handle);
}
};
});
};
Observable.prototype.map = function (projection) {
var self = this;
return new Observable(function forEach(observer) {
return self.forEach(function onNext(x) {
observer.onNext(projection(x));
}, function onError(e) {
observer.onError(e);
}, function onCompleted() {
observer.onCompleted();
});
});
};
Observable.prototype.filter = function (predicate) {
var self = this;
return new Observable(function forEach(observer) {
return self.forEach(function onNext(x) {
if (predicate(x)) {
observer.onNext(x);
}
}, function onError(e) {
observer.onError(e);
}, function onCompleted() {
observer.onCompleted();
});
});
};
Observable.fromEvent = function (dom, eventName) {
return new Observable(function forEach(observer) {
var handler = function handler(e) {
observer.onNext(e);
};
dom.addEventListener(eventName, handler);
return {
dispose: function dispose() {
dom.removeEventListener(eventName, handler);
}
};
});
};
var button = document.getElementById('button');
var clicks = Observable.fromEvent(button, "click");
clicks.forEach(function (x) {
return console.log("click");
});
//subscription.dispose();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment