kdf
Version:
146 lines (91 loc) • 3.48 kB
text/coffeescript
KDCustomHTMLView = require './../../core/customhtmlview'
KDScrollView = require './scrollview'
KDScrollThumb = require './scrollthumb'
KDScrollTrack = require './scrolltrack'
module.exports = class KDCustomScrollViewWrapper extends KDScrollView
SPACEBAR = 32
PAGEUP = 33
PAGEDOWN = 34
END = 35
HOME = 36
constructor: (options = {}, data) ->
options.bind = KD.utils.curry 'keydown', options.bind
options.attributes ?= {}
options.attributes.tabindex ?= "0"
= no
super options, data
'MutationHappened', "toggleGlobalKeydownEventOnSizeCheck"
scroll: (event) ->
if .beingDragged or .beingDragged
return KD.utils.stopDOMEvent event
mouseWheel: (event) ->
super
{deltaX, deltaY, deltaFactor} = event
speed = deltaFactor or .mouseWheelSpeed or 1
x = -deltaX
y = -deltaY
resX = if x isnt 0 and > .getTrackSize()
then {speed, velocity : x}
else no
resY = if y isnt 0 and > .getTrackSize()
then {speed, velocity : y}
else no
stop = if Math.abs(x) > Math.abs(y) then resX else resY
KD.utils.stopDOMEvent event unless stop
return !stop
_scrollVertically: do ->
lastPosition = 0
({speed, velocity})->
stepInPixels = velocity * speed
actPosition =
newPosition = actPosition + stepInPixels
shouldStop = if velocity > 0
then lastPosition > newPosition
else lastPosition < newPosition
lastPosition = newPosition
return shouldStop
_scrollHorizontally: do ->
lastPosition = 0
({speed, velocity})->
stepInPixels = velocity * speed
actPosition =
newPosition = actPosition - stepInPixels
shouldStop = if velocity > 0
then lastPosition < newPosition
else lastPosition > newPosition
lastPosition = newPosition
return shouldStop
toggleGlobalKeydownEventOnSizeCheck: ->
winHeight = $(window).height()
needToBind = >= winHeight
needToBind
toggleGlobalKeydownEvent: (needToBind) ->
eventName = "keydown.customscroll#{@getId()}"
if needToBind
$(document).on eventName, "keyDown" unless
else
$(document).off eventName if
= needToBind
destroy: ->
no
super
pageUp: ->
top : Math.max - , 0
pageDown: ->
top : +
keyDown: (event) ->
editables = "input,textarea,select,datalist,keygen,[contenteditable='true']"
return yes if ($ document.activeElement).is editables
return yes if not( .is ":visible")
return yes if <= .getTrackSize()
shouldPropagate = no
if event.which is SPACEBAR and event.shiftKey
else
switch event.which
when PAGEUP then
when SPACEBAR, PAGEDOWN then
when END then
when HOME then top : 0
else shouldPropagate = yes
return shouldPropagate