您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
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(); })();