var userData = false var classData = {} var inactiveClassData = {} var navigation = document.getElementById('navigation') document.querySelector('body').classList.add('invisible') if (navigation) { var header = document.createElement('header') header.innerHTML = `
` navigation.replaceWith(header) } const paths = { '/': document.getElementById('index-page'), '/content': document.getElementById('content-page'), '/content/document': document.getElementById('content-page'), '/logs': document.getElementById('logs-page'), '/admin': document.getElementById('admin-link'), '/content/': document.getElementById('content-page'), '/content/document/': document.getElementById('content-page'), '/logs/': document.getElementById('logs-page'), '/admin/': document.getElementById('admin-link'), } const lightMode = { '--background': 'white', '--basic-font': 'black', '--invert': 'rgb(92, 90, 90)', '--background-standout': '#89cab6', '--background-block': 'rgb(30, 34, 32)', '--background-block-hover': 'rgb(37, 41, 39)', '--help-menu': 'var(--background-block)', '--scroll-bar-color': 'var(--background-standout)', } const darkMode = { '--background': 'rgb(17, 19, 18)', '--basic-font': 'var(--educationist-green)', '--invert': 'white', '--background-standout': 'rgb(37, 41, 39)', '--background-block': 'rgb(30, 34, 32)', '--background-block-hover': 'var(--background-standout)', '--help-menu': 'var(--invert)', '--scroll-bar-color': 'var(--background-standout)', } const underlineItem = paths[window.location.pathname] if (underlineItem) { underlineItem.classList.add('selected') } var firebaseConfig = { apiKey: 'AIzaSyDf83xltbEW7NoN1PezsCgmtTQesxknfbM', authDomain: 'educationist-42b45.firebaseapp.com', projectId: 'educationist-42b45', } firebase.initializeApp(firebaseConfig) var db = firebase.firestore() firebase.auth().onAuthStateChanged(async (user) => { if (user) { if ( localStorage.getItem('uid') === null || localStorage.getItem('uid') != user.uid ) { logout() } if ( window.location.pathname === '/login' || window.location.pathname === '/register' ) { const params = new URLSearchParams(window.location.search) if (params.has('path')) { window.location.replace(params.get('path')) return } window.location.replace('/') } var role = localStorage.getItem('role') if (role == undefined) { data = (await db.collection('users').doc(user.uid).get()).data() userData = data localStorage.setItem('role', data.role) localStorage.setItem('eid', data.eid) role = data.role } else if (localStorage.getItem('eid') == undefined) { data = (await db.collection('users').doc(user.uid).get()).data() userData = data localStorage.setItem('eid', data.eid) } if (role === 'student') { if (document.getElementById('tutor-menu')) document.getElementById('tutor-menu').remove() } else { if (document.getElementById('student-menu')) document.getElementById('student-menu').remove() } if (role != 'admin') { document.getElementById('admin-link').remove() } if ( (window.location.pathname === '/admin' || window.location.pathname === '/admin/') && role != 'admin' ) { logout() } if (localStorage.getItem('mode') === 'true') { document.getElementById('lightmode-btn').innerHTML = 'Dark Mode' } document.querySelector('body').classList.remove('invisible') classes() } else { document.querySelector('.dropdown').parentNode.remove() document.querySelector('.dropdown').parentNode.remove() document.querySelector('#logs-page').parentNode.remove() const r = document.querySelector(':root') r.style.setProperty('--navbar-width', '18rem') document.querySelector('body').classList.remove('invisible') if (window.location.pathname !== '/login') { if ( window.location.pathname === '/reset' || window.location.pathname === '/register' || window.location.pathname === '/create' || window.location.pathname === '/donate' || window.location.pathname === '/reset/' || window.location.pathname === '/register/' || window.location.pathname === '/create/' || window.location.pathname === '/donate/' ) { return } window.location.replace( '/login?path=' + window.location.pathname + window.location.search ) return } } }) function openMenu(value) { const state = document .querySelector('.navbar') .classList.contains('navbar-vertical') if (!state) { value.classList.add('change') document.querySelector('.navbar').classList.add('navbar-vertical') const title = document.querySelector('.title') if (title) { title.classList.add('invisible') } document.querySelector('.main-body').classList.add('invisible') } else { value.classList.remove('change') document.querySelector('.navbar').classList.remove('navbar-vertical') const title = document.querySelector('.title') if (title) { title.classList.remove('invisible') } document.querySelector('.main-body').classList.remove('invisible') } } function accountPage() { var user = firebase.auth().currentUser if (user) { logout() } } function logout() { localStorage.clear() document.cookie = 'admin=; path=/;' firebase.auth().signOut() if ( window.location.pathname === '/donate/' || window.location.pathname === '/donate' ) { window.location.reload() } } function dropdown(option) { if ( window.location.pathname == '/login' || window.location.pathname == '/reset' ) { return } if (option) { document.getElementById('myDropdown').classList.add('temp') document.getElementById('classesDropDown').classList.toggle('temp') } else { document.getElementById('classesDropDown').classList.add('temp') document.getElementById('myDropdown').classList.toggle('temp') } } window.onclick = function (event) { if (!event.target.matches('.navbarBtn')) { var dropdowns = document.getElementsByClassName('dropdown-content') var i for (i = 0; i < dropdowns.length; i++) { var openDropdown = dropdowns[i] if (!openDropdown.classList.contains('temp')) { openDropdown.classList.add('temp') } } } } function token(message) { if (!document.getElementById('toaster').classList.contains('invisible')) { setTimeout(() => { token(message) }, 100) return } document.getElementById('alert').innerHTML = message document.getElementById('toaster').classList.toggle('invisible') setTimeout(() => { document.getElementById('toaster').classList.toggle('invisible') }, 3000) } function lightmode() { const mode = localStorage.getItem('lightmode') if (mode === 'true') { document.getElementById('lightmode-btn').innerHTML = 'Light Mode' localStorage.setItem('lightmode', 'false') var settings = darkMode document .getElementById('logo-img') .setAttribute( 'src', 'https://cdn.educationisttutoring.org/images/light-logos/educationist.png' ) document .getElementById('theme') .setAttribute('content', 'rgb(17, 19, 18)') } else { localStorage.setItem('lightmode', 'true') document.getElementById('lightmode-btn').innerHTML = 'Dark Mode' document .getElementById('logo-img') .setAttribute( 'src', 'https://cdn.educationisttutoring.org/images/dark-logos/educationist.png' ) var settings = lightMode document.getElementById('theme').setAttribute('content', 'white') } var cssRoot = document.querySelector(':root') for (key of Object.keys(settings)) { cssRoot.style.setProperty(key, settings[key]) } } function lowerCase(string) { var newString = '' for (character of string) { newString += character.toLowerCase() } return newString } function help() { document.getElementById('help').classList.add('invisible') document.getElementById('help-menu-container').classList.remove('invisible') } function closeHelp() { document.getElementById('help').classList.remove('invisible') document.getElementById('help-menu-container').classList.add('invisible') } window.addEventListener('load', () => { const mode = localStorage.getItem('lightmode') if (mode === 'true') { document.getElementById('lightmode-btn').innerHTML = 'Dark Mode' var cssRoot = document.querySelector(':root') document.getElementById('theme').setAttribute('content', 'white') document .getElementById('logo-img') .setAttribute( 'src', 'https://cdn.educationisttutoring.org/images/dark-logos/educationist.png' ) for (key of Object.keys(lightMode)) { cssRoot.style.setProperty(key, lightMode[key]) } } }) async function classes() { const uid = localStorage.getItem('uid') if (!userData) { userData = (await db.collection('users').doc(uid).get()).data() } var xhr = new XMLHttpRequest() xhr.open('POST', '/classes', true) xhr.setRequestHeader('Content-Type', 'application/json') xhr.send( JSON.stringify({ uid: uid, name: userData.name, email: userData.email, student: userData.role === 'student' ? 'true' : 'false', }) ) xhr.onload = function () { const data = JSON.parse(this.response) if (data.length === 0) { document.querySelector('.class-merge').remove() document.getElementById('all-classes').remove() document.querySelector('#classesDropDown').innerHTML = 'You are not currently registered in any classes.' return } if (userData.role === 'student') { document.querySelector('.class-merge').remove() } var counter = 1 var inactiveClasses = [] document.querySelector('#temp-classes').remove() for (classItem of data) { if (classItem.data.inactive) { inactiveClasses.push(classItem) continue } var nickName = 'Class #' + counter if (classItem.data.nickName) { nickName = classItem.data.nickName } const option = document.createElement('option') option.value = classItem.id option.innerHTML = nickName document.getElementById('class1').appendChild(option) const option2 = document.createElement('option') option2.value = classItem.id option2.innerHTML = nickName document.getElementById('class2').appendChild(option2) classData[classItem.id] = classItem.data var newClass = document.createElement('a') newClass.id = 'class-link' newClass.href = '/class/' + classItem.id newClass.innerHTML = nickName document.getElementById('classes-list').appendChild(newClass) counter += 1 } counter = 1 for (classItem of inactiveClasses) { var nickName = 'Inactive Class #' + counter if (classItem.data.nickName) { nickName = classItem.data.nickName } inactiveClassData[classItem.id] = classItem.data var newClass = document.createElement('a') newClass.id = 'class-link' newClass.href = '/class/' + classItem.id newClass.innerHTML = nickName document.getElementById('classes-list').appendChild(newClass) counter += 1 } if ( window.location.pathname === '/classes' || window.location.pathname === '/classes/' ) { classesPage() } } } function mergeClasses() { const e = document.querySelector('.class-merge') if (e.innerHTML != 'Close Menu') { if (window.innerWidth <= 1200) { document .querySelector('.hamburger-container') .classList.remove('change') document .querySelector('.navbar') .classList.remove('navbar-vertical') } document.querySelector('.merge-container').style.display = 'flex' e.innerHTML = 'Close Menu' document.querySelector('.main-body').classList.add('temp') } else { if (window.innerWidth <= 1200) { document .querySelector('.hamburger-container') .classList.add('change') document.querySelector('.navbar').classList.add('navbar-vertical') } document.querySelector('.merge-container').style.display = 'none' e.innerHTML = 'Merge Classes' document.querySelector('.main-body').classList.remove('temp') } } async function classesMerge() { document.getElementById('merge-btn').disabled = true const class1 = document.getElementById('class1').value const class2 = document.getElementById('class2').value if (class1 === '' || class2 === '') { document.getElementById('merge-btn').disabled = false token('You must choose two classes to combine.') return } if ( classData[class1].tutor != localStorage.getItem('uid') || classData[class2].tutor != localStorage.getItem('uid') ) { token('You must be a tutor in both classes to merge the classes!') document.getElementById('merge-btn').disabled = false return } if (class1 === class2) { token('The classes must be different.') document.getElementById('merge-btn').disabled = false return } if (!document.getElementById('merge-btn').classList.contains('selected')) { token( 'If you want to merge these two classes please click the merge button again.' ) document.getElementById('merge-btn').classList.add('selected') document.getElementById('merge-btn').disabled = false return } const students = classData[class2].students var linkedClasses = classData[class2].linkedClasses if (linkedClasses === undefined) { linkedClasses = [] } linkedClasses.push(class2) var newStudents = [] for (student of students) { const newStudent = { student: student.student, studentName: student.studentName, studentEmail: student.studentEmail, } newStudents.push(newStudent) } await db .collection('matches') .doc(class1) .update({ students: firebase.firestore.FieldValue.arrayUnion(...newStudents), linkedClasses: firebase.firestore.FieldValue.arrayUnion( ...linkedClasses ), }) await db.collection('matches').doc(class2).delete() token('These two classes have been merged') } window.onresize = function () { if (window.innerWidth > 1200) { document .querySelector('.hamburger-container') .classList.remove('change') document.querySelector('.navbar').classList.remove('navbar-vertical') const title = document.querySelector('.title') if (title) { title.classList.remove('invisible') } document.querySelector('.main-body').classList.remove('invisible') } }