Prepare Jobs views for ES6, remove repo/show and repo/list

This commit is contained in:
Piotr Sarnacki 2015-01-20 12:50:50 +01:00
parent a2f022283a
commit 8f075662ac
6 changed files with 57 additions and 430 deletions

View File

@ -7,6 +7,8 @@ require 'views/build'
require 'views/events'
require 'views/flash'
require 'views/job'
require 'views/jobs'
require 'views/jobs-item'
require 'views/log'
require 'views/repo'
require 'views/profile'

View File

@ -1,55 +1,33 @@
Travis.reopen
JobsView: Travis.View.extend
templateName: 'jobs/list'
buildBinding: 'controller.build'
require 'helpers/helpers'
jobTableId: Ember.computed(->
if @get('required')
'jobs'
else
'allowed_failure_jobs'
)
colorForState = Travis.Helpers.colorForState
githubCommit = Travis.Urls.githubCommit
gravatarImage = Travis.Urls.gravatarImage
actions:
popupClose: ->
@popupCloseAll()
View = Ember.View.extend
templateName: 'jobs/show'
openHelpPopup: ->
@popupCloseAll()
@popup('help-allowed_failures')
repoBinding: 'controller.repo'
jobBinding: 'controller.job'
commitBinding: 'job.commit'
annotationsBinding: 'job.annotations'
JobsItemView: Travis.View.extend
tagName: 'tr'
classNameBindings: ['color']
repoBinding: 'context.repo'
jobBinding: 'context'
currentItemBinding: 'job'
color: (->
Travis.Helpers.colorForState(@get('job.state'))
).property('job.state')
color: (->
colorForState(@get('job.state'))
).property('job.state')
JobView: Travis.View.extend
templateName: 'jobs/show'
urlGithubCommit: (->
githubCommit(@get('repo.slug'), @get('commit.sha'))
).property('repo.slug', 'commit.sha')
repoBinding: 'controller.repo'
jobBinding: 'controller.job'
commitBinding: 'job.commit'
annotationsBinding: 'job.annotations'
urlCommitterGravatarImage: (->
gravatarImage(@get('commit.committerEmail'), 40)
).property('commit.committerEmail')
currentItemBinding: 'job'
urlAuthorGravatarImage: (->
gravatarImage(@get('commit.authorEmail'), 40)
).property('commit.authorEmail')
color: (->
Travis.Helpers.colorForState(@get('job.state'))
).property('job.state')
urlGithubCommit: (->
Travis.Urls.githubCommit(@get('repo.slug'), @get('commit.sha'))
).property('repo.slug', 'commit.sha')
urlCommitterGravatarImage: (->
Travis.Urls.gravatarImage(@get('commit.committerEmail'), 40)
).property('commit.committerEmail')
urlAuthorGravatarImage: (->
Travis.Urls.gravatarImage(@get('commit.authorEmail'), 40)
).property('commit.authorEmail')
Travis.JobView = View

View File

@ -0,0 +1,11 @@
View = Travis.View.extend
tagName: 'tr'
classNameBindings: ['color']
repoBinding: 'context.repo'
jobBinding: 'context'
color: (->
Travis.Helpers.colorForState(@get('job.state'))
).property('job.state')
Travis.JobsItemView = View

View File

@ -0,0 +1,20 @@
View = Ember.View.extend
templateName: 'jobs/list'
buildBinding: 'controller.build'
jobTableId: Ember.computed(->
if @get('required')
'jobs'
else
'allowed_failure_jobs'
)
actions:
popupClose: ->
@popupCloseAll()
openHelpPopup: ->
@popupCloseAll()
@popup('help-allowed_failures')
Travis.JobsView = View

View File

@ -1,49 +0,0 @@
@Travis.reopen
ReposView: Travis.View.extend
templateName: 'repos/list'
ReposListView: Em.CollectionView.extend
elementId: 'repos'
tagName: 'ul'
emptyView: Ember.View.extend
template: Ember.Handlebars.compile('<div class="loading"><span>Loading</span></div>')
itemViewClass: Travis.View.extend
repoBinding: 'content'
classNames: ['repo']
classNameBindings: ['color', 'selected']
selected: (->
@get('content') == @get('controller.selectedRepo')
).property('controller.selectedRepo')
color: (->
Travis.Helpers.colorForState(@get('repo.lastBuildState'))
).property('repo.lastBuildState')
click: ->
@get('controller').transitionToRoute('/' + @get('repo.slug'))
ReposListTabsView: Travis.View.extend
templateName: 'repos/list/tabs'
tabBinding: 'controller.tab'
currentUserBinding: 'controller.currentUser.id'
classRecent: (->
'active' if @get('tab') == 'recent'
).property('tab')
classOwned: (->
classes = []
classes.push('active') if @get('tab') == 'owned'
classes.push('display-inline') if @get('currentUser')
classes.join(' ')
).property('tab', 'currentUser')
classSearch: (->
'active' if @get('tab') == 'search'
).property('tab')
classNew: (->
'display-inline' if @get('currentUser')
).property('currentUser')

View File

@ -1,335 +0,0 @@
Travis.reopen
RepoView: Travis.View.extend
templateName: 'repos/show'
reposBinding: 'controllers.repos'
repoBinding: 'controller.repo'
buildBinding: 'controller.build'
jobBinding: 'controller.job'
tabBinding: 'controller.tab'
classNameBindings: ['controller.isLoading:loading']
isEmpty: (->
@get('repos.isLoaded') && @get('repos.length') == 0
).property('repos.isLoaded', 'repos.length')
statusImageUrl: (->
Travis.Urls.statusImage(@get('controller.repo.slug'))
).property('controller.repo.slug')
actions:
statusImages: () ->
@popupCloseAll()
view = Travis.StatusImagesView.create(toolsView: this)
Travis.View.currentPopupView = view
view.appendTo($('body'))
return false
ReposEmptyView: Travis.View.extend
template: (->
if Travis.config.pro
'pro/repos/show/empty'
else
''
).property()
RepoShowTabsView: Travis.View.extend
templateName: 'repos/show/tabs'
tabBinding: 'controller.tab'
contextBinding: 'controller'
# hrm. how to parametrize bind-attr?
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')
# TODO: refactor tabs, most of the things here are not really DRY
classJob: (->
'active display-inline' if @get('tab') == 'job'
).property('tab')
classRequests: (->
'active display-inline' if @get('tab') == 'requests'
).property('tab')
classCaches: (->
'active display-inline' if @get('tab') == 'caches'
).property('tab')
classSettings: (->
'active display-inline' if @get('tab') == 'settings'
).property('tab')
classRequest: (->
'active display-inline' if @get('tab') == 'request'
).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'
didInsertElement: ->
self = this
$('.menu a').on 'click', ->
self.closeMenu()
willRemoveElement: ->
$('.menu a').off 'click'
closeMenu: ->
$('.menu').removeClass('display')
actions:
menu: ->
@popupCloseAll()
$('#tools .menu').toggleClass('display')
return false
regenerateKeyPopup: ->
if @get('canRegenerateKey')
@set('active', true)
@closeMenu()
@popup('regenerate-key-popup')
return false
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.'}])
canRegenerateKey: (->
@get('hasAdminPermission')
).property('hasAdminPermission')
hasPermission: (->
if permissions = @get('currentUser.permissions')
permissions.contains parseInt(@get('repo.id'))
).property('currentUser.permissions.length', 'repo.id')
hasPushPermission: (->
if permissions = @get('currentUser.pushPermissions')
permissions.contains parseInt(@get('repo.id'))
).property('currentUser.pushPermissions.length', 'repo.id')
hasAdminPermission: (->
if permissions = @get('currentUser.adminPermissions')
permissions.contains parseInt(@get('repo.id'))
).property('currentUser.adminPermissions.length', 'repo.id')
displayRegenerateKey: (->
@get('canRegenerateKey')
).property('canRegenerateKey')
displaySettingsLink: (->
@get('hasPushPermission')
).property('hasPushPermission')
displayStatusImages: (->
@get('hasPermission')
).property('hasPermission')
RepoActionsView: Travis.View.extend
templateName: 'repos/show/actions'
repoBinding: 'controller.repo'
buildBinding: 'controller.build'
jobBinding: 'controller.job'
tabBinding: 'controller.tab'
currentUserBinding: 'controller.currentUser'
actions:
requeueBuild: ->
if @get('canRequeueBuild')
@requeue @get('build')
requeueJob: ->
if @get('canRequeueJob')
@requeue @get('_job')
cancelBuild: ->
if @get('canCancelBuild')
Travis.flash(notice: 'Build cancellation 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')
removeLog: ->
@popupCloseAll()
if @get('canRemoveLog')
job = @get('_job') || @get('build.jobs.firstObject')
job.removeLog().then ->
Travis.flash(success: 'Log has been successfully removed.')
, (xhr) ->
if xhr.status == 409
Travis.flash(error: 'Log can\'t be removed')
else if xhr.status == 401
Travis.flash(error: 'You don\'t have sufficient access to remove the log')
else
Travis.flash(error: 'An error occured when removing the log')
cancelJob: ->
if @get('canCancelJob')
Travis.flash(notice: 'Job cancellation 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')
codeClimatePopup: ->
@popupCloseAll()
@popup('code-climate')
return false
removeLogPopup: ->
if @get('canRemoveLog')
@set('active', true)
@popup('remove-log-popup')
return false
hasPermission: (->
if permissions = @get('currentUser.permissions')
permissions.contains parseInt(@get('repo.id'))
).property('currentUser.permissions.length', 'repo.id')
hasPushPermission: (->
if permissions = @get('currentUser.pushPermissions')
permissions.contains parseInt(@get('repo.id'))
).property('currentUser.pushPermissions.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') && (@get('isJobTab') || @get('isBuildTab'))
).property('jobIdForLog', 'isJobTab', 'isBuildTab')
_job: (->
if id = @get('jobIdForLog')
Travis.Job.find(id)
).property('jobIdForLog')
jobIdForLog: (->
job = @get('job.id')
unless job
if @get('build.jobs.length') == 1
job = @get('build.jobs').objectAt?(0).get?('id')
job
).property('job.id', 'build.jobs.firstObject.id', 'build.jobs.length')
plainTextLogUrl: (->
if id = @get('jobIdForLog')
url = Travis.Urls.plainTextLog(id)
if Travis.config.pro
token = @get('job.log.token') || @get('build.jobs.firstObject.log.token')
url += "&access_token=#{token}"
url
).property('jobIdForLog', 'job.log.token', 'build.jobs.firstObject.log.token')
canRemoveLog: (->
@get('displayRemoveLog')
).property('displayRemoveLog')
displayRemoveLog: (->
if job = @get('_job')
(@get('isJobTab') || (@get('isBuildTab') && @get('build.jobs.length') == 1)) &&
job.get('canRemoveLog') && @get('hasPermission')
).property('isJobTab', 'isBuildTab', 'build.jobs.length', '_job.canRemoveLog', 'jobIdForLog', 'canRemoveLog', 'hasPermission')
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: (->
@get('repo.githubLanguage') == 'Ruby'
).property('repo.githubLanguage')
requeueFinished: ->
@set('requeueing', false)
requeue: (thing) ->
return if @get('requeueing')
@set('requeueing', true)
thing.requeue().then(this.requeueFinished.bind(this), this.requeueFinished.bind(this))