Skip to content
This repository has been archived by the owner on Jan 20, 2019. It is now read-only.

Android is finally working with yet another upgrade of Handlebars and Ember #3

Merged
merged 2 commits into from Sep 2, 2013
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion js/app/controllers/RepoController.js
Expand Up @@ -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'));
Expand Down
4 changes: 3 additions & 1 deletion js/app/ext/ExpandableRecordArray.js
Expand Up @@ -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);
Expand Down
34 changes: 34 additions & 0 deletions js/app/ext/Helpers.js
Expand Up @@ -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, '<br/>');
return this._emojize(this._escape(message)).replace(/\n/g, '<br/>');
},
pathFrom : function (url) {
Expand Down Expand Up @@ -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 "<a href=\"http://github.com/" + owner + "/" + repo + "/issues/" + matched.number + "\">" + reference + "</a>";
// },
// _githubReferenceRegexp : new RegExp("([\\w-]+)?\\/?([\\w-]+)?(?:#|gh-)(\\d+)", 'g'),
// _githubUserRegexp : new RegExp("@([\\w-]+)", 'g'),
// _githubUserLink : function (reference, username) {
// return "<a href=\"http://github.com/" + username + "\">" + reference + "</a>";
// },
_normalizeDateString : function (string) {
if (window.JHW) {
string = string.replace('T', ' ').replace(/-/g, '/');
Expand Down
4 changes: 2 additions & 2 deletions js/app/ext/ember/handlebars.js
Expand Up @@ -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) {
Expand Down
2 changes: 1 addition & 1 deletion js/app/models/Build.js
Expand Up @@ -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;
Expand Down
64 changes: 36 additions & 28 deletions js/app/models/Job.js
Expand Up @@ -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');
Expand All @@ -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')));
}
Expand All @@ -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;
}
});

Expand Down
11 changes: 9 additions & 2 deletions js/app/models/Repo.js
@@ -1,3 +1,4 @@
/* global App */
define([
'jquery',
'ember-model',
Expand All @@ -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'
}),
Expand All @@ -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;
Expand Down
3 changes: 3 additions & 0 deletions js/app/routes/BuildRoute.js
Expand Up @@ -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);
}
});
});
3 changes: 3 additions & 0 deletions js/app/routes/JobRoute.js
Expand Up @@ -33,6 +33,9 @@ define([
}
};
return model.addObserver('build', this, buildObserver);
},
model : function (params) {
return Job.find(params.job_id);
}
});
});
1 change: 1 addition & 0 deletions js/app/routes/ReposRoute.js
Expand Up @@ -25,6 +25,7 @@ define([
}
} else {
if (navigator && navigator.splashscreen && navigator.splashscreen.hide) {
utils.debug('ReposRoute::afterModel:> calling splashscreen hide');
navigator.splashscreen.hide();
}
}
Expand Down
9 changes: 0 additions & 9 deletions js/app/templates/jobs/running.hbs

This file was deleted.

2 changes: 1 addition & 1 deletion js/app/templates/jobs/show.hbs
Expand Up @@ -56,7 +56,7 @@

<dt>Message</dt>
<dd class="message">
<div>{{formatMessage job.commit.message}}</div>
<div>{{formatMessage job.commit.message repoBinding=job.repo}}</div>
</dd>
<dt>Config</dt>
<dd class="config">
Expand Down
2 changes: 1 addition & 1 deletion js/app/templates/repo/build.hbs
Expand Up @@ -58,7 +58,7 @@

<dt>Message</dt>
<dd class="message">
<div>{{formatMessage build.commit.message}}</div>
<div>{{formatMessage build.commit.message repoBinding=build.repo}}</div>
</dd>

{{#unless isMatrix}}
Expand Down
2 changes: 1 addition & 1 deletion js/app/templates/repo/builds.hbs
Expand Up @@ -36,7 +36,7 @@
</div>
{{/if}}
<div class="cell message">
<div class="cell-block">{{{formatMessage commit.message short="true"}}}</div>
<div class="cell-block">{{{formatMessage commit.message short="true" repoBinding=build.repo}}}</div>
</div>
{{/linkTo}}
{{/if}}
Expand Down
40 changes: 20 additions & 20 deletions js/app/views/BuildViews.js
Expand Up @@ -8,15 +8,15 @@ define([
], function ($, Ember, Helpers, TravisUrls) {

var BuildViews = {
BuildView : Ember.View.extend({
BuildView : Ember.View.extend({
templateName : 'repo/build',
classNames : ['build'],
classNameBindings : ['color'],
color : function () {
return Helpers.colorForState(this.get('controller.build.state'));
}.property('controller.build.state')
}),
BuildsView : Ember.View.extend({
BuildsView : Ember.View.extend({
templateName : 'repo/builds',
classNames : ['build'],
buildsBinding : 'controller.builds',
Expand Down Expand Up @@ -48,24 +48,24 @@ define([
})
}),
BuildsItemView : Ember.View.extend({
tagName : 'div',
classNameBindings : ['color'],
repoBinding : 'controller.repo',
buildBinding : 'context',
commitBinding : 'build.commit',
isPullRequestsList : function () {
return this.get('parentView.isPullRequestsList');
}.property('parentView.isPullRequestsList'),
color : function () {
return Helpers.colorForState(this.get('build.state'));
}.property('build.state'),
urlGithubCommit : function () {
return TravisUrls.githubCommit(this.get('repo.slug'), this.get('commit.sha'));
}.property('repo.slug', 'commit.sha'),
urlGithubPullRequest : function () {
return TravisUrls.githubPullRequest(this.get('repo.slug'), this.get('commit.pullRequestNumber'));
}.property('repo.slug', 'commit.pullRequestNumber')
})
tagName : 'div',
classNameBindings : ['color'],
repoBinding : 'controller.repo',
buildBinding : 'context',
commitBinding : 'build.commit',
isPullRequestsList : function () {
return this.get('parentView.isPullRequestsList');
}.property('parentView.isPullRequestsList'),
color : function () {
return Helpers.colorForState(this.get('build.state'));
}.property('build.state'),
urlGithubCommit : function () {
return TravisUrls.githubCommit(this.get('repo.slug'), this.get('commit.sha'));
}.property('repo.slug', 'commit.sha'),
urlGithubPullRequest : function () {
return TravisUrls.githubPullRequest(this.get('repo.slug'), this.get('build.pullRequestNumber'));
}.property('repo.slug', 'build.pullRequestNumber')
})
};

return BuildViews;
Expand Down