#SHOW REPO class Perkins.Views.Repo extends Backbone.View el: "#main-content" events: 'mouseenter #log a' : "replaceUri" 'click #log .fold' : "toggleFold" 'click #restart-build-btn' : "restartBuild" 'click .run-commit': "runCommit" initialize: (opts)-> @model = opts.model if opts.build_id @build = new Perkins.Models.BuildReport({id: opts.build_id, repo: @model}) else if @model.get('last_report_id') @build = new Perkins.Models.BuildReport({id: @model.get('last_report_id'), repo: @model}) @listenTo(@build, "change", @renderBuildReport) if @build @listenTo(@model, "change:build_status", @handleSpinnerBtn) template: ()-> JST["repo"](@model.toJSON()) replaceUri: (ev)-> console.log ev t = ev.currentTarget num = $(t.parentNode).prevAll('p').length + 1 url = window.location + '' $(t).attr('href', url.replace(/#L\d+|(?=\?)|$/, '#L' + num)) handleSpinnerBtn: -> if @model.get('build_status') is "started" $(".fa-refresh").addClass("fa-spin") else if @model.get('build_status') is "stopped" $(".fa-refresh").removeClass("fa-spin") toggleFold: (ev)-> console.log ev $(ev.currentTarget).toggleClass('open') render: -> console.log("render repo") $(@el).html(@template()) @handleSpinnerBtn() if @build @build_detail = new Perkins.Views.BuildDetail( repo: @model, build: @build ) @build.fetch() @displayBadge() displayBadge: -> name = @model.get('name') url = "#{window.location.origin}/badge?repo=#{name}" badge = "<a href='#{url}' target='blank'><img src='#{url}' alt='badge'></a>" $('#badge-placeholder').html(badge) renderBuildReport: -> @build_detail.render() restartBuild: (ev)-> return if $(ev.currentTarget).find("i").hasClass("fa-spin") @build_detail.restart() runCommit: -> url = "/repos/#{@model.get('name')}/run_commit" $.ajax url: url beforeSend: -> $(".no-build").text("running build") $(".run-commit").addClass("hide") error: (err)-> $(".no-build").text("oops! we received status #{err.status}") $(".run-commit").text("try again").removeClass("hide") success: => $(".no-build").text("running build") false close: ()-> $(@el).html("") console.log "CLOSED VIEW CALLED" @.stopListening() @.undelegateEvents() @.unbind() #repo build detail class Perkins.Views.BuildDetail extends Backbone.View el: "#build-report-container" initialize: (opts={})-> @repo = opts.repo window.current_repo = @repo @build = opts.build template: -> JST["repos/report_detail"]({repo: @repo.toJSON(), build: @build.toJSON()}) render: -> $(@el).html(@template()) window.log_view = new LogView(el: "#log") log_view.render() @displayRestartBuildBtn() $("#no-build-warning").addClass("hide") displayRestartBuildBtn: -> $("#restart-build-btn").removeClass("hide") #url = "/repos/#{@repo.get('name')}/builds/#{@build.id}/restart" #$("#restart-build-btn").find("a").attr("href", url ) restart: -> $("#restart-build-btn").find("i").addClass("fa-spin") @build.restart() false close: ()-> $(@el).html("") console.log "CLOSED VIEW CALLED" @.stopListening() @.undelegateEvents() @.unbind() #REPO BUILDS class Perkins.Views.RepoBuilds extends Backbone.View initialize: (opts={})-> @repo = opts.model window.current_repo = @repo @builds = new Perkins.Collections.BuildReports(repo: @repo) el: "#main-content" template: -> JST["repos/builds"]({repo: @repo.toJSON() , builds: @builds}) render: -> console.log("render repo builds") $(@el).html(@template()) @builds_view = new Perkins.Views.RepoBuildCollection(collection: @builds) @builds.fetch() close: ()-> $(@el).html("") console.log "CLOSED VIEW CALLED" @.stopListening() @.undelegateEvents() @.unbind() class Perkins.Views.RepoBuildItem extends Backbone.Marionette.ItemView tagName: "tr" template: (serialized_model) -> JST['repos/build_row'](serialized_model) class Perkins.Views.RepoBuildCollection extends Backbone.Marionette.CollectionView itemView: Perkins.Views.RepoBuildItem el: "#repo-builds" #REPO CONFIG class Perkins.Views.RepoConfig extends Backbone.View initialize: (opts={})-> @repo = opts.model window.current_repo = @repo @hook = new Perkins.Models.RepoHook(repo: @repo) @listenTo(@hook, "error", @defaultErrorHandler) el: "#main-content" template: -> JST["repos/config"]({repo: @model.toJSON(), hook: @hook.toJSON() }) render: -> console.log("render repo builds") @hook.fetch success: => $(@el).html(@template()) close: ()-> $(@el).html("") console.log "CLOSED VIEW CALLED" @.stopListening() @.undelegateEvents() @.unbind() defaultErrorHandler: (model, error)=> unless error.status < 500 error_view.render(status: error.status)