Merge pull request #284 from travis-ci/ps-router-refactoring

Router refactoring
This commit is contained in:
Piotr Sarnacki 2014-06-03 14:42:38 +02:00
commit fe1ced55ba
17 changed files with 83 additions and 174 deletions

View File

@ -62,6 +62,7 @@ Travis.RepoSettingsController = Em.ObjectController.extend
require 'controllers/accounts'
require 'controllers/auth'
require 'controllers/account'
require 'controllers/build'
require 'controllers/builds'
require 'controllers/flash'

View File

@ -0,0 +1,35 @@
Travis.AccountController = Ember.ObjectController.extend
allHooks: []
init: ->
@_super.apply this, arguments
self = this
Travis.on("user:synced", (->
self.reloadHooks()
))
toggle: (hook) ->
hook.toggle()
reloadHooks: ->
if login = @get('login')
@set('allHooks', Travis.Hook.find(all: true, owner_name: login))
hooks: (->
@reloadHooks() unless hooks = @get('allHooks')
@get('allHooks').filter (hook) -> hook.get('admin')
).property('allHooks.length', 'allHooks')
hooksWithoutAdmin: (->
@reloadHooks() unless hooks = @get('allHooks')
@get('allHooks').filter (hook) -> !hook.get('admin')
).property('allHooks.length', 'allHooks')
showPrivateReposHint: (->
Travis.config.show_repos_hint == 'private'
) .property()
showPublicReposHint: (->
Travis.config.show_repos_hint == 'public'
) .property()

View File

@ -1,20 +0,0 @@
Travis.AccountIndexController = Em.Controller.extend
needs: ['profile', 'currentUser']
hooksBinding: 'controllers.profile.hooks'
allHooksBinding: 'controllers.profile.allHooks'
hooksWithoutAdminBinding: 'controllers.profile.hooksWithoutAdmin'
userBinding: 'controllers.currentUser'
sync: ->
@get('user').sync()
toggle: (hook) ->
hook.toggle()
showPrivateReposHint: (->
Travis.config.show_repos_hint == 'private'
) .property()
showPublicReposHint: (->
Travis.config.show_repos_hint == 'public'
) .property()

View File

@ -1,5 +1,2 @@
Travis.AccountsController = Ember.ArrayController.extend
tab: 'accounts'
findByLogin: (login) ->
@find (account) -> account.get('login') == login

View File

@ -1,52 +1,19 @@
Travis.ProfileController = Travis.Controller.extend
name: 'profile'
needs: ['currentUser', 'accounts']
needs: ['currentUser', 'accounts', 'account']
userBinding: 'controllers.currentUser'
accountsBinding: 'controllers.accounts'
init: ->
@_super.apply this, arguments
self = this
Travis.on("user:synced", (->
self.reloadHooks()
))
account: (->
login = @get('params.login') || @get('user.login')
account = @get('accounts').filter((account) -> account if account.get('login') == login)[0]
account.select() if account
account
).property('accounts.length', 'params.login')
accountBinding: 'controllers.account'
sync: ->
@get('user').sync()
toggle: (hook) ->
hook.toggle()
activate: (action, params) ->
@setParams(params || @get('params'))
this["view#{$.camelize(action)}"]()
viewHooks: ->
@connectTab('hooks')
@reloadHooks()
reloadHooks: ->
# TODO: figure out why user is not available sometimes
@set('allHooks', Travis.Hook.find(all: true, owner_name: @get('params.login') || @get('user.login') || Travis.lookup('controller:currentUser').get('login')))
hooks: (->
@reloadHooks() unless hooks = @get('allHooks')
@get('allHooks').filter (hook) -> hook.get('admin')
).property('allHooks.length', 'allHooks')
hooksWithoutAdmin: (->
@reloadHooks() unless hooks = @get('allHooks')
@get('allHooks').filter (hook) -> !hook.get('admin')
).property('allHooks.length', 'allHooks')
@get('controllers.account').reloadHooks()
viewUser: ->
@connectTab('user')
@ -54,15 +21,3 @@ Travis.ProfileController = Travis.Controller.extend
connectTab: (tab) ->
viewClass = Travis["#{$.camelize(tab)}View"]
@set('tab', tab)
setParams: (params) ->
@set('params', {})
@set("params.#{key}", params[key]) for key, value of params
showPrivateReposHint: (->
Travis.config.show_repos_hint == 'private'
) .property()
showPublicReposHint: (->
Travis.config.show_repos_hint == 'public'
) .property()

