159 lines
3.6 KiB
JavaScript
159 lines
3.6 KiB
JavaScript
import Ember from 'ember';
|
|
import { githubRepo, statusImage } from 'travis/utils/urls';
|
|
import config from 'travis/config/environment';
|
|
|
|
|
|
export default Ember.Controller.extend({
|
|
popup: Ember.inject.service(),
|
|
|
|
jobController: Ember.inject.controller('job'),
|
|
buildController: Ember.inject.controller('build'),
|
|
buildsController: Ember.inject.controller('builds'),
|
|
reposController: Ember.inject.controller('repos'),
|
|
reposBinding: 'reposController.repos',
|
|
currentUserBinding: 'auth.currentUser',
|
|
|
|
classNames: ['repo'],
|
|
|
|
build: Ember.computed.alias('buildController.build'),
|
|
builds: Ember.computed.alias('buildsController.content'),
|
|
job: Ember.computed.alias('jobController.job'),
|
|
|
|
isEmpty: function() {
|
|
return this.get('repos.isLoaded') && this.get('repos.length') === 0;
|
|
}.property('repos.isLoaded', 'repos.length'),
|
|
|
|
statusImageUrl: function() {
|
|
return statusImage(this.get('repo.slug'));
|
|
}.property('repo.slug'),
|
|
|
|
showCurrentBuild: function() {
|
|
return this.get('repo.lastBuildId') && this.get('repo.active');
|
|
}.property('repo.lastBuildId', 'repo.active'),
|
|
|
|
actions: {
|
|
statusImages() {
|
|
this.get('popup').open('status-images');
|
|
return false;
|
|
}
|
|
},
|
|
|
|
slug: function() {
|
|
return this.get('repo.slug');
|
|
}.property('repo.slug'),
|
|
|
|
isLoading: function() {
|
|
return this.get('repo.isLoading');
|
|
}.property('repo.isLoading'),
|
|
|
|
init() {
|
|
this._super.apply(this, arguments);
|
|
if (!Ember.testing) {
|
|
return Visibility.every(this.config.intervals.updateTimes, this.updateTimes.bind(this));
|
|
}
|
|
},
|
|
|
|
updateTimes() {
|
|
return Ember.run(this, function() {
|
|
var build, builds, jobs;
|
|
if (builds = this.get('builds')) {
|
|
builds.forEach(function(b) {
|
|
return b.updateTimes();
|
|
});
|
|
}
|
|
if (build = this.get('build')) {
|
|
build.updateTimes();
|
|
}
|
|
if (build && (jobs = build.get('jobs'))) {
|
|
return jobs.forEach(function(j) {
|
|
return j.updateTimes();
|
|
});
|
|
}
|
|
});
|
|
},
|
|
|
|
deactivate() {
|
|
return this.stopObservingLastBuild();
|
|
},
|
|
|
|
activate(action) {
|
|
this.stopObservingLastBuild();
|
|
return this[("view_" + action).camelize()]();
|
|
},
|
|
|
|
viewIndex() {
|
|
this.observeLastBuild();
|
|
return this.connectTab('current');
|
|
},
|
|
|
|
viewCurrent() {
|
|
this.observeLastBuild();
|
|
return this.connectTab('current');
|
|
},
|
|
|
|
viewBuilds() {
|
|
return this.connectTab('builds');
|
|
},
|
|
|
|
viewPullRequests() {
|
|
return this.connectTab('pull_requests');
|
|
},
|
|
|
|
viewBranches() {
|
|
return this.connectTab('branches');
|
|
},
|
|
|
|
viewBuild() {
|
|
return this.connectTab('build');
|
|
},
|
|
|
|
viewJob() {
|
|
return this.connectTab('job');
|
|
},
|
|
|
|
viewRequests() {
|
|
return this.connectTab('requests');
|
|
},
|
|
|
|
viewCaches() {
|
|
return this.connectTab('caches');
|
|
},
|
|
|
|
viewRequest() {
|
|
return this.connectTab('request');
|
|
},
|
|
|
|
viewSettings() {
|
|
return this.connectTab('settings');
|
|
},
|
|
|
|
lastBuildDidChange() {
|
|
return Ember.run.scheduleOnce('actions', this, this._lastBuildDidChange);
|
|
},
|
|
|
|
_lastBuildDidChange() {
|
|
var build;
|
|
build = this.get('repo.lastBuild');
|
|
return this.set('build', build);
|
|
},
|
|
|
|
stopObservingLastBuild() {
|
|
return this.removeObserver('repo.lastBuild', this, 'lastBuildDidChange');
|
|
},
|
|
|
|
observeLastBuild() {
|
|
this.lastBuildDidChange();
|
|
return this.addObserver('repo.lastBuild', this, 'lastBuildDidChange');
|
|
},
|
|
|
|
connectTab(tab) {
|
|
var name;
|
|
name = tab === 'current' ? 'build' : tab;
|
|
return this.set('tab', tab);
|
|
},
|
|
|
|
urlGithub: function() {
|
|
return githubRepo(this.get('repo.slug'));
|
|
}.property('repo.slug')
|
|
});
|