diff --git a/src/assignment.js b/src/assignment.js index eddd033..850cf7f 100644 --- a/src/assignment.js +++ b/src/assignment.js @@ -2,14 +2,20 @@ const assignmentContainer = document.getElementById("printStudentAssignmentsArea if (assignmentContainer) { const assignmentsMenuBar = assignmentContainer.querySelector(".ls-std-rowblock").children; + assignmentsMenuBar[0].append["buttons"] = [] // Toggle-fields - const deliveredToggleField = createAssignmentField("Afleveret", "hideDelivered", "Skjul afleveret opgaver", true); + const deliveredToggleField = createAssignmentField([["5", "Afleveret"]], "hideDelivered", "Skjul afleveret opgaver", true); assignmentsMenuBar[0].append(deliveredToggleField); - const missingToggleField = createAssignmentField("Mangler", "hideMissing", "Skjul manglende opgaver", false); + const missingToggleField = createAssignmentField([["5","Mangler"]], "hideMissing", "Skjul manglende opgaver", false); assignmentsMenuBar[0].append(missingToggleField); + const answeredToggleField = createAssignmentField([["7","Lærer"], ["5","Venter"]], "showAnswered", "Vis kun opgaver med svar", false) + assignmentsMenuBar[0].append(answeredToggleField); + + localStorage.setItem("items", JSON.stringify(["hideMissing", "hideDelivered", "showAnswered"])) + // BUG: This doens't work properly. Please see https://github.com/logicguy1/FOSS-Lectio-improvements/issues/8 // const waitingToggleField = createAssignmentField("Lærer", "hideWaiting", "Skjul opgaver uden feedback", false); // assignmentsMenuBar[0].append(waitingToggleField); @@ -128,7 +134,7 @@ function createAssignmentField(checkFor, item, fieldText, defaultState) { toggleButton.id = `${item}-${checkFor}`; toggleButton.type = "checkbox"; - toggleButton.checked = getInitialState(item, defaultState); + toggleButton.checked = getInitialState(item, defaultState, checkFor); const toggleLabel = document.createElement("label"); @@ -137,18 +143,20 @@ function createAssignmentField(checkFor, item, fieldText, defaultState) { toggleLabel.innerText = fieldText; - showHideAssignments(checkFor, item); + if (defaultState) { + showHideAssignments(); + } toggleButton.addEventListener("change", function () { if (toggleButton.checked) { toggleButton.setAttribute("checked", true); - localStorage.setItem(item, true); + localStorage.setItem(item, JSON.stringify([checkFor,true])); } else { toggleButton.setAttribute("checked", false); - localStorage.setItem(item, false); + localStorage.setItem(item, JSON.stringify([checkFor,false])); } - showHideAssignments(checkFor, item); + showHideAssignments(); }); assignmentsToggleField.append(toggleButton); @@ -158,38 +166,53 @@ function createAssignmentField(checkFor, item, fieldText, defaultState) { return assignmentsToggleField; } -function getInitialState(item, defaultState) { - const itemState = localStorage.getItem(item); - +function getInitialState(item, defaultState, checkFor) { + const itemState = JSON.parse(localStorage.getItem(item))[1]; if (itemState === "true") { return true; } else if (itemState === "false") { return false; } - localStorage.setItem(item, defaultState); + localStorage.setItem(item, JSON.stringify([checkFor,defaultState])); return defaultState; } -function showHideAssignments(checkFor, item) { +function showHideAssignments() { const assignmentsTable = document.getElementById("s_m_Content_Content_ExerciseGV"); const assignmentsTBody = assignmentsTable.getElementsByTagName("tbody"); const assignmentElements = assignmentsTBody[0].getElementsByTagName("tr"); - let assignmentState = "table-row"; - - if (localStorage.getItem(item) === "true") { - assignmentState = "none"; - } else { - assignmentState = "table-row"; + for (let i = 0; i < assignmentElements.length; i++) { + const assignmentTD = assignmentElements[i].getElementsByTagName("td"); + assignmentElements[i].style.display = "table-row" } - for (let i = 1; i < assignmentElements.length; i++) { - const assignmentTD = assignmentElements[i].getElementsByTagName("td"); - if (assignmentTD[5].innerText === checkFor) { - assignmentElements[i].style.display = assignmentState; - } else if (assignmentTD[7].innerText === checkFor) { - assignmentElements[i].style.display = assignmentState; + const elementsToHide = [] + + const localStorageItems = JSON.parse(localStorage.getItem("items")); + + if (localStorageItems) { + const items = localStorageItems.map(item => JSON.parse(localStorage.getItem(item))); + + for (let o = 0; o < items.length; o++) { + + const checkFor = items[o][0] + const state = items[o][1] + + for (let i = 1; i < assignmentElements.length; i++) { + const assignmentTD = assignmentElements[i].getElementsByTagName("td"); + for (let u = 0; u < checkFor.length; u++) { + if (assignmentTD[checkFor[u][0]].innerText === checkFor[u][1] && state) { + elementsToHide.push(assignmentElements[i]); + } + } + } } + + // Hide elements in a batch + elementsToHide.forEach(element => { + element.style.display = "none"; + }); } }