<html>
<head>
<script src="https://npmcdn.com/angular@1.5.5/angular.js"></script>
<script src="https://npmcdn.com/rx@4.1.0/dist/rx.all.min.js"></script>
<script src="https://npmcdn.com/rx@4.1.0/dist/rx.all.min.js"></script>
</head>
<body ng-app="app">
<div>
<h4>Search GitHub users</h4>
<autocomplete></autocomplete>
</div>
</body>
</html>
angular.module('app', ['rx'])
.directive('autocomplete', function () {
return {
scope: {},
template: '<input ng-model="val" ng-change="update(val)" />' +
'<ul class="suggestions">' +
'<li ng-repeat="suggestion in suggestions">' +
'<a href="https://github.com/{{ suggestion }}"' +
' target="_blank">{{ suggestion }}</a>' +
'</li>' +
'</ul>',
link: function (scope) {
scope.$createObservableFunction('update')
.debounce(400)
.map(keyword => keyword.trim())
.filter(keyword => keyword.length > 0)
.distinctUntilChanged()
.map(keyword => searchGitHub(keyword))
.switch()
.digest(scope, 'suggestions')
.subscribe();
}
};
function searchGitHub(term) {
var apiUrl = 'https://api.github.com/search/users?q=';
return Rx.Observable.create(function (observer) {
fetch(apiUrl + term)
.then(res => res.json())
.then(json => {
observer.onNext(json);
observer.onCompleted();
}).catch(observer.onError);
})
.map(json => {
return json.items.map(item => item.login);
});
}
});
Output
You can jump to the latest bin by adding /latest
to your URL
Keyboard Shortcuts
Shortcut | Action |
---|---|
ctrl + [num] | Toggle nth panel |
ctrl + 0 | Close focused panel |
ctrl + enter | Re-render output. If console visible: run JS in console |
Ctrl + l | Clear the console |
ctrl + / | Toggle comment on selected lines |
ctrl + ] | Indents selected lines |
ctrl + [ | Unindents selected lines |
tab | Code complete & Emmet expand |
ctrl + shift + L | Beautify code in active panel |
ctrl + s | Save & lock current Bin from further changes |
ctrl + shift + s | Open the share options |
ctrl + y | Archive Bin |
Complete list of JS Bin shortcuts |
JS Bin URLs
URL | Action |
---|---|
/ | Show the full rendered output. This content will update in real time as it's updated from the /edit url. |
/edit | Edit the current bin |
/watch | Follow a Code Casting session |
/embed | Create an embeddable version of the bin |
/latest | Load the very latest bin (/latest goes in place of the revision) |
/[username]/last | View the last edited bin for this user |
/[username]/last/edit | Edit the last edited bin for this user |
/[username]/last/watch | Follow the Code Casting session for the latest bin for this user |
/quiet | Remove analytics and edit button from rendered output |
.js | Load only the JavaScript for a bin |
.css | Load only the CSS for a bin |
Except for username prefixed urls, the url may start with http://jsbin.com/abc and the url fragments can be added to the url to view it differently. |