diff --git a/js/app/controllers/RepoController.js b/js/app/controllers/RepoController.js
index b1b5ee2..8b37481 100644
--- a/js/app/controllers/RepoController.js
+++ b/js/app/controllers/RepoController.js
@@ -23,7 +23,7 @@ define([
var favorite = $.inArray(this.get('repo.id'), this.get('faves')) !== -1;
utils.debug('RepoController::favorite:> favorite: ' + favorite);
return favorite;
- }.property('repo.id', 'faves').volatile(),
+ }.property('repo.id', 'faves'),
toggleFavorite : function () {
this.set('faves', '');
Favorites.toggle(this.get('repo.id'));
diff --git a/js/app/ext/ExpandableRecordArray.js b/js/app/ext/ExpandableRecordArray.js
index 516c59e..1c53353 100644
--- a/js/app/ext/ExpandableRecordArray.js
+++ b/js/app/ext/ExpandableRecordArray.js
@@ -14,7 +14,9 @@ define([
content = self.get('content');
array.removeObserver('isLoaded', observer);
array.forEach(function (record) {
- return self.pushObject(record);
+ if (!self.contains(record)) {
+ return self.pushObject(record);
+ }
});
self.set('isLoading', false);
return self.set('isLoaded', true);
diff --git a/js/app/ext/Helpers.js b/js/app/ext/Helpers.js
index 21c7eaf..4f0e840 100644
--- a/js/app/ext/Helpers.js
+++ b/js/app/ext/Helpers.js
@@ -70,6 +70,11 @@ define([
if (options.short) {
message = message.split(/\n/)[0];
}
+// message = this._emojize(this._escape(message));
+// if (!!options.repo) {
+// message = this.githubify(message, options.repo.get('owner'), options.repo.get('name'));
+// }
+// return message.replace(/\n/g, '
');
return this._emojize(this._escape(message)).replace(/\n/g, '
');
},
pathFrom : function (url) {
@@ -116,6 +121,35 @@ define([
}
}
},
+// githubify : function (text, owner, repo) {
+// var self;
+// self = this;
+// text = text.replace(this._githubReferenceRegexp, function (reference, matchedOwner, matchedRepo, matchedNumber) {
+// return self._githubReferenceLink(reference, {
+// owner : owner,
+// repo : repo
+// }, {
+// owner : matchedOwner,
+// repo : matchedRepo,
+// number : matchedNumber
+// });
+// });
+// text = text.replace(this._githubUserRegexp, function (reference, username) {
+// return self._githubUserLink(reference, username);
+// });
+// return text;
+// },
+// _githubReferenceLink : function (reference, current, matched) {
+// var owner, repo;
+// owner = matched.owner || current.owner;
+// repo = matched.repo || current.repo;
+// return "" + reference + "";
+// },
+// _githubReferenceRegexp : new RegExp("([\\w-]+)?\\/?([\\w-]+)?(?:#|gh-)(\\d+)", 'g'),
+// _githubUserRegexp : new RegExp("@([\\w-]+)", 'g'),
+// _githubUserLink : function (reference, username) {
+// return "" + reference + "";
+// },
_normalizeDateString : function (string) {
if (window.JHW) {
string = string.replace('T', ' ').replace(/-/g, '/');
diff --git a/js/app/ext/ember/handlebars.js b/js/app/ext/ember/handlebars.js
index 6d4c9ac..46d9836 100644
--- a/js/app/ext/ember/handlebars.js
+++ b/js/app/ext/ember/handlebars.js
@@ -52,8 +52,8 @@ define([
return safe(Helpers.pathFrom(url));
});
- Ember.registerBoundHelper('formatMessage', function (message, options) {
- return safe(Helpers.formatMessage(message, options));
+ Ember.Handlebars.helper('formatMessage', function(message, options) {
+ return safe(Helpers.formatMessage(message, options.hash));
});
Ember.registerBoundHelper('formatConfig', function (config) {
diff --git a/js/app/models/Build.js b/js/app/models/Build.js
index 0fb0d20..531cdfb 100644
--- a/js/app/models/Build.js
+++ b/js/app/models/Build.js
@@ -29,7 +29,7 @@ define([
return Helpers.compact(this.get('_config'));
}.property('_config'),
isPullRequest : function () {
- return this.get('eventType') === 'pull_request';
+ return this.get('eventType') === 'pull_request' || this.get('pullRequest');
}.property('eventType'),
isMatrix : function () {
return this.get('jobs.length') > 1;
diff --git a/js/app/models/Job.js b/js/app/models/Job.js
index e70dabf..351fb3c 100644
--- a/js/app/models/Job.js
+++ b/js/app/models/Job.js
@@ -23,33 +23,33 @@ define([
finishedAt : Ember.attr('string'),
allowFailure : Ember.attr('boolean'),
- repositorySlug : Ember.attr('string'),
- repo : Ember.belongsTo('App.Repo', {key : 'repository_id'}),
- build : Ember.belongsTo('App.Build'),
- commit : Ember.belongsTo('App.Commit'),
- _config : Ember.attr('object', {key : 'config'}),
- log : function () {
+ repositorySlug : Ember.attr('string'),
+ repo : Ember.belongsTo('App.Repo', {key : 'repository_id'}),
+ build : Ember.belongsTo('App.Build'),
+ commit : Ember.belongsTo('App.Commit'),
+ _config : Ember.attr('object', {key : 'config'}),
+ log : function () {
this.set('isLogAccessed', true);
return Log.create({
job : this
});
}.property(),
- repoSlug : function () {
+ repoSlug : function () {
return this.get('repositorySlug');
}.property('repositorySlug'),
- config : function () {
+ config : function () {
return Helpers.compact(this.get('_config'));
}.property('_config'),
- isFinished : function () {
+ isFinished : function () {
var _ref;
return (_ref = this.get('state')) === 'passed' || _ref === 'failed' || _ref === 'errored' || _ref === 'canceled';
}.property('state'),
- clearLog : function () {
+ clearLog : function () {
if (this.get('isLogAccessed')) {
return this.get('log').clear();
}
},
- configValues : function () {
+ configValues : function () {
var buildConfig, config, keys;
config = this.get('config');
buildConfig = this.get('build.config');
@@ -62,37 +62,37 @@ define([
return [];
}
}.property('config'),
- canCancel : function () {
+ canCancel : function () {
return this.get('state') === 'created' || this.get('state') === 'queued';
}.property('state'),
- cancel : function () {
+ cancel : function () {
return TravisAjax.post("/jobs/" + (this.get('id')), {
_method : 'delete'
});
},
- requeue : function () {
+ requeue : function () {
return TravisAjax.post('/requests', {
job_id : this.get('id')
});
},
- appendLog : function (part) {
+ appendLog : function (part) {
return this.get('log').append(part);
},
- subscribe : function () {
+ subscribe : function () {
if (this.get('subscribed')) {
return;
}
this.set('subscribed', true);
return App.pusher.subscribe("job-" + (this.get('id')));
},
- unsubscribe : function () {
+ unsubscribe : function () {
if (!this.get('subscribed')) {
return;
}
this.set('subscribed', false);
return App.pusher.unsubscribe("job-" + (this.get('id')));
},
- onStateChange : function () {
+ onStateChange : function () {
if (this.get('state') === 'finished' && App.pusher) {
return App.pusher.unsubscribe("job-" + (this.get('id')));
}
@@ -109,29 +109,37 @@ define([
});
Job.reopenClass({
- queued : function (queue) {
- this.find();
- return Ember.FilteredRecordArray.create({
+ queued : function () {
+ var filtered;
+ filtered = Ember.FilteredRecordArray.create({
modelClass : App.Job,
filterFunction : function (job) {
- var queued;
- queued = ['created', 'queued'].indexOf(job.get('state')) !== -1;
- return queued && (!queue || job.get('queue') === ("builds." + queue) || job.get('queue') === queue);
+ return ['created', 'queued'].indexOf(job.get('state')) !== -1;
},
filterProperties : ['state', 'queue']
});
+ this.fetch().then(function (/* array */) {
+ filtered.updateFilter();
+ return filtered.set('isLoaded', true);
+ });
+ return filtered;
},
running : function () {
- this.find({
- state : 'started'
- });
- return Ember.FilteredRecordArray.create({
+ var filtered;
+ filtered = Ember.FilteredRecordArray.create({
modelClass : App.Job,
filterFunction : function (job) {
return job.get('state') === 'started';
},
filterProperties : ['state']
});
+ this.fetch({
+ state : 'started'
+ }).then(function (/* array */) {
+ filtered.updateFilter();
+ return filtered.set('isLoaded', true);
+ });
+ return filtered;
}
});
diff --git a/js/app/models/Repo.js b/js/app/models/Repo.js
index ed04e88..babb8ec 100644
--- a/js/app/models/Repo.js
+++ b/js/app/models/Repo.js
@@ -1,3 +1,4 @@
+/* global App */
define([
'jquery',
'ember-model',
@@ -19,6 +20,7 @@ define([
lastBuildState : Ember.attr('string'),
lastBuildStartedAt : Ember.attr('string'),
lastBuildFinishedAt : Ember.attr('string'),
+ githubLanguage : Ember.attr('string'),
_lastBuildDuration : Ember.attr(Number, {
key : 'last_build_duration'
}),
@@ -34,9 +36,14 @@ define([
}.property('lastBuildId', 'lastBuildNumber'),
allBuilds : function () {
utils.debug('Repo::allBuilds_:>');
- return Build.find();
+ var recordArray;
+ recordArray = Ember.RecordArray.create({
+ modelClass : App.Build,
+ content : Ember.A([])
+ });
+ Build.registerRecordArray(recordArray);
+ return recordArray;
}.property(),
- //TODO: this should not belong in the model
builds : function () {
utils.debug('Repo::builds_:>');
var array, builds, id;
diff --git a/js/app/routes/BuildRoute.js b/js/app/routes/BuildRoute.js
index 3c049d6..c21ae24 100644
--- a/js/app/routes/BuildRoute.js
+++ b/js/app/routes/BuildRoute.js
@@ -26,6 +26,9 @@ define([
repo.activate('build');
this.controllerFor('build').set('build', model);
repo.set('build', model);
+ },
+ model : function (params) {
+ return Build.find(params.build_id);
}
});
});
\ No newline at end of file
diff --git a/js/app/routes/JobRoute.js b/js/app/routes/JobRoute.js
index 065f98b..ce8cba3 100644
--- a/js/app/routes/JobRoute.js
+++ b/js/app/routes/JobRoute.js
@@ -33,6 +33,9 @@ define([
}
};
return model.addObserver('build', this, buildObserver);
+ },
+ model : function (params) {
+ return Job.find(params.job_id);
}
});
});
\ No newline at end of file
diff --git a/js/app/routes/ReposRoute.js b/js/app/routes/ReposRoute.js
index be9a209..dc48d8c 100644
--- a/js/app/routes/ReposRoute.js
+++ b/js/app/routes/ReposRoute.js
@@ -25,6 +25,7 @@ define([
}
} else {
if (navigator && navigator.splashscreen && navigator.splashscreen.hide) {
+ utils.debug('ReposRoute::afterModel:> calling splashscreen hide');
navigator.splashscreen.hide();
}
}
diff --git a/js/app/templates/jobs/running.hbs b/js/app/templates/jobs/running.hbs
deleted file mode 100644
index 297e79c..0000000
--- a/js/app/templates/jobs/running.hbs
+++ /dev/null
@@ -1,9 +0,0 @@
-
Admin mode
- {{/my-profile}} + {{#app-profile person=currentUser}} +Admin mode
+ {{/app-profile}} ``` ```html -