diff --git a/assets/javascripts/app/app.coffee b/assets/javascripts/app/app.coffee index 11546616..01d5586d 100644 --- a/assets/javascripts/app/app.coffee +++ b/assets/javascripts/app/app.coffee @@ -46,9 +46,12 @@ Ember.ENV.RAISE_ON_DEPRECATION = true view.appendTo(@get('rootElement') || 'body') connectLayout: (name) -> - layout = Travis["#{$.camelize(name)}Controller"].create(parent: @controller) - layout.connect(@controller) - layout + unless @getPath('layout.name') == name + name = $.camelize(name) + viewClass = Travis["#{name}Layout"] + @layout = Travis["#{name}Controller"].create(parent: @controller) + @controller.connectOutlet(outletName: 'layout', controller: @layout, viewClass: viewClass) + @layout require 'controllers' diff --git a/assets/javascripts/app/controllers/base.coffee b/assets/javascripts/app/controllers/base.coffee index c780da8c..eabd33ea 100644 --- a/assets/javascripts/app/controllers/base.coffee +++ b/assets/javascripts/app/controllers/base.coffee @@ -5,16 +5,7 @@ Travis.Controller = Em.Controller.extend klass = Travis[$.camelize(name)] || Em.Controller this[name] = klass.create(parent: this, namespace: Travis, controllers: this) - connect: (parent) -> - parent.connectOutlet - outletName: 'layout' - controller: this - viewClass: Travis["#{$.camelize(@get('name'))}Layout"] - connectTop: -> - @connectOutlet - outletName: 'top' - controller: @topController - viewClass: Travis.TopView + @connectOutlet(outletName: 'top', controller: @topController, viewClass: Travis.TopView) @topController.set('tab', @get('name')) diff --git a/assets/javascripts/app/controllers/home.coffee b/assets/javascripts/app/controllers/home.coffee index 74557505..5af161c0 100644 --- a/assets/javascripts/app/controllers/home.coffee +++ b/assets/javascripts/app/controllers/home.coffee @@ -7,13 +7,10 @@ Travis.HomeController = Travis.Controller.extend init: -> @_super('top', 'repositories', 'repository', 'sidebar') + @connectTop() @connectOutlet outletName: 'left', controller: @repositoriesController, viewClass: Travis.RepositoriesView @connectOutlet outletName: 'main', controller: @repositoryController, viewClass: Travis.RepositoryView @connectOutlet outletName: 'right', controller: @sidebarController, viewClass: Travis.SidebarView - connect: (parent) -> - @_super(parent) - @connectTop() - activate: (action, params) -> @repositoryController.activate(action, params) diff --git a/assets/javascripts/app/models/repository.coffee b/assets/javascripts/app/models/repository.coffee index 6ac132dc..b853003c 100644 --- a/assets/javascripts/app/models/repository.coffee +++ b/assets/javascripts/app/models/repository.coffee @@ -22,10 +22,10 @@ require 'travis/model' ).property() lastBuildDuration: (-> - duration = @getPath('data.lastBuildDuration') - duration = Travis.Helpers.durationFrom(@get('lastBuildStarted_at'), @get('lastBuildFinished_at')) unless duration + duration = @getPath('data.last_build_duration') + duration = Travis.Helpers.durationFrom(@get('lastBuildStartedAt'), @get('lastBuildFinishedAt')) unless duration duration - ).property('data.lastBuildDuration', 'lastBuildStartedAt', 'lastBuildFinishedAt') + ).property('data.last_build_duration', 'lastBuildStartedAt', 'lastBuildFinishedAt') sortOrder: (-> @get('lastBuildFinishedAt') || '9999' diff --git a/assets/javascripts/lib/mocks.coffee b/assets/javascripts/lib/mocks.coffee index 574ec50f..17760214 100644 --- a/assets/javascripts/lib/mocks.coffee +++ b/assets/javascripts/lib/mocks.coffee @@ -3,16 +3,16 @@ require 'ext/jquery' responseTime = 0 repositories = [ - { id: 1, owner: 'travis-ci', name: 'travis-core', slug: 'travis-ci/travis-core', build_ids: [1, 2], last_build_id: 1, last_build_number: 1, last_build_result: 0, last_build_finished_at: '2012-07-02T00:00:00Z', description: 'Description of travis-core' }, - { id: 2, owner: 'travis-ci', name: 'travis-assets', slug: 'travis-ci/travis-assets', build_ids: [3], last_build_id: 3, last_build_number: 3, last_build_result: 1, last_build_finished_at: '2012-07-01T00:01:00Z', description: 'Description of travis-assets'}, - { id: 3, owner: 'travis-ci', name: 'travis-hub', slug: 'travis-ci/travis-hub', build_ids: [4], last_build_id: 4, last_build_number: 4, last_build_result: undefined, last_build_finished_at: undefined, description: 'Description of travis-hub'}, + { id: 1, owner: 'travis-ci', name: 'travis-core', slug: 'travis-ci/travis-core', build_ids: [1, 2], last_build_id: 1, last_build_number: 1, last_build_result: 0, last_build_duration: 30, last_build_started_at: '2012-07-02T00:00:00Z', last_build_finished_at: '2012-07-02T00:00:30Z', description: 'Description of travis-core' }, + { id: 2, owner: 'travis-ci', name: 'travis-assets', slug: 'travis-ci/travis-assets', build_ids: [3], last_build_id: 3, last_build_number: 3, last_build_result: 1, last_build_duration: 30, last_build_started_at: '2012-07-02T00:01:00Z', last_build_finished_at: '2012-07-01T00:01:30Z', description: 'Description of travis-assets'}, + { id: 3, owner: 'travis-ci', name: 'travis-hub', slug: 'travis-ci/travis-hub', build_ids: [4], last_build_id: 4, last_build_number: 4, last_build_result: undefined, last_build_duration: undefined, last_build_started_at: '2012-07-02T00:02:00Z', last_build_finished_at: undefined, description: 'Description of travis-hub'}, ] builds = [ - { id: 1, repository_id: '1', commit_id: 1, job_ids: [1, 2], number: 1, event_type: 'push', config: { rvm: ['rbx', '1.9.3'] }, finished_at: '2012-07-02T00:00:00Z', duration: 35, result: 0 }, + { id: 1, repository_id: '1', commit_id: 1, job_ids: [1, 2], number: 1, event_type: 'push', config: { rvm: ['rbx', '1.9.3'] }, duration: 30, started_at: '2012-07-02T00:00:00Z', finished_at: '2012-07-02T00:00:30Z', result: 0 }, { id: 2, repository_id: '1', commit_id: 2, job_ids: [3], number: 2, event_type: 'push', config: { rvm: ['rbx'] } }, - { id: 3, repository_id: '2', commit_id: 3, job_ids: [4], number: 3, event_type: 'push', config: { rvm: ['rbx'] }, finished_at: '2012-07-01T00:01:00Z', duration: 35, result: 1 }, - { id: 4, repository_id: '3', commit_id: 4, job_ids: [5], number: 4, event_type: 'push', config: { rvm: ['rbx'] } }, + { id: 3, repository_id: '2', commit_id: 3, job_ids: [4], number: 3, event_type: 'push', config: { rvm: ['rbx'] }, duration: 30, started_at: '2012-07-02T00:01:00Z', finished_at: '2012-07-01T00:01:30Z', result: 1 }, + { id: 4, repository_id: '3', commit_id: 4, job_ids: [5], number: 4, event_type: 'push', config: { rvm: ['rbx'] }, started_at: '2012-07-02T00:02:00Z' }, ] commits = [ @@ -23,11 +23,11 @@ commits = [ ] jobs = [ - { id: 1, repository_id: 1, build_id: 1, commit_id: 1, log_id: 1, number: '1.1', config: { rvm: 'rbx' }, finished_at: '2012-07-02T00:00:00Z', duration: 35, result: 0 } + { id: 1, repository_id: 1, build_id: 1, commit_id: 1, log_id: 1, number: '1.1', config: { rvm: 'rbx' }, duration: 30, started_at: '2012-07-02T00:00:00Z', finished_at: '2012-07-02T00:00:30Z', result: 0 } { id: 2, repository_id: 1, build_id: 1, commit_id: 1, log_id: 2, number: '1.2', config: { rvm: '1.9.3' }, allow_failure: true } { id: 3, repository_id: 1, build_id: 2, commit_id: 2, log_id: 3, number: '2.1', config: { rvm: 'rbx' } } - { id: 4, repository_id: 2, build_id: 3, commit_id: 3, log_id: 4, number: '3.1', config: { rvm: 'rbx' }, finished_at: '2012-07-01T00:01:00Z', duration: 35, result: 1 } - { id: 5, repository_id: 3, build_id: 4, commit_id: 4, log_id: 5, number: '4.1', config: { rvm: 'rbx' } } + { id: 4, repository_id: 2, build_id: 3, commit_id: 3, log_id: 4, number: '3.1', config: { rvm: 'rbx' }, duration: 30, started_at: '2012-07-02T00:01:00Z', finished_at: '2012-07-02T00:01:30Z', result: 1 } + { id: 5, repository_id: 3, build_id: 4, commit_id: 4, log_id: 5, number: '4.1', config: { rvm: 'rbx' }, started_at: '2012-07-02T00:02:00Z' } { id: 6, repository_id: 1, build_id: 5, commit_id: 5, log_id: 5, number: '5.1', config: { rvm: 'rbx' }, state: 'created', queue: 'builds.common' } { id: 7, repository_id: 1, build_id: 5, commit_id: 5, log_id: 5, number: '5.2', config: { rvm: 'rbx' }, state: 'created', queue: 'builds.common' } ] diff --git a/assets/javascripts/spec/current_spec.coffee b/assets/javascripts/spec/current_spec.coffee index 71b26f14..1e9ad586 100644 --- a/assets/javascripts/spec/current_spec.coffee +++ b/assets/javascripts/spec/current_spec.coffee @@ -1,65 +1,40 @@ -describe 'The current build tab', -> - describe 'on the "index" state', -> - beforeEach -> - app '' - waitFor buildRendered +describe 'on the "current" state', -> + beforeEach -> + app '!/travis-ci/travis-core' + waitFor repositoriesRendered + waitFor buildRendered - it 'displays the build summary', -> - displaysBuildSummary - id: 1 - repo: 'travis-ci/travis-core' - commit: '1234567' - branch: 'master' - compare: '0123456..1234567' - duration: '35 sec' - message: 'commit message 1' + it 'displays the expected stuff', -> + displaysRepoList [ + { slug: 'travis-ci/travis-core', build: { number: 1, url: '#!/travis-ci/travis-core/builds/1', duration: '30 sec', finishedAt: '3 minutes ago' } } + { slug: 'travis-ci/travis-assets', build: { number: 3, url: '#!/travis-ci/travis-assets/builds/3', duration: '30 sec', finishedAt: 'a day ago' } } + { slug: 'travis-ci/travis-hub', build: { number: 4, url: '#!/travis-ci/travis-hub/builds/4', duration: '1 min', finishedAt: '-' } } + ] - describe 'given the current build has a job matrix', -> - it 'displays the jobs matrix table', -> - displaysJobMatrix - element: '#jobs' - headers: ['Job', 'Duration', 'Finished', 'Rvm'] - jobs: [ - { id: 1, number: '1.1', repo: 'travis-ci/travis-core', finishedAt: /\d+ (\w+) ago/, duration: '35 sec', rvm: 'rbx' }, - ] + displaysBuildSummary + id: 1 + repo: 'travis-ci/travis-core' + commit: '1234567' + branch: 'master' + compare: '0123456..1234567' + finishedAt: '3 minutes ago' + duration: '30 sec' + message: 'commit message 1' - it 'displays the allowed failure jobs matrix table', -> - displaysJobMatrix - element: '#allowed_failure_jobs' - headers: ['Job', 'Duration', 'Finished', 'Rvm'] - jobs: [ - { id: 2, number: '1.2', repo: 'travis-ci/travis-core', finishedAt: '-', duration: '-', rvm: '1.9.3' } - ] + displaysTabs + current: '#!/travis-ci/travis-core' + builds: '#!/travis-ci/travis-core/builds' - describe 'on the "current" state', -> - beforeEach -> - app '!/travis-ci/travis-core' - waitFor repositoriesRendered - waitFor buildRendered + displaysJobMatrix + element: '#jobs' + headers: ['Job', 'Duration', 'Finished', 'Rvm'] + jobs: [ + { id: 1, number: '1.1', repo: 'travis-ci/travis-core', finishedAt: '3 minutes ago', duration: '30 sec', rvm: 'rbx' } + ] - it 'displays the build summary', -> - displaysBuildSummary - id: 1 - repo: 'travis-ci/travis-core' - commit: '1234567' - branch: 'master' - compare: '0123456..1234567' - duration: '35 sec' - message: 'commit message 1' - - describe 'given the current build has a job matrix', -> - it 'displays the jobs matrix table', -> - displaysJobMatrix - element: '#jobs' - headers: ['Job', 'Duration', 'Finished', 'Rvm'] - jobs: [ - { id: 1, number: '1.1', repo: 'travis-ci/travis-core', finishedAt: /\d+ (\w+) ago/, duration: '35 sec', rvm: 'rbx' }, - ] - - it 'displays the allowed failure jobs matrix table', -> - displaysJobMatrix - element: '#allowed_failure_jobs' - headers: ['Job', 'Duration', 'Finished', 'Rvm'] - jobs: [ - { id: 2, number: '1.2', repo: 'travis-ci/travis-core', finishedAt: '-', duration: '-', rvm: '1.9.3' } - ] + displaysJobMatrix + element: '#allowed_failure_jobs' + headers: ['Job', 'Duration', 'Finished', 'Rvm'] + jobs: [ + { id: 2, number: '1.2', repo: 'travis-ci/travis-core', finishedAt: '-', duration: '-', rvm: '1.9.3' } + ] diff --git a/assets/javascripts/spec/index_spec.coffee b/assets/javascripts/spec/index_spec.coffee new file mode 100644 index 00000000..6d5715f2 --- /dev/null +++ b/assets/javascripts/spec/index_spec.coffee @@ -0,0 +1,44 @@ +describe 'on the "index" state', -> + beforeEach -> + app '' + waitFor buildRendered + + it 'displays the expected stuff', -> + displaysRepoList [ + { slug: 'travis-ci/travis-core', build: { number: 1, url: '#!/travis-ci/travis-core/builds/1', duration: '30 sec', finishedAt: '3 minutes ago' } } + { slug: 'travis-ci/travis-assets', build: { number: 3, url: '#!/travis-ci/travis-assets/builds/3', duration: '30 sec', finishedAt: 'a day ago' } } + { slug: 'travis-ci/travis-hub', build: { number: 4, url: '#!/travis-ci/travis-hub/builds/4', duration: '1 min', finishedAt: '-' } } + ] + + displaysRepository + href: 'http://github.com/travis-ci/travis-core' + + displaysBuildSummary + id: 1 + repo: 'travis-ci/travis-core' + commit: '1234567' + branch: 'master' + compare: '0123456..1234567' + finishedAt: '3 minutes ago' + duration: '30 sec' + message: 'commit message 1' + + displaysTabs + current: '#!/travis-ci/travis-core' + builds: '#!/travis-ci/travis-core/builds' + + displaysJobMatrix + element: '#jobs' + headers: ['Job', 'Duration', 'Finished', 'Rvm'] + jobs: [ + { id: 1, number: '1.1', repo: 'travis-ci/travis-core', finishedAt: '3 minutes ago', duration: '30 sec', rvm: 'rbx' } + ] + + displaysJobMatrix + element: '#allowed_failure_jobs' + headers: ['Job', 'Duration', 'Finished', 'Rvm'] + jobs: [ + { id: 2, number: '1.2', repo: 'travis-ci/travis-core', finishedAt: '-', duration: '-', rvm: '1.9.3' } + ] + + diff --git a/assets/javascripts/spec/repositories_spec.coffee b/assets/javascripts/spec/repositories_spec.coffee deleted file mode 100644 index 07624edc..00000000 --- a/assets/javascripts/spec/repositories_spec.coffee +++ /dev/null @@ -1,13 +0,0 @@ -describe 'The repositories list', -> - beforeEach -> - app '' - waitFor repositoriesRendered - - it 'lists repositories', -> - href = $('#repositories a.current').attr('href') - expect(href).toEqual '#!/travis-ci/travis-core' - - it "links to the repository's last build action", -> - href = $('#repositories a.last_build').attr('href') - expect(href).toEqual '#!/travis-ci/travis-core/builds/1' - diff --git a/assets/javascripts/spec/repository_spec.coffee b/assets/javascripts/spec/repository_spec.coffee deleted file mode 100644 index fc8b3f40..00000000 --- a/assets/javascripts/spec/repository_spec.coffee +++ /dev/null @@ -1,8 +0,0 @@ -describe 'The repository view', -> - beforeEach -> - app '' - waitFor repositoriesRendered - - it 'displays the repository header', -> - href = $('#repository h3 a').attr('href') - expect(href).toEqual 'http://github.com/travis-ci/travis-core' diff --git a/assets/javascripts/spec/spec_helper.coffee b/assets/javascripts/spec/spec_helper.coffee index c762c9d5..dd582663 100644 --- a/assets/javascripts/spec/spec_helper.coffee +++ b/assets/javascripts/spec/spec_helper.coffee @@ -11,3 +11,7 @@ minispade.require 'app' Travis.run(rootElement: $('#content')) Em.routes.set('location', url) +_Date = Date +@Date = (date) -> + new _Date(date || '2012-07-02T00:03:00Z') +@Date.UTC = _Date.UTC diff --git a/assets/javascripts/spec/support/expectations.coffee b/assets/javascripts/spec/support/expectations.coffee index 972e0826..04d455ec 100644 --- a/assets/javascripts/spec/support/expectations.coffee +++ b/assets/javascripts/spec/support/expectations.coffee @@ -1,9 +1,27 @@ +@displaysRepoList = (repos) -> + elements = $('#repositories li').toArray() + ix = 0 + for repo in repos + element = elements[ix] + expect($('a.current', element).attr('href')).toEqual "#!/#{repo.slug}" + expect($('a.last_build', element).attr('href')).toEqual repo.build.url + expect($('.duration', element).text()).toEqual repo.build.duration + expect($('.finished_at', element).text()).toEqual repo.build.finishedAt + ix += 1 + +@displaysRepository = (repo) -> + expect($('#repository h3 a').attr('href')).toEqual (repo.href) + +@displaysTabs = (tabs) -> + for tab, url in tabs + expect($("#tab_#{tab} a").attr('href')).toEqual url + @displaysBuildSummary = (data) -> element = $('#summary .number a') expect(element.attr('href')).toEqual "#!/#{data.repo}/builds/#{data.id}" element = $('#summary .finished_at') - expect(element.text()).toMatch /\d+ (\w+) ago/ + expect(element.text()).toEqual data.finishedAt element = $('#summary .duration') expect(element.text()).toEqual data.duration @@ -40,10 +58,7 @@ expect(element.text()).toEqual job.duration element = $("#{data.element} tr:nth-child(#{ix}) td.finished_at") - if job.finishedAt == '-' - expect(element.text()).toEqual '-' - else - expect(element.text()).toMatch job.finishedAt + expect(element.text()).toEqual job.finishedAt element = $("#{data.element} tr:nth-child(#{ix}) td:nth-child(6)") expect(element.text()).toEqual job.rvm diff --git a/assets/javascripts/spec/tabs_spec.coffee b/assets/javascripts/spec/tabs_spec.coffee deleted file mode 100644 index 30a18746..00000000 --- a/assets/javascripts/spec/tabs_spec.coffee +++ /dev/null @@ -1,25 +0,0 @@ -describe 'The tabs view', -> - describe 'on the "index" state', -> - beforeEach -> - app '' - waitFor repositoriesRendered - - it 'has a "current" tab linking to the current build', -> - href = $('#tab_current a').attr('href') - expect(href).toEqual '#!/travis-ci/travis-core' - - it 'has a "history" tab linking to the builds list', -> - href = $('#tab_builds a').attr('href') - expect(href).toEqual '#!/travis-ci/travis-core/builds' - - describe 'on the "current" state', -> - beforeEach -> - app '!/travis-ci/travis-core' - waitFor repositoriesRendered - waitFor buildRendered - - it 'has a "current" tab linking to the current build', -> - href = $('#tab_current a').attr('href') - expect(href).toEqual '#!/travis-ci/travis-core' - - diff --git a/public/javascripts/application.js b/public/javascripts/application.js index 976b2da6..5ec3bb51 100644 --- a/public/javascripts/application.js +++ b/public/javascripts/application.js @@ -1 +1 @@ -minispade.register('templates', "(function() {Ember.TEMPLATES['builds/list']=Ember.Handlebars.compile(\"{{#if builds.isLoaded}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n {{#each build in builds}}\\n {{#view Travis.BuildsItemView contextBinding=\\\"build\\\"}}\\n \\n \\n \\n \\n \\n \\n \\n {{/view}}\\n {{/each}}\\n \\n
{{t builds.name}}{{t builds.commit}}{{t builds.message}}{{t builds.duration}}{{t builds.finished_at}}
{{number}}{{formatCommit commit}}{{{formatMessage commit.message short=\\\"true\\\"}}}{{formatDuration duration}}{{formatTime finishedAt}}
\\n\\n

\\n \\n

\\n{{else}}\\n
\\n Loading\\n
\\n{{/if}}\\n\");Ember.TEMPLATES['builds/show']=Ember.Handlebars.compile(\"{{#with view}}\\n {{#if build.isLoaded}}\\n
\\n
\\n
\\n
{{t builds.name}}
\\n
{{build.number}}
\\n
{{t builds.finished_at}}
\\n
{{formatTime build.finished_at}}
\\n
{{t builds.duration}}
\\n
{{formatDuration build.duration}}
\\n
\\n\\n
\\n
{{t builds.commit}}
\\n
{{formatCommit build.commit}}
\\n {{#if commit.compareUrl}}\\n
{{t builds.compare}}
\\n
{{pathFrom build.commit.compareUrl}}
\\n {{/if}}\\n {{#if commit.authorName}}\\n
{{t builds.author}}
\\n
{{build.commit.authorName}}
\\n {{/if}}\\n {{#if commit.committerName}}\\n
{{t builds.committer}}
\\n
{{build.commit.committerName}}
\\n {{/if}}\\n
\\n\\n
{{t builds.message}}
\\n
{{{formatMessage build.commit.message}}}
\\n\\n {{#unless isMatrix}}\\n
{{t builds.config}}
\\n
{{formatConfig build.config}}
\\n {{/unless}}\\n
\\n\\n {{#if build.isMatrix}}\\n {{view Travis.JobsView jobsBinding=\\\"requiredJobs\\\" required=\\\"true\\\"}}\\n {{view Travis.JobsView jobsBinding=\\\"allowedFailureJobs\\\"}}\\n {{else}}\\n {{view Travis.LogView contextBinding=\\\"build.jobs.firstObject\\\"}}\\n {{/if}}\\n
\\n {{else}}\\n
\\n Loading\\n
\\n {{/if}}\\n{{/with}}\\n\");Ember.TEMPLATES['jobs/list']=Ember.Handlebars.compile(\"{{#with view}}\\n {{#if jobs.length}}\\n {{#if required}}\\n \\n \\n {{else}}\\n
\\n {{t jobs.build_matrix}}\\n
\\n \\n {{/if}}\\n \\n \\n {{#each build.configKeys}}\\n \\n {{/each}}\\n \\n \\n \\n {{#each job in jobs}}\\n {{#view Travis.JobsItemView contextBinding=\\\"job\\\"}}\\n \\n \\n \\n \\n {{#each configValues}}\\n \\n {{/each}}\\n \\n {{/view}}\\n {{/each}}\\n \\n
\\n {{t jobs.allowed_failures}}\\n \\n
{{this}}
{{number}}{{formatDuration duration}}{{formatTime finished_at}}{{this}}
\\n\\n {{#unless required}}\\n
\\n
{{t \\\"jobs.allowed_failures\\\"}}
\\n
\\n

\\n Allowed Failures are items in your build matrix that are allowed to\\n fail without causing the entire build to be shown as failed. This lets you add\\n in experimental and preparatory builds to test against versions or\\n configurations that you are not ready to officially support.\\n

\\n

\\n You can define allowed failures in the build matrix as follows:\\n

\\n
 matrix:\\n    allow_failures:\\n      - rvm: ruby-head 
\\n
\\n
\\n {{/unless}}\\n {{/if}}\\n{{/with}}\\n\");Ember.TEMPLATES['jobs/log']=Ember.Handlebars.compile(\"
{{{formatLog log.body}}}
\\n\\n{{#if sponsor.name}}\\n

\\n {{t builds.messages.sponsored_by}}\\n {{sponsor.name}}\\n

\\n{{/if}}\\n\");Ember.TEMPLATES['jobs/show']=Ember.Handlebars.compile(\"{{#with view}}\\n {{#if job.isLoaded}}\\n
\\n
\\n
\\n
Job
\\n
{{job.number}}
\\n
{{t jobs.finished_at}}
\\n
{{formatTime job.finished_at}}
\\n
{{t jobs.duration}}
\\n
{{formatDuration job.duration}}
\\n
\\n\\n
\\n
{{t jobs.commit}}
\\n
{{formatCommit commit}}
\\n {{#if commit.compareUrl}}\\n
{{t jobs.compare}}
\\n
{{pathFrom commit.compareUrl}}
\\n {{/if}}\\n {{#if commit.authorName}}\\n
{{t jobs.author}}
\\n
{{commit.authorName}}
\\n {{/if}}\\n {{#if commit.committerName}}\\n
{{t jobs.committer}}
\\n
{{commit.committerName}}
\\n {{/if}}\\n
\\n\\n
{{t jobs.message}}
\\n
{{formatMessage commit.message}}
\\n
{{t jobs.config}}
\\n
{{formatConfig job.config}}
\\n
\\n\\n {{view Travis.LogView contextBinding=\\\"job\\\"}}}\\n
\\n {{/if}}\\n{{/with}}\\n\");Ember.TEMPLATES['layouts/home']=Ember.Handlebars.compile(\"
\\n {{outlet top}}\\n
\\n\\n
\\n
\\n \\n
\\n\\n \\n\\n
\\n {{outlet left}}\\n
\\n
\\n\\n
\\n {{outlet main}}\\n\\n
\\n {{outlet right}}\\n
\\n
\\n\\n\");Ember.TEMPLATES['layouts/sidebar']=Ember.Handlebars.compile(\"\\n {{t layouts.application.fork_me}}\\n\\n\\n
\\n
 \\n
\\n\\n{{outlet decks}}\\n{{outlet workers}}\\n{{outlet queues}}\\n{{outlet links}}\\n\\n
\\n

{{t layouts.about.alpha}}

\\n

{{{t layouts.about.messages.alpha}}}

\\n
\\n\\n
\\n

{{t layouts.about.join}}

\\n \\n
\\n\");Ember.TEMPLATES['layouts/simple']=Ember.Handlebars.compile(\"
\\n {{outlet top}}\\n
\\n\\n
\\n {{outlet main}}\\n
\\n\\n\");Ember.TEMPLATES['layouts/top']=Ember.Handlebars.compile(\"\\n

Travis

\\n
\\n\\n\\n\");Ember.TEMPLATES['profile/hooks']=Ember.Handlebars.compile(\"{{#if content.length}}\\n \\n{{else}}\\n

Please wait while we sync with GitHub

\\n{{/if}}\\n\\n\");Ember.TEMPLATES['profile/show']=Ember.Handlebars.compile(\"

{{name}}

\\n\\n\\n
\\n
\\n {{t profiles.show.github}}:\\n
\\n
\\n {{login}}\\n
\\n
\\n {{t profiles.show.email}}:\\n
\\n
\\n {{email}}\\n
\\n
\\n {{t profiles.show.token}}:\\n
\\n
\\n {{token}}\\n
\\n
\\n\\n

\\n {{{t profiles.show.messages.notice}}}\\n

\\n\\n

{{t profiles.show.your_locale}}

\\n
\\n \\n \\n
\\n\\n

{{t profiles.show.your_repos}}

\\n

\\n {{{t profiles.show.message.your_repos}}}\\n \\n {{{t profiles.show.message.config}}}\\n \\n

\\n\\n{{outlet hooks}}\\n\");Ember.TEMPLATES['queues/list']=Ember.Handlebars.compile(\"{{#each queue in controller}}\\n

{{t queue}}: {{queue.name}}

\\n \\n{{/each}}\\n\");Ember.TEMPLATES['repositories/_tabs']=Ember.Handlebars.compile(\"\\n\\n
\\n \\n
\\n

\\n

\\n

\\n

\\n

\\n
\\n
\\n\");Ember.TEMPLATES['repositories/list']=Ember.Handlebars.compile(\"