Allows marking lessons as completed in the site: dotnettutorials.net
// ==UserScript==
// @name https://dotnettutorials.net/ - Marking items complete
// @description Allows marking lessons as completed in the site: dotnettutorials.net
// @version 1
// @license MIT
// @namespace vivek201
// @grant GM.getValue
// @grant GM.setValue
// @include https://dotnettutorials.net/*
// ==/UserScript==
(() => {
let completedItems = [];
async function init() {
completedItems = [...JSON.parse(await GM.getValue("completedItems", "[]"))];
console.log('Starting setup...');
setupStyle();
let courseOutline = document.querySelector('.llms-course-outline');
if (courseOutline) {
console.log('Course outline found...');
let lessons = Array.from(courseOutline.querySelectorAll('.llms-section .llms-lesson li'));
if (lessons.length && completedItems.length) {
console.log('Completed items found...');
console.log('Checking completed items...');
let completedLessons = lessons.filter(x => completedItems.includes(x.innerText.trim()));
completedLessons.forEach(x => {
x.querySelector('.llms-lesson-complete').classList.add('checked');
});
}
console.log('Setting up handler for functionality...');
courseOutline.addEventListener('click', onClick);
}
}
async function onClick(e) {
let item;
if (e.target.tagName.toUpperCase() == "I") {
item = e.target.parentElement;
} else if (e.target.tagName.toUpperCase() == "SPAN" && e.target.classList.contains("llms-lesson-complete")) {
item = e.target;
}
if (item) {
let lessonTitle = item.parentElement.querySelector('.lesson-title').innerText.trim();
console.log('Clicked...', lessonTitle);
if (item.classList.contains("checked")) {
console.log('Uncompleting...');
completedItems = completedItems.filter(x => x != lessonTitle);
} else {
console.log('Completing...')
completedItems.push(lessonTitle);
}
completedItems = [...new Set(completedItems)];
await GM.setValue("completedItems", JSON.stringify(completedItems));
item.classList.toggle('checked');
}
}
function setupStyle() {
console.log('Setting up styles...');
let styles = `.llms-lesson-complete { cursor: pointer; } .llms-lesson-complete.checked { color: green; }`;
let $styles = document.createElement('style');
$styles.innerText = styles;
document.body.appendChild($styles);
console.log('Completed setting up styles...');
}
init();
})();