aboutsummaryrefslogtreecommitdiff
path: root/public/javascripts/weekSelector.js
diff options
context:
space:
mode:
Diffstat (limited to 'public/javascripts/weekSelector.js')
-rw-r--r--public/javascripts/weekSelector.js95
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