Created
October 23, 2015 23:13
-
-
Save anonymous/4bd5ac87e649d89562fe to your computer and use it in GitHub Desktop.
JS Bin // source http://jsbin.com/mugomu
This file contains 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"> | |
<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> |
This file contains 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
"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