From 7c0ebf491661eb6547c39dba519c1040ad34dd8c Mon Sep 17 00:00:00 2001 From: Sven Fuchs Date: Sat, 23 Jun 2012 18:31:07 +0200 Subject: [PATCH] go back to nesting states in a common "repository" state --- assets/javascripts/app/routes.coffee | 144 +++++++++++---------------- public/javascripts/application.js | 2 +- 2 files changed, 57 insertions(+), 89 deletions(-) diff --git a/assets/javascripts/app/routes.coffee b/assets/javascripts/app/routes.coffee index 5dd748fd..9bdd6eb6 100644 --- a/assets/javascripts/app/routes.coffee +++ b/assets/javascripts/app/routes.coffee @@ -5,31 +5,37 @@ require 'hax0rs' location: 'hash' root: Em.Route.extend + # common "layout" state for all states that show a repo list on the left. + # there also will be "profile" and "stats" states next to "default" that do + # not have a 3-column layout default: Em.Route.extend route: '/' - viewCurrent: Ember.Route.transitionTo('current') - viewBuilds: Ember.Route.transitionTo('builds') - viewBuild: Ember.Route.transitionTo('build') - viewJob: Ember.Route.transitionTo('job') + viewCurrent: Ember.Route.transitionTo('repository.current') + viewBuilds: Ember.Route.transitionTo('repository.builds') + viewBuild: Ember.Route.transitionTo('repository.build') + viewJob: Ember.Route.transitionTo('repository.job') connectOutlets: (router) -> repositories = Travis.Repository.find() - router.connectLeft(repositories) router.set('repositories', repositories) + router.connectLeft(repositories) index: Em.Route.extend route: '/' + # on / we show the most recent repository from the repos list, so we + # have to wait until it's loaded connectOutlets: (router) -> repositories = router.get('repositories') onceLoaded repositories, => repository = repositories.get('firstObject') - router.connectRepository repository - router.connectTabs repository - router.connectCurrent repository.get('lastBuild') + build = Travis.Build.find(repository.get('last_build_id')) + router.connectRepository(repository) + router.connectTabs(repository) + router.connectCurrent(build) - current: Em.Route.extend + repository: Em.Route.extend route: '/:owner/:name' serialize: (router, repository) -> @@ -39,115 +45,77 @@ require 'hax0rs' router.deserializeRepository(params) connectOutlets: (router, repository) -> - router.connectRepository repository - router.connectTabs repository - router.connectCurrent repository.get('lastBuild') + router.set('repository', repository) + router.connectRepository(repository) + router.connectTabs(repository) - builds: Em.Route.extend - route: '/:owner/:name/builds' + current: Em.Route.extend + route: '/' - serialize: (router, repository) -> - router.serializeRepository repository + connectOutlets: (router, repository) -> + console.log(repository) + build = Travis.Build.find(repository.get('last_build_id')) + router.connectTabs(repository) + router.connectCurrent(build) - deserialize: (router, params) -> - router.deserializeRepository(params) + builds: Em.Route.extend + route: '/builds' - connectOutlets: (router, repository) -> - router.connectRepository repository - router.connectTabs repository - router.connectBuilds repository.get('builds') + connectOutlets: (router, repository) -> + router.connectBuilds(repository.get('builds')) - build: Em.Route.extend - route: '/:owner/:name/builds/:id' + build: Em.Route.extend + route: '/builds/:build_id' - serialize: (router, build) -> - r = router.serializeObject build - console.log(r.owner, r.name, r.id) - r - - deserialize: (router, params) -> - router.deserializeBuild(params) - - connectOutlets: (router, build) -> - build = Travis.Build.find(build.id) unless build instanceof Travis.Build - onceLoaded build, => + connectOutlets: (router, build) -> repository = build.get('repository') onceLoaded repository, => - router.connectRepository repository - router.connectTabs repository, build - router.connectBuild build + router.setPath('tabsController.build', build) + router.connectBuild(build) - job: Em.Route.extend - route: '/:owner/:name/jobs/:id' + job: Em.Route.extend + route: '/jobs/:job_id' - serialize: (router, job) -> - router.serializeObject job - - deserialize: (router, params) -> - router.deserializeBuild(params) - - connectOutlets: (router, job) -> - # repositories = Travis.Repository.find() - # job = Travis.Job.find(job.id) unless job instanceof Travis.Job - # repository = job.get('repository') - # build = job.get('build') - - # router.connectLeft(repositories) - # onceLoaded repository, build, => - # router.connectRepository repository - # router.connectTabs repository, build, job - # router.connectJob job + connectOutlets: (router, job) -> + build = job.get('build') + onceLoaded build, => + router.setPath('tabsController.build', build) + router.setPath('tabsController.job', job) + router.connectJob(job) connectLeft: (repositories) -> - @get('applicationController').connectOutlet outletName: 'left', name: 'repositories', context: repositories + @get('applicationController').connectOutlet(outletName: 'left', name: 'repositories', context: repositories) connectRepository: (repository) -> - @get('applicationController').connectOutlet outletName: 'main', name: 'repository', context: repository + @get('applicationController').connectOutlet(outletName: 'main', name: 'repository', context: repository) - connectTabs: (repository, build, job) -> - @setPath 'tabsController.repository', repository - @setPath 'tabsController.build', build - @setPath 'tabsController.job', job - @get('repositoryController').connectOutlet outletName: 'tabs', name: 'tabs' + connectTabs: (repository) -> + @setPath('tabsController.repository', repository) + @get('repositoryController').connectOutlet(outletName: 'tabs', name: 'tabs') connectCurrent: (build) -> - @get('repositoryController').connectOutlet outletName: 'tab', name: 'current', context: build + @get('repositoryController').connectOutlet(outletName: 'tab', name: 'current', context: build) connectBuilds: (builds) -> - @get('repositoryController').connectOutlet outletName: 'tab', name: 'history', context: builds + @get('repositoryController').connectOutlet(outletName: 'tab', name: 'history', context: builds) connectBuild: (build) -> - @get('repositoryController').connectOutlet outletName: 'tab', name: 'build', context: build + @get('repositoryController').connectOutlet(outletName: 'tab', name: 'build', context: build) connectJob: (job) -> - @get('repositoryController').connectOutlet outletName: 'tab', name: 'job', context: job + @get('repositoryController').connectOutlet(outletName: 'tab', name: 'job', context: job) serializeRepository: (object) -> - if object instanceof DS.Model + result = if object instanceof DS.Model slug = object.get('slug') || object._id # wat. - parts = slug.split('/') - { owner: parts[0], name: parts[1] } + { owner: slug.split('/')[0], name: slug.split[1] } else - object || {} - - serializeObject: (object) -> - if object instanceof DS.Model - repository = object.get('repository') - params = @serializeRepository(repository) - object.get('id') || debugger - $.extend params, - id: object.get('id') - else - object or {} + object + console.log(result) + result deserializeRepository: (params) -> Travis.Repository.find("#{params.owner}/#{params.name}") - deserializeBuild: (params) -> - Travis.Build.find(params.id) - - deserializeJob: (params) -> - Travis.Job.find(params.id) - diff --git a/public/javascripts/application.js b/public/javascripts/application.js index 1bf69674..5ba51571 100644 --- a/public/javascripts/application.js +++ b/public/javascripts/application.js @@ -1 +1 @@ -minispade.register('templates', "(function() {Ember.TEMPLATES['application']=Ember.Handlebars.compile(\"
\\n Travis CI\\n #\\n
\\n\\n
\\n {{outlet left}}\\n
\\n\\n
\\n {{outlet main}}\\n
\\n\");Ember.TEMPLATES['builds/list']=Ember.Handlebars.compile(\"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n {{#collection tagName=\\\"tbody\\\" contentBinding=\\\"content\\\" itemViewClass=\\\"Travis.BuildsItemView\\\" itemClassBinding=\\\"color\\\"}}\\n {{#with view.content}}\\n \\n \\n \\n \\n \\n {{/with}}\\n {{/collection}}\\n
{{t builds.name}}{{t builds.commit}}{{t builds.message}}{{t builds.duration}}{{t builds.finished_at}}
{{number}}{{formatCommit commit}} {{commit.sha}}{{{formatMessage commit.message short=\\\"true\\\"}}}{{formatDuration duration}}{{formatTime finished_at}}
\\n\\n

\\n \\n

\\n\");Ember.TEMPLATES['builds/show']=Ember.Handlebars.compile(\"{{#if isLoaded}}\\n
\\n
\\n
\\n
{{t builds.name}}
\\n
{{number}}
\\n
{{t builds.finished_at}}
\\n
{{formatTime finished_at}}
\\n
{{t builds.duration}}
\\n
{{formatDuration duration}}
\\n
\\n\\n
\\n
{{t builds.commit}}
\\n
{{formatCommit commit}}
\\n {{#if commit.compare_url}}\\n
{{t builds.compare}}
\\n
{{pathFrom commit.compare_url}}
\\n {{/if}}\\n {{#if commit.author_name}}\\n
{{t builds.author}}
\\n
{{commit.author_name}}
\\n {{/if}}\\n {{#if commit.committer_name}}\\n
{{t builds.committer}}
\\n
{{commit.committer_name}}
\\n {{/if}}\\n
\\n\\n
{{t builds.message}}
\\n
{{{formatMessage commit.message}}}
\\n\\n {{#if isMatrix}}\\n {{else}}\\n
{{t builds.config}}
\\n
{{formatConfig config}}
\\n {{/if}}\\n
\\n\\n {{#if isLoaded}}\\n {{#if isMatrix}}\\n {{view Travis.JobsView}}\\n {{else}}\\n {{view Travis.LogView}}\\n {{/if}}\\n {{/if}}\\n
\\n{{/if}}\\n\");Ember.TEMPLATES['jobs/list']=Ember.Handlebars.compile(\"\\n \\n \\n \\n {{#each configKeys}}\\n \\n {{/each}}\\n \\n \\n \\n {{#each requiredJobs}}\\n \\n \\n \\n \\n {{#each configValues}}\\n \\n {{/each}}\\n \\n {{/each}}\\n \\n
{{t jobs.build_matrix}}
{{this}}
#{{number}}{{formatDuration duration}}{{formatTime finished_at}}{{this}}
\\n\\n{{#if isFailureMatrix}}\\n \\n \\n \\n \\n {{#each configKeys}}\\n \\n {{/each}}\\n \\n \\n \\n {{#each allowedFailureJobs}}\\n \\n \\n \\n \\n {{#each configValues}}\\n \\n {{/each}}\\n \\n {{/each}}\\n \\n
\\n {{t jobs.allowed_failures}}{{whats_this allow_failure_help}}\\n
{{this}}
#{{number}}{{formatDuration duration}}{{formatTime finished_at}}{{this}}
\\n\\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
\\n    matrix:\\n      allow_failures:\\n        - rvm: ruby-head\\n      
\\n
\\n
\\n{{/if}}\\n\\n\");Ember.TEMPLATES['jobs/log']=Ember.Handlebars.compile(\"{{! ugh ... }}\\n{{#with jobs.firstObject}}\\n
{{{formatLog log.body}}}
\\n\\n {{#if sponsor.name}}\\n

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

\\n {{/if}}\\n{{/with}}\\n\");Ember.TEMPLATES['jobs/show']=Ember.Handlebars.compile(\"
\\n
\\n
\\n
Job
\\n
{{number}}
\\n
{{t jobs.finished_at}}
\\n
{{formatTime finished_at}}
\\n
{{t jobs.duration}}
\\n
{{formatDuration duration}}
\\n
\\n\\n
\\n
{{t jobs.commit}}
\\n
{{formatCommit commit}}
\\n {{#if commit.compare_url}}\\n
{{t jobs.compare}}
\\n
{{pathFrom commit.compare_url}}
\\n {{/if}}\\n {{#if commit.author_name}}\\n
{{t jobs.author}}
\\n
{{commit.author_name}}
\\n {{/if}}\\n {{#if commit.committer_name}}\\n
{{t jobs.committer}}
\\n
{{commit.committer_name}}
\\n {{/if}}\\n
\\n\\n
{{t jobs.message}}
\\n
{{formatMessage commit.message}}
\\n
{{t jobs.config}}
\\n
{{formatConfig config}}
\\n
\\n\\n {{view Travis.LogView}}\\n
\\n\\n\");Ember.TEMPLATES['loading']=Ember.Handlebars.compile(\"loading stuff ...\\n\");Ember.TEMPLATES['repositories/list']=Ember.Handlebars.compile(\"{{#if content.lastObject.isLoaded}}\\n