
When first sync template is displayed, user usually doesn't have any repos, which also triggers rendering of getting started template. The fix for this is to handle the action to render getting started page on first sync and do nothing in such case. I also added a test to ensure that it works correctly.
103 lines
2.8 KiB
CoffeeScript
103 lines
2.8 KiB
CoffeeScript
require 'travis/limited_array'
|
|
|
|
Travis.ReposController = Ember.ArrayController.extend
|
|
defaultTab: ( ->
|
|
if @get('currentUser.id')
|
|
'owned'
|
|
else
|
|
'recent'
|
|
).property('currentUser.id')
|
|
|
|
currentUserIdDidChange: (->
|
|
if @get('currentUser.id')
|
|
@activate('owned')
|
|
else if @get('tab') == 'owned'
|
|
@activate('recent')
|
|
).observes('currentUser.id')
|
|
|
|
tabOrIsLoadedDidChange: (->
|
|
Ember.run.scheduleOnce 'routerTransitions', this, ->
|
|
if @get('tab') == 'owned' && @get('isLoaded') && @get('length') == 0
|
|
@container.lookup('router:main').send('renderNoOwnedRepos')
|
|
).observes('isLoaded', 'tab', 'length')
|
|
|
|
isLoadedBinding: 'content.isLoaded'
|
|
needs: ['currentUser', 'repo']
|
|
currentUserBinding: 'controllers.currentUser'
|
|
selectedRepo: (->
|
|
# we need to observe also repo.content here, because we use
|
|
# ObjectProxy in repo controller
|
|
# TODO: get rid of ObjectProxy there
|
|
@get('controllers.repo.repo.content') || @get('controllers.repo.repo')
|
|
).property('controllers.repo.repo', 'controllers.repo.repo.content')
|
|
|
|
init: ->
|
|
@_super.apply this, arguments
|
|
Visibility.every Travis.INTERVALS.updateTimes, @updateTimes.bind(this)
|
|
|
|
recentRepos: (->
|
|
Travis.LimitedArray.create
|
|
content: Em.ArrayProxy.extend(Em.SortableMixin).create(
|
|
sortProperties: ['sortOrder']
|
|
content: Travis.Repo.withLastBuild()
|
|
isLoadedBinding: 'content.isLoaded'
|
|
)
|
|
limit: 30
|
|
).property()
|
|
|
|
updateTimes: ->
|
|
if content = @get('content')
|
|
content.forEach (r) -> r.updateTimes()
|
|
|
|
transitionToRoot: ->
|
|
@container.lookup('router:main').send('renderDefaultTemplate')
|
|
@container.lookup('router:main').transitionTo('index.current')
|
|
|
|
activate: (tab, params) ->
|
|
@set('sortProperties', ['sortOrder'])
|
|
tab ||= @get('defaultTab')
|
|
@set('tab', tab)
|
|
this["view#{$.camelize(tab)}"](params)
|
|
|
|
viewRecent: ->
|
|
@set('content', @get('recentRepos'))
|
|
|
|
viewOwned: ->
|
|
@set('content', @get('userRepos'))
|
|
|
|
userRepos: (->
|
|
if login = @get('currentUser.login')
|
|
Travis.Repo.accessibleBy(login)
|
|
else
|
|
[]
|
|
).property('currentUser.login')
|
|
|
|
viewSearch: (params) ->
|
|
@set('content', Travis.Repo.search(params.search))
|
|
|
|
searchObserver: (->
|
|
search = @get('search')
|
|
if search
|
|
@searchFor search
|
|
else
|
|
@activate 'recent'
|
|
'recent'
|
|
).observes('search')
|
|
|
|
searchFor: (phrase) ->
|
|
Ember.run.cancel(@searchLater) if @searchLater
|
|
@searchLater = Ember.run.later(this, (->
|
|
@activate 'search', search: phrase
|
|
), 500)
|
|
|
|
noReposMessage: (->
|
|
tab = @get('tab')
|
|
|
|
if tab == 'owned'
|
|
'You don\'t have any repos set up on Travis CI'
|
|
else if tab == 'recent'
|
|
'Repositories could not be loaded'
|
|
else
|
|
'Could not find any repos'
|
|
).property('tab')
|