travis-web/assets/scripts/app/utils/to-top.coffee
2015-02-02 10:31:15 +01:00

35 lines
1.1 KiB
CoffeeScript

class ToTop
# NOTE: I could have probably extract fixed positioning from
# Tailing, but then I would need to parametrize positionElement
# function to make it flexible to handle both cases. In that
# situation I prefer a bit less DRY code over simplicity of
# the calculations.
constructor: (@window, @element_selector, @container_selector) ->
@position = @window.scrollTop()
@window.scroll( Ember.run.throttle(this, @onScroll, [], 200, false) )
this
element: ->
$(@element_selector)
container: ->
$(@container_selector)
onScroll: ->
@positionElement()
positionElement: ->
element = @element()
container = @container()
return if element.length is 0
containerHeight = container.outerHeight()
windowHeight = @window.height()
offset = container.offset().top + containerHeight - (@window.scrollTop() + windowHeight)
max = containerHeight - windowHeight
offset = max if offset > max
if offset > 0
element.css(bottom: offset + 4)
else
element.css(bottom: 2)
Travis.ToTop = ToTop