From 49c2525bcafae493a334b93e0dc63dd03f9bd668 Mon Sep 17 00:00:00 2001 From: silasm01 Date: Thu, 25 Jan 2024 20:43:53 +0100 Subject: [PATCH 1/6] Implemented sort by answer and rewrote core part of the code to allow multi-filters --- src/assignment.js | 57 ++++++++++++++++++++++++++++++----------------- 1 file changed, 36 insertions(+), 21 deletions(-) diff --git a/src/assignment.js b/src/assignment.js index eddd033..37fb5d7 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,15 +143,17 @@ function createAssignmentField(checkFor, item, fieldText, defaultState) { toggleLabel.innerText = fieldText; - showHideAssignments(checkFor, item); + if (defaultState) { + showHideAssignments(checkFor, item); + } 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); @@ -158,16 +166,15 @@ 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; } @@ -176,20 +183,28 @@ function showHideAssignments(checkFor, item) { const assignmentsTBody = assignmentsTable.getElementsByTagName("tbody"); const assignmentElements = assignmentsTBody[0].getElementsByTagName("tr"); - let assignmentState = "table-row"; + const items = JSON.parse(localStorage.getItem("items")) - 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; + for (let o = 0; o < items.length; o++) { + + const item = JSON.parse(localStorage.getItem(items[o])) + const checkFor = item[0] + const state = item[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]) { + if (state) { + assignmentElements[i].style.display = "none" + } + } + } } } } From 749dbb5a0ff06f62edc3ec854e21ced78f9a011f Mon Sep 17 00:00:00 2001 From: silasm01 Date: Thu, 25 Jan 2024 20:49:06 +0100 Subject: [PATCH 2/6] small cleanup --- src/assignment.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/assignment.js b/src/assignment.js index 37fb5d7..35fddfc 100644 --- a/src/assignment.js +++ b/src/assignment.js @@ -144,7 +144,7 @@ function createAssignmentField(checkFor, item, fieldText, defaultState) { if (defaultState) { - showHideAssignments(checkFor, item); + showHideAssignments(); } toggleButton.addEventListener("change", function () { @@ -156,7 +156,7 @@ function createAssignmentField(checkFor, item, fieldText, defaultState) { localStorage.setItem(item, JSON.stringify([checkFor,false])); } - showHideAssignments(checkFor, item); + showHideAssignments(); }); assignmentsToggleField.append(toggleButton); @@ -178,7 +178,7 @@ function getInitialState(item, defaultState, checkFor) { 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"); From 6a1ca25170653cfdf390e5db508f58e1dede947e Mon Sep 17 00:00:00 2001 From: silasm01 Date: Sat, 27 Jan 2024 20:19:35 +0100 Subject: [PATCH 3/6] Update based on PR review --- src/assignment.js | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/src/assignment.js b/src/assignment.js index 35fddfc..dcdfd9f 100644 --- a/src/assignment.js +++ b/src/assignment.js @@ -183,28 +183,35 @@ function showHideAssignments() { const assignmentsTBody = assignmentsTable.getElementsByTagName("tbody"); const assignmentElements = assignmentsTBody[0].getElementsByTagName("tr"); - const items = JSON.parse(localStorage.getItem("items")) - for (let i = 0; i < assignmentElements.length; i++) { const assignmentTD = assignmentElements[i].getElementsByTagName("td"); assignmentElements[i].style.display = "table-row" } + const elementsToHide = [] + + const localStorageItems = JSON.parse(localStorage.getItem("items")); + const items = localStorageItems.map(item => JSON.parse(localStorage.getItem(item))); + for (let o = 0; o < items.length; o++) { const item = JSON.parse(localStorage.getItem(items[o])) - const checkFor = item[0] - const state = item[1] + 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]) { - if (state) { - assignmentElements[i].style.display = "none" - } + if (assignmentTD[checkFor[u][0]].innerText === checkFor[u][1] && state) { + //assignmentElements[i].style.display = "none" + elementsToHide.push(assignmentElements[i]); } } } } + + // Hide elements in a batch + elementsToHide.forEach(element => { + element.style.display = "none"; + }); } From 07d1f902a8f4d0e6d6e6d85c6445bdedb2979cbe Mon Sep 17 00:00:00 2001 From: Reikimann <78156411+Reikimann@users.noreply.github.com> Date: Fri, 2 Feb 2024 09:06:30 +0000 Subject: [PATCH 4/6] Update src/assignment.js Deleted comment --- src/assignment.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/assignment.js b/src/assignment.js index dcdfd9f..4007159 100644 --- a/src/assignment.js +++ b/src/assignment.js @@ -203,7 +203,6 @@ function showHideAssignments() { const assignmentTD = assignmentElements[i].getElementsByTagName("td"); for (let u = 0; u < checkFor.length; u++) { if (assignmentTD[checkFor[u][0]].innerText === checkFor[u][1] && state) { - //assignmentElements[i].style.display = "none" elementsToHide.push(assignmentElements[i]); } } From fde41462b7b4f9ca2404ecdb32106b1033f68f41 Mon Sep 17 00:00:00 2001 From: Reikimann <78156411+Reikimann@users.noreply.github.com> Date: Fri, 2 Feb 2024 09:09:30 +0000 Subject: [PATCH 5/6] Update src/assignment.js Deleted unused line. --- src/assignment.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/assignment.js b/src/assignment.js index 4007159..1d638bd 100644 --- a/src/assignment.js +++ b/src/assignment.js @@ -195,7 +195,6 @@ function showHideAssignments() { for (let o = 0; o < items.length; o++) { - const item = JSON.parse(localStorage.getItem(items[o])) const checkFor = items[o][0] const state = items[o][1] From a59520631980c5095bcf1346060ba1c757318f68 Mon Sep 17 00:00:00 2001 From: silasm01 Date: Fri, 2 Feb 2024 16:06:24 +0100 Subject: [PATCH 6/6] Fixed error relating to chrome trying to access data before it exist --- src/assignment.js | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/src/assignment.js b/src/assignment.js index 1d638bd..850cf7f 100644 --- a/src/assignment.js +++ b/src/assignment.js @@ -191,25 +191,28 @@ function showHideAssignments() { const elementsToHide = [] const localStorageItems = JSON.parse(localStorage.getItem("items")); - const items = localStorageItems.map(item => JSON.parse(localStorage.getItem(item))); + + if (localStorageItems) { + const items = localStorageItems.map(item => JSON.parse(localStorage.getItem(item))); - for (let o = 0; o < items.length; o++) { + for (let o = 0; o < items.length; o++) { - const checkFor = items[o][0] - const state = items[o][1] + 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]); + 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"; - }); + // Hide elements in a batch + elementsToHide.forEach(element => { + element.style.display = "none"; + }); + } }