diff --git a/app/assets/javascripts/app/app.js b/app/assets/javascripts/app/app.js index dada3166..3e69bfd8 100644 --- a/app/assets/javascripts/app/app.js +++ b/app/assets/javascripts/app/app.js @@ -15,54 +15,104 @@ App.Build = DS.Model.extend({ App.Repository.FIXTURES = [{ id: 1, owner_name: 'travis-ci', name: 'travis-core' }]; App.Build.FIXTURES = [{ id: 1, number: 1 }, { id: 2, number: 2 }]; -App.ApplicationController = Em.Controller.extend(); -App.RepositoryController = Em.Controller.extend(); -App.TabsController = Em.Controller.extend(); -App.CurrentController = Em.Controller.extend(); -App.HistoryController = Em.ArrayController.extend(); -App.BuildController = Em.Controller.extend(); +App.ApplicationController = Em.Controller.extend(); +App.RepositoriesController = Em.Controller.extend(); +App.RepositoryController = Em.Controller.extend(); +App.TabsController = Em.Controller.extend(); +App.CurrentController = Em.Controller.extend(); +App.HistoryController = Em.ArrayController.extend(); +App.BuildController = Em.Controller.extend(); +App.LoadingController = Em.Controller.extend(); -App.ApplicationView = Em.View.extend({ templateName: 'application' }); -App.RepositoryView = Em.View.extend({ templateName: 'repository' }); -App.TabsView = Em.View.extend({ templateName: 'tabs' }); -App.CurrentView = Em.View.extend({ templateName: 'current' }); -App.HistoryView = Em.View.extend({ templateName: 'history' }); -App.BuildView = Em.View.extend({ templateName: 'build' }); +App.ApplicationView = Em.View.extend({ templateName: 'application' }); +App.RepositoriesView = Em.View.extend({ templateName: 'repositories' }); +App.RepositoryView = Em.View.extend({ templateName: 'repository' }); +App.TabsView = Em.View.extend({ templateName: 'tabs' }); +App.CurrentView = Em.View.extend({ templateName: 'current' }); +App.HistoryView = Em.View.extend({ templateName: 'history' }); +App.BuildView = Em.View.extend({ templateName: 'build' }); +App.LoadingView = Em.View.extend({ templateName: 'loading' }); App.store = App.Store.create(); +var onReady = function(object, path, callback) { + if(object.getPath(path)) { + callback(); + } else { + var observer = function() { + object.removeObserver(path, observer); + callback() + }; + object.addObserver(path, observer); + } +}; + App.Router = Em.Router.extend({ enableLogging: true, location: 'hash', root: Em.Route.extend({ - index: Ember.Route.extend({ - route: '/', - redirectsTo: 'repository' + routePath: function(router, path) { + router.transitionTo('loading', path); + }, + + viewRepository: Ember.Route.transitionTo('repository'), + + loading: Ember.Route.extend({ + connectOutlets: function(router, path) { + var repositories = App.Repository.find(); + + router.get('applicationController').connectOutlet({ outletName: 'left', name: 'repositories', context: repositories}) + router.get('applicationController').connectOutlet({ outletName: 'main', name: 'loading' }); + + if (path === '') { + // should observe RecordArray.isLoaded instead, but that doesn't seem to exist? + onReady(repositories, 'length', function() { + var repository = repositories.get('firstObject'); + router.transitionTo('repository', repository); + }) + } else { + // this would be a query for the repo based on `path` + var repository = App.Repository.find(1); + onReady(repository, 'isLoaded', function() { + router.transitionTo('repository', repository); + }) + } + } }), repository: Em.Route.extend({ - route: '/:repository_ownerName/:repository_name', + route: '/:ownerName/:name', + + serialize: function(router, repository) { + return repository.getProperties('ownerName', 'name'); + }, + + connectOutlets: function(router, repository) { + var build = App.Build.find(1); + + router.setPath('tabsController.repository', repository); + router.setPath('tabsController.build', build); + + router.get('applicationController').connectOutlet({ outletName: 'main', name: 'repository', context: repository}); + router.get('repositoryController').connectOutlet({ outletName: 'tabs', name: 'tabs' }); + }, viewCurrent: Ember.Route.transitionTo('current'), viewHistory: Ember.Route.transitionTo('history'), viewBuild: Ember.Route.transitionTo('build'), - enter: function(router) { - router.get('applicationController').connectOutlet({ name: 'repository', context: App.store.find(App.Repository, 1) }); - }, - current: Em.Route.extend({ route: '/', connectOutlets: function(router, context) { - router.get('repositoryController').connectOutlet({ name: 'current', context: App.store.find(App.Build, 1)}); + router.get('repositoryController').connectOutlet({ outletName: 'tab', name: 'current', context: App.store.find(App.Build, 1)}); } }), history: Em.Route.extend({ route: '/builds', connectOutlets: function(router, context) { - router.get('repositoryController').connectOutlet({ name: 'history', context: App.store.findAll(App.Build)}); + router.get('repositoryController').connectOutlet({ outletName: 'tab', name: 'history', context: App.store.findAll(App.Build)}); } }), @@ -70,7 +120,7 @@ App.Router = Em.Router.extend({ route: '/builds/:build_id', connectOutlets: function(router, context) { params = { id: 1 } - router.get('repositoryController').connectOutlet({ name: 'build', context: App.store.find(App.Build, params.id)}); + router.get('repositoryController').connectOutlet({ outletName: 'tab', name: 'build', context: App.store.find(App.Build, params.id)}); } }) }) @@ -78,4 +128,3 @@ App.Router = Em.Router.extend({ }); App.initialize(); - diff --git a/app/assets/javascripts/app/templates/application.hbs b/app/assets/javascripts/app/templates/application.hbs index a6f71819..1f71b147 100644 --- a/app/assets/javascripts/app/templates/application.hbs +++ b/app/assets/javascripts/app/templates/application.hbs @@ -1,3 +1,7 @@ -

App

+
+ {{outlet left}} +
-{{outlet}} +
+ {{outlet main}} +
diff --git a/app/assets/javascripts/app/templates/build.hbs b/app/assets/javascripts/app/templates/build.hbs index 8af5ecd4..f3f8c024 100644 --- a/app/assets/javascripts/app/templates/build.hbs +++ b/app/assets/javascripts/app/templates/build.hbs @@ -1,2 +1,2 @@ -build {{build.id}} +build {{content.id}} diff --git a/app/assets/javascripts/app/templates/loading.hbs b/app/assets/javascripts/app/templates/loading.hbs new file mode 100644 index 00000000..fc9b0d1e --- /dev/null +++ b/app/assets/javascripts/app/templates/loading.hbs @@ -0,0 +1 @@ +loading stuff ... diff --git a/app/assets/javascripts/app/templates/repositories.hbs b/app/assets/javascripts/app/templates/repositories.hbs new file mode 100644 index 00000000..e0dbed41 --- /dev/null +++ b/app/assets/javascripts/app/templates/repositories.hbs @@ -0,0 +1,6 @@ + + diff --git a/app/assets/javascripts/app/templates/repository.hbs b/app/assets/javascripts/app/templates/repository.hbs index 62df9829..8afc2dbc 100644 --- a/app/assets/javascripts/app/templates/repository.hbs +++ b/app/assets/javascripts/app/templates/repository.hbs @@ -1,7 +1,7 @@

{{content.ownerName}}/{{content.name}}

-{{view App.TabsView controllerBinding="controller.controllers.tabsController"}} +{{outlet tabs}}
- {{outlet}} + {{outlet tab}}
diff --git a/app/assets/javascripts/app/templates/tabs.hbs b/app/assets/javascripts/app/templates/tabs.hbs index c9ff29b9..dc05814f 100644 --- a/app/assets/javascripts/app/templates/tabs.hbs +++ b/app/assets/javascripts/app/templates/tabs.hbs @@ -1,9 +1,5 @@ - -

- The builds tab anchor tag should be linked to {{repository.ownerName}}/{{repository.name}}/builds/{{build.id}} -

diff --git a/app/assets/stylesheets/application.css b/app/assets/stylesheets/application.css index 3192ec89..8d20dfb0 100644 --- a/app/assets/stylesheets/application.css +++ b/app/assets/stylesheets/application.css @@ -11,3 +11,26 @@ *= require_self *= require_tree . */ + +body { + font-family: Helvetica; +} + +#left, #main { + float: left; + height: 500px; +} + +#left { + width: 200px; + background-color: #f9f9f9; +} + +#main { + width: 400px; + padding: 1em; +} + +h2 { + margin-top: 0; +}