blob: afee9798ba9c2d7b28a5cace9ffb0a3a33e4bb52 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
require('smoothscroll-polyfill').polyfill()
const self = {}
const schedule = require('./schedule')
self._nodes = {
search: document.querySelector('#search'),
weekSelector: document.querySelector('#week-selector')
}
self._timeoutID = null
self._getScrollPosition = function () {
return (document.documentElement && document.documentElement.scrollTop) ||
document.body.scrollTop
}
self._handleDoneScrolling = function () {
const scrollPosition = self._getScrollPosition()
const weekSelectorHeight =
self._nodes.weekSelector.clientHeight - self._nodes.search.clientHeight
if (scrollPosition < weekSelectorHeight && scrollPosition > 0) {
window.scroll({ top: weekSelectorHeight, left: 0, behavior: 'smooth' })
}
}
self._handleScroll = function () {
if (self._timeoutID != null) window.clearTimeout(self._timeoutID)
self._timeoutID = window.setTimeout(self._handleDoneScrolling, 500)
const scrollPosition = self._getScrollPosition()
const weekSelectorHeight =
self._nodes.weekSelector.clientHeight - self._nodes.search.clientHeight
if (scrollPosition >= weekSelectorHeight) {
document.body.classList.add('week-selector-not-visible')
} else {
document.body.classList.remove('week-selector-not-visible')
}
}
self._handleWindowResize = function () {
const weekSelectorHeight =
self._nodes.weekSelector.clientHeight - self._nodes.search.clientHeight
const extraPixelsNeeded =
weekSelectorHeight - (document.body.clientHeight - window.innerHeight)
if (extraPixelsNeeded > 0) {
document.body.style.marginBottom = extraPixelsNeeded + 'px'
} else {
document.body.style.marginBottom = null
}
}
self.startListening = function () {
window.addEventListener('scroll', self._handleScroll)
}
schedule.on('load', self._handleWindowResize)
window.addEventListener('resize', self._handleWindowResize)
module.exports = self
|