Merge pull request #284 from travis-ci/ps-router-refactoring
Router refactoring
This commit is contained in:
commit
fe1ced55ba
|
@ -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'
|
||||
|
|
35
assets/scripts/app/controllers/account.coffee
Normal file
35
assets/scripts/app/controllers/account.coffee
Normal 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()
|
|
@ -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()
|
|
@ -1,5 +1,2 @@
|
|||
Travis.AccountsController = Ember.ArrayController.extend
|
||||
tab: 'accounts'
|
||||
|
||||
findByLogin: (login) ->
|
||||
@find (account) -> account.get('login') == login
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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: ->
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
<div id="top">
|
||||
{{outlet top}}
|
||||
{{render "top"}}
|
||||
</div>
|
||||
|
||||
<div id="main">
|
||||
{{outlet flash}}
|
||||
{{render "flash"}}
|
||||
{{outlet main}}
|
||||
</div>
|
||||
|
|
1
assets/scripts/app/templates/loading.hbs
Normal file
1
assets/scripts/app/templates/loading.hbs
Normal file
|
@ -0,0 +1 @@
|
|||
<div class="loading"><span>Loading</span></div>
|
|
@ -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>
|
||||
|
|
|
@ -3,6 +3,6 @@
|
|||
{{view Travis.ProfileTabsView}}
|
||||
|
||||
<div class="tab">
|
||||
{{outlet pane}}
|
||||
{{outlet}}
|
||||
</div>
|
||||
|
||||
|
|
|
@ -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}}
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
{{/with}}
|
||||
|
||||
<div class="tab">
|
||||
{{outlet pane}}
|
||||
{{outlet}}
|
||||
</div>
|
||||
{{else}}
|
||||
<div class="loading"><span>Loading</span></div>
|
||||
|
|
|
@ -31,4 +31,4 @@
|
|||
).property('account.login')
|
||||
|
||||
click: ->
|
||||
@get('controller').transitionToRoute("account", @get('account.login'))
|
||||
@get('controller').transitionToRoute("account", @get('account.login'))
|
||||
|
|
|
@ -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')
|
||||
|
|
Loading…
Reference in New Issue
Block a user