Skip to content

Instantly share code, notes, and snippets.

@web20opensource
Forked from 1Marc/script.js
Last active August 29, 2015 14:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save web20opensource/4a86cb1ed0b60a8ac359 to your computer and use it in GitHub Desktop.
Save web20opensource/4a86cb1ed0b60a8ac359 to your computer and use it in GitHub Desktop.
// Code goes here
window.onload = function() {
var Observable = Rx.Observable;
var textbox = document.getElementById('textbox');
var keypresses = Observable.fromEvent(textbox, 'keypress');
var results = document.getElementById('results');
var searchButton = document.getElementById('searchButton');
var searchButtonClicks = Observable.fromEvent(searchButton, 'click');
function getWikipediaSearchResults(term) {
return Observable.create(function forEach(observer) {
var cancelled = false;
var url = 'http://en.wikipedia.org/w/api.php?action=opensearch&format=json&search='
+ encodeURIComponent(term) + '&callback=?';
$.getJSON(url, function(data) {
if (!cancelled) {
observer.onNext(data[1]);
observer.onCompleted();
}
});
return function dispose() {
cancelled = true;
};
});
}
searchButtonClicks.forEach(function() {
document.getElementById('searchForm').style.display = "block";
});
//[1,2,3].map(x => [x]) -> [[1],[2],[3]]
var searchResultSets =
searchButtonClicks.
map(function() {
var closeClicks = Observable.fromEvent(document.getElementById('closeButton'), 'click');
return keypresses.
// {.'a'..'b'.......'c'..'d'.....
throttle(20).
// {...........'b'............'d'.....
map(function(key) {
return textbox.value;
}).
// {...........'ab'.....'ab'....'abc'..
distinctUntilChanged().
// {...........'ab'.............'abc'
map(function(search){
return getWikipediaSearchResults(search).retry(3);
}).
switchLatest().
takeUntil(closeClicks)
// {........................................["abacus"]...
}).
switchLatest();
searchResultSets.forEach(
function(resultSet) {
results.value = JSON.stringify(resultSet);
},
function(error) {
alert('Not working. Try again later.')
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment