From e6800c80c6c8add943fe2f50eb52f4c789e76d0f Mon Sep 17 00:00:00 2001 From: Piotr Sarnacki Date: Fri, 14 Nov 2014 00:42:18 +0100 Subject: [PATCH] Refactor our layout handling Layout handling in travis-web was implemented in a dynamic way, so we could change a main layout from any of the routes. This needed a `rerender` call which was making things harder and needed some hacks. It also broke a few transitions when upgrading to 1.8.1. After examining our usage of layouts I've noticed that we don't need to change the entire layout dynamically and instead we can set layout on root routes (like "index", "profile" and other root routes). --- assets/scripts/app/controllers.coffee | 8 ---- assets/scripts/app/controllers/repos.coffee | 5 +++ assets/scripts/app/routes.coffee | 39 ++++++++----------- assets/scripts/app/templates/accounts.hbs | 1 + assets/scripts/app/templates/application.hbs | 1 + assets/scripts/app/templates/index.hbs | 1 + assets/scripts/app/templates/layouts/home.hbs | 2 +- .../scripts/app/templates/layouts/profile.hbs | 2 +- .../scripts/app/templates/layouts/simple.hbs | 2 +- assets/scripts/app/templates/layouts/top.hbs | 3 -- .../scripts/app/templates/no_owned_repos.hbs | 2 +- assets/scripts/app/templates/profile.hbs | 1 + .../scripts/app/templates/profile/loading.hbs | 1 + assets/scripts/app/templates/profile/tabs.hbs | 2 +- .../scripts/app/templates/repos/list/tabs.hbs | 8 ++-- assets/scripts/app/views.coffee | 10 +++++ assets/scripts/app/views/accounts.coffee | 2 +- assets/scripts/app/views/application.coffee | 7 ---- assets/scripts/app/views/profile.coffee | 2 + assets/scripts/app/views/repo/list.coffee | 4 -- assets/styles/app/loading.sass | 2 + 21 files changed, 51 insertions(+), 54 deletions(-) create mode 100644 assets/scripts/app/templates/accounts.hbs create mode 100644 assets/scripts/app/templates/application.hbs create mode 100644 assets/scripts/app/templates/index.hbs create mode 100644 assets/scripts/app/templates/profile.hbs create mode 100644 assets/scripts/app/templates/profile/loading.hbs diff --git a/assets/scripts/app/controllers.coffee b/assets/scripts/app/controllers.coffee index a8c9be07..79e5392b 100644 --- a/assets/scripts/app/controllers.coffee +++ b/assets/scripts/app/controllers.coffee @@ -25,14 +25,6 @@ Travis.TopController = Em.Controller.extend Travis.get('authState') == 'signing-in' ).property('Travis.authState') -Travis.ApplicationController = Em.Controller.extend - templateName: 'layouts/home' - - connectLayout: (name) -> - name = "layouts/#{name}" - if @get('templateName') != name - @set('templateName', name) - Travis.MainController = Em.Controller.extend() Travis.StatsLayoutController = Em.Controller.extend() Travis.ProfileLayoutController = Em.Controller.extend() diff --git a/assets/scripts/app/controllers/repos.coffee b/assets/scripts/app/controllers/repos.coffee index 8bb5a377..7935067b 100644 --- a/assets/scripts/app/controllers/repos.coffee +++ b/assets/scripts/app/controllers/repos.coffee @@ -1,6 +1,11 @@ require 'travis/limited_array' Travis.ReposController = Ember.ArrayController.extend + actions: + activate: (name) -> + @transitionToRoot() + @activate(name) + defaultTab: ( -> if @get('currentUser.id') 'owned' diff --git a/assets/scripts/app/routes.coffee b/assets/scripts/app/routes.coffee index 2ce50a2e..1b308214 100644 --- a/assets/scripts/app/routes.coffee +++ b/assets/scripts/app/routes.coffee @@ -74,8 +74,9 @@ Travis.Router.map -> @route 'auth', path: '/auth' @resource 'profile', path: '/profile', -> - @resource 'account', path: '/:login' - @route 'info', path: '/info' + @resource 'accounts', path: '/', -> + @resource 'account', path: '/:login' + @route 'info', path: '/info' @route 'notFound', path: "/*path" @@ -130,7 +131,6 @@ Travis.SimpleLayoutRoute = Travis.Route.extend setupController: -> $('body').attr('id', 'home') @container.lookup('controller:repos').activate() - @container.lookup('controller:application').connectLayout 'simple' @_super.apply(this, arguments) renderTemplate: -> @@ -295,11 +295,12 @@ Travis.IndexRoute = Travis.Route.extend renderTemplate: -> $('body').attr('id', 'home') - @render 'repos', outlet: 'left' + @_super.apply this, arguments + + @render 'repos', outlet: 'left', into: 'index' setupController: (controller)-> @container.lookup('controller:repos').activate() - @container.lookup('controller:application').connectLayout 'home' Travis.StatsRoute = Travis.Route.extend renderTemplate: -> @@ -307,42 +308,39 @@ Travis.StatsRoute = Travis.Route.extend @render 'stats' - setupController: -> - @container.lookup('controller:application').connectLayout('simple') - Travis.NotFoundRoute = Travis.Route.extend renderTemplate: -> $('body').attr('id', 'not-found') @render 'not_found' - setupController: -> - @container.lookup('controller:application').connectLayout('simple') - Travis.ProfileRoute = Travis.Route.extend needsAuth: true setupController: (controller, model) -> - @container.lookup('controller:application').connectLayout('profile') @controllerFor('accounts').set('model', model) + renderTemplate: -> + $('body').attr('id', 'profile') + @_super.apply(this, arguments) + @render 'loading', outlet: 'left', into: 'profile' + +Travis.AccountsRoute = Travis.Route.extend model: -> Travis.Account.fetch(all: true) renderTemplate: -> - $('body').attr('id', 'profile') - @render 'accounts', outlet: 'left' - @_super.apply(this, arguments) + @render 'profile_accounts', outlet: 'left', into: 'profile' -Travis.ProfileIndexRoute = Travis.Route.extend +Travis.AccountsIndexRoute = Travis.Route.extend redirect: -> # TODO: setting accounts model in ProfileRoute is wrong, but # at this stage it's better than what we had before - accounts = @modelFor('profile') + accounts = @modelFor('accounts') login = @controllerFor('currentUser').get('login') account = accounts.find (account) -> account.get('login') == login - @transitionTo 'account', account + @replaceWith 'account', account Travis.AccountRoute = Travis.Route.extend setupController: (controller, account) -> @@ -351,7 +349,7 @@ Travis.AccountRoute = Travis.Route.extend @controllerFor('profile').activate 'hooks' model: (params) -> - @modelFor('profile').find (account) -> account.get('login') == params.login + @modelFor('accounts').find (account) -> account.get('login') == params.login serialize: (account) -> if account && account.get @@ -372,9 +370,6 @@ Travis.AuthRoute = Travis.Route.extend @render 'auth.signin' - setupController: -> - @container.lookup('controller:application').connectLayout('simple') - deactivate: -> @controllerFor('auth').set('redirected', false) diff --git a/assets/scripts/app/templates/accounts.hbs b/assets/scripts/app/templates/accounts.hbs new file mode 100644 index 00000000..c24cd689 --- /dev/null +++ b/assets/scripts/app/templates/accounts.hbs @@ -0,0 +1 @@ +{{outlet}} diff --git a/assets/scripts/app/templates/application.hbs b/assets/scripts/app/templates/application.hbs new file mode 100644 index 00000000..c24cd689 --- /dev/null +++ b/assets/scripts/app/templates/application.hbs @@ -0,0 +1 @@ +{{outlet}} diff --git a/assets/scripts/app/templates/index.hbs b/assets/scripts/app/templates/index.hbs new file mode 100644 index 00000000..c24cd689 --- /dev/null +++ b/assets/scripts/app/templates/index.hbs @@ -0,0 +1 @@ +{{outlet}} diff --git a/assets/scripts/app/templates/layouts/home.hbs b/assets/scripts/app/templates/layouts/home.hbs index 4e6fc0fe..3ce0b50f 100644 --- a/assets/scripts/app/templates/layouts/home.hbs +++ b/assets/scripts/app/templates/layouts/home.hbs @@ -8,5 +8,5 @@
{{render "flash"}} - {{outlet}} + {{yield}}
diff --git a/assets/scripts/app/templates/layouts/profile.hbs b/assets/scripts/app/templates/layouts/profile.hbs index 2a908308..9349d495 100644 --- a/assets/scripts/app/templates/layouts/profile.hbs +++ b/assets/scripts/app/templates/layouts/profile.hbs @@ -8,7 +8,7 @@
{{render "flash"}} - {{outlet main}} + {{yield}}