View File

@ -8,9 +8,6 @@ Ember.Router.reopen
@_super(url)
Travis.Route = Ember.Route.extend
renderFirstSync: ->
@transitionTo 'first_sync'
beforeModel: (transition) ->
@auth.autoSignIn() unless @signedIn()
@ -40,7 +37,7 @@ Travis.ApplicationRoute = Travis.Route.extend
return true
renderFirstSync: ->
@renderFirstSync()
@transitionTo 'first_sync'
afterSignIn: ->
if transition = @auth.get('afterSignInTransition')
@ -75,29 +72,12 @@ Travis.Router.map ->
@route 'auth', path: '/auth'
@resource 'profile', path: '/profile', ->
@route 'index', path: '/'
@resource 'account', path: '/:login', ->
@route 'index', path: '/'
@route 'profile', path: '/profile'
@resource 'account', path: '/:login'
@route 'info', path: '/info'
@route 'notFound', path: "/*path"
Travis.SetupLastBuild = Ember.Mixin.create
setupController: ->
@repoDidLoad()
@controllerFor('repo').addObserver('repo.isLoaded', this, 'repoDidLoad')
repoDidLoad: ->
# TODO: it would be nicer to do it with promises
repo = @controllerFor('repo').get('repo')
if repo && repo.get('isLoaded') && !repo.get('lastBuildId')
Ember.run.next =>
@render('builds/not_found', into: 'repo', outlet: 'pane')
Travis.RequestsRoute = Travis.Route.extend
renderTemplate: ->
@render 'requests', into: 'repo', outlet: 'pane'
setupController: ->
@_super.apply this, arguments
@controllerFor('repo').activate('requests')
@ -106,9 +86,6 @@ Travis.RequestsRoute = Travis.Route.extend
Travis.Request.fetch repository_id: @modelFor('repo').get('id')
Travis.RequestRoute = Travis.Route.extend
renderTemplate: ->
@render 'request', into: 'repo', outlet: 'pane'
setupController: ->
@_super.apply this, arguments
@controllerFor('repo').activate('request')
@ -128,7 +105,6 @@ Travis.SimpleLayoutRoute = Travis.Route.extend
@_super.apply(this, arguments)
renderTemplate: ->
@render 'top', outlet: 'top'
@_super.apply(this, arguments)
Travis.FirstSyncRoute = Travis.SimpleLayoutRoute.extend
@ -143,10 +119,10 @@ Travis.InsufficientOauthPermissionsRoute = Travis.SimpleLayoutRoute.extend
existingUser = document.location.hash.match(/#existing[_-]user/)
controller.set('existingUser', existingUser)
Travis.IndexCurrentRoute = Travis.Route.extend Travis.SetupLastBuild,
Travis.IndexCurrentRoute = Travis.Route.extend
renderTemplate: ->
@render 'repo'
@render 'build', into: 'repo', outlet: 'pane'
@render 'build', into: 'repo'
setupController: ->
@_super.apply this, arguments
@ -170,7 +146,7 @@ Travis.IndexCurrentRoute = Travis.Route.extend Travis.SetupLastBuild,
Travis.AbstractBuildsRoute = Travis.Route.extend
renderTemplate: ->
@render 'builds', into: 'repo', outlet: 'pane'
@render 'builds'
setupController: ->
@controllerFor('repo').activate(@get('contentType'))
@ -194,9 +170,6 @@ Travis.PullRequestsRoute = Travis.AbstractBuildsRoute.extend(contentType: 'pull_
Travis.BranchesRoute = Travis.AbstractBuildsRoute.extend(contentType: 'branches')
Travis.BuildRoute = Travis.Route.extend
renderTemplate: ->
@render 'build', into: 'repo', outlet: 'pane'
serialize: (model, params) ->
id = if model.get then model.get('id') else model
@ -215,9 +188,6 @@ Travis.BuildRoute = Travis.Route.extend
Travis.Build.fetch(params.build_id)
Travis.JobRoute = Travis.Route.extend
renderTemplate: ->
@render 'job', into: 'repo', outlet: 'pane'
serialize: (model, params) ->
id = if model.get then model.get('id') else model
@ -237,13 +207,16 @@ Travis.JobRoute = Travis.Route.extend
model: (params) ->
Travis.Job.fetch(params.job_id)
Travis.RepoIndexRoute = Travis.Route.extend Travis.SetupLastBuild,
Travis.RepoIndexRoute = Travis.Route.extend
setupController: (controller, model) ->
@_super.apply this, arguments
@controllerFor('repo').activate('current')
renderTemplate: ->
@render 'build', into: 'repo', outlet: 'pane'
if @modelFor('repo').get('lastBuildId')
@render 'build'
else
@render 'builds/not_found'
Travis.RepoRoute = Travis.Route.extend
renderTemplate: ->
@ -280,8 +253,6 @@ Travis.IndexRoute = Travis.Route.extend
$('body').attr('id', 'home')
@render 'repos', outlet: 'left'
@render 'top', outlet: 'top'
@render 'flash', outlet: 'flash'
setupController: (controller)->
@container.lookup('controller:repos').activate()
@ -291,7 +262,6 @@ Travis.StatsRoute = Travis.Route.extend
renderTemplate: ->
$('body').attr('id', 'stats')
@render 'top', outlet: 'top'
@render 'stats'
setupController: ->
@ -301,7 +271,6 @@ Travis.NotFoundRoute = Travis.Route.extend
renderTemplate: ->
$('body').attr('id', 'not-found')
@render 'top', outlet: 'top'
@render 'not_found'
setupController: ->
@ -310,51 +279,36 @@ Travis.NotFoundRoute = Travis.Route.extend
Travis.ProfileRoute = Travis.Route.extend
needsAuth: true
setupController: ->
setupController: (controller, model) ->
@container.lookup('controller:application').connectLayout('profile')
@container.lookup('controller:accounts').set('content', Travis.Account.find(all: true))
@controllerFor('accounts').set('model', model)
model: ->
Travis.Account.fetch(all: true)
renderTemplate: ->
$('body').attr('id', 'profile')
@render 'top', outlet: 'top'
@render 'accounts', outlet: 'left'
@render 'flash', outlet: 'flash'
@_super.apply(this, arguments)
Travis.ProfileIndexRoute = Travis.Route.extend
setupController: ->
@container.lookup('controller:profile').activate 'hooks'
renderTemplate: ->
@render 'hooks', outlet: 'pane', into: 'profile', controller: 'profile'
redirect: ->
# TODO: setting accounts model in ProfileRoute is wrong, but
# at this stage it's better than what we had before
accounts = @modelFor('profile')
login = @controllerFor('currentUser').get('login')
account = accounts.find (account) -> account.get('login') == login
@transitionTo 'account', account
Travis.AccountRoute = Travis.Route.extend
setupController: (controller, account) ->
profileController = @container.lookup('controller:profile')
profileController.activate 'hooks'
@_super.apply this, arguments
if account
params = { login: account.get('login') }
profileController.setParams(params)
@controllerFor('profile').activate 'hooks'
model: (params) ->
controller = @container.lookup('controller:accounts')
account = controller.findByLogin(params.login)
if account
account
else
content = Ember.Object.create(login: params.login)
proxy = Ember.ObjectProxy.create(content: content)
observer = ->
if account = controller.findByLogin(params.login)
controller.removeObserver 'content.length', observer
proxy.set('content', account)
controller.addObserver 'content.length', observer
proxy
@modelFor('profile').find (account) -> account.get('login') == params.login
serialize: (account) ->
if account && account.get
@ -362,25 +316,17 @@ Travis.AccountRoute = Travis.Route.extend
else
{}
Travis.AccountIndexRoute = Travis.Route.extend
setupController: ->
@container.lookup('controller:profile').activate 'hooks'
renderTemplate: ->
@render 'hooks', outlet: 'pane', into: 'profile'
Travis.AccountProfileRoute = Travis.Route.extend
Travis.ProfileInfoRoute = Travis.Route.extend
setupController: ->
@container.lookup('controller:profile').activate 'user'
renderTemplate: ->
@render 'user', outlet: 'pane', into: 'profile'
@render 'user'
Travis.AuthRoute = Travis.Route.extend
renderTemplate: ->
$('body').attr('id', 'auth')
@render 'top', outlet: 'top'
@render 'auth.signin'
setupController: ->

View File

@ -1,5 +1,5 @@
<div id="top">
{{outlet top}}
{{render "top"}}
</div>
<div id="left">
@ -7,6 +7,6 @@
</div>
<div id="main">
{{outlet flash}}
{{outlet main}}
{{render "flash"}}
{{outlet}}
</div>

View File

@ -1,5 +1,5 @@
<div id="top">
{{outlet top}}
{{render "top"}}
</div>
<div id="left">
@ -7,7 +7,7 @@
</div>
<div id="main">
{{outlet flash}}
{{render "flash"}}
{{outlet main}}
</div>

View File

@ -1,8 +1,8 @@
<div id="top">
{{outlet top}}
{{render "top"}}
</div>
<div id="main">
{{outlet flash}}
{{render "flash"}}
{{outlet main}}
</div>

View File

@ -0,0 +1 @@
<div class="loading"><span>Loading</span></div>

View File

@ -9,7 +9,7 @@
<div class="tab">
{{#collection Travis.AccountsListView contentBinding="controller"}}
{{#link-to "account.index" view.account class="name"}}{{view.name}}{{/link-to}}
{{#link-to "account" view.account class="name"}}{{view.name}}{{/link-to}}
<p class="summary">
<span class="repos_label">Repositories:</span>
<abbr class="repos">{{view.account.reposCount}}</abbr>

View File

@ -3,6 +3,6 @@
{{view Travis.ProfileTabsView}}
<div class="tab">
{{outlet pane}}
{{outlet}}
</div>

View File

@ -1,17 +1,13 @@
<ul class="tabs">
<li id="tab_hooks" {{bind-attr class="view.classHooks"}}>
<h5>
{{#with view.account}}
{{#if login}}
{{#link-to "account.index" this}}Repositories{{/link-to}}
{{/if}}
{{/with}}
{{#link-to "account" account}}Repositories{{/link-to}}
</h5>
</li>
{{#if view.displayUser}}
<li id="tab_user" {{bind-attr class="view.classUser"}}>
<h5>
{{#link-to "account.profile" view.account}}Profile{{/link-to}}
{{#link-to "profile.info"}}Profile{{/link-to}}
</h5>
</li>
{{/if}}

View File

@ -17,7 +17,7 @@
{{/with}}
<div class="tab">
{{outlet pane}}
{{outlet}}
</div>
{{else}}
<div class="loading"><span>Loading</span></div>

View File

@ -31,4 +31,4 @@
).property('account.login')
click: ->
@get('controller').transitionToRoute("account", @get('account.login'))
@get('controller').transitionToRoute("account", @get('account.login'))

View File

@ -22,8 +22,6 @@ Travis.reopen
'active' if @get('tab') == 'user'
).property('tab')
accountBinding: 'controller.account'
displayUser: (->
@get('controller.account.login') == @get('controller.user.login')
).property('controller.account.login', 'controller.user.login')
@ -42,4 +40,4 @@ Travis.reopen
gravatarUrl: (->
"#{location.protocol}//www.gravatar.com/avatar/#{@get('user.gravatarId')}?s=200&d=mm"
).property('user.gravatarId')
).property('user.gravatarId')