114 lines
3.2 KiB
CoffeeScript
114 lines
3.2 KiB
CoffeeScript
class @Build
|
|
@interval: null
|
|
@state: null
|
|
|
|
constructor: (@page_url, @build_url, @build_status, @state) ->
|
|
clearInterval(Build.interval)
|
|
|
|
# Init breakpoint checker
|
|
@bp = Breakpoints.get()
|
|
@hideSidebar()
|
|
$('.js-build-sidebar').niceScroll()
|
|
$(document)
|
|
.off 'click', '.js-sidebar-build-toggle'
|
|
.on 'click', '.js-sidebar-build-toggle', @toggleSidebar
|
|
|
|
$(window)
|
|
.off 'resize.build'
|
|
.on 'resize.build', @hideSidebar
|
|
|
|
@updateArtifactRemoveDate()
|
|
|
|
if $('#build-trace').length
|
|
@getInitialBuildTrace()
|
|
@initScrollButtonAffix()
|
|
|
|
if @build_status is "running" or @build_status is "pending"
|
|
#
|
|
# Bind autoscroll button to follow build output
|
|
#
|
|
$('#autoscroll-button').on 'click', ->
|
|
state = $(this).data("state")
|
|
if "enabled" is state
|
|
$(this).data "state", "disabled"
|
|
$(this).text "enable autoscroll"
|
|
else
|
|
$(this).data "state", "enabled"
|
|
$(this).text "disable autoscroll"
|
|
|
|
#
|
|
# Check for new build output if user still watching build page
|
|
# Only valid for runnig build when output changes during time
|
|
#
|
|
Build.interval = setInterval =>
|
|
if window.location.href.split("#").first() is @page_url
|
|
@getBuildTrace()
|
|
, 4000
|
|
|
|
getInitialBuildTrace: ->
|
|
$.ajax
|
|
url: @build_url
|
|
dataType: 'json'
|
|
success: (build_data) ->
|
|
$('.js-build-output').html build_data.trace_html
|
|
|
|
if build_data.status is 'success' or build_data.status is 'failed'
|
|
$('.js-build-refresh').remove()
|
|
|
|
getBuildTrace: ->
|
|
$.ajax
|
|
url: "#{@page_url}/trace.json?state=#{encodeURIComponent(@state)}"
|
|
dataType: "json"
|
|
success: (log) =>
|
|
if log.state
|
|
@state = log.state
|
|
|
|
if log.status is "running"
|
|
if log.append
|
|
$('.js-build-output').append log.html
|
|
else
|
|
$('.js-build-output').html log.html
|
|
@checkAutoscroll()
|
|
else if log.status isnt @build_status
|
|
Turbolinks.visit @page_url
|
|
|
|
checkAutoscroll: ->
|
|
$("html,body").scrollTop $("#build-trace").height() if "enabled" is $("#autoscroll-button").data("state")
|
|
|
|
initScrollButtonAffix: ->
|
|
$buildScroll = $('#js-build-scroll')
|
|
$body = $('body')
|
|
$buildTrace = $('#build-trace')
|
|
|
|
$buildScroll.affix(
|
|
offset:
|
|
bottom: ->
|
|
$body.outerHeight() - ($buildTrace.outerHeight() + $buildTrace.offset().top)
|
|
)
|
|
|
|
shouldHideSidebar: ->
|
|
bootstrapBreakpoint = @bp.getBreakpointSize()
|
|
|
|
bootstrapBreakpoint is 'xs' or bootstrapBreakpoint is 'sm'
|
|
|
|
toggleSidebar: =>
|
|
if @shouldHideSidebar()
|
|
$('.js-build-sidebar')
|
|
.toggleClass 'right-sidebar-expanded right-sidebar-collapsed'
|
|
|
|
hideSidebar: =>
|
|
if @shouldHideSidebar()
|
|
$('.js-build-sidebar')
|
|
.removeClass 'right-sidebar-expanded'
|
|
.addClass 'right-sidebar-collapsed'
|
|
else
|
|
$('.js-build-sidebar')
|
|
.removeClass 'right-sidebar-collapsed'
|
|
.addClass 'right-sidebar-expanded'
|
|
|
|
updateArtifactRemoveDate: ->
|
|
$date = $('.js-artifacts-remove')
|
|
|
|
if $date.length
|
|
date = $date.text()
|
|
$date.text $.timefor(new Date(date), ' ')
|