From 236628b07d5187d34759aac70d19d4fe89c93077 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anton=20Luka=20=C5=A0ijanec?= Date: Mon, 24 Feb 2020 23:42:30 +0100 Subject: meals almost done --- js/grades.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'js/grades.js') diff --git a/js/grades.js b/js/grades.js index 5c544fb..2c247f1 100644 --- a/js/grades.js +++ b/js/grades.js @@ -273,4 +273,5 @@ document.addEventListener("DOMContentLoaded", async () => { // Setup side modal const modals = document.querySelectorAll('.side-modal'); M.Sidenav.init(modals, { edge: 'left', draggable: false }); -}); \ No newline at end of file + await loadGrades(); +}); -- cgit v1.2.3 From 64d26557a090b4f5bccb2d0d15c03e148f04f454 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anton=20Luka=20=C5=A0ijanec?= Date: Fri, 6 Mar 2020 14:22:03 +0100 Subject: neki i18n js --- js/grades.js | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) (limited to 'js/grades.js') diff --git a/js/grades.js b/js/grades.js index 2c247f1..ec5bbe8 100644 --- a/js/grades.js +++ b/js/grades.js @@ -1,6 +1,4 @@ const API_ENDPOINT = "https://gimb.tk/test.php"; -// const API_ENDPOINT = "http://localhost:5000/test.php"; - let checkbox_state = false; async function checkLogin() { @@ -62,7 +60,7 @@ async function loadGrades(force_refresh = false) { success: (data) => { // If data is null, the request failed if (data === null) { - M.toast({ html: "Request failed!" }); + UIAlert(S("requestFailed"), "loadGrades(): data === null; request failed"); setLoading(false); } else { // Save grades & populate view @@ -75,7 +73,7 @@ async function loadGrades(force_refresh = false) { }, error: () => { - M.toast({ html: "No internet connection!" }); + UIAlert(S("noInternetConnection"), "loadGrades(): $ajax-error"); setLoading(false); } @@ -222,18 +220,18 @@ function refreshClickHandlers() { let term_element = document.getElementById("grade-term"); if (grade_obj["rok"] !== "") { - term_element.innerText = "Term: " + grade_obj["rok"]; + term_element.innerText = S("term") + ": " + grade_obj["rok"]; term_element.style["display"] = ""; } else { term_element.style["display"] = "none"; } - document.getElementById("grade-teacher").innerText = "Teacher: " + grade_obj["profesor"]; + document.getElementById("grade-teacher").innerText = S("teacher") + ": " + grade_obj["profesor"]; let temporary_object = document.getElementById("grade-temporary"); let temporary_object_root = document.getElementById("grade-temporary-root"); if (grade_obj["zacasna"]) { - temporary_object.innerText = "(zacasna)"; + temporary_object.innerText = "(" + S("temporary") + ")"; temporary_object_root.style["display"] = ""; } else { temporary_object_root.style["display"] = "none"; -- cgit v1.2.3 From a4e25ed95b896f39aadec6123543dae1bc80e8fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anton=20Luka=20=C5=A0ijanec?= Date: Sat, 21 Mar 2020 00:58:21 +0100 Subject: teachers.js, absences.js: uporabljajo gsec.js; gsec.js: spremembe apija --- js/grades.js | 403 ++++++++++++++++++++++++++--------------------------------- 1 file changed, 175 insertions(+), 228 deletions(-) (limited to 'js/grades.js') diff --git a/js/grades.js b/js/grades.js index ec5bbe8..b77ffd2 100644 --- a/js/grades.js +++ b/js/grades.js @@ -1,6 +1,6 @@ -const API_ENDPOINT = "https://gimb.tk/test.php"; +// const API_ENDPOINT = "https://gimb.tk/test.php"; // deprecated let checkbox_state = false; - +var grades; async function checkLogin() { localforage.getItem("logged_in").then((value) => { // This code runs once the value has been loaded @@ -24,178 +24,135 @@ function setLoading(state) { } async function loadGrades(force_refresh = false) { - setLoading(true); - - let promises_to_run = [ - localforage.getItem("username").then((value) => { - username = value; - }), - localforage.getItem("password").then((value) => { - password = value; - }), - localforage.getItem("grades").then((value) => { - grades = value; - }) - ]; - - await Promise.all(promises_to_run); - - // If we don't have a list of grades, fetch it - if (grades === null || grades === [] || force_refresh) { - - $.ajax({ - url: API_ENDPOINT, - crossDomain: true, - - data: { - "u": username, - "p": password, - "m": "fetchocene" - }, - dataType: "json", - - cache: false, - type: "GET", - - success: (data) => { - // If data is null, the request failed - if (data === null) { - UIAlert(S("requestFailed"), "loadGrades(): data === null; request failed"); - setLoading(false); - } else { - // Save grades & populate view - localforage.setItem("grades", data).then((value) => { - grades = value; - displayGrades(); - setLoading(false); - }); - } - }, - - error: () => { - UIAlert(S("noInternetConnection"), "loadGrades(): $ajax-error"); - setLoading(false); - } - - }); - - } else { - displayGrades(); - setLoading(false); - } + setLoading(true); + let promises_to_run = [ + localforage.getItem("username").then((value) => { + username = value; + }), + localforage.getItem("password").then((value) => { + password = value; + }), + localforage.getItem("grades").then((value) => { + grades = value; + }) + ]; + await Promise.all(promises_to_run); + // If we don't have a list of grades, fetch it + if (grades === null || grades === [] || force_refresh) { + try { + let gsecInstance = new gsec(); + await gsecInstance.login(username, password); + gsecInstance.fetchGrades().then( (value) => { + grades = value; + localforage.setItem("grades", value).then((value) => { + displayGrades(); + setLoading(false); + }); + setLoading(false); + }).catch( (err) => { + gsecErrorHandlerUI(err); + setLoading(false); + }); + } catch (err) { + gsecErrorHandlerUI(err); + setLoading(false); + } + } else { + displayGrades(); + setLoading(false); + } } function displayGrades() { - let grades_by_subject = {}; - grades.forEach((grade, index) => { - if (!(grade["predmet"] in grades_by_subject)) { - grades_by_subject[grade["predmet"]] = []; - } - let grade_object = { - date: grade["datum"], - teacher: grade["profesor"], - subject: grade["predmet"], - title: grade["naslov"], - type: grade["vrsta"], - term: grade["rok"], - grade: grade["ocena"], - temporary: grade["zacasna"], - index: index - } - grades_by_subject[grade["predmet"]].push(grade_object); - }); - - let root_element = document.getElementById("grades-collapsible"); - - Object.keys(grades_by_subject).forEach((subject) => { - // Create root element for a subject entry - let subject_entry = document.createElement("li"); - // Create subject collapsible header - let subject_header = document.createElement("div"); - subject_header.classList.add("collapsible-header"); - subject_header.classList.add("collapsible-header-root"); - // Create header text element - let subject_header_text = document.createElement("span"); - subject_header_text.innerText = subject; - - // Create collection for displaying individuals grades - let subject_body = document.createElement("div"); - subject_body.className = "collapsible-body"; - let subject_body_root = document.createElement("ul"); - subject_body_root.className = "collection"; - - // Setup variables for calculating average - let grade_sum = 0; - let grade_tot = 0; - - grades_by_subject[subject].forEach((grade) => { - // Create element for individual grade - let grade_node = document.createElement("li"); - grade_node.className = "collection-item"; - grade_node.classList.add("collection-item") - grade_node.classList.add("grade-node"); - grade_node.dataset["index"] = grade["index"]; - let grade_node_div = document.createElement("div"); - - // Node for date and subject text - let grade_text = document.createElement("span"); - // Node for the actual number - let grade_number = document.createElement("div"); - grade_number.className = "secondary-content"; - - // Apply different style, if the grade is temporary - if (grade["temporary"]) { - // Styling for text - let grade_text_italic = document.createElement("i"); - grade_text_italic.innerText = grade["date"] + " - " + grade["title"]; - grade_text.appendChild(grade_text_italic); - - // Styling for number - let grade_number_italic = document.createElement("i"); - grade_number_italic.innerText = grade["grade"].toString(); - grade_number.appendChild(grade_number_italic); - } else { - // Text - grade_text.innerText = grade["date"] + " - " + grade["title"]; - // Number - grade_number.innerText = grade["grade"].toString(); - } - - grade_node_div.appendChild(grade_text); - grade_node_div.appendChild(grade_number); - - grade_node.appendChild(grade_node_div); - - - // Count the grade only if it's not temporary or explicitly enabled - if (!grade["temporary"] || !checkbox_state) { - grade_sum += grade["grade"]; - grade_tot += 1; - } - - subject_body_root.appendChild(grade_node); - - }); - - let grade_average = (grade_tot === 0) ? "N/A" : (Math.round(((grade_sum / grade_tot) + Number.EPSILON) * 100) / 100); - let subject_header_average = document.createElement("div"); - subject_header_average.className = "collapsible-header-right"; - subject_header_average.innerText = grade_average.toString(); - - subject_header.appendChild(subject_header_text); - subject_header.appendChild(subject_header_average); - - subject_body.append(subject_body_root); - - subject_entry.append(subject_header); - subject_entry.append(subject_body); - - root_element.append(subject_entry); - }); - - $("#grades-collapsible").append(root_element); - - refreshClickHandlers(); + let grades_by_subject = {}; + grades.forEach((grade, index) => { + if (!(grade["subject"] in grades_by_subject)) { + grades_by_subject[grade["subject"]] = []; + } + let grade_object = { + date: dateString.longFormatted(grade["date"]), + teacher: grade["teacher"], + subject: grade["subject"], + title: grade["name"][0], + type: grade["name"][1], + term: grade["name"][2], + grade: grade["grade"], + temporary: grade["temporary"], + index: index + } + grades_by_subject[grade["subject"]].push(grade_object); + }); + let root_element = document.getElementById("grades-collapsible"); + Object.keys(grades_by_subject).forEach((subject) => { + // Create root element for a subject entry + let subject_entry = document.createElement("li"); + // Create subject collapsible header + let subject_header = document.createElement("div"); + subject_header.classList.add("collapsible-header"); + subject_header.classList.add("collapsible-header-root"); + // Create header text element + let subject_header_text = document.createElement("span"); + subject_header_text.innerText = subject; + // Create collection for displaying individuals grades + let subject_body = document.createElement("div"); + subject_body.className = "collapsible-body"; + let subject_body_root = document.createElement("ul"); + subject_body_root.className = "collection"; + // Setup variables for calculating average + let grade_sum = 0; + let grade_tot = 0; + grades_by_subject[subject].forEach((grade) => { + // Create element for individual grade + let grade_node = document.createElement("li"); + grade_node.className = "collection-item"; + grade_node.classList.add("collection-item") + grade_node.classList.add("grade-node"); + grade_node.dataset["index"] = grade["index"]; + let grade_node_div = document.createElement("div"); + // Node for date and subject text + let grade_text = document.createElement("span"); + // Node for the actual number + let grade_number = document.createElement("div"); + grade_number.className = "secondary-content"; + // Apply different style, if the grade is temporary + if (grade["temporary"]) { + // Styling for text + let grade_text_italic = document.createElement("i"); + grade_text_italic.innerText = grade["date"] + " - " + grade["title"]; + grade_text.appendChild(grade_text_italic); + // Styling for number + let grade_number_italic = document.createElement("i"); + grade_number_italic.innerText = grade["grade"].toString(); + grade_number.appendChild(grade_number_italic); + } else { + // Text + grade_text.innerText = grade["date"] + " - " + grade["title"]; + // Number + grade_number.innerText = grade["grade"].toString(); + } + grade_node_div.appendChild(grade_text); + grade_node_div.appendChild(grade_number); + grade_node.appendChild(grade_node_div); + // Count the grade only if it's not temporary or explicitly enabled + if (!grade["temporary"] || !checkbox_state) { + grade_sum += grade["grade"]; + grade_tot += 1; + } + subject_body_root.appendChild(grade_node); + }); + let grade_average = (grade_tot === 0) ? "N/A" : (Math.round(((grade_sum / grade_tot) + Number.EPSILON) * 100) / 100); + let subject_header_average = document.createElement("div"); + subject_header_average.className = "collapsible-header-right"; + subject_header_average.innerText = grade_average.toString(); + subject_header.appendChild(subject_header_text); + subject_header.appendChild(subject_header_average); + subject_body.append(subject_body_root); + subject_entry.append(subject_header); + subject_entry.append(subject_body); + root_element.append(subject_entry); + }); + $("#grades-collapsible").append(root_element); + refreshClickHandlers(); } function clearGrades() { @@ -211,65 +168,55 @@ function refreshGrades(force) { } function refreshClickHandlers() { - $("#grades-collapsible").find(".collection-item.grade-node").click(function () { - let grade_obj = grades[parseInt(this.dataset["index"])]; - document.getElementById("grade-header").innerText = grade_obj["predmet"] + ": " + grade_obj["ocena"]; - document.getElementById("grade-date").innerText = grade_obj["datum"]; - document.getElementById("grade-title").innerText = grade_obj["naslov"]; - document.getElementById("grade-type").innerText = "Type: " + grade_obj["vrsta"]; - - let term_element = document.getElementById("grade-term"); - if (grade_obj["rok"] !== "") { - term_element.innerText = S("term") + ": " + grade_obj["rok"]; - term_element.style["display"] = ""; - } else { - term_element.style["display"] = "none"; - } - - document.getElementById("grade-teacher").innerText = S("teacher") + ": " + grade_obj["profesor"]; - - let temporary_object = document.getElementById("grade-temporary"); - let temporary_object_root = document.getElementById("grade-temporary-root"); - if (grade_obj["zacasna"]) { - temporary_object.innerText = "(" + S("temporary") + ")"; - temporary_object_root.style["display"] = ""; - } else { - temporary_object_root.style["display"] = "none"; - } - - const modal = document.querySelectorAll('.side-modal')[0]; - M.Sidenav.getInstance(modal).open(); - }); + $("#grades-collapsible").find(".collection-item.grade-node").click(function () { + let grade_obj = grades[parseInt(this.dataset["index"])]; + document.getElementById("grade-header").innerText = grade_obj["subject"] + ": " + grade_obj["grade"]; + document.getElementById("grade-date").innerText = dateString.longFormatted(grade_obj["date"]); + document.getElementById("grade-title").innerText = grade_obj["name"][0]; + document.getElementById("grade-type").innerText = S("type") + ": " + grade_obj["name"][1]; + let term_element = document.getElementById("grade-term"); + if (grade_obj["name"][2] !== "") { + term_element.innerText = S("term") + ": " + grade_obj["name"][2]; + term_element.style["display"] = ""; + } else { + term_element.style["display"] = "none"; + } + document.getElementById("grade-teacher").innerText = S("teacher") + ": " + grade_obj["teacher"]; + let temporary_object = document.getElementById("grade-temporary"); + let temporary_object_root = document.getElementById("grade-temporary-root"); + if (grade_obj["temporary"]) { + temporary_object.innerText = "(" + S("temporary") + ")"; + temporary_object_root.style["display"] = ""; + } else { + temporary_object_root.style["display"] = "none"; + } + const modal = document.querySelectorAll('.side-modal')[0]; + M.Sidenav.getInstance(modal).open(); + }); } // Initialization code document.addEventListener("DOMContentLoaded", async () => { - checkLogin(); - await loadGrades(); - - let coll_elem = document.querySelectorAll('.collapsible'); - let coll_instance = M.Collapsible.init(coll_elem, {}); - - // Setup refresh handler - $("#refresh-icon").click(function () { - refreshGrades(true); - }); - - // Setup checkbox handler - $("#permanent-grades-checkbox").change(function () { - checkbox_state = this.checked; - refreshGrades(false); - }); - - let elems = document.querySelectorAll('.modal'); - let instances = M.Modal.init(elems, {}); - - // 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 }); - await loadGrades(); + checkLogin(); + let coll_elem = document.querySelectorAll('.collapsible'); + let coll_instance = M.Collapsible.init(coll_elem, {}); + // Setup refresh handler + $("#refresh-icon").click(function () { + refreshGrades(true); + }); + // Setup checkbox handler + $("#permanent-grades-checkbox").change(function () { + checkbox_state = this.checked; + refreshGrades(false); + }); + let elems = document.querySelectorAll('.modal'); + let instances = M.Modal.init(elems, {}); + // 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 }); + await clearGrades(); + await loadGrades(); }); -- cgit v1.2.3 From 07cb830c35f2bed8cfa8abcd1e31fc5bf965db9d Mon Sep 17 00:00:00 2001 From: rstular Date: Thu, 14 May 2020 01:51:10 +0200 Subject: Styling changes, first round of bug fixes There are (probably) more changes incoming, but we need to discuss them first --- js/grades.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'js/grades.js') diff --git a/js/grades.js b/js/grades.js index b77ffd2..9994596 100644 --- a/js/grades.js +++ b/js/grades.js @@ -40,8 +40,10 @@ async function loadGrades(force_refresh = false) { // If we don't have a list of grades, fetch it if (grades === null || grades === [] || force_refresh) { try { + let gsecInstance = new gsec(); - await gsecInstance.login(username, password); + await gsecInstance.login(username, password); + gsecInstance.fetchGrades().then( (value) => { grades = value; localforage.setItem("grades", value).then((value) => { @@ -53,10 +55,12 @@ async function loadGrades(force_refresh = false) { gsecErrorHandlerUI(err); setLoading(false); }); + } catch (err) { gsecErrorHandlerUI(err); setLoading(false); } + } else { displayGrades(); setLoading(false); @@ -69,6 +73,7 @@ function displayGrades() { if (!(grade["subject"] in grades_by_subject)) { grades_by_subject[grade["subject"]] = []; } + let grade_object = { date: dateString.longFormatted(grade["date"]), teacher: grade["teacher"], @@ -81,7 +86,9 @@ function displayGrades() { index: index } grades_by_subject[grade["subject"]].push(grade_object); + }); + let root_element = document.getElementById("grades-collapsible"); Object.keys(grades_by_subject).forEach((subject) => { // Create root element for a subject entry @@ -217,6 +224,6 @@ document.addEventListener("DOMContentLoaded", async () => { // Setup side modal const modals = document.querySelectorAll('.side-modal'); M.Sidenav.init(modals, { edge: 'left', draggable: false }); - await clearGrades(); + clearGrades(); await loadGrades(); }); -- cgit v1.2.3 From ad675cbe9738577b236c5a682e4629c562ee4a76 Mon Sep 17 00:00:00 2001 From: rstular Date: Sat, 16 May 2020 23:20:42 +0200 Subject: Linting --- js/grades.js | 366 ++++++++++++++++++++++++++++++----------------------------- 1 file changed, 186 insertions(+), 180 deletions(-) (limited to 'js/grades.js') diff --git a/js/grades.js b/js/grades.js index 9994596..4c52848 100644 --- a/js/grades.js +++ b/js/grades.js @@ -24,142 +24,142 @@ function setLoading(state) { } async function loadGrades(force_refresh = false) { - setLoading(true); - let promises_to_run = [ - localforage.getItem("username").then((value) => { - username = value; - }), - localforage.getItem("password").then((value) => { - password = value; - }), - localforage.getItem("grades").then((value) => { - grades = value; - }) - ]; - await Promise.all(promises_to_run); - // If we don't have a list of grades, fetch it - if (grades === null || grades === [] || force_refresh) { - try { - - let gsecInstance = new gsec(); - await gsecInstance.login(username, password); - - gsecInstance.fetchGrades().then( (value) => { - grades = value; - localforage.setItem("grades", value).then((value) => { - displayGrades(); - setLoading(false); - }); - setLoading(false); - }).catch( (err) => { - gsecErrorHandlerUI(err); - setLoading(false); - }); - - } catch (err) { - gsecErrorHandlerUI(err); - setLoading(false); - } - - } else { - displayGrades(); - setLoading(false); - } + setLoading(true); + let promises_to_run = [ + localforage.getItem("username").then((value) => { + username = value; + }), + localforage.getItem("password").then((value) => { + password = value; + }), + localforage.getItem("grades").then((value) => { + grades = value; + }) + ]; + await Promise.all(promises_to_run); + // If we don't have a list of grades, fetch it + if (grades === null || grades === [] || force_refresh) { + try { + + let gsecInstance = new gsec(); + await gsecInstance.login(username, password); + + gsecInstance.fetchGrades().then( (value) => { + grades = value; + localforage.setItem("grades", value).then(() => { + displayGrades(); + setLoading(false); + }); + setLoading(false); + }).catch( (err) => { + gsecErrorHandlerUI(err); + setLoading(false); + }); + + } catch (err) { + gsecErrorHandlerUI(err); + setLoading(false); + } + + } else { + displayGrades(); + setLoading(false); + } } function displayGrades() { - let grades_by_subject = {}; - grades.forEach((grade, index) => { - if (!(grade["subject"] in grades_by_subject)) { - grades_by_subject[grade["subject"]] = []; - } - - let grade_object = { - date: dateString.longFormatted(grade["date"]), - teacher: grade["teacher"], - subject: grade["subject"], - title: grade["name"][0], - type: grade["name"][1], - term: grade["name"][2], - grade: grade["grade"], - temporary: grade["temporary"], - index: index - } - grades_by_subject[grade["subject"]].push(grade_object); - - }); - - let root_element = document.getElementById("grades-collapsible"); - Object.keys(grades_by_subject).forEach((subject) => { - // Create root element for a subject entry - let subject_entry = document.createElement("li"); - // Create subject collapsible header - let subject_header = document.createElement("div"); - subject_header.classList.add("collapsible-header"); - subject_header.classList.add("collapsible-header-root"); - // Create header text element - let subject_header_text = document.createElement("span"); - subject_header_text.innerText = subject; - // Create collection for displaying individuals grades - let subject_body = document.createElement("div"); - subject_body.className = "collapsible-body"; - let subject_body_root = document.createElement("ul"); - subject_body_root.className = "collection"; - // Setup variables for calculating average - let grade_sum = 0; - let grade_tot = 0; - grades_by_subject[subject].forEach((grade) => { - // Create element for individual grade - let grade_node = document.createElement("li"); - grade_node.className = "collection-item"; - grade_node.classList.add("collection-item") - grade_node.classList.add("grade-node"); - grade_node.dataset["index"] = grade["index"]; - let grade_node_div = document.createElement("div"); - // Node for date and subject text - let grade_text = document.createElement("span"); - // Node for the actual number - let grade_number = document.createElement("div"); - grade_number.className = "secondary-content"; - // Apply different style, if the grade is temporary - if (grade["temporary"]) { - // Styling for text - let grade_text_italic = document.createElement("i"); - grade_text_italic.innerText = grade["date"] + " - " + grade["title"]; - grade_text.appendChild(grade_text_italic); - // Styling for number - let grade_number_italic = document.createElement("i"); - grade_number_italic.innerText = grade["grade"].toString(); - grade_number.appendChild(grade_number_italic); - } else { - // Text - grade_text.innerText = grade["date"] + " - " + grade["title"]; - // Number - grade_number.innerText = grade["grade"].toString(); - } - grade_node_div.appendChild(grade_text); - grade_node_div.appendChild(grade_number); - grade_node.appendChild(grade_node_div); - // Count the grade only if it's not temporary or explicitly enabled - if (!grade["temporary"] || !checkbox_state) { - grade_sum += grade["grade"]; - grade_tot += 1; - } - subject_body_root.appendChild(grade_node); - }); - let grade_average = (grade_tot === 0) ? "N/A" : (Math.round(((grade_sum / grade_tot) + Number.EPSILON) * 100) / 100); - let subject_header_average = document.createElement("div"); - subject_header_average.className = "collapsible-header-right"; - subject_header_average.innerText = grade_average.toString(); - subject_header.appendChild(subject_header_text); - subject_header.appendChild(subject_header_average); - subject_body.append(subject_body_root); - subject_entry.append(subject_header); - subject_entry.append(subject_body); - root_element.append(subject_entry); - }); - $("#grades-collapsible").append(root_element); - refreshClickHandlers(); + let grades_by_subject = {}; + grades.forEach((grade, index) => { + if (!(grade["subject"] in grades_by_subject)) { + grades_by_subject[grade["subject"]] = []; + } + + let grade_object = { + date: dateString.longFormatted(grade["date"]), + teacher: grade["teacher"], + subject: grade["subject"], + title: grade["name"][0], + type: grade["name"][1], + term: grade["name"][2], + grade: grade["grade"], + temporary: grade["temporary"], + index: index + } + grades_by_subject[grade["subject"]].push(grade_object); + + }); + + let root_element = document.getElementById("grades-collapsible"); + Object.keys(grades_by_subject).forEach((subject) => { + // Create root element for a subject entry + let subject_entry = document.createElement("li"); + // Create subject collapsible header + let subject_header = document.createElement("div"); + subject_header.classList.add("collapsible-header"); + subject_header.classList.add("collapsible-header-root"); + // Create header text element + let subject_header_text = document.createElement("span"); + subject_header_text.innerText = subject; + // Create collection for displaying individuals grades + let subject_body = document.createElement("div"); + subject_body.className = "collapsible-body"; + let subject_body_root = document.createElement("ul"); + subject_body_root.className = "collection"; + // Setup variables for calculating average + let grade_sum = 0; + let grade_tot = 0; + grades_by_subject[subject].forEach((grade) => { + // Create element for individual grade + let grade_node = document.createElement("li"); + grade_node.className = "collection-item"; + grade_node.classList.add("collection-item") + grade_node.classList.add("grade-node"); + grade_node.dataset["index"] = grade["index"]; + let grade_node_div = document.createElement("div"); + // Node for date and subject text + let grade_text = document.createElement("span"); + // Node for the actual number + let grade_number = document.createElement("div"); + grade_number.className = "secondary-content"; + // Apply different style, if the grade is temporary + if (grade["temporary"]) { + // Styling for text + let grade_text_italic = document.createElement("i"); + grade_text_italic.innerText = grade["date"] + " - " + grade["title"]; + grade_text.appendChild(grade_text_italic); + // Styling for number + let grade_number_italic = document.createElement("i"); + grade_number_italic.innerText = grade["grade"].toString(); + grade_number.appendChild(grade_number_italic); + } else { + // Text + grade_text.innerText = grade["date"] + " - " + grade["title"]; + // Number + grade_number.innerText = grade["grade"].toString(); + } + grade_node_div.appendChild(grade_text); + grade_node_div.appendChild(grade_number); + grade_node.appendChild(grade_node_div); + // Count the grade only if it's not temporary or explicitly enabled + if (!grade["temporary"] || !checkbox_state) { + grade_sum += grade["grade"]; + grade_tot += 1; + } + subject_body_root.appendChild(grade_node); + }); + let grade_average = (grade_tot === 0) ? "N/A" : (Math.round(((grade_sum / grade_tot) + Number.EPSILON) * 100) / 100); + let subject_header_average = document.createElement("div"); + subject_header_average.className = "collapsible-header-right"; + subject_header_average.innerText = grade_average.toString(); + subject_header.appendChild(subject_header_text); + subject_header.appendChild(subject_header_average); + subject_body.append(subject_body_root); + subject_entry.append(subject_header); + subject_entry.append(subject_body); + root_element.append(subject_entry); + }); + $("#grades-collapsible").append(root_element); + refreshClickHandlers(); } function clearGrades() { @@ -175,55 +175,61 @@ function refreshGrades(force) { } function refreshClickHandlers() { - $("#grades-collapsible").find(".collection-item.grade-node").click(function () { - let grade_obj = grades[parseInt(this.dataset["index"])]; - document.getElementById("grade-header").innerText = grade_obj["subject"] + ": " + grade_obj["grade"]; - document.getElementById("grade-date").innerText = dateString.longFormatted(grade_obj["date"]); - document.getElementById("grade-title").innerText = grade_obj["name"][0]; - document.getElementById("grade-type").innerText = S("type") + ": " + grade_obj["name"][1]; - let term_element = document.getElementById("grade-term"); - if (grade_obj["name"][2] !== "") { - term_element.innerText = S("term") + ": " + grade_obj["name"][2]; - term_element.style["display"] = ""; - } else { - term_element.style["display"] = "none"; - } - document.getElementById("grade-teacher").innerText = S("teacher") + ": " + grade_obj["teacher"]; - let temporary_object = document.getElementById("grade-temporary"); - let temporary_object_root = document.getElementById("grade-temporary-root"); - if (grade_obj["temporary"]) { - temporary_object.innerText = "(" + S("temporary") + ")"; - temporary_object_root.style["display"] = ""; - } else { - temporary_object_root.style["display"] = "none"; - } - const modal = document.querySelectorAll('.side-modal')[0]; - M.Sidenav.getInstance(modal).open(); - }); + $("#grades-collapsible").find(".collection-item.grade-node").click(function () { + let grade_obj = grades[parseInt(this.dataset["index"])]; + document.getElementById("grade-header").innerText = grade_obj["subject"] + ": " + grade_obj["grade"]; + document.getElementById("grade-date").innerText = dateString.longFormatted(grade_obj["date"]); + document.getElementById("grade-title").innerText = grade_obj["name"][0]; + document.getElementById("grade-type").innerText = S("type") + ": " + grade_obj["name"][1]; + let term_element = document.getElementById("grade-term"); + if (grade_obj["name"][2] !== "") { + term_element.innerText = S("term") + ": " + grade_obj["name"][2]; + term_element.style["display"] = ""; + } else { + term_element.style["display"] = "none"; + } + document.getElementById("grade-teacher").innerText = S("teacher") + ": " + grade_obj["teacher"]; + let temporary_object = document.getElementById("grade-temporary"); + let temporary_object_root = document.getElementById("grade-temporary-root"); + if (grade_obj["temporary"]) { + temporary_object.innerText = "(" + S("temporary") + ")"; + temporary_object_root.style["display"] = ""; + } else { + temporary_object_root.style["display"] = "none"; + } + const modal = document.querySelectorAll('.side-modal')[0]; + M.Sidenav.getInstance(modal).open(); + }); } // Initialization code document.addEventListener("DOMContentLoaded", async () => { - checkLogin(); - let coll_elem = document.querySelectorAll('.collapsible'); - let coll_instance = M.Collapsible.init(coll_elem, {}); - // Setup refresh handler - $("#refresh-icon").click(function () { - refreshGrades(true); - }); - // Setup checkbox handler - $("#permanent-grades-checkbox").change(function () { - checkbox_state = this.checked; - refreshGrades(false); - }); - let elems = document.querySelectorAll('.modal'); - let instances = M.Modal.init(elems, {}); - // 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 }); - clearGrades(); - await loadGrades(); + checkLogin(); + + let coll_elem = document.querySelectorAll('.collapsible'); + M.Collapsible.init(coll_elem, {}); + + // Setup refresh handler + $("#refresh-icon").click(function () { + refreshGrades(true); + }); + + // Setup checkbox handler + $("#permanent-grades-checkbox").change(function () { + checkbox_state = this.checked; + refreshGrades(false); + }); + let elems = document.querySelectorAll('.modal'); + M.Modal.init(elems, {}); + + // 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 }); + + clearGrades(); + await loadGrades(); }); -- cgit v1.2.3 From fc66b376cb3a2c73843cc882d500cfd743c0790e Mon Sep 17 00:00:00 2001 From: sijanec Date: Sun, 17 May 2020 00:13:40 +0200 Subject: dist should work, TODO: minify and bundle --- js/grades.js | 235 ----------------------------------------------------------- 1 file changed, 235 deletions(-) delete mode 100644 js/grades.js (limited to 'js/grades.js') diff --git a/js/grades.js b/js/grades.js deleted file mode 100644 index 4c52848..0000000 --- a/js/grades.js +++ /dev/null @@ -1,235 +0,0 @@ -// const API_ENDPOINT = "https://gimb.tk/test.php"; // deprecated -let checkbox_state = false; -var grades; -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); - }); -} - -// Set loading bar visibility -function setLoading(state) { - if (state) { - $("#loading-bar").removeClass("hidden"); - } else { - $("#loading-bar").addClass("hidden"); - } -} - -async function loadGrades(force_refresh = false) { - setLoading(true); - let promises_to_run = [ - localforage.getItem("username").then((value) => { - username = value; - }), - localforage.getItem("password").then((value) => { - password = value; - }), - localforage.getItem("grades").then((value) => { - grades = value; - }) - ]; - await Promise.all(promises_to_run); - // If we don't have a list of grades, fetch it - if (grades === null || grades === [] || force_refresh) { - try { - - let gsecInstance = new gsec(); - await gsecInstance.login(username, password); - - gsecInstance.fetchGrades().then( (value) => { - grades = value; - localforage.setItem("grades", value).then(() => { - displayGrades(); - setLoading(false); - }); - setLoading(false); - }).catch( (err) => { - gsecErrorHandlerUI(err); - setLoading(false); - }); - - } catch (err) { - gsecErrorHandlerUI(err); - setLoading(false); - } - - } else { - displayGrades(); - setLoading(false); - } -} - -function displayGrades() { - let grades_by_subject = {}; - grades.forEach((grade, index) => { - if (!(grade["subject"] in grades_by_subject)) { - grades_by_subject[grade["subject"]] = []; - } - - let grade_object = { - date: dateString.longFormatted(grade["date"]), - teacher: grade["teacher"], - subject: grade["subject"], - title: grade["name"][0], - type: grade["name"][1], - term: grade["name"][2], - grade: grade["grade"], - temporary: grade["temporary"], - index: index - } - grades_by_subject[grade["subject"]].push(grade_object); - - }); - - let root_element = document.getElementById("grades-collapsible"); - Object.keys(grades_by_subject).forEach((subject) => { - // Create root element for a subject entry - let subject_entry = document.createElement("li"); - // Create subject collapsible header - let subject_header = document.createElement("div"); - subject_header.classList.add("collapsible-header"); - subject_header.classList.add("collapsible-header-root"); - // Create header text element - let subject_header_text = document.createElement("span"); - subject_header_text.innerText = subject; - // Create collection for displaying individuals grades - let subject_body = document.createElement("div"); - subject_body.className = "collapsible-body"; - let subject_body_root = document.createElement("ul"); - subject_body_root.className = "collection"; - // Setup variables for calculating average - let grade_sum = 0; - let grade_tot = 0; - grades_by_subject[subject].forEach((grade) => { - // Create element for individual grade - let grade_node = document.createElement("li"); - grade_node.className = "collection-item"; - grade_node.classList.add("collection-item") - grade_node.classList.add("grade-node"); - grade_node.dataset["index"] = grade["index"]; - let grade_node_div = document.createElement("div"); - // Node for date and subject text - let grade_text = document.createElement("span"); - // Node for the actual number - let grade_number = document.createElement("div"); - grade_number.className = "secondary-content"; - // Apply different style, if the grade is temporary - if (grade["temporary"]) { - // Styling for text - let grade_text_italic = document.createElement("i"); - grade_text_italic.innerText = grade["date"] + " - " + grade["title"]; - grade_text.appendChild(grade_text_italic); - // Styling for number - let grade_number_italic = document.createElement("i"); - grade_number_italic.innerText = grade["grade"].toString(); - grade_number.appendChild(grade_number_italic); - } else { - // Text - grade_text.innerText = grade["date"] + " - " + grade["title"]; - // Number - grade_number.innerText = grade["grade"].toString(); - } - grade_node_div.appendChild(grade_text); - grade_node_div.appendChild(grade_number); - grade_node.appendChild(grade_node_div); - // Count the grade only if it's not temporary or explicitly enabled - if (!grade["temporary"] || !checkbox_state) { - grade_sum += grade["grade"]; - grade_tot += 1; - } - subject_body_root.appendChild(grade_node); - }); - let grade_average = (grade_tot === 0) ? "N/A" : (Math.round(((grade_sum / grade_tot) + Number.EPSILON) * 100) / 100); - let subject_header_average = document.createElement("div"); - subject_header_average.className = "collapsible-header-right"; - subject_header_average.innerText = grade_average.toString(); - subject_header.appendChild(subject_header_text); - subject_header.appendChild(subject_header_average); - subject_body.append(subject_body_root); - subject_entry.append(subject_header); - subject_entry.append(subject_body); - root_element.append(subject_entry); - }); - $("#grades-collapsible").append(root_element); - refreshClickHandlers(); -} - -function clearGrades() { - const table = document.getElementById("grades-collapsible"); - while (table.firstChild) { - table.removeChild(table.firstChild); - } -} - -function refreshGrades(force) { - clearGrades(); - loadGrades(force); -} - -function refreshClickHandlers() { - $("#grades-collapsible").find(".collection-item.grade-node").click(function () { - let grade_obj = grades[parseInt(this.dataset["index"])]; - document.getElementById("grade-header").innerText = grade_obj["subject"] + ": " + grade_obj["grade"]; - document.getElementById("grade-date").innerText = dateString.longFormatted(grade_obj["date"]); - document.getElementById("grade-title").innerText = grade_obj["name"][0]; - document.getElementById("grade-type").innerText = S("type") + ": " + grade_obj["name"][1]; - let term_element = document.getElementById("grade-term"); - if (grade_obj["name"][2] !== "") { - term_element.innerText = S("term") + ": " + grade_obj["name"][2]; - term_element.style["display"] = ""; - } else { - term_element.style["display"] = "none"; - } - document.getElementById("grade-teacher").innerText = S("teacher") + ": " + grade_obj["teacher"]; - let temporary_object = document.getElementById("grade-temporary"); - let temporary_object_root = document.getElementById("grade-temporary-root"); - if (grade_obj["temporary"]) { - temporary_object.innerText = "(" + S("temporary") + ")"; - temporary_object_root.style["display"] = ""; - } else { - temporary_object_root.style["display"] = "none"; - } - const modal = document.querySelectorAll('.side-modal')[0]; - M.Sidenav.getInstance(modal).open(); - }); -} - -// Initialization code -document.addEventListener("DOMContentLoaded", async () => { - checkLogin(); - - let coll_elem = document.querySelectorAll('.collapsible'); - M.Collapsible.init(coll_elem, {}); - - // Setup refresh handler - $("#refresh-icon").click(function () { - refreshGrades(true); - }); - - // Setup checkbox handler - $("#permanent-grades-checkbox").change(function () { - checkbox_state = this.checked; - refreshGrades(false); - }); - let elems = document.querySelectorAll('.modal'); - M.Modal.init(elems, {}); - - // 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 }); - - clearGrades(); - await loadGrades(); -}); -- cgit v1.2.3