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 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') 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('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') statusImageUrl: (-> Travis.Urls.statusImage(@get('slug')) ).property('slug') displaySettingsLink: (-> @get('hasPushPermission') ).property('hasPushPermission') 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' 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: -> 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') 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') ).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') canRemoveLog: (-> @get('displayRemoveLog') && @get('hasPermission') ).property('displayRemoveLog', 'hasPermission') displayRemoveLog: (-> (@get('isJobTab') || (@get('isBuildTab') && @get('build.jobs.length') == 1)) && @get('build.jobs.firstObject.canRemoveLog') ).property('isJobTab', 'isBuildTab', 'build.jobs.length', 'job.canRemoveLog') 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: (-> Travis.config.code_climate == "true" and @get('repo.githubLanguage') == 'Ruby' ).property('repo.githubLanguage') codeClimatePopup: -> @popupCloseAll() @popup('code-climate') event.stopPropagation() if event? requeueFinished: -> @set('requeueing', false) requeue: (thing) -> return if @get('requeueing') @set('requeueing', true) thing.requeue().then(this.requeueFinished.bind(this), this.requeueFinished.bind(this)) requeueBuild: -> if @get('canRequeueBuild') @requeue @get('build') requeueJob: -> if @get('canRequeueJob') @requeue @get('job')