travis-web/app/components/travis-cmd.js
2016-03-21 10:42:54 +01:00

83 lines
2.2 KiB
JavaScript

import Ember from 'ember';
import config from 'travis/config/environment';
export default Ember.Component.extend({
keyboard: Ember.inject.service(),
auth: Ember.inject.service(),
classNameBindings: ['visible'],
classNames: ['travis-cmd'],
didInsertElement() {
this.get('keyboard').bind('t', this.show.bind(this));
this.get('keyboard').bind('esc', 'cmd', this.hide.bind(this));
},
show() {
this.loadSlugs();
this.set('visible', true);
this.get('keyboard').setScope('cmd');
},
hide() {
this.set('visible', false);
this.get('keyboard').setScope(null);
this.set('matches', null);
this.set('filterString', null);
this.set('results', null);
},
loadSlugs() {
this.set('loading', true);
$.ajax(config.apiEndpoint + '/repos/slugs', {
headers: {
Authorization: 'token ' + this.get('auth').token(),
Accept: 'application/json; version=2'
}
}).then((data) => {
this.set('loading', false);
this.set('repos', data.repositories);
this.onLoad();
});
},
onLoad() {
setTimeout( () => {
this.$('.input').focus();
}, 10);
},
actions: {
filterChanged(value) {
let list = this.get('repos');
$.ajax("https://repos-filter-production.herokuapp.com/filter?phrase="+value, {
headers: { "Authorization": "token " + Travis.lookup('service:auth').token()
} }).then((response) => {
let repos = response.repositories;
repos = repos.sortBy('score').reverse();
let matches = repos.slice(0, 10).mapBy('match').map( (match) => match.replace(new RegExp('<|>', 'g'), (match) => match === '<' ? '<strong style="font-weight: 1000; color: #a80000">' : '</strong>' ) ).join('<br/>');
console.log(matches);
this.set('matches', matches);
});
this.set('filterString', value);
},
keypress(event) {
if(event.keyCode === 27) {
this.hide();
} else if(event.keyCode === 13) {
let results;
if(results = this.get('results')) {
if(results[0]) {
let slug = results[0].original.slug;
console.log(slug);
}
}
}
}
}
});