[蓝墨云] 重做单选和多选

显示正确的选项方便复习

// ==UserScript==
// @name         [蓝墨云] 重做单选和多选
// @namespace    ckylin-script-mosoteach-redochoices
// @version      0.4
// @description  显示正确的选项方便复习
// @author       CKylinMC
// @match        https://www.mosoteach.cn/*
// @grant        none
// @license MIT
// ==/UserScript==

(function() {
    'use strict';

    let highlighted = false;
	const get = (q,p=document.body) => p.querySelector(q);
	const getAll = (q,p=document.body) => p.querySelectorAll(q);
    function highlightCurrectAnswers(){
        if(highlighted) return; else highlighted = true;
        const list = get(".main-box .topic-list");
        const items = getAll(".topic-item",list);
        const ansMap = ['A','B','C','D','E','F','G','H','I','J','K'];
        for(let it of items){
            try{
				const flag = get(".t-flag",it);
				if(flag){
					flag.className = "t-flag";
				}
				const choicesContainer = get(".t-option.t-item",it);
                const choices = [...getAll(".t-option.t-item>.opt",it)];
                const currect = get(".t-answer.t-item>.answer-l>.light",it);
                const answers = currect.innerHTML.trim().split('');
                const indexes = [];
                for(let ans of answers){
                    let ind = ansMap.indexOf(ans.toUpperCase());
                    if(ind>=0 && !indexes.includes(ind)) indexes.push(ind);
                }
                choicesContainer.setAttribute("data-answer-info",JSON.stringify({
					"answers": indexes,
					"answered": [],
					"wronged": false,
					"lock": false
                }))
                choices.forEach((el,ind)=>{
					el.setAttribute("data-answer-index",ind);
					el.style.fontSize = "larger";
					el.style.cursor = "pointer"
					el.classList.add("hl-hover");
                    if(!indexes.includes(ind)){
                        //el.style.opacity = ".1";
                        //el.style.fontSize = "smaller";
                        el.setAttribute("data-answer-currect","no")
                    }else{
                        //el.style.fontSize = "larger";
                        el.setAttribute("data-answer-currect","yes")
                    }
                    el.onclick = optionClickCallback;
                })
            }catch(Exception){}
        }
    }

    function optionClickCallback(e){
		let current = e.target;
		if(current.classList.contains("opt-content")) current = current.parentNode;
		const parent = current.parentNode;
		const container = parent.parentNode.parentNode.parentNode;
        const answerEl = get(".t-answer.t-item",container);
		const flag = get(".t-flag",container);
		const ind = parseInt(current.getAttribute("data-answer-index"));
		const info = JSON.parse(parent.getAttribute("data-answer-info"));
		if(info.lock) return;
		if(current.getAttribute("data-answer-currect")=="yes"){
			current.classList.add("hl-true");
			if(!info.answered.includes(ind)){
				info.answered.push(ind);
			}
		}else{
			current.classList.add("hl-false");
			info.wronged = true;
            answerEl.style.display = "block";
		}
		if(info.wronged) {
			parent.previousElementSibling.style.color = "red";
			flag.classList.add("t-flag-wrong");
                let ico = get(".flag-icon",flag);
                ico.className = "flag-icon el-icon-close";
		}
		if(info.answered.length==info.answers.length) {
			if(!info.wronged){
				parent.previousElementSibling.style.color = "darkgreen";
				flag.classList.add("t-flag-right");
                let ico = get(".flag-icon",flag);
                ico.className = "flag-icon el-icon-check";
			}
			info.lock = true;
		}
		parent.setAttribute("data-answer-info",JSON.stringify(info));
    }

    function customcss(yes=true){
        const old = document.querySelector("#rdcustomcss");
        old&&old.remove();
        if(yes){
            const css = document.createElement("style");
            css.appendChild(document.createTextNode(`
            .hl-hover:hover{
				background: antiquewhite;
            }
            .t-con>.t-info.t-item{
              display:none !important;
            }
            .t-con>.t-subject{
              font-weight:bold !important;
              font-size:large !important;
            }
            .t-bottom{
              display:none !important;
            }
            .t-top{
              padding-bottom: 20px !important;
            }
            .t-answer.t-item,.answer-r{
              display:none;
            }
            .hl-true{
				color: blue!important;
            }
            .hl-false{
				color: red!important;
            }
            `));
            css.id = "rdcustomcss";
            document.body.appendChild(css);
        }
    }

    function isContentReady(){
        return document.querySelector(".topic-list")!==null;
    }

    let timer = null;
    function loader(){
        if(!isContentReady()){
            if(timer===null){
                timer = setInterval(loader,200);
            }else{
                console.log("Waiting...");
            }
        }else{
            clearInterval(timer);
            customcss();
            highlightCurrectAnswers();
        }
    }
    if(document.title.indexOf("查看个人解析")>=0)loader();
})();