From c6aee6e370fe88909d462a2e10e45b72d20196f7 Mon Sep 17 00:00:00 2001 From: BuildTools Date: Wed, 7 Dec 2016 22:56:09 +0100 Subject: starting refactor --- public/javascripts/main.js | 245 +-------------------------------------------- 1 file changed, 3 insertions(+), 242 deletions(-) (limited to 'public/javascripts/main.js') diff --git a/public/javascripts/main.js b/public/javascripts/main.js index 895dd3f..549427e 100644 --- a/public/javascripts/main.js +++ b/public/javascripts/main.js @@ -1,244 +1,5 @@ -/* global ga FLAGS USERS */ +const frontpage = require('./frontpage') -require('flexibility') +frontpage.show() -const fuzzy = require('fuzzy') -// const getUsers = require('./getUsers') -const getURLOfUser = require('./getURLOfUser') -const removeDiacritics = require('diacritics').remove -const getWeek = require('./getWeek') -const easterEggs = require('./easterEggs') - -const searchNode = document.querySelector('#search') -const inputNode = searchNode.querySelector('input[type="search"]') -const autocompleteNode = document.querySelector('.autocomplete') -const scheduleIframe = document.querySelector('#schedule') -const prevButton = document.querySelectorAll('#week-selector button')[0] -const nextButton = document.querySelectorAll('#week-selector button')[1] -const currentWeekNode = document.querySelector('.current') -const favNode = document.querySelector('.fav') - -if (FLAGS.indexOf('NO_FEATURE_DETECT') === -1) { - if (document.querySelector('#schedule').getClientRects()[0].bottom !== - document.body.getClientRects()[0].bottom) { - window.location = 'http://www.meetingpointmco.nl/Roosters-AL/doc/' - } else { - window.onerror = function () { - window.location = 'http://www.meetingpointmco.nl/Roosters-AL/doc/' - } - } -} else { - console.log('feature detection is OFF') -} - -let selectedResult = -1 -let selectedUser -let results = [] -let offset = 0 - -function getCurrentFav () { - if (!window.localStorage.getItem('fav')) return - const favCode = window.localStorage.getItem('fav').split(':') - const fav = USERS.filter(user => user.type === favCode[0] && user.index === Number(favCode[1])) - return fav[0] -} - -function changeFav (isFav) { - if (!selectedUser) return - if (isFav) { - window.localStorage.setItem('fav', selectedUser.type + ':' + selectedUser.index) - } else { - window.localStorage.removeItem('fav') - } - updateFavNode() -} - -function usersEqual (user1, user2) { - if (user1 == null || user2 == null) return false - return user1.type === user2.type && user1.index === user2.index -} - -function updateFavNode () { - if (usersEqual(getCurrentFav(), selectedUser)) { - favNode.innerHTML = '' - } else { - favNode.innerHTML = '' - } -} - -function updateWeekText () { - if (offset === 0) currentWeekNode.innerHTML = `Week ${getWeek() + offset}` - else currentWeekNode.innerHTML = `Week ${getWeek() + offset}` -} - -updateWeekText() - -searchNode.addEventListener('keydown', function (e) { - if ((results.length !== 0) && (e.key === 'ArrowDown' || e.key === 'ArrowUp')) { - e.preventDefault() - - if (document.querySelector('.selected')) document.querySelector('.selected').classList.remove('selected') - - const change = e.key === 'ArrowDown' ? 1 : -1 - selectedResult += change - if (selectedResult < -1) selectedResult = results.length - 1 - else if (selectedResult > results.length - 1) selectedResult = -1 - - if (selectedResult !== -1) autocompleteNode.children[selectedResult].classList.add('selected') - } -}) - -let inputEventStr -if (navigator.userAgent.indexOf('MSIE') !== -1 || - navigator.appVersion.indexOf('Trident/') > 0) { - inputEventStr = 'textinput' // IE 6-11 -} else { - inputEventStr = 'input' // normal browsers -} - -searchNode.addEventListener(inputEventStr, function (e) { - document.body.classList.remove('no-input') - autocompleteNode.innerHTML = '' - if (inputNode.value.trim() === '') return - - selectedResult = -1 - results = fuzzy.filter(removeDiacritics(inputNode.value), USERS, { - extract: function (el) { return removeDiacritics(el.value) } - }).slice(0, 7) - - results.forEach(function (result) { - const resultNode = document.createElement('li') - resultNode.innerHTML = `${result.original.value}` - autocompleteNode.appendChild(resultNode) - }) -}) - -searchNode.addEventListener('submit', submitForm) - -function submitForm (e) { - if (e) e.preventDefault() - if (results.length !== 0) { - const indexInResult = selectedResult === -1 ? 0 : selectedResult - selectedUser = USERS[results[indexInResult].index] - } - if (selectedUser == null) return - - document.body.classList.add('searched') - - updateFavNode() - - inputNode.value = selectedUser.value - autocompleteNode.innerHTML = '' - - inputNode.blur() - - scheduleIframe.src = getURLOfUser(offset, selectedUser.type, selectedUser.index + 1) - - let eventAction - switch (selectedUser.type) { - case 'c': - eventAction = 'Class' - break - case 't': - eventAction = 'Teacher' - break - case 'r': - eventAction = 'Room' - break - case 's': - eventAction = 'Student' - break - } - const eventLabel = selectedUser.value - - ga(function () { - ga('send', { hitType: 'event', eventCategory: 'search', eventAction, eventLabel }) - }) -} - -autocompleteNode.addEventListener('click', function (e) { - if (autocompleteNode.contains(e.target)) { - selectedResult = Array.prototype.indexOf.call(e.target.parentElement.childNodes, e.target) - submitForm() - } -}) - -prevButton.addEventListener('click', function () { - offset-- - updateWeekText() - submitForm() -}) - -nextButton.addEventListener('click', function () { - offset++ - updateWeekText() - submitForm() -}) - -inputNode.addEventListener('click', function () { - inputNode.select() -}) - -window.addEventListener('blur', function () { - // this will removed the selection without drawing focus on it (safari) - // this will removed selection even when focusing an iframe (chrome) - const oldValue = inputNode.value - inputNode.value = '' - inputNode.value = oldValue - - // this will hide the keyboard (iOS safari) - document.activeElement.blur() -}) - -searchNode.addEventListener('blur', function (e) { - autocompleteNode.innerHTML = '' -}) - -favNode.addEventListener('click', function () { - if (usersEqual(getCurrentFav(), selectedUser)) { - changeFav(false) - } else { - changeFav(true) - } -}) - -const currentFav = getCurrentFav() - -if (currentFav) { - selectedUser = currentFav - inputNode.value = selectedUser.value - scheduleIframe.src = getURLOfUser(offset, selectedUser.type, selectedUser.index + 1) - updateFavNode() - - let eventAction - switch (selectedUser.type) { - case 'c': - eventAction = 'Class' - break - case 't': - eventAction = 'Teacher' - break - case 'r': - eventAction = 'Room' - break - case 's': - eventAction = 'Student' - break - } - const eventLabel = selectedUser.value - - ga(function () { - ga('send', { hitType: 'event', eventCategory: 'search fav', eventAction, eventLabel }) - }) -} else if (inputNode.value === '') { - document.body.classList.add('no-input') - inputNode.focus() -} - -if (scheduleIframe.src !== '') { - document.body.classList.add('searched') -} - -document.body.style.opacity = '1' - -window.easterEggs = easterEggs +document.body.style.opacity = 1 -- cgit v1.1 From 3a9bdee97f9d05cbdb10f7530d4e94cf28d99602 Mon Sep 17 00:00:00 2001 From: Noah Loomans Date: Thu, 8 Dec 2016 21:23:19 +0100 Subject: did some more work --- public/javascripts/main.js | 1 + 1 file changed, 1 insertion(+) (limited to 'public/javascripts/main.js') diff --git a/public/javascripts/main.js b/public/javascripts/main.js index 549427e..d242ce2 100644 --- a/public/javascripts/main.js +++ b/public/javascripts/main.js @@ -1,4 +1,5 @@ const frontpage = require('./frontpage') +require('./search') frontpage.show() -- cgit v1.1 From 907e8c138ae890208b03b23a420b32290fc2ef88 Mon Sep 17 00:00:00 2001 From: Noah Loomans Date: Fri, 9 Dec 2016 15:33:05 +0100 Subject: switch to search fireing search event instaid of calling schedule.viewItem himself --- public/javascripts/main.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'public/javascripts/main.js') diff --git a/public/javascripts/main.js b/public/javascripts/main.js index d242ce2..29f1d3e 100644 --- a/public/javascripts/main.js +++ b/public/javascripts/main.js @@ -1,6 +1,11 @@ const frontpage = require('./frontpage') -require('./search') +const search = require('./search') +const schedule = require('./schedule') frontpage.show() +search.events.on('search', function (selectedItem) { + schedule.viewItem(0, selectedItem) +}) + document.body.style.opacity = 1 -- cgit v1.1 From cc60c30509e5b084f2b0c01ba22a6e43a446887f Mon Sep 17 00:00:00 2001 From: Noah Loomans Date: Fri, 9 Dec 2016 23:02:52 +0100 Subject: add week selector --- public/javascripts/main.js | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'public/javascripts/main.js') diff --git a/public/javascripts/main.js b/public/javascripts/main.js index 29f1d3e..bd28475 100644 --- a/public/javascripts/main.js +++ b/public/javascripts/main.js @@ -1,11 +1,22 @@ const frontpage = require('./frontpage') const search = require('./search') const schedule = require('./schedule') +const weekSelector = require('./weekSelector') + +const state = {} frontpage.show() +weekSelector.updateCurrentWeek() search.events.on('search', function (selectedItem) { - schedule.viewItem(0, selectedItem) + state.selectedItem = selectedItem + schedule.viewItem(weekSelector.getSelectedWeek(), state.selectedItem) +}) + +weekSelector.events.on('weekChanged', function (newWeek) { + schedule.viewItem(newWeek, state.selectedItem) }) +window.weekSelector = weekSelector + document.body.style.opacity = 1 -- cgit v1.1 From 670976458b5375d27dc525f66b8faa3dc78e799b Mon Sep 17 00:00:00 2001 From: Noah Loomans Date: Wed, 14 Dec 2016 11:07:04 +0100 Subject: extend EventEmitter instaid of property --- public/javascripts/main.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'public/javascripts/main.js') diff --git a/public/javascripts/main.js b/public/javascripts/main.js index bd28475..6e0796c 100644 --- a/public/javascripts/main.js +++ b/public/javascripts/main.js @@ -8,12 +8,12 @@ const state = {} frontpage.show() weekSelector.updateCurrentWeek() -search.events.on('search', function (selectedItem) { +search.on('search', function (selectedItem) { state.selectedItem = selectedItem schedule.viewItem(weekSelector.getSelectedWeek(), state.selectedItem) }) -weekSelector.events.on('weekChanged', function (newWeek) { +weekSelector.on('weekChanged', function (newWeek) { schedule.viewItem(newWeek, state.selectedItem) }) -- cgit v1.1 From e3f1a6a2c3534c3133f412f1b86f7398f3b4f40c Mon Sep 17 00:00:00 2001 From: Noah Loomans Date: Wed, 14 Dec 2016 12:19:59 +0100 Subject: add favorite --- public/javascripts/main.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'public/javascripts/main.js') diff --git a/public/javascripts/main.js b/public/javascripts/main.js index 6e0796c..9214d05 100644 --- a/public/javascripts/main.js +++ b/public/javascripts/main.js @@ -2,14 +2,25 @@ const frontpage = require('./frontpage') const search = require('./search') const schedule = require('./schedule') const weekSelector = require('./weekSelector') +const favorite = require('./favorite') const state = {} +window.state = state +window.require = require + frontpage.show() weekSelector.updateCurrentWeek() +if (favorite.get() != null) { + state.selectedItem = favorite.get() + favorite.update(state.selectedItem) + schedule.viewItem(weekSelector.getSelectedWeek(), state.selectedItem) +} + search.on('search', function (selectedItem) { state.selectedItem = selectedItem + favorite.update(state.selectedItem) schedule.viewItem(weekSelector.getSelectedWeek(), state.selectedItem) }) @@ -17,6 +28,10 @@ weekSelector.on('weekChanged', function (newWeek) { schedule.viewItem(newWeek, state.selectedItem) }) +favorite.on('click', function () { + favorite.toggle(state.selectedItem) +}) + window.weekSelector = weekSelector document.body.style.opacity = 1 -- cgit v1.1 From 4d1c0fe2b6bbb180bf86c1195e1c80a4769d61e6 Mon Sep 17 00:00:00 2001 From: Noah Loomans Date: Wed, 14 Dec 2016 12:40:20 +0100 Subject: auto focus input on page load --- public/javascripts/main.js | 2 ++ 1 file changed, 2 insertions(+) (limited to 'public/javascripts/main.js') diff --git a/public/javascripts/main.js b/public/javascripts/main.js index 9214d05..de29a5d 100644 --- a/public/javascripts/main.js +++ b/public/javascripts/main.js @@ -16,6 +16,8 @@ if (favorite.get() != null) { state.selectedItem = favorite.get() favorite.update(state.selectedItem) schedule.viewItem(weekSelector.getSelectedWeek(), state.selectedItem) +} else { + search.focus() } search.on('search', function (selectedItem) { -- cgit v1.1 From 31be7d12b8c9b1a2ad163e65808a28656adfbb45 Mon Sep 17 00:00:00 2001 From: Noah Loomans Date: Fri, 16 Dec 2016 13:57:57 +0100 Subject: add ability to scroll week selector away --- public/javascripts/main.js | 2 ++ 1 file changed, 2 insertions(+) (limited to 'public/javascripts/main.js') diff --git a/public/javascripts/main.js b/public/javascripts/main.js index b6d4f09..7d2c8bb 100644 --- a/public/javascripts/main.js +++ b/public/javascripts/main.js @@ -3,6 +3,7 @@ const search = require('./search') const schedule = require('./schedule') const weekSelector = require('./weekSelector') const favorite = require('./favorite') +const scrollSnap = require('./scrollSnap') const state = {} @@ -11,6 +12,7 @@ window.require = require frontpage.show() weekSelector.updateCurrentWeek() +scrollSnap.startListening() if (favorite.get() != null) { state.selectedItem = favorite.get() -- cgit v1.1 From f299cd610652535dede504a2ce17191de19ae281 Mon Sep 17 00:00:00 2001 From: Noah Loomans Date: Wed, 21 Dec 2016 12:47:43 +0100 Subject: add analytics --- public/javascripts/main.js | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'public/javascripts/main.js') diff --git a/public/javascripts/main.js b/public/javascripts/main.js index 7d2c8bb..5ebeb7b 100644 --- a/public/javascripts/main.js +++ b/public/javascripts/main.js @@ -4,6 +4,7 @@ const schedule = require('./schedule') const weekSelector = require('./weekSelector') const favorite = require('./favorite') const scrollSnap = require('./scrollSnap') +const analytics = require('./analytics') const state = {} @@ -17,6 +18,7 @@ scrollSnap.startListening() if (favorite.get() != null) { state.selectedItem = favorite.get() favorite.update(state.selectedItem) + analytics.send.search(state.selectedItem, true) schedule.viewItem(weekSelector.getSelectedWeek(), state.selectedItem) } else { search.focus() @@ -25,10 +27,12 @@ if (favorite.get() != null) { search.on('search', function (selectedItem) { state.selectedItem = selectedItem favorite.update(state.selectedItem) + analytics.send.search(state.selectedItem) schedule.viewItem(weekSelector.getSelectedWeek(), state.selectedItem) }) weekSelector.on('weekChanged', function (newWeek) { + analytics.send.search(state.selectedItem) schedule.viewItem(newWeek, state.selectedItem) }) -- cgit v1.1 From b64a31f1a31469e411945ce4f500fc11797c3406 Mon Sep 17 00:00:00 2001 From: Noah Loomans Date: Thu, 22 Dec 2016 12:58:46 +0100 Subject: add feature detect --- public/javascripts/main.js | 2 ++ 1 file changed, 2 insertions(+) (limited to 'public/javascripts/main.js') diff --git a/public/javascripts/main.js b/public/javascripts/main.js index 5ebeb7b..6f99621 100644 --- a/public/javascripts/main.js +++ b/public/javascripts/main.js @@ -1,3 +1,5 @@ +require('./featureDetect').check() + const frontpage = require('./frontpage') const search = require('./search') const schedule = require('./schedule') -- cgit v1.1