
It takes up quite a bit of room on the tabs list, and it makes more sense to have it up there, as it belongs to the repository.
250 lines
7.6 KiB
CoffeeScript
250 lines
7.6 KiB
CoffeeScript
Travis.reopen
|
|
RepoView: Travis.View.extend
|
|
templateName: 'repos/show'
|
|
|
|
reposBinding: 'controllers.repos'
|
|
|
|
classNameBindings: ['controller.isLoading:loading']
|
|
|
|
isEmpty: (->
|
|
@get('repos.isLoaded') && @get('repos.length') == 0
|
|
).property('repos.isLoaded', 'repos.length')
|
|
|
|
repoIsLoadedDidChange: (->
|
|
# Ember does not automatically rerender outlets and sometimes 'pane' outlet
|
|
# in repos/show.hbs is empty when view is rerendered without routing
|
|
# taking place. Try to render the default outlet in such case
|
|
# TODO: look into fixing it in more general way
|
|
Ember.run.schedule('afterRender', this, ->
|
|
pane = Ember.get('_outlets.pane')
|
|
if @get('controller.repo.isLoaded') && @state == 'inDOM' &&
|
|
@get('controller.repo.lastBuild') &&
|
|
@get('controller.tab') == 'current' && (!pane || pane.state == 'destroyed')
|
|
view = @get('controller.container').lookup('view:build')
|
|
view.set('controller', @get('controller.container').lookup('controller:build'))
|
|
Ember.run.next =>
|
|
@set('_outlets', {}) if !@get('_outlets') && !@isDestroyed
|
|
@connectOutlet('pane', view) unless @isDestroyed
|
|
)
|
|
).observes('controller.repo.isLoaded')
|
|
|
|
ReposEmptyView: Travis.View.extend
|
|
template: ''
|
|
|
|
RepoShowTabsView: Travis.View.extend
|
|
templateName: 'repos/show/tabs'
|
|
|
|
tabBinding: 'controller.tab'
|
|
contextBinding: 'controller'
|
|
|
|
# hrm. how to parametrize bindAttr?
|
|
classCurrent: (->
|
|
'active' if @get('tab') == 'current'
|
|
).property('tab')
|
|
|
|
classBuilds: (->
|
|
'active' if @get('tab') == 'builds'
|
|
).property('tab')
|
|
|
|
classPullRequests: (->
|
|
'active' if @get('tab') == 'pull_requests'
|
|
).property('tab')
|
|
|
|
classBranches: (->
|
|
'active' if @get('tab') == 'branches'
|
|
).property('tab')
|
|
|
|
classEvents: (->
|
|
'active' if @get('tab') == 'events'
|
|
).property('tab')
|
|
|
|
classBuild: (->
|
|
tab = @get('tab')
|
|
classes = []
|
|
classes.push('active') if tab == 'build'
|
|
classes.push('display-inline') if tab == 'build' || tab == 'job'
|
|
classes.join(' ')
|
|
).property('tab')
|
|
|
|
classJob: (->
|
|
'active display-inline' if @get('tab') == 'job'
|
|
).property('tab')
|
|
|
|
RepoShowToolsView: Travis.View.extend
|
|
templateName: 'repos/show/tools'
|
|
|
|
repoBinding: 'controller.repo'
|
|
buildBinding: 'controller.build'
|
|
jobBinding: 'controller.job'
|
|
tabBinding: 'controller.tab'
|
|
currentUserBinding: 'controller.currentUser'
|
|
slugBinding: 'controller.repo.slug'
|
|
|
|
closeMenu: ->
|
|
$('.menu').removeClass('display')
|
|
|
|
menu: ->
|
|
@popupCloseAll()
|
|
$('#tools .menu').toggleClass('display')
|
|
event.stopPropagation()
|
|
|
|
regenerateKeyPopup: ->
|
|
if @get('canRegenerateKey')
|
|
@set('active', true)
|
|
@closeMenu()
|
|
@popup(event)
|
|
event.stopPropagation()
|
|
|
|
regenerateKey: ->
|
|
@popupCloseAll()
|
|
|
|
(@get('repo.content') || @get('repo')).regenerateKey
|
|
success: =>
|
|
@popup('regeneration-success')
|
|
error: ->
|
|
Travis.lookup('controller:flash').loadFlashes([{ error: 'Travis encountered an error while trying to regenerate the key, please try again.'}])
|
|
|
|
displayRegenerateKey: true
|
|
|
|
canRegenerateKey: (->
|
|
@get('displayRegenerateKey') && @get('hasPermission')
|
|
).property('hasPermission')
|
|
|
|
hasPermission: (->
|
|
if permissions = @get('currentUser.permissions')
|
|
permissions.contains parseInt(@get('repo.id'))
|
|
).property('currentUser.permissions.length', 'repo.id')
|
|
|
|
statusImageUrl: (->
|
|
Travis.Urls.statusImage(@get('slug'))
|
|
).property('slug')
|
|
|
|
displayStatusImages: (->
|
|
@get('hasPermission')
|
|
).property('hasPermission')
|
|
|
|
statusImages: ->
|
|
@popupCloseAll()
|
|
view = Travis.StatusImagesView.create(toolsView: this)
|
|
Travis.View.currentPopupView = view
|
|
view.appendTo($('body'))
|
|
event.stopPropagation()
|
|
|
|
|
|
RepoActionsView: Travis.View.extend
|
|
templateName: 'repos/show/actions'
|
|
|
|
repoBinding: 'controller.repo'
|
|
buildBinding: 'controller.build'
|
|
jobBinding: 'controller.job'
|
|
tabBinding: 'controller.tab'
|
|
currentUserBinding: 'controller.currentUser'
|
|
|
|
requeue: ->
|
|
@get('build').requeue()
|
|
|
|
cancelBuild: ->
|
|
if @get('canCancelBuild')
|
|
Travis.flash(notice: 'Build cancelation has been scheduled.')
|
|
@get('build').cancel().then ->
|
|
Travis.flash(success: 'Build has been successfully canceled.')
|
|
, (xhr) ->
|
|
if xhr.status == 422
|
|
Travis.flash(error: 'This build can\'t be canceled')
|
|
else if xhr.status == 403
|
|
Travis.flash(error: 'You don\'t have sufficient access to cancel this build')
|
|
else
|
|
Travis.flash(error: 'An error occured when canceling the build')
|
|
|
|
cancelJob: ->
|
|
if @get('canCancelJob')
|
|
Travis.flash(notice: 'Job cancelation has been scheduled.')
|
|
@get('job').cancel().then ->
|
|
Travis.flash(success: 'Job has been successfully canceled.')
|
|
, (xhr) ->
|
|
if xhr.status == 422
|
|
Travis.flash(error: 'This job can\'t be canceled')
|
|
else if xhr.status == 403
|
|
Travis.flash(error: 'You don\'t have sufficient access to cancel this job')
|
|
else
|
|
Travis.flash(error: 'An error occured when canceling the job')
|
|
|
|
hasPermission: (->
|
|
if permissions = @get('currentUser.permissions')
|
|
permissions.contains parseInt(@get('repo.id'))
|
|
).property('currentUser.permissions.length', 'repo.id')
|
|
|
|
displayRequeueBuild: (->
|
|
@get('isBuildTab') && @get('build.isFinished')
|
|
).property('isBuildTab', 'build.isFinished')
|
|
|
|
canRequeueBuild: (->
|
|
@get('displayRequeueBuild') && @get('hasPermission')
|
|
).property('displayRequireBuild', 'hasPermission')
|
|
|
|
displayRequeueJob: (->
|
|
@get('isJobTab') && @get('job.isFinished')
|
|
).property('isJobTab', 'job.isFinished')
|
|
|
|
canRequeueJob: (->
|
|
@get('displayRequeueJob') && @get('hasPermission')
|
|
).property('displayRequeueJob', 'hasPermission')
|
|
|
|
showDownloadLog: (->
|
|
@get('jobIdForLog')
|
|
).property('jobIdForLog')
|
|
|
|
jobIdForLog: (->
|
|
@get('job.id') ||
|
|
(@get('build.jobs.length') == 1 && @get('build.jobs.firstObject.id'))
|
|
).property('job.id', 'build.jobs.firstObject.id', 'build.jobs.length')
|
|
|
|
plainTextLogUrl: (->
|
|
if id = @get('jobIdForLog')
|
|
Travis.Urls.plainTextLog(id)
|
|
).property('jobIdForLog')
|
|
|
|
canCancelBuild: (->
|
|
@get('displayCancelBuild') && @get('hasPermission')
|
|
).property('displayCancelBuild', 'hasPermission')
|
|
|
|
displayCancelBuild: (->
|
|
@get('isBuildTab') && @get('build.canCancel')
|
|
).property('isBuildTab', 'build.canCancel')
|
|
|
|
canCancelJob: (->
|
|
@get('displayCancelJob') && @get('hasPermission')
|
|
).property('displayCancelJob', 'hasPermission')
|
|
|
|
displayCancelJob: (->
|
|
@get('isJobTab') && @get('job.canCancel')
|
|
).property('isJobTab', 'job.canCancel')
|
|
|
|
isJobTab: (->
|
|
@get('tab') == 'job'
|
|
).property('tab', 'repo.id')
|
|
|
|
isBuildTab: (->
|
|
['current', 'build'].indexOf(@get('tab')) > -1
|
|
).property('tab')
|
|
|
|
displayCodeClimate: (->
|
|
console.log @get('repo.githubLanguage')
|
|
Travis.config.code_climate == "true" and @get('repo.githubLanguage') == 'Ruby'
|
|
).property('repo.githubLanguage')
|
|
|
|
codeClimatePopup: ->
|
|
@popupCloseAll()
|
|
@popup('code-climate')
|
|
event.stopPropagation() if event?
|
|
|
|
requeueBuild: ->
|
|
if @get('canRequeueBuild')
|
|
@get('build').requeue()
|
|
|
|
requeueJob: ->
|
|
if @get('canRequeueJob')
|
|
@get('job').requeue()
|
|
|
|
|