2014-07-08 05:08:38 -04:00
|
|
|
define [
|
|
|
|
"base"
|
|
|
|
], (App) ->
|
2014-07-08 06:56:44 -04:00
|
|
|
fakeNgModel = (initValue) ->
|
|
|
|
$setViewValue: (value) ->
|
|
|
|
@$viewValue = value
|
|
|
|
return
|
|
|
|
$viewValue: initValue
|
2014-07-15 13:25:12 -04:00
|
|
|
|
|
|
|
App.directive "updateScrollBottomOn", ->
|
|
|
|
# return {
|
|
|
|
# priority: 1
|
|
|
|
# require: ["?ngModel"]
|
|
|
|
# restrict: "A"
|
|
|
|
# link: (scope, $el, attrs, ctrls) ->
|
|
|
|
# scrollToBottom = ->
|
|
|
|
# el.scrollTop = el.scrollHeight
|
|
|
|
# return
|
|
|
|
#
|
|
|
|
# shouldActivateAutoScroll = ->
|
|
|
|
# # + 1 catches off by one errors in chrome
|
|
|
|
# el.scrollTop + el.clientHeight + 1 >= el.scrollHeight
|
|
|
|
#
|
|
|
|
#
|
|
|
|
# el = $el[0]
|
|
|
|
# ngModel = ctrls[0] or fakeNgModel(true)
|
|
|
|
#
|
|
|
|
# scope.$watch ->
|
|
|
|
# console.log "SCOPE CHANGED", ngModel.$viewValue
|
|
|
|
# if ngModel.$viewValue
|
|
|
|
# scrollToBottom()
|
|
|
|
#
|
|
|
|
# $el.bind "scroll", ->
|
|
|
|
# activate = shouldActivateAutoScroll()
|
|
|
|
# scope.$apply ngModel.$setViewValue.bind(ngModel, activate) if activate isnt ngModel.$viewValue
|
|
|
|
#
|
|
|
|
# return
|
|
|
|
# }
|
2014-07-08 06:56:44 -04:00
|
|
|
|
2014-07-15 13:25:12 -04:00
|
|
|
|
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
|
|
|
|
console.log "SCROLL BOTTOM CHANGED", scrollBottom
|
|
|
|
|
|
|
|
scope.$on attrs.updateScrollBottomOn, () ->
|
|
|
|
setTimeout () ->
|
|
|
|
console.log "RESTORING SCROLL BOTTOM", scrollBottom
|
|
|
|
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
|
|
|
|