summaryrefslogtreecommitdiffstats
path: root/assets
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--assets/css/styles.css8
-rw-r--r--assets/js/grades.js424
-rw-r--r--assets/js/gradings.js40
-rw-r--r--assets/js/gsec.js74
-rw-r--r--assets/js/lang/bundle.js22
-rw-r--r--assets/js/login.js3
-rw-r--r--assets/js/messaging.js2
-rw-r--r--assets/js/setup-storage.js2
-rw-r--r--assets/pages-src/grades.bvr3
-rw-r--r--assets/pages-src/gradings.bvr38
-rw-r--r--assets/pages-src/misc/grading-add-modal.bvr35
-rw-r--r--assets/pages-src/misc/msg-compose-modal.bvr4
12 files changed, 364 insertions, 291 deletions
diff --git a/assets/css/styles.css b/assets/css/styles.css
index 4e6050b..3f403e7 100644
--- a/assets/css/styles.css
+++ b/assets/css/styles.css
@@ -417,3 +417,11 @@ p {
h1, h2, h3, h4, h5, h6 {
color: var(--color-text) !important;
}
+
+.card {
+ background-color: var(--background-accent) !important;
+}
+
+.zakljucna-grade {
+ color: red;
+} \ No newline at end of file
diff --git a/assets/js/grades.js b/assets/js/grades.js
index aff62e4..549ac7c 100644
--- a/assets/js/grades.js
+++ b/assets/js/grades.js
@@ -2,234 +2,244 @@
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);
- });
+ 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");
- }
+ 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);
- }
+ 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 = {};
+ let zakljucne_grades_by_subject = {};
+ grades.forEach((grade, index) => {
+ if (grade["gradeType"] != GSEC_NORMAL_GRADE) {
+ zakljucne_grades_by_subject[grade["subject"]] = grade["grade"];
+ } else {
+ 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";
+ if (subject in zakljucne_grades_by_subject) {
+ subject_header_average.innerText = zakljucne_grades_by_subject[subject];
+ subject_header_average.classList.add("zakljucna-grade");
+ } else {
+ 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);
- }
+ const table = document.getElementById("grades-collapsible");
+ while (table.firstChild) {
+ table.removeChild(table.firstChild);
+ }
}
function refreshGrades(force) {
- clearGrades();
- loadGrades(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();
- });
+ $("#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();
+ 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();
+
});
diff --git a/assets/js/gradings.js b/assets/js/gradings.js
index f884bf2..4730248 100644
--- a/assets/js/gradings.js
+++ b/assets/js/gradings.js
@@ -131,6 +131,18 @@ function displayData() {
calendar_obj.addEventSource(transformed_gradings);
}
+async function validateInputs() {
+ if ($("#input-grading-name").val() != null && $("#input-grading-name").val().length > 0) {
+ $("#btn-add-grading").removeAttr("disabled");
+ $("#input-grading-name").addClass("valid");
+ $("#input-grading-name").removeClass("invalid");
+ } else {
+ $("#btn-add-grading").attr("disabled", "disabled");
+ $("#input-grading-name").addClass("invalid");
+ $("#input-grading-name").removeClass("valid");
+ }
+}
+
function gradingClickHandler(eventClickInfo) {
let grading_id = parseInt(eventClickInfo.event.id);
let grading_subject = gradings[grading_id]["subject"];
@@ -144,19 +156,21 @@ function gradingClickHandler(eventClickInfo) {
M.Sidenav.getInstance(modal).open();
}
- function setupPickers() {
- // Setup pickers, todo (adding an event), to be stored in messages
- var date_object = new Date();
- let elems = document.querySelectorAll('#datepicker-add');
- let options = {
- autoClose: true,
- format: "dd.mm.yyyy",
- defaultDate: date_object,
- setDefaultDate: true,
- firstDay: 1
- }
- instances = M.Datepicker.init(elems, options);
+
+function setupPickers() {
+ // Setup pickers, todo (adding an event), to be stored in messages
+ var date_object = new Date();
+ let elems = document.querySelectorAll('#datepicker-add');
+ let options = {
+ autoClose: true,
+ format: "dd.mm.yyyy",
+ defaultDate: date_object,
+ setDefaultDate: true,
+ firstDay: 1
}
+ instances = M.Datepicker.init(elems, options);
+}
+
document.addEventListener("DOMContentLoaded", () => {
@@ -176,6 +190,7 @@ document.addEventListener("DOMContentLoaded", () => {
calendar_obj.render();
// Modal for adding gradings
+
// setupPickers(); // todo (adding an event), to be stored in messages
// // Setup modals
// const modal_elems = document.querySelectorAll('.modal');
@@ -186,6 +201,7 @@ document.addEventListener("DOMContentLoaded", () => {
// };
// M.Modal.init(modal_elems, modal_options);
+
loadGradings(true);
// Setup refresh handler
$("#refresh-icon").click(() => {
diff --git a/assets/js/gsec.js b/assets/js/gsec.js
index 96ea624..6cef90e 100644
--- a/assets/js/gsec.js
+++ b/assets/js/gsec.js
@@ -28,6 +28,8 @@ const GSEC_MSGTYPE_DELETED = 2;
const GSEC_ERR_LOGIN = "GSEC LOGIN ERROR";
const GSEC_NO_ABSENCES = "noAbsences";
const GSEC_MSGTYPES = ["msgReceived", "msgSent", "msgDeleted"];
+const GSEC_NORMAL_GRADE = "GSEC NORMAL GRADE";
+const GSEC_ZAKLJUCNA_GRADE = "GSEC ZAKLJUCNA GRADE";
class gsec {
@@ -480,39 +482,49 @@ class gsec {
let gradeSpans = parsed.getElementsByClassName("txtVOcObd");
for (const grade of gradeSpans) {
var ist = grade.getElementsByTagName("span")[0].getAttribute("title").split("\n");
- var date = ist[0].split(": ")[1].trim().split(".");
- var dateObj = new Date(Date.parse(`${date[2]}-${date[1]}-${date[0]}`));
- var teacher = ist[1].split(": ")[1].trim();
- var subject = ist[2].split(": ")[1].trim();
- var name = [];
-
- name.push(ist[3].split(": ")[1].trim())
- name.push(ist[4].split(": ")[1].trim())
- name.push(ist[5].split(": ")[1].trim())
-
- var gradeNumber = Number(grade.getElementsByTagName("span")[0].innerHTML);
- var temporary = grade.getElementsByTagName("span")[0].classList.contains("ocVmesna");
-
- var gradeToAdd = {
- "date": dateObj,
- "teacher": teacher,
- "subject": subject,
- "name": name,
- "temporary": temporary,
- "grade": gradeNumber
- };
-
- if (grade.getElementsByTagName("span").length > 1) {
- if(grade.getElementsByTagName("span")[1].classList.contains("ocVmesna")) {
- gradeToAdd["temporary"] = true;
- } else {
- gradeToAdd["temporary"] = false;
+ if (ist.length == 1) { // that means the txtVOcObd defines a zaključno oceno // gimsis is just utter crap
+ var gradeToAdd = {
+ "gradeType": GSEC_ZAKLJUCNA_GRADE,
+ "grade": Number(grade.getElementsByTagName("span")[0].innerHTML),
+ "subject": grade.parentElement.parentElement.parentElement.parentElement.
+ getElementsByTagName("th")[0].innerText // I fucking hope this works
}
- gradeToAdd["grade"] = Number(grade.getElementsByTagName("span")[1].innerHTML);
- gradeToAdd["oldgrade"] = Number(grade.getElementsByTagName("span")[0].innerHTML);
+ grades.push(gradeToAdd);
+ } else {
+ var date = ist[0].split(": ")[1].trim().split(".");
+ var dateObj = new Date(Date.parse(`${date[2]}-${date[1]}-${date[0]}`));
+ var teacher = ist[1].split(": ")[1].trim();
+ var subject = ist[2].split(": ")[1].trim();
+ var name = [];
+
+ name.push(ist[3].split(": ")[1].trim())
+ name.push(ist[4].split(": ")[1].trim())
+ name.push(ist[5].split(": ")[1].trim())
+
+ var gradeNumber = Number(grade.getElementsByTagName("span")[0].innerHTML);
+ var temporary = grade.getElementsByTagName("span")[0].classList.contains("ocVmesna");
+
+ var gradeToAdd = {
+ "gradeType": GSEC_NORMAL_GRADE, // well said I must say
+ "date": dateObj,
+ "teacher": teacher,
+ "subject": subject,
+ "name": name,
+ "temporary": temporary,
+ "grade": gradeNumber
+ };
+
+ if (grade.getElementsByTagName("span").length > 1) {
+ if(grade.getElementsByTagName("span")[1].classList.contains("ocVmesna")) {
+ gradeToAdd["temporary"] = true;
+ } else {
+ gradeToAdd["temporary"] = false;
+ }
+ gradeToAdd["grade"] = Number(grade.getElementsByTagName("span")[1].innerHTML);
+ gradeToAdd["oldgrade"] = Number(grade.getElementsByTagName("span")[0].innerHTML);
+ }
+ grades.push(gradeToAdd);
}
- grades.push(gradeToAdd);
-
}
resolve(grades);
},
diff --git a/assets/js/lang/bundle.js b/assets/js/lang/bundle.js
index 8270527..b311bf4 100644
--- a/assets/js/lang/bundle.js
+++ b/assets/js/lang/bundle.js
@@ -10,7 +10,7 @@ var dateString = {
return mesecileta[mesl];
},
longFormatted: (dateObject) => {
- return dateString.day(dateObject.getDay())+", "+(dateObject.getDate())+". "+dateString.month(dateObject.getMonth())+" "+dateObject.getFullYear();
+ return `${dateString.day(dateObject.getDay())}, ${(dateObject.getDate())}. ${dateString.month(dateObject.getMonth())} ${dateObject.getFullYear()}`;
}
};
async function refreshLangDOM() {
@@ -143,7 +143,7 @@ var langstrings = {
and: "and",
thePrivacyPolicy: "the privacy policy",
loginFailed: "login failed",
- browserNotSupported: "bežiapp won't work on your device, unless you update your Internet browser",
+ browserNotSupported: "bežiapp won't work on your device, unless you update your Internet browser",
// index
timetable: "timetable",
gradings: "gradings",
@@ -158,7 +158,11 @@ var langstrings = {
// timetable
noPeriods: "no periods in selected week",
// gradings
+ date: "date",
+ description: "description",
+ add: "add",
requestFailed: "request failed",
+ addGrading: "add grading",
noInternetConnection: "no internet connection",
// grades
temporary: "temporary",
@@ -168,6 +172,7 @@ var langstrings = {
type: "type",
term: "term",
teacher: "teacher",
+ zakljucneGradess: "grades in red are final grades that appear on your end-of-year certificate and are decided by your teacher. They are not averages like grades in black. Should you have any questions or complaints about them, contact your teacher",
// teachers
name: "name",
schoolSubject: "subject",
@@ -186,6 +191,7 @@ var langstrings = {
// messaging
loadingMessages: "Loading messages...",
sendAMessage: "send a message",
+ send: "send",
recipient: "recipient",
messageSubject: "subject",
messageBody: "message body",
@@ -226,7 +232,7 @@ var langstrings = {
recipientNotInDirectory: "recipient is not in directory.",
chatExternalInfo: "you have just received a chat. Chats are not supported by GimSIS, so you must reply by changing the subject to something else. Chat body: ",
// meals
- loginError: "login error",
+ loginError: "login error",
loginToLopolis: "login to Lopolis",
loginToLopolisNote: "it seems like you're not currently logged in to eRestavracija, so this form has been presented to you. You have a different username and password combination used for applying and opting out of of menus. In order to use this feature, you have to log in with your Lopolis account.",
logInToLopolis: "log in to Lopolis",
@@ -359,7 +365,11 @@ var langstrings = {
logout: "odjava",
settings: "nastavitve",
// gradings
+ date: "datum",
+ description: "opis",
+ add: "dodaj",
requestFailed: "zahteva spodletela",
+ addGrading: "dodaj ocenjevanje",
noInternetConnection: "ni povezave s spletom",
// grades
temporary: "začasno",
@@ -369,6 +379,7 @@ var langstrings = {
type: "tip",
term: "rok",
teacher: "profesor",
+ zakljucneGradess: "zaključne ocene, ki bodo na spričevalu, so označene z rdečo, povprečja ocen pa so v črni barvi. V kolikor imate kakršnekoli pritožbe ali vprašanja glede zaključnih ocen, povprašajte profesorja",
// teachers
name: "ime",
schoolSubject: "predmet",
@@ -376,7 +387,7 @@ var langstrings = {
// absences
from: "od",
to: "do",
- cancel: "preklic",
+ cancel: "prekliči",
ok: "v redu",
noAbsences: "ni izostankov v izbranem časovnem obdobju",
lesson: "ura",
@@ -387,6 +398,7 @@ var langstrings = {
// messaging
loadingMessages: "Nalagam sporočila...",
sendAMessage: "pošlji sporočilo",
+ send: "pošlji",
recipient: "prejemnik",
messageSubject: "zadeva",
messageBody: "telo",
@@ -499,7 +511,7 @@ var langstrings = {
on: "vklopljeno",
off: "izklopljeno",
selectErrorReporting: "ali naj so napake v aplikaciji posredovane razvijalcem?",
- triggerWarning: "spodnji gumb omogoči dodatne možnosti, ki lahko razburijo/vznevoljijo nekatere uporabnike. Če omogočite stikalo se strinjate, da avtorjev in/ali njihovih osebnih prepričanj ne boste povezovali s katerokoli od dodatnih omogočenih možnosti.",
+ triggerWarning: "spodnji gumb omogoči dodatne možnosti, ki lahko razburijo/vznevoljijo nekatere uporabnike. Če omogočite stikalo, se strinjate, da avtorjev in/ali njihovih osebnih prepričanj ne boste povezovali s katerokoli od dodatnih omogočenih možnosti",
triggerAgreement: "strinjam se z zgoraj navedenimi pogoji",
triggerWarningSet: "spremenili ste stanje dodatnih nastavitev",
additionalOptions: "dodatne nastavitve",
diff --git a/assets/js/login.js b/assets/js/login.js
index ab59058..fc6dfcd 100644
--- a/assets/js/login.js
+++ b/assets/js/login.js
@@ -33,7 +33,7 @@ function login() {
dataType: "script",
});
try {
- gsecInstance = new gsec();
+ gsecInstance = new gsec();
} catch (error) {
alert(D("browserNotSupported"));
}
@@ -45,6 +45,7 @@ function login() {
localforage.setItem("username", username),
localforage.setItem("password", password)
];
+ read_val(0);
Promise.all(promises_to_run).then(function () {
window.location.replace("/pages/timetable.html");
});
diff --git a/assets/js/messaging.js b/assets/js/messaging.js
index 890da18..0f55e1a 100644
--- a/assets/js/messaging.js
+++ b/assets/js/messaging.js
@@ -587,7 +587,7 @@ function setupEventListeners() {
function getUrlParameter(sParam) {
const url_params = new URLSearchParams(window.location.search);
const found_param = url_params.get(sParam);
- return found_param
+ return found_param;
}
var additionalstufftoaddtomessage = "";
diff --git a/assets/js/setup-storage.js b/assets/js/setup-storage.js
index 0d2552a..c862d5f 100644
--- a/assets/js/setup-storage.js
+++ b/assets/js/setup-storage.js
@@ -15,7 +15,7 @@ async function setupStorage(force = false) {
localforage.setItem("gradings", []),
localforage.setItem("grades", []),
localforage.setItem("absences", {}),
- localforage.setItem("messages", { "0": [], "1": [], "2": []}), // see messages.js:129, commit 8eb9ca9caca30fbbe023243657535ab4088be377
+ localforage.setItem("messages", [[], [], []]), // see messages.js:129, commit 8eb9ca9caca30fbbe023243657535ab4088be377
localforage.setItem("directory", {}), //\\ well I could remember my own code but I didn't.
localforage.setItem("meals", {}),
localforage.setItem("chosenLang", "en"),
diff --git a/assets/pages-src/grades.bvr b/assets/pages-src/grades.bvr
index f47d462..5d05c3e 100644
--- a/assets/pages-src/grades.bvr
+++ b/assets/pages-src/grades.bvr
@@ -91,7 +91,8 @@
</span>
</label>
</p>
- <ul class="collapsible" id="grades-collapsible"></ul>
+ <ul class="collapsible" id="grades-collapsible"></ul>
+ <p><x-du>zakljucneGradess</x-du></p>
</div>
</body>
diff --git a/assets/pages-src/gradings.bvr b/assets/pages-src/gradings.bvr
index 672b8a2..20a2d39 100644
--- a/assets/pages-src/gradings.bvr
+++ b/assets/pages-src/gradings.bvr
@@ -75,37 +75,15 @@
<br>
<div id="calendar"></div>
</div>
-<!--
- <div class="container">
- <div class="row">
- <div class="col s12">
- <h4>Add a personal event</h4>
- <div class="row">
- <div class="input-field col s5">
- <input required="required" type="text" class="datepicker" id="datepicker-add">
- <label for="datepicker-add">Date</label>
- </div>
- <div class="input-field col s5">
- <input required="required" id="event_name" type="text" class="validate">
- <label for="event_name">Name</label>
- </div>
- <div class="input-field col s2">
- <button id="event_btn" class="btn waves-effect waves-light" type="text" class="validate">
- <i class="material-icons">event_available</i>
- </button>
- </div>
- </div>
- <div class="row">
- <div class="input-field col s12">
- <textarea required="required" id="event_description" class="materialize-textarea"></textarea>
- <label for="event_description">Description</label>
- </div>
- </div>
- </div>
- </div>
- </div>
--->
+ <!-- FAB -->
+ <!-- <div class="fixed-action-btn" id="fab-new">
+ <a class="btn-floating btn-large fab-new-message modal-trigger" href="#beziapp-add-grading">
+ <i class="large material-icons">add</i>
+ </a>
+ </div> -->
+ <@?i grading-add-modal@>
+
</body>
</html>
diff --git a/assets/pages-src/misc/grading-add-modal.bvr b/assets/pages-src/misc/grading-add-modal.bvr
new file mode 100644
index 0000000..0b7189d
--- /dev/null
+++ b/assets/pages-src/misc/grading-add-modal.bvr
@@ -0,0 +1,35 @@
+ <!-- Modal Structure -->
+ <div id="beziapp-add-grading" class="modal modal-fixed-footer">
+
+ <div class="modal-content">
+
+ <h4 class="general-text"><x-su>addGrading</x-su></h4>
+
+ <div class="row">
+ <div class="input-field col s6">
+ <input required="required" type="text" class="datepicker" id="datepicker-add">
+ <label for="datepicker-add"><x-su>date</x-su></label>
+ </div>
+ <div class="input-field col s6">
+ <input required="required" id="input-grading-name" type="text" class="validate">
+ <label for="event_name"><x-su>name</x-su></label>
+ </div>
+ </div>
+
+ <div class="row">
+ <div class="input-field col s12">
+ <textarea required="required" id="input-grading-description" class="materialize-textarea"></textarea>
+ <label for="event_description"><x-su>description</x-su></label>
+ </div>
+ </div>
+
+ </div>
+
+ <div class="modal-footer">
+ <div id="modal-footer-right">
+ <a href="#" class="modal-close waves-effect waves-green btn-flat"><x-su>cancel</x-su> <i class="material-icons right">close</i></a>
+ <a href="#" id="btn-add-grading" class="modal-close waves-effect waves-green btn-flat" disabled><x-su>add</x-su> <i class="material-icons right">add</i></a>
+ </div>
+ </div>
+ </div>
+
diff --git a/assets/pages-src/misc/msg-compose-modal.bvr b/assets/pages-src/misc/msg-compose-modal.bvr
index 5889214..48afaaf 100644
--- a/assets/pages-src/misc/msg-compose-modal.bvr
+++ b/assets/pages-src/misc/msg-compose-modal.bvr
@@ -57,8 +57,8 @@
<div class="modal-footer">
<div id="modal-footer-right">
- <a href="#" class="modal-close waves-effect waves-green btn-flat">Cancel <i class="material-icons right">close</i></a>
- <a href="#" id="msg-send" class="modal-close waves-effect waves-green btn-flat" disabled>Send <i class="material-icons right">send</i></a>
+ <a href="#" class="modal-close waves-effect waves-green btn-flat"><x-su>cancel</x-su> <i class="material-icons right">close</i></a>
+ <a href="#" id="msg-send" class="modal-close waves-effect waves-green btn-flat" disabled><x-su>send</x-su> <i class="material-icons right">send</i></a>
</div>
</div>
</div>