Skip to content

Implemented sort by answer and rewrote core part of code to allow for multi filters #49

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 6 commits into
base: master
Choose a base branch
from
Open
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 46 additions & 24 deletions src/assignment.js
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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");
Expand All @@ -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);
Expand All @@ -158,38 +166,52 @@ 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"));
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 = 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) {
//assignmentElements[i].style.display = "none"
elementsToHide.push(assignmentElements[i]);
}
}
}
}

// Hide elements in a batch
elementsToHide.forEach(element => {
element.style.display = "none";
});
}