UNPKG

neft

Version:

JavaScript. Everywhere.

106 lines (84 loc) 3.07 kB
'use strict' module.exports = (impl) -> DATA = contentItem: null scrollElem: null yScrollbar: false DATA: DATA createData: impl.utils.createDataCloner 'Item', DATA create: (data) -> self = @ impl.Types.Item.create.call @, data scrollElem = data.scrollElem = document.createElement 'div' scrollElem.style.overflow = 'hidden' scrollElem.style.width = '100%' scrollElem.style.height = '100%' data.elem.appendChild scrollElem @onParentChange -> scrollElem.scrollLeft = self._contentX scrollElem.scrollTop = self._contentY return setContentX = (val) -> max = self._impl.contentItem?._width - self._width or 0 if val > max val = max if val < 0 val = 0 oldVal = self.contentX if val isnt oldVal self._contentX = val self.onContentXChange.emit oldVal setContentY = (val) -> max = self._impl.contentItem?._height - self._height or 0 if val > max val = max if val < 0 val = 0 oldVal = self.contentY if val isnt oldVal self._contentY = val self.onContentYChange.emit oldVal syncScroll = -> setContentX @scrollLeft setContentY @scrollTop return # safari scroll event throttling fix scrollElem.addEventListener impl.utils.pointerWheelEventName, (e) -> if e.deltaX? setContentX @scrollLeft + e.deltaX setContentY @scrollTop + e.deltaY scrollElem.addEventListener 'scroll', syncScroll return setScrollableContentItem: do -> onHeightChange = -> data = @_impl contentItem = @_contentItem if contentItem._height <= @_height if data.yScrollbar data.scrollElem.style.overflowY = 'hidden' data.yScrollbar = false else if not data.yScrollbar data.scrollElem.style.overflowY = 'scroll' data.yScrollbar = true return (val) -> if oldVal = @_impl.contentItem if oldVal._impl.elem.parentElement is @_impl.scrollElem @_impl.scrollElem.removeChild oldVal._impl.elem oldVal.onHeightChange.disconnect onHeightChange, @ if val val.onHeightChange onHeightChange, @ @_impl.contentItem = val @_impl.scrollElem.appendChild val._impl.elem return setScrollableContentX: (val) -> @_impl.scrollElem.scrollLeft = val return setScrollableContentY: (val) -> @_impl.scrollElem.scrollTop = val return setScrollableSnap: (val) -> return setScrollableSnapItem: (val) -> return