summaryrefslogtreecommitdiffstats
path: root/js/teachers.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/teachers.js')
-rw-r--r--js/teachers.js179
1 files changed, 179 insertions, 0 deletions
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