2014-07-08 05:08:38 -04:00
|
|
|
define [
|
|
|
|
"base"
|
|
|
|
], (App) ->
|
2014-07-16 05:52:06 -04:00
|
|
|
App.directive "updateScrollBottomOn", ($timeout) ->
|
2014-07-08 05:08:38 -04:00
|
|
|
return {
|
2014-07-08 06:56:44 -04:00
|
|
|
restrict: "A"
|
2014-07-15 13:25:12 -04:00
|
|
|
link: (scope, element, attrs, ctrls) ->
|
|
|
|
# We keep the offset from the bottom fixed whenever the event fires
|
|
|
|
#
|
|
|
|
# ^ | ^
|
|
|
|
# | | | scrollTop
|
|
|
|
# | | v
|
|
|
|
# | |-----------
|
|
|
|
# | | ^
|
|
|
|
# | | |
|
|
|
|
# | | | clientHeight (viewable area)
|
|
|
|
# | | |
|
|
|
|
# | | |
|
|
|
|
# | | v
|
|
|
|
# | |-----------
|
|
|
|
# | | ^
|
|
|
|
# | | | scrollBottom
|
|
|
|
# v | v
|
|
|
|
# \
|
|
|
|
# scrollHeight
|
|
|
|
|
|
|
|
scrollBottom = 0
|
|
|
|
element.on "scroll", (e) ->
|
|
|
|
scrollBottom = element[0].scrollHeight - element[0].scrollTop - element[0].clientHeight
|
|
|
|
|
|
|
|
scope.$on attrs.updateScrollBottomOn, () ->
|
2014-07-16 05:52:06 -04:00
|
|
|
$timeout () ->
|
2014-07-15 13:25:12 -04:00
|
|
|
element.scrollTop(element[0].scrollHeight - element[0].clientHeight - scrollBottom)
|
|
|
|
, 0
|
2014-07-08 05:08:38 -04:00
|
|
|
}
|
2014-07-15 13:25:12 -04:00
|
|
|
|