diff options
author | BuildTools <Noah Loomans> | 2017-01-07 22:37:16 +0100 |
---|---|---|
committer | BuildTools <Noah Loomans> | 2017-01-07 22:37:16 +0100 |
commit | 549364fb691f7f092223e186033a8138c3ead2fd (patch) | |
tree | bec1b0bbc972a08ff69464853190044780eb667d /public/javascripts/weekSelector.js | |
parent | 4e8da42863406764a659a7337e774ad216d356c9 (diff) | |
parent | a5238353ab86923bb3911e0bf2886ebcb53dfbd2 (diff) |
Merge branch 'beta'
Diffstat (limited to 'public/javascripts/weekSelector.js')
-rw-r--r-- | public/javascripts/weekSelector.js | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/public/javascripts/weekSelector.js b/public/javascripts/weekSelector.js new file mode 100644 index 0000000..6dbf2c8 --- /dev/null +++ b/public/javascripts/weekSelector.js @@ -0,0 +1,95 @@ +const EventEmitter = require('events') + +const self = new EventEmitter() + +self._nodes = { + prevButton: document.querySelectorAll('#week-selector button')[0], + nextButton: document.querySelectorAll('#week-selector button')[1], + currentWeekText: document.querySelector('#week-selector .current') +} + +self._weekOffset = 0 + +// copied from http://www.meetingpointmco.nl/Roosters-AL/doc/dagroosters/untisscripts.js, +// were using the same code as they do to be sure that we always get the same +// week number. +self.getCurrentWeek = function (target) { + const dayNr = (target.getDay() + 6) % 7 + target.setDate(target.getDate() - dayNr + 3) + const firstThursday = target.valueOf() + target.setMonth(0, 1) + if (target.getDay() !== 4) { + target.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7) + } + + return 1 + Math.ceil((firstThursday - target) / 604800000) +} + +self.getSelectedWeek = function () { + const now = new Date() + const targetDate = new Date(now.getTime() + + self._weekOffset * 604800 * 1000 + 86400 * 1000) + return self.getCurrentWeek(targetDate) +} + +self.updateCurrentWeek = function () { + const selectedWeekNumber = self.getSelectedWeek() + if (self.getCurrentWeek(new Date()) !== selectedWeekNumber) { + self._nodes.currentWeekText.classList.add('changed') + } else { + self._nodes.currentWeekText.classList.remove('changed') + } + self.updateDom() + self.emit('weekChanged', selectedWeekNumber) +} + +self.updateDom = function () { + const selectedWeekNumber = self.getSelectedWeek() + const isSunday = new Date().getDay() === 0 + let humanReadableWeek = null + if (isSunday) { + switch (self._weekOffset) { + case 0: + humanReadableWeek = 'Aanstaande week' + break + case 1: + humanReadableWeek = 'Volgende week' + break + case -1: + humanReadableWeek = 'Afgelopen week' + break + } + } else { + switch (self._weekOffset) { + case 0: + humanReadableWeek = 'Huidige week' + break + case 1: + humanReadableWeek = 'Volgende week' + break + case -1: + humanReadableWeek = 'Vorige week' + break + } + } + if (humanReadableWeek != null) { + self._nodes.currentWeekText.textContent = humanReadableWeek + ' • ' + selectedWeekNumber + } else { + self._nodes.currentWeekText.textContent = 'Week ' + selectedWeekNumber + } +} + +self._handlePrevButtonClick = function () { + self._weekOffset -= 1 + self.updateCurrentWeek() +} + +self._handleNextButtonClick = function () { + self._weekOffset += 1 + self.updateCurrentWeek() +} + +self._nodes.prevButton.addEventListener('click', self._handlePrevButtonClick) +self._nodes.nextButton.addEventListener('click', self._handleNextButtonClick) + +module.exports = self |