diff options
Diffstat (limited to 'js/gradings.js')
-rw-r--r-- | js/gradings.js | 210 |
1 files changed, 0 insertions, 210 deletions
diff --git a/js/gradings.js b/js/gradings.js deleted file mode 100644 index 39be331..0000000 --- a/js/gradings.js +++ /dev/null @@ -1,210 +0,0 @@ -const API_ENDPOINT = "https://gimb.tk/test.php"; -// const API_ENDPOINT = "http://localhost:5000/test.php"; - -var calendar_obj = null; - -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"); - } -} - -// GET COLOR FROM STRING -function hashCode(str) { // java String#hashCode - var hash = 0; - for (var i = 0; i < str.length; i++) { - hash = str.charCodeAt(i) + ((hash << 5) - hash); - } - return hash; -} - -function intToRGB(i) { - var c = (i & 0x00FFFFFF) - .toString(16) - .toUpperCase(); - - return "00000".substring(0, 6 - c.length) + c; -} - -// http://www.w3.org/TR/AERT#color-contrast -function getForegroundFromBackground(background_color) { - let color_hex = background_color.replace("#", ""); - let rgb = [ - parseInt(color_hex.substring(0, 2), 16), - parseInt(color_hex.substring(2, 4), 16), - parseInt(color_hex.substring(4, 6), 16) - ]; - let o = Math.round(((parseInt(rgb[0]) * 299) + (parseInt(rgb[1]) * 587) + (parseInt(rgb[2]) * 114)) / 1000); - if (o > 180) { - return "#000000"; - } else { - return "#ffffff"; - } -} - -function getHexColorFromString(str) { - return "#" + intToRGB(hashCode(str)); -} -// -------------------------------------------------- - -function getDateString() { - let date = new Date(); - - let year_str = date.getFullYear(); - let month_str = date.getMonth() + 1 - month_str = month_str.toString().padStart(2, "0"); - let day_str = date.getDate(); - day_str = day_str.toString().padStart(2, "0"); - - let date_string = year_str + "-" + month_str + "-" + day_str; - return date_string; -} - -async function loadGradings(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("gradings").then((value) => { - gradings = value; - }) - ]; - - Promise.all(promises_to_run).then(() => { - - if (gradings === null || gradings === [] || gradings === -1 || force_refresh) { - $.ajax({ - url: API_ENDPOINT, - crossDomain: true, - - data: { - "u": username, - "p": password, - "m": "fetchocenjevanja" - }, - dataType: "json", - - cache: false, - type: "GET", - - success: (data) => { - - // If data is null, the credentials were incorrect - if (data === null) { - M.toast({ html: "Request failed!" }); - setLoading(false); - } else { - // Save gradings & populate calendar - localforage.setItem("gradings", data).then((value) => { - gradings = value; - displayData(); - setLoading(false); - }); - } - - }, - - error: () => { - M.toast({ html: "No internet connection!" }); - setLoading(false); - } - - }); - - } else { - displayData(); - setLoading(false); - } - }); - -} - -function displayData() { - let transformed_gradings = []; - gradings.forEach((element, index) => { - - let bg_color = getHexColorFromString(element["kratica"]); - let fg_color = getForegroundFromBackground(bg_color); - - let grading_object = { - // Convert from dd.mm.yyyy to yyyy-mm-dd - start: element["datum"].split(".").reverse().join("-"), - title: element["kratica"], - id: index.toString(), - backgroundColor: bg_color, - textColor: fg_color - }; - - transformed_gradings.push(grading_object); - }); - - calendar_obj.removeAllEvents(); - calendar_obj.addEventSource(transformed_gradings); -} - -function gradingClickHandler(eventClickInfo) { - let grading_id = parseInt(eventClickInfo.event.id); - let grading_subject = gradings[grading_id]["predmet"]; - let grading_date = gradings[grading_id]["datum"]; - let grading_description = gradings[grading_id]["opis"]; - - document.getElementById("grading-subject").innerText = grading_subject; - document.getElementById("grading-date").innerText = grading_date; - document.getElementById("grading-description").innerText = grading_description; - - const modal = document.querySelectorAll('.side-modal')[0]; - M.Sidenav.getInstance(modal).open(); -} - -document.addEventListener("DOMContentLoaded", () => { - checkLogin(); - - // Calendar setup - var calendarEl = document.getElementById("calendar"); - calendar_obj = new FullCalendar.Calendar(calendarEl, { - plugins: ["dayGrid"], - defaultDate: getDateString(), - navLinks: false, - editable: false, - events: [], - eventClick: gradingClickHandler, - height: "parent" - }); - calendar_obj.render(); - - loadGradings(); - - // Setup refresh handler - $("#refresh-icon").click(() => { - loadGradings(true); - }); - - // 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 }); -}); |