define [ "base" ], (App) -> App.directive "updateScrollBottomOn", ($timeout) -> return { restrict: "A" 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, () -> $timeout () -> element.scrollTop(element[0].scrollHeight - element[0].clientHeight - scrollBottom) , 0 }