Disable elements in a course list based on data-courseid
// ==UserScript==
// @name Uniovi Course Hider
// @namespace https://github.com/iamkingclutch3/UnioviCourseRemover
// @version 0.1
// @description Disable elements in a course list based on data-courseid
// @author kingclutch23
// @match https://www.campusvirtual.uniovi.es/*
// @grant GM_getValue
// @grant GM_setValue
// ==/UserScript==
(function () {
"use strict";
// Add jQuery
var jq = document.createElement("script");
jq.src = "https://code.jquery.com/jquery-3.6.4.min.js";
document.getElementsByTagName("head")[0].appendChild(jq);
// Wait for jQuery to be ready
jq.onload = function () {
// Your script goes here
main();
};
function main() {
// Add checkboxes and move marked courses to the bottom
$(".courses.frontpage-course-list-enrolled .coursebox").each(function () {
var courseId = $(this).data("courseid");
// Create a div with checkbox for each course element
var checkboxDiv = $(
'<div style="display: flex; justify-content: flex-end; align-items: center;"></div>'
);
var checkbox = $(
'<input type="checkbox" class="disable-checkbox" data-courseid="' +
courseId +
'" style="margin-left: auto;">'
);
// Load saved state
var savedState = GM_getValue(courseId, false);
checkbox.prop("checked", savedState);
// Save state when checkbox is clicked
checkbox.on("change", function () {
GM_setValue(courseId, $(this).prop("checked"));
});
// Append the checkbox div to the end of the course element and move marked courses to the bottom
if ($(this).find(".disable-checkbox").length === 0) {
$(this)
.css("position", "relative")
.append(checkboxDiv.append(checkbox));
}
// Load the checkbox state from localStorage
var isChecked = localStorage.getItem("course_" + courseId);
if (isChecked === "true") {
checkbox.prop("checked", true);
disableCourse(courseId);
moveCourseToBottom(courseId);
}
});
// Add a reset button
var resetButton = $('<button id="resetButton">Reset Visibility</button>');
$(".courses.frontpage-course-list-enrolled").prepend(resetButton);
// Attach event listener to the checkboxes
$(".disable-checkbox").change(function () {
var courseId = $(this).data("courseid");
// Toggle visibility based on checkbox state
if ($(this).prop("checked")) {
disableCourse(courseId);
moveCourseToBottom(courseId);
// Save the checkbox state to localStorage
localStorage.setItem("course_" + courseId, "true");
} else {
enableCourse(courseId);
// Remove the checkbox state from localStorage
localStorage.removeItem("course_" + courseId);
}
});
// Attach event listener to the reset button
$("#resetButton").click(function () {
// Reset visibility for all courses
resetVisibility();
// Clear all checkbox states from localStorage
clearLocalStorage();
});
}
function disableCourse(courseId) {
$(
'.courses.frontpage-course-list-enrolled .coursebox[data-courseid="' +
courseId +
'"]'
).css("opacity", "0.5");
//$('.courses.frontpage-course-list-enrolled .coursebox[data-courseid="' + courseId + '"]').hide();
}
function enableCourse(courseId) {
$(
'.courses.frontpage-course-list-enrolled .coursebox[data-courseid="' +
courseId +
'"]'
).css("opacity", "1");
//$('.courses.frontpage-course-list-enrolled .coursebox[data-courseid="' + courseId + '"]').show();
}
function resetVisibility() {
$(".courses.frontpage-course-list-enrolled .coursebox").css("opacity", "1");
//$('.courses.frontpage-course-list-enrolled .coursebox').show();
}
function moveCourseToBottom(courseId) {
$(
'.courses.frontpage-course-list-enrolled .coursebox[data-courseid="' +
courseId +
'"]'
).appendTo(".courses.frontpage-course-list-enrolled");
}
function clearLocalStorage() {
// Clear all checkbox states from localStorage
Object.keys(localStorage)
.filter((key) => key.startsWith("course_"))
.forEach((key) => localStorage.removeItem(key));
}
})();