diff --git a/app/adapters/application.js b/app/adapters/application.js
index 77427849..033ecc5a 100644
--- a/app/adapters/application.js
+++ b/app/adapters/application.js
@@ -7,6 +7,16 @@ export default DS.ActiveModelAdapter.extend({
host: config.apiEndpoint,
coalesceFindRequests: true,
+ // Before Ember Data 2.0 the default behaviour of running `findAll` was to get
+ // new records only when there're no records in the store. This will change
+ // to a different strategy in 2.0: when you run `findAll` it will not get any
+ // new data initially, but it will try loading new data in the background.
+ //
+ // I'm disabling the new behaviour for now.
+ shouldBackgroundReloadRecord() {
+ return false;
+ },
+
ajaxOptions(url, type, options) {
var base, hash, token;
diff --git a/app/adapters/env-var.js b/app/adapters/env-var.js
index 4aaca486..2c688d13 100644
--- a/app/adapters/env-var.js
+++ b/app/adapters/env-var.js
@@ -7,7 +7,7 @@ export default ApplicationAdapter.extend({
buildURL(type, id, record) {
var delimiter, repoId, url;
url = this._super.apply(this, arguments);
- if (record && (repoId = Ember.get(record, 'repo.id'))) {
+ if (record && record.belongsTo('repo') && (repoId = record.belongsTo('repo').id)) {
delimiter = url.indexOf('?') !== -1 ? '&' : '?';
url = "" + url + delimiter + "repository_id=" + repoId;
}
@@ -15,12 +15,12 @@ export default ApplicationAdapter.extend({
},
updateRecord(store, type, record) {
- var data, id, serializer;
+ var data, serializer;
data = {};
- serializer = store.serializerFor(type.typeKey);
+ serializer = store.serializerFor(type.modelName);
serializer.serializeIntoHash(data, type, record);
- id = Ember.get(record, 'id');
- return this.ajax(this.buildURL(type.typeKey, id, record), "PATCH", {
+ var id = record.id;
+ return this.ajax(this.buildURL(type.modelName, id, record), "PATCH", {
data: data
});
}
diff --git a/app/adapters/ssh-key.js b/app/adapters/ssh-key.js
index 25e9113a..749040f4 100644
--- a/app/adapters/ssh-key.js
+++ b/app/adapters/ssh-key.js
@@ -4,24 +4,24 @@ import ApplicationAdapter from 'travis/adapters/application';
export default ApplicationAdapter.extend({
namespace: 'settings',
- find(store, type, id, record) {
+ findRecord(store, type, id, record) {
return this.ajax(this.urlPrefix() + '/ssh_key/' + id, 'GET');
},
deleteRecord(store, type, record) {
- var id;
- id = Ember.get(record, 'id');
+ var id = record.id;
return this.ajax(this.urlPrefix() + '/ssh_key/' + id, "DELETE");
},
createRecord(store, type, record) {
- var data, id, serializer;
+ var data, serializer;
data = {};
- serializer = store.serializerFor(type.typeKey);
+ serializer = store.serializerFor(type.modelName);
serializer.serializeIntoHash(data, type, record, {
includeId: true
});
- id = Ember.get(record, 'id');
+
+ var id = record.id;
return this.ajax(this.urlPrefix() + '/ssh_key/' + id, "PATCH", {
data: data
});
diff --git a/app/app.js b/app/app.js
index e4aed0e2..f56a9fcf 100644
--- a/app/app.js
+++ b/app/app.js
@@ -5,7 +5,7 @@ import config from './config/environment';
Ember.MODEL_FACTORY_INJECTIONS = true;
-Ember.LinkView.reopen({
+Ember.LinkComponent.reopen({
attributeBindings: ['alt']
});
diff --git a/app/components/add-ssh-key.js b/app/components/add-ssh-key.js
index 648ed32d..0bf3a0d9 100644
--- a/app/components/add-ssh-key.js
+++ b/app/components/add-ssh-key.js
@@ -11,7 +11,7 @@ export default Ember.Component.extend({
var model = this.get('store').recordForId('ssh_key', id);
if (model) {
- this.get('store').dematerializeRecord(model._internalModel);
+ this.get('store').unloadRecord(model);
var typeMap = this.get('store').typeMapFor(model.constructor);
var idToRecord = typeMap.idToRecord;
delete idToRecord[id];
@@ -62,7 +62,8 @@ export default Ember.Component.extend({
}
this.set('isSaving', true);
if (this.isValid()) {
- ssh_key = this.get('model').setProperties({
+ ssh_key = this.get('model');
+ ssh_key.setProperties({
description: this.get('description'),
value: this.get('value')
});
diff --git a/app/views/build.js b/app/components/build-wrapper.js
similarity index 60%
rename from app/views/build.js
rename to app/components/build-wrapper.js
index 0e981f04..9ea0f843 100644
--- a/app/views/build.js
+++ b/app/components/build-wrapper.js
@@ -1,11 +1,10 @@
+import Ember from 'ember';
import { colorForState } from 'travis/utils/helpers';
-import BasicView from 'travis/views/basic';
import Polling from 'travis/mixins/polling';
-export default BasicView.extend(Polling, {
+export default Ember.Component.extend({
classNameBindings: ['color'],
- buildBinding: 'controller.build',
- pollModels: 'controller.build',
+ pollModels: 'build',
color: function() {
return colorForState(this.get('build.state'));
diff --git a/app/views/builds.js b/app/components/builds-wrapper.js
similarity index 70%
rename from app/views/builds.js
rename to app/components/builds-wrapper.js
index eca5f332..b3a1ecb3 100644
--- a/app/views/builds.js
+++ b/app/components/builds-wrapper.js
@@ -1,12 +1,15 @@
-import BasicView from 'travis/views/basic';
+import Ember from 'ember';
import Polling from 'travis/mixins/polling';
-export default BasicView.extend(Polling, {
+export default Ember.Component.extend({
+ store: Ember.inject.service('store'),
+
pollHook: function(store) {
var contentType, repositoryId;
- contentType = this.get('controller.contentType');
- repositoryId = this.get('controller.repo.id');
- store = this.get('controller.store');
+ contentType = this.get('contentType');
+ repositoryId = this.get('repo.id');
+ store = this.get('store');
+
if (contentType === 'builds') {
return store.query('build', {
event_type: 'push',
diff --git a/app/components/env-var.js b/app/components/env-var.js
index 92f935a6..6442130b 100644
--- a/app/components/env-var.js
+++ b/app/components/env-var.js
@@ -8,7 +8,7 @@ export default Ember.Component.extend({
actionType: 'Save',
showValueField: Ember.computed.alias('public'),
- value: function(key, value) {
+ value: function(key) {
if (this.get('envVar.public')) {
return this.get('envVar.value');
} else {
diff --git a/app/components/job-log.js b/app/components/job-log.js
index 37f31999..c4d01e9e 100644
--- a/app/components/job-log.js
+++ b/app/components/job-log.js
@@ -3,36 +3,24 @@ import Ember from 'ember';
export default Ember.Component.extend({
logBinding: 'job.log',
- didInsertElement() {
- return this.setupLog();
- },
+ didReceiveAttrs: function(options) {
+ this._super(...arguments);
- logDidChange: function() {
- return this.setupLog();
- }.observes('log'),
+ if(options.oldAttrs && options.oldAttrs.job) {
+ this.teardownLog(options.oldAttrs.job.value);
+ }
- logWillChange: function() {
- return this.teardownLog();
- }.observesBefore('log'),
-
- willDestroyElement() {
- return this.teardownLog();
- },
-
- teardownLog() {
- var job;
- job = this.get('job');
- if (job) {
- return job.unsubscribe();
+ if(options.newAttrs && options.newAttrs.job) {
+ this.setupLog(options.newAttrs.job.value);
}
},
- setupLog() {
- var job;
- job = this.get('job');
- if (job) {
- job.get('log').fetch();
- return job.subscribe();
- }
+ teardownLog(job) {
+ job.unsubscribe();
+ },
+
+ setupLog(job) {
+ job.get('log').fetch();
+ job.subscribe();
}
});
diff --git a/app/views/job.js b/app/components/job-wrapper.js
similarity index 70%
rename from app/views/job.js
rename to app/components/job-wrapper.js
index 032e5161..5b190528 100644
--- a/app/views/job.js
+++ b/app/components/job-wrapper.js
@@ -3,10 +3,8 @@ import { colorForState } from 'travis/utils/helpers';
import { githubCommit } from 'travis/utils/urls';
import Polling from 'travis/mixins/polling';
-export default Ember.View.extend(Polling, {
- pollModels: 'controller.job.build',
- repoBinding: 'controller.repo',
- jobBinding: 'controller.job',
+export default Ember.Component.extend({
+ pollModels: 'job.build',
commitBinding: 'job.commit',
currentItemBinding: 'job',
@@ -16,5 +14,5 @@ export default Ember.View.extend(Polling, {
urlGithubCommit: function() {
return githubCommit(this.get('repo.slug'), this.get('commit.sha'));
- }.property('repo.slug', 'commit.sha'),
+ }.property('repo.slug', 'commit.sha')
});
diff --git a/app/components/log-content.js b/app/components/log-content.js
index 0fd30781..b21cfe6c 100644
--- a/app/components/log-content.js
+++ b/app/components/log-content.js
@@ -68,14 +68,14 @@ export default Ember.Component.extend({
console.log('log view: did insert');
}
this._super.apply(this, arguments);
- return this.createEngine();
+ Ember.run.scheduleOnce('afterRender', this, 'createEngine');
},
willDestroyElement() {
if (Log.DEBUG) {
console.log('log view: will destroy');
}
- return this.teardownLog();
+ Ember.run.scheduleOnce('afterRender', this, 'teardownLog');
},
teardownLog(log) {
@@ -121,7 +121,7 @@ export default Ember.Component.extend({
this.engine.limit = this.limit;
this.logFolder = new LogFolder(this.$('#log'));
this.lineSelector = new LinesSelector(this.$('#log'), this.scroll, this.logFolder);
- return this.observeParts(log);
+ this.observeParts(log);
}
},
@@ -158,7 +158,7 @@ export default Ember.Component.extend({
if (Log.DEBUG) {
console.log('log view: parts did change');
}
- if (this.get('state') !== 'inDOM') {
+ if (this.get('_state') !== 'inDOM') {
return;
}
ref = parts.slice(start, start + added);
diff --git a/app/views/application.js b/app/components/popup-click-handler.js
similarity index 61%
rename from app/views/application.js
rename to app/components/popup-click-handler.js
index f706832f..c810b87b 100644
--- a/app/views/application.js
+++ b/app/components/popup-click-handler.js
@@ -1,18 +1,17 @@
-import BasicView from 'travis/views/basic';
import Ember from 'ember';
-export default BasicView.extend({
+export default Ember.Component.extend({
popup: Ember.inject.service(),
classNames: ['application'],
click(event) {
- var targetAndParents;
- targetAndParents = $(event.target).parents().andSelf();
+ var targetAndParents = $(event.target).parents().andSelf();
+
if (!(targetAndParents.hasClass('open-popup') || targetAndParents.hasClass('popup'))) {
this.get('popup').close();
}
if (!targetAndParents.hasClass('menu') && !targetAndParents.is('#tools > a')) {
- return $('.menu').removeClass('display');
+ $('.menu').removeClass('display');
}
}
});
diff --git a/app/components/profile-accounts-wrapper.js b/app/components/profile-accounts-wrapper.js
new file mode 100644
index 00000000..83423d73
--- /dev/null
+++ b/app/components/profile-accounts-wrapper.js
@@ -0,0 +1,6 @@
+import Ember from 'ember';
+
+export default Ember.Component.extend({
+ classNames: ['profile-orglist', 'columns', 'medium-4'],
+ tagName: 'aside',
+});
diff --git a/app/components/repo-wrapper.js b/app/components/repo-wrapper.js
new file mode 100644
index 00000000..1ca2bd7f
--- /dev/null
+++ b/app/components/repo-wrapper.js
@@ -0,0 +1,7 @@
+import Polling from 'travis/mixins/polling';
+import Ember from 'ember';
+
+export default Ember.Component.extend(Polling, {
+ pollModels: 'repo',
+ classNameBindings: ['isLoading:loading']
+});
diff --git a/app/views/repos-list-tabs.js b/app/components/repos-list-tabs.js
similarity index 78%
rename from app/views/repos-list-tabs.js
rename to app/components/repos-list-tabs.js
index c24cc7f5..3524e1fc 100644
--- a/app/views/repos-list-tabs.js
+++ b/app/components/repos-list-tabs.js
@@ -1,13 +1,14 @@
import Ember from 'ember';
-export default Ember.View.extend({
- templateName: 'repos/list/tabs',
- tabBinding: 'controller.tab',
- currentUserBinding: 'controller.currentUser.model',
+export default Ember.Component.extend({
+ auth: Ember.inject.service(),
+
+ currentUserBinding: 'auth.currentUser',
+
classRecent: function() {
if (this.get('tab') === 'recent') {
return 'active';
- } else if (this.get('tab') === 'search' && this.get('controller').auth.get('signedIn')) {
+ } else if (this.get('tab') === 'search' && this.get('auth.signedIn')) {
return 'hidden';
}
}.property('tab'),
diff --git a/app/views/status-image-input.js b/app/components/status-image-input.js
similarity index 100%
rename from app/views/status-image-input.js
rename to app/components/status-image-input.js
diff --git a/app/components/status-images.js b/app/components/status-images.js
new file mode 100644
index 00000000..7ced75f0
--- /dev/null
+++ b/app/components/status-images.js
@@ -0,0 +1,24 @@
+import Ember from 'ember';
+import { format as formatStatusImage } from 'travis/utils/status-image-formats';
+
+export default Ember.Component.extend({
+ popup: Ember.inject.service(),
+
+ id: 'status-images',
+ attributeBindings: ['id'],
+ classNames: ['popup', 'status-images'],
+ formats: ['Image URL', 'Markdown', 'Textile', 'Rdoc', 'AsciiDoc', 'RST', 'Pod', 'CCTray'],
+
+ actions: {
+ close() {
+ return this.get('popup').close();
+ }
+ },
+
+ statusString: function() {
+ let format = this.get('format') || this.get('formats.firstObject'),
+ branch = this.get('branch') || 'master';
+
+ return formatStatusImage(format, this.get('repo.slug'), branch);
+ }.property('format', 'repo.slug', 'branch')
+});
diff --git a/app/components/travis-layout.js b/app/components/travis-layout.js
new file mode 100644
index 00000000..6e705e67
--- /dev/null
+++ b/app/components/travis-layout.js
@@ -0,0 +1,3 @@
+import Ember from 'ember';
+
+export default Ember.Component.extend({});
diff --git a/app/controllers/accounts.js b/app/controllers/accounts.js
index 6f6fd118..38e5364f 100644
--- a/app/controllers/accounts.js
+++ b/app/controllers/accounts.js
@@ -1,3 +1,3 @@
import Ember from 'ember';
-export default Ember.ArrayController.extend();
+export default Ember.Controller.extend();
diff --git a/app/controllers/builds.js b/app/controllers/builds.js
index dff591ff..a1c57d46 100644
--- a/app/controllers/builds.js
+++ b/app/controllers/builds.js
@@ -1,49 +1,33 @@
import Ember from 'ember';
-export default Ember.ArrayController.extend({
+export default Ember.Controller.extend({
sortAscending: false,
sortProperties: ['number'],
repoController: Ember.inject.controller('repo'),
repoBinding: 'repoController.repo',
tabBinding: 'repoController.tab',
- isLoadedBinding: 'content.isLoaded',
- isLoadingBinding: 'content.isLoading',
+ isLoadedBinding: 'model.isLoaded',
+ isLoadingBinding: 'model.isLoading',
showMore() {
var id, number, type;
id = this.get('repo.id');
- number = this.get('lastObject.number');
- type = this.get('tab') === "builds" ? 'push' : 'pull_request';
- return this.get('content').load(this.olderThanNumber(id, number, type));
+ number = this.get('model.lastObject.number');
+ type = this.get('tab') === "model" ? 'push' : 'pull_request';
+ return this.get('model').load(this.olderThanNumber(id, number, type));
},
displayShowMoreButton: function() {
- return this.get('tab') !== 'branches' && parseInt(this.get('lastObject.number')) > 1;
- }.property('tab', 'lastObject.number'),
+ return this.get('tab') !== 'branches' && parseInt(this.get('model.lastObject.number')) > 1;
+ }.property('tab', 'model.lastObject.number'),
displayPullRequests: function() {
- if (this.get('tab') === 'pull_requests') {
- if (Ember.isEmpty(this.get('repo.pullRequests.content'))) {
- return true;
- } else {
- return false;
- }
- } else {
- return false;
- }
- }.property('tab', 'repo.builds', 'repo.pullRequests'),
+ return this.get('tab') === 'pull_requests';
+ }.property('tab'),
displayBranches: function() {
- if (this.get('tab') === 'branches') {
- if (Ember.isEmpty(this.get('repo.branches.content.content'))) {
- return true;
- } else {
- return false;
- }
- } else {
- return false;
- }
- }.property('tab', 'repo.builds', 'repo.branches'),
+ return this.get('tab') === 'branches';
+ }.property('tab'),
noticeData: function() {
return {
diff --git a/app/controllers/error.js b/app/controllers/error.js
index 38e5364f..344c515b 100644
--- a/app/controllers/error.js
+++ b/app/controllers/error.js
@@ -1,3 +1,15 @@
import Ember from 'ember';
-export default Ember.Controller.extend();
+export default Ember.Controller.extend({
+ layoutName: Ember.computed({
+ get(key) {
+ if(this._layoutName) {
+ return 'layouts/' + this._layoutName;
+ }
+ },
+
+ set(key, value) {
+ return this._layoutName = value;
+ }
+ })
+});
diff --git a/app/controllers/loading.js b/app/controllers/loading.js
index 38e5364f..344c515b 100644
--- a/app/controllers/loading.js
+++ b/app/controllers/loading.js
@@ -1,3 +1,15 @@
import Ember from 'ember';
-export default Ember.Controller.extend();
+export default Ember.Controller.extend({
+ layoutName: Ember.computed({
+ get(key) {
+ if(this._layoutName) {
+ return 'layouts/' + this._layoutName;
+ }
+ },
+
+ set(key, value) {
+ return this._layoutName = value;
+ }
+ })
+});
diff --git a/app/controllers/repo.js b/app/controllers/repo.js
index bdda7a44..2e03d10c 100644
--- a/app/controllers/repo.js
+++ b/app/controllers/repo.js
@@ -1,11 +1,16 @@
import Ember from 'ember';
-import { githubRepo } from 'travis/utils/urls';
+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'],
@@ -14,6 +19,21 @@ export default Ember.Controller.extend({
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'),
+
+ actions: {
+ statusImages() {
+ this.get('popup').open('status-images');
+ return false;
+ }
+ },
+
slug: function() {
return this.get('repo.slug');
}.property('repo.slug'),
diff --git a/app/controllers/repos.js b/app/controllers/repos.js
index 33d7cd2c..71b64b70 100644
--- a/app/controllers/repos.js
+++ b/app/controllers/repos.js
@@ -1,5 +1,4 @@
import Ember from 'ember';
-import limit from 'travis/utils/computed-limit';
import Repo from 'travis/models/repo';
import Config from 'travis/config/environment';
@@ -202,7 +201,7 @@ var Controller = Ember.Controller.extend({
Ember.run.cancel(this.searchLater);
}
this.searchLater = Ember.run.later(this, (function() {
- this.transitionTo('main.search', phrase.replace(/\//g, '%2F'));
+ this.transitionToRoute('main.search', phrase.replace(/\//g, '%2F'));
}), 500);
},
diff --git a/app/controllers/requests.js b/app/controllers/requests.js
index 816c3f35..e1f16b96 100644
--- a/app/controllers/requests.js
+++ b/app/controllers/requests.js
@@ -1,6 +1,6 @@
import Ember from 'ember';
-export default Ember.ArrayController.extend({
+export default Ember.Controller.extend({
repoController: Ember.inject.controller('repo'),
lintUrl: function() {
diff --git a/app/controllers/top.js b/app/controllers/top.js
index 27cc673d..de6962d5 100644
--- a/app/controllers/top.js
+++ b/app/controllers/top.js
@@ -102,5 +102,17 @@ export default Ember.Controller.extend({
},
showCta: function() {
return !this.get('auth.signedIn') && !this.get('config.pro') && !this.get('landingPage');
- }.property('auth.signedIn', 'landingPage')
+ }.property('auth.signedIn', 'landingPage'),
+
+ classProfile: function() {
+ var classes = ['profile menu'];
+
+ if (this.get('tab') === 'profile') {
+ classes.push('active');
+ }
+
+ classes.push(this.get('controller.auth.state') || 'signed-out');
+
+ return classes.join(' ');
+ }.property('tab', 'auth.state')
});
diff --git a/app/mixins/polling.js b/app/mixins/polling.js
index 0213671e..001b9edb 100644
--- a/app/mixins/polling.js
+++ b/app/mixins/polling.js
@@ -3,6 +3,12 @@ import Ember from 'ember';
export default Ember.Mixin.create({
polling: Ember.inject.service(),
+ init() {
+ this.set('currentPollModels', {});
+
+ return this._super(...arguments);
+ },
+
didInsertElement() {
this._super.apply(this, arguments);
return this.startPolling();
@@ -17,16 +23,20 @@ export default Ember.Mixin.create({
return this.pollModel(key);
},
- pollModelWillChange(sender, key, value) {
- return this.stopPollingModel(key);
- },
-
pollModel(property) {
- var addToPolling, model;
- addToPolling = () => {
+ var model = this.get(property),
+ currentPollModels = this.get('currentPollModels');
+
+ if(currentPollModels[property]) {
+ this.get('polling').stopPolling(currentPollModels[property]);
+ }
+ currentPollModels[property] = model;
+
+ var addToPolling = () => {
return this.get('polling').startPolling(model);
};
- if (model = this.get(property)) {
+
+ if (model) {
if (model.then) {
return model.then(function(resolved) {
return addToPolling(resolved);
@@ -38,8 +48,8 @@ export default Ember.Mixin.create({
},
stopPollingModel(property) {
- var model;
- if (model = this.get(property)) {
+ var model = this.get(property);
+ if (model) {
return this.get('polling').stopPolling(model);
}
},
@@ -54,7 +64,6 @@ export default Ember.Mixin.create({
pollModels.forEach( (property) => {
this.pollModel(property);
this.addObserver(property, this, 'pollModelDidChange');
- return Ember.addBeforeObserver(this, property, this, 'pollModelWillChange');
});
}
if (this.pollHook) {
@@ -63,15 +72,15 @@ export default Ember.Mixin.create({
},
stopPolling() {
- var pollModels;
- if (pollModels = this.get('pollModels')) {
+ var pollModels = this.get('pollModels');
+
+ if (pollModels) {
if (!Ember.isArray(pollModels)) {
pollModels = [pollModels];
}
pollModels.forEach( (property) => {
this.stopPollingModel(property);
this.removeObserver(property, this, 'pollModelDidChange');
- return Ember.removeBeforeObserver(this, property, this, 'pollModelWillChange');
});
}
return this.get('polling').stopPollingHook(this);
diff --git a/app/models/repo.js b/app/models/repo.js
index 89ead250..3a9ba036 100644
--- a/app/models/repo.js
+++ b/app/models/repo.js
@@ -220,7 +220,7 @@ Repo.reopenClass({
return promise;
} else {
login = reposIdsOrlogin;
- return store.find('repo', {
+ return store.query('repo', {
member: login,
orderBy: 'name'
});
@@ -253,7 +253,7 @@ Repo.reopenClass({
});
});
} else {
- return store.find('repo', {
+ return store.query('repo', {
search: query,
orderBy: 'name'
});
@@ -299,7 +299,7 @@ Repo.reopenClass({
return repo;
});
} else {
- promise = store.find('repo', {
+ promise = store.query('repo', {
slug: slug
}).then(function(repos) {
return repos.get('firstObject') || (function() {
diff --git a/app/routes/auth.js b/app/routes/auth.js
index 42b86f76..f0707b5c 100644
--- a/app/routes/auth.js
+++ b/app/routes/auth.js
@@ -5,7 +5,7 @@ export default TravisRoute.extend({
renderTemplate() {
$('body').attr('id', 'auth');
- return this.render('auth.signin');
+ return this.render('signin');
},
deactivate() {
diff --git a/app/services/popup.js b/app/services/popup.js
index 89c51b97..2a866c97 100644
--- a/app/services/popup.js
+++ b/app/services/popup.js
@@ -9,11 +9,6 @@ export default Ember.Service.extend({
},
close() {
- var view;
- if (view = Ember.View.currentPopupView) {
- view.destroy();
- Ember.View.currentPopupView = null;
- }
return $('.popup').removeClass('display');
}
});
diff --git a/app/templates/account.hbs b/app/templates/account.hbs
index c68f5a7b..19bdae4a 100644
--- a/app/templates/account.hbs
+++ b/app/templates/account.hbs
@@ -1,14 +1,15 @@
{{#if allHooks.isLoaded}}
You're only two steps away from using Travis:
+
+
+
- {{#each controller as |build|}}
+ {{#each model as |build|}}
{{builds-item build=build}}
{{else}}
{{no-builds repo=noticeData isPR=displayPullRequests isBranch=displayBranches}}
@@ -18,3 +19,4 @@
{{else}}
{{loading-indicator}}
{{/if}}
+{{/builds-wrapper}}
diff --git a/app/templates/components/repos-empty.hbs b/app/templates/components/repos-empty.hbs
index d537537e..24601341 100644
--- a/app/templates/components/repos-empty.hbs
+++ b/app/templates/components/repos-empty.hbs
@@ -6,7 +6,7 @@
-
diff --git a/app/templates/repos/list/tabs.hbs b/app/templates/components/repos-list-tabs.hbs
similarity index 50%
rename from app/templates/repos/list/tabs.hbs
rename to app/templates/components/repos-list-tabs.hbs
index fc8723a8..b7a2d294 100644
--- a/app/templates/repos/list/tabs.hbs
+++ b/app/templates/components/repos-list-tabs.hbs
@@ -1,16 +1,16 @@
+{{/travis-layout}}
diff --git a/app/templates/job.hbs b/app/templates/job.hbs
index 11a6a833..86cf7b02 100644
--- a/app/templates/job.hbs
+++ b/app/templates/job.hbs
@@ -1,3 +1,4 @@
+{{#job-wrapper repo=repo job=job}}
{{#if job.isLoaded}}
{{build-header item=job user=auth.currentUser commit=job.commit repo=repo}}
@@ -9,3 +10,4 @@
{{loading-indicator}}
@@ -36,3 +37,4 @@
--}}
{{org-item account=user}}
@@ -18,3 +19,4 @@
Review and add your authorized organizations.