JSFiddle - React, Tailwind, and code Playground
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/2.5.2/rx.all.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.5/d3.js"></script>
<input type='text' id='myInput' />
JavaScript
var lines = [];
var w = $(window).width()
var svg = d3.select("body").append("svg").attr("width", w).attr("height", 300);
var keyDowns = Rx.Observable.fromEvent(document.getElementById("myInput"), "keydown");
draw("Key Down", keyDowns);
var throttled = keyDowns.throttle(500);
draw("Throttled", throttled);
var distinct = throttled.map(function(e){
console.log(e.target.value);
return e.target.value;
}).distinctUntilChanged();
draw("Distinct Until Changed", distinct);
var performSearch = distinct.flatMapLatest(function(e){
return $.get("https://api.stackexchange.com//2.2/search?order=desc&sort=activity&site=stackoverflow&intitle=" + e);
});
draw("Search results", performSearch);
var titles = performSearch.flatMap(function(val){
return val.items;
}).map(function(item){
console.log("Itme is", item);
return item.title.link(item.link);
});
draw("Question titles", titles);
var d = document.createElement("div");
document.body.appendChild(d);
titles.subscribe(function(val){
d.innerHTML = val + "<br />" + d.innerHTML;
});
function draw(msg, obs) {
var i = lines.length;
if (!obs) {
obs = msg;
msg = "";
}
svg.append("text")
.attr("fill", "black")
.attr("x", 40)
.attr("y", 20 + i * 60)
.attr("font-family", "sans-serif").attr("font-size", "15px")
.text(msg);
var line = svg.append("line")
.attr("x1", 40)
.attr("y1", 40 + i * 60)
.attr("x2", w - 40)
.attr("y2", 40 + i * 60)
.attr("stroke-width", 2)
.attr("stroke", "black")
.attr("marker-end", "url(\#arrow)")
.attr("marker-start", "url(\#arrow)");
lines.push({
line: line,
obs: obs
});
obs.subscribe(function onData(data) {
var circle = svg.append("circle")
.attr("cx", 40)
.attr("cy", 40 + 60 * i)
.attr("r", 15)
.attr("fill", randomColor())
...