Sha256: 9b62c48422234b1a498423b871fecead3b35f0da9bd266ff5e8632a26ee39f47

Contents?: true

Size: 1.25 KB

Versions: 37

Compression:

Stored size: 1.25 KB

Contents

class @TTY
  FORMATTERS = []
  STICKY_SCROLL_TOLERENCE = 200

  @appendFormatter: (formatter) ->
    FORMATTERS.push(formatter)

  @prependFormatter: (formatter) ->
    FORMATTERS.unshift(formatter)

  constructor: ($body) ->
    @$code = $body.find('code')
    @scrolling = new Scrolling(@$code)

  popInitialOutput: ->
    output = @$code.text()
    @$code.empty()
    output

  formatChunks: (chunk) ->
    for formatter in FORMATTERS
      chunk = formatter(chunk) || chunk
    chunk

  appendChunk: (chunk) =>
    @scrolling.preserve =>
      @$code.append(@formatChunks(chunk.raw))

class Scrolling
  TOLERENCE = 200

  constructor: (@$code) ->
    @$window = $(window)
    @initialScroll = true

  preserve: (callback) ->
    wasScrolledToBottom = @isScrolledToBottom()
    callback()
    if wasScrolledToBottom
      @$window.scrollTop(@codeBottomPosition() - @$window.height() + 50)

  isScrolledToBottom: ->
    if @initialScroll
      @initialScroll = (window.pageYOffset == 0)
      true
    else
      codeBottom = @codeBottomPosition()
      codeBottom + TOLERENCE > @viewportBottomPosition() >= codeBottom - TOLERENCE

  viewportBottomPosition: ->
    window.pageYOffset + @$window.height()

  codeBottomPosition: ->
    @$code.position().top + @$code.height()

Version data entries

37 entries across 37 versions & 1 rubygems

Version Path
shipit-engine-0.8.9 app/assets/javascripts/task/tty.js.coffee
shipit-engine-0.8.8 app/assets/javascripts/task/tty.js.coffee
shipit-engine-0.8.7 app/assets/javascripts/task/tty.js.coffee
shipit-engine-0.8.6 app/assets/javascripts/task/tty.js.coffee
shipit-engine-0.8.5 app/assets/javascripts/task/tty.js.coffee
shipit-engine-0.8.4 app/assets/javascripts/task/tty.js.coffee
shipit-engine-0.8.3 app/assets/javascripts/task/tty.js.coffee
shipit-engine-0.8.2 app/assets/javascripts/task/tty.js.coffee
shipit-engine-0.8.1 app/assets/javascripts/task/tty.js.coffee
shipit-engine-0.8.0 app/assets/javascripts/task/tty.js.coffee
shipit-engine-0.7.0 app/assets/javascripts/task/tty.js.coffee
shipit-engine-0.6.4 app/assets/javascripts/task/tty.js.coffee
shipit-engine-0.6.3 app/assets/javascripts/task/tty.js.coffee
shipit-engine-0.6.2 app/assets/javascripts/task/tty.js.coffee
shipit-engine-0.6.1 app/assets/javascripts/task/tty.js.coffee
shipit-engine-0.6.0 app/assets/javascripts/task/tty.js.coffee
shipit-engine-0.5.2 app/assets/javascripts/task/tty.js.coffee
shipit-engine-0.5.1 app/assets/javascripts/task/tty.js.coffee
shipit-engine-0.5.0 app/assets/javascripts/task/tty.js.coffee
shipit-engine-0.4.10 app/assets/javascripts/task/tty.js.coffee