From a62819260d9c0d9bc0292f19be896c2c9b5ab422 Mon Sep 17 00:00:00 2001 From: rstular Date: Wed, 29 Jan 2020 12:49:35 +0100 Subject: Initial commit --- js/teachers.js | 179 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 179 insertions(+) create mode 100644 js/teachers.js (limited to 'js/teachers.js') diff --git a/js/teachers.js b/js/teachers.js new file mode 100644 index 0000000..39232b5 --- /dev/null +++ b/js/teachers.js @@ -0,0 +1,179 @@ +const API_ENDPOINT = "https://gimb.tk/test.php"; +// const API_ENDPOINT = "http://localhost:5000/test.php"; + +var teachers = null; + + +/** +* Converts a day number to a string. +* +* @param {Number} dayIndex +* @return {String} Returns day as string +*/ +function dayOfWeekAsString(dayIndex) { + return ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"][dayIndex]; +} + +// Set loading bar visibility +function setLoading(state) { + if (state) { + $("#loading-bar").removeClass("hidden"); + } else { + $("#loading-bar").addClass("hidden"); + } +} + +// Function, responsible for fetching and displaying data +async function loadTeachers(force_refresh = false) { + setLoading(true); + + // Load required data + let promises_to_run = [ + localforage.getItem("username").then((value) => { + username = value; + }), + localforage.getItem("password").then((value) => { + password = value; + }), + localforage.getItem("teachers").then((value) => { + teachers = value; + }) + ]; + + Promise.all(promises_to_run).then(() => { + + // If we don't have a list of teachers, query it + if (teachers === null || force_refresh) { + $.ajax({ + url: API_ENDPOINT, + crossDomain: true, + + data: { + "u": username, + "p": password, + "m": "fetchprofesorji" + }, + dataType: "json", + + cache: false, + type: "GET", + + success: (data) => { + // If data is null, the request failed + if (data === null) { + M.toast({ html: "Request failed!" }); + setLoading(false); + } else { + // Save teachers & populate table + localforage.setItem("teachers", data).then((value) => { + teachers = value; + displayData(); + setLoading(false); + }); + } + }, + + error: () => { + M.toast({ html: "No internet connection!" }); + setLoading(false); + } + + }) + } else { + displayData(); + setLoading(false); + } + }); +} + +// Function for displaying data +function displayData() { + + teachers.forEach(element => { + // Create row + let row = document.createElement("tr"); + // Create cell 1 + let cell_name = document.createElement("td"); + let cell_name_text = document.createTextNode(element["ime"]); + // Create cell 2 + let cell_subject = document.createElement("td"); + // Array ([0]) is useless, since every teacher is duplicated (for each subject) + let cell_subject_text = document.createTextNode(element["predmeti"][0]["ime"]); + + cell_name.appendChild(cell_name_text); + row.appendChild(cell_name); + + cell_subject.appendChild(cell_subject_text); + row.appendChild(cell_subject); + + $("#teachers-body").append(row); + }); + // Refresh handlers + refreshTableClickHandlers(); +} + +async function checkLogin() { + localforage.getItem("logged_in").then((value) => { + // This code runs once the value has been loaded + // from the offline store. + if (value !== true) { + window.location.replace("/index.html"); + } + }).catch((err) => { + // This code runs if there were any errors + console.log(err); + }); +} + +function clearTable() { + const table = document.getElementById("teachers-body"); + while (table.firstChild) { + table.removeChild(table.firstChild); + } +} + +function refreshTableClickHandlers() { + // Arrow function doesn't work apparently? + $('#teachers-body').find("tr").click(function () { + teacherInfo($(this).index()); + }); +} + +function teacherInfo(teacher_id) { + let teacher_object = teachers[teacher_id]; + + let name = teacher_object["ime"]; + let subject = teacher_object["predmeti"][0]["ime"]; + let office_day = dayOfWeekAsString(teacher_object["govorilneure"]["dan"]); + let office_lesson = teacher_object["govorilneure"]["solskaura"]; + + document.getElementById("teacher-name").innerText = name; + document.getElementById("teacher-subject").innerText = "Subject: " + subject; + + document.getElementById("teacher-office").innerText = office_day + ", lesson " + office_lesson; + + const modal = document.querySelectorAll('.side-modal')[0]; + M.Sidenav.getInstance(modal).open(); +} + +document.addEventListener("DOMContentLoaded", () => { + checkLogin(); + loadTeachers(); + + // Setup refresh handler + $("#refresh-icon").click(() => { + clearTable(); + loadTeachers(true); + }); + + // Set row onClick functions + refreshTableClickHandlers(); + + // Setup side menu + const menus = document.querySelectorAll('.side-menu'); + M.Sidenav.init(menus, { edge: 'right', draggable: true }); + + // Setup side modal + const modals = document.querySelectorAll('.side-modal'); + M.Sidenav.init(modals, { edge: 'left', draggable: false }); +}); \ No newline at end of file -- cgit v1.2.3