让蓝墨云更加强大、易用!Make Mosoteach more powerful & user-friendly !
- // ==UserScript==
- // @name 🧰蓝墨云工具箱 Mosoteach Toolkit
- // @namespace https://blog.younnt.one
- // @version 1.4.6
- // @license MIT
- // @description 让蓝墨云更加强大、易用!Make Mosoteach more powerful & user-friendly !
- // @author Younntone
- // @match https://www.mosoteach.cn/web/index.php?c=interaction_quiz&m=person_quiz_r###lt&clazz_course_id=*&id=*&order_item=group&user_id=*
- // @match https://www.mosoteach.cn/web/index.php?c=interaction_quiz&m=person_quiz_r###lt&clazz_course_id=*&id=*&order_item=group
- // @match https://www.mosoteach.cn/web/index.php?c=interaction_quiz&m=reply&clazz_course_id=*&id=*&order_item=group
- // @match https://www.mosoteach.cn/web/index.php?c=*&m=index&clazz_course_id=*
- // @match https://www.mosoteach.cn/web/index.php?c=res&m=index&clazz_course_id=*
- // @grant none
- // ==/UserScript==
- (function () {
- 'use strict';
- // 获取 当前页面
- const a = $('<a>', { href: window.location.search });
- const c = a.prop('search').split('?c=')[1].split('&')[0];
- const m = a.prop('search').split('&m=')[1].split('&')[0];
- if (m == 'index') {
- let classes = $('.cc-name')[0].children[0].innerText;
- $('.cc-name')[0].children[0].innerText = $(
- '.cc-name'
- )[0].children[2].innerText;
- $('.cc-name')[0].children[2].innerText = classes;
- }
- // 获取 课程 id
- let clazzCourseId = a
- .prop('search')
- .split('&clazz_course_id=')[1]
- .split('&')[0];
- // 判断 当前页面
- switch (c) {
- case 'interaction':
- /**
- * *---------------------------------------*
- * * 为 已结束 的 测试活动 添加直接查看分析的按钮 *
- * *---------------------------------------*
- */
- // 获取 活动节点集合
- let activities = $('.interaction-row');
- // 遍历所有活动
- for (let index = 0; index < activities.length; index++) {
- const activity = activities[index];
- const activityType = activity.getAttribute('data-type');
- const quizStatus =
- activity.children[1].children[0].children[0].className;
- // 判断 每个活动节点是否为测试
- if (activityType === 'QUIZ') {
- let id = activity.getAttribute('data-id');
- // 如果 是测试并且已经结束
- if (quizStatus === 'interaction-status end') {
- // 添加 直接打开分析页面的按钮
- let url = `https://www.mosoteach.cn/web/index.php?c=interaction_quiz&m=person_quiz_r###lt&clazz_course_id=${clazzCourseId}&id=${id}&order_item=group`;
- let button = document.createElement('div');
- button.className = 'interaction-status processing';
- button.innerText = '习题分析';
- button.addEventListener('click', () => {
- window.open(url);
- event.stopPropagation();
- });
- activity.children[1].children[0].appendChild(button);
- }
- // 如果 是测试并且本地有答案
- if (JSON.parse(window.localStorage.getItem(id))) {
- let button = document.createElement('div');
- button.className = 'interaction-status processing';
- button.innerText = '有答案';
- activity.children[1].children[0].appendChild(button);
- }
- }
- }
- break;
- case 'interaction_quiz':
- /**
- * *-------------------------------------*
- * * 为 测试分析 添加导出全部题目到粘贴板的按钮 *
- * *-------------------------------------*
- */
- const id = a.prop('search').split('&id=')[1].split('&')[0];
- if (m === 'reply') {
- $('[style="text-align:center;"]').attr(
- 'style',
- 'position: sticky;text-align:center;bottom: 100px;'
- );
- let _answersList = JSON.parse(window.localStorage.getItem(id));
- let quizList = $('.student-topic-row');
- // 创建标示
- var copyButton = document.createElement('button');
- if (_answersList) {
- copyButton.innerHTML = '该测试有答案';
- copyButton.style =
- 'width: 100px;height: 50px;position: fixed;top: 400px;left: 30px;background-color: green;';
- copyButton.addEventListener('click', function () {
- for (const key in _answersList) {
- if (_answersList.hasOwnProperty(key)) {
- const answers = _answersList[key];
- for (let i = 0; i < quizList.length; i++) {
- const quiz = quizList[i];
- if (
- quiz.children[0].children[1].children[1].innerText.indexOf(
- key
- ) === 0
- ) {
- for (let j = 0; j < answers.length; j++) {
- const answer = answers[j];
- switch (answer) {
- case 'A':
- quizList[i].children[2].click();
- break;
- case 'B':
- quizList[i].children[3].click();
- break;
- case 'C':
- quizList[i].children[4].click();
- break;
- case 'D':
- quizList[i].children[5].click();
- break;
- case 'E':
- quizList[i].children[6].click();
- break;
- case 'F':
- quizList[i].children[7].click();
- break;
- case 'G':
- quizList[i].children[8].click();
- break;
- case 'H':
- quizList[i].children[9].click();
- break;
- case 'I':
- quizList[i].children[10].click();
- break;
- case 'J':
- quizList[i].children[11].click();
- break;
- case 'K':
- quizList[i].children[12].click();
- break;
- case 'L':
- quizList[i].children[13].click();
- break;
- case 'M':
- quizList[i].children[14].click();
- break;
- default:
- break;
- }
- }
- }
- }
- }
- }
- });
- } else {
- copyButton.innerHTML = '该测试无答案';
- copyButton.style =
- 'width: 100px;height: 50px;position: fixed;top: 400px;left: 30px;background-color: red;';
- }
- // 挂载 按钮节点
- document.body.appendChild(copyButton);
- } else {
- let _answersList = JSON.parse(window.localStorage.getItem(id));
- // 创建 按钮节点
- var copyButton = document.createElement('button');
- if (_answersList) {
- copyButton.innerHTML = '该测试已有答案,导出试题';
- copyButton.style =
- 'width: fit-content;padding: 30px;height: 50px;position: fixed;top: 400px;left: 30px;background-color: green;';
- } else {
- copyButton.innerHTML = '该试题无答案,点击导出试题并保存答案';
- copyButton.style =
- 'width: fit-content;padding: 30px;height: 50px;position: fixed;top: 400px;left: 30px;background-color: red;';
- }
- copyButton.addEventListener('click', function () {
- getQuiz(id);
- });
- // 挂载 按钮节点
- document.body.appendChild(copyButton);
- }
- break;
- case 'res':
- /**
- * *-------------------------------------*
- * * 为 资源 添加是否可拖动进度条开关 *
- * *-------------------------------------*
- */
- const dragSwitch = $(
- '<i class="icon-ok-circle" id="dragable" style="margin-left: 10px;"></i><span>视频进度可拖拽</span>'
- );
- $('div[data-mime=video]').attr('data-drag', 'Y');
- dragSwitch.click(() => {
- if ($('#dragable').attr('class') == 'icon-circle-blank') {
- $('#dragable').attr('class', 'icon-ok-circle');
- $('div[data-mime=video]').attr('data-drag', 'Y');
- } else {
- $('#dragable').attr('class', 'icon-circle-blank');
- $('div[data-mime=video]').attr('data-drag', 'N');
- }
- });
- $("div[style='display:inline-block;']").after(dragSwitch);
- /**
- * *-------------------------------------*
- * * 点开视频再关闭即可实现看完 *
- * *-------------------------------------*
- */
- $.ajaxSetup({
- beforeSend: function () {
- console.log(arguments[1].data);
- let data = arguments[1].data;
- let encodedData = '';
- for (const key in data) {
- if (data.hasOwnProperty(key)) {
- let value = data[key];
- if (key.includes('watch_to')) {
- value = data.duration;
- }
- encodedData = encodedData.concat(`&${key}=${value}`);
- }
- }
- arguments[1].data = encodedData.substring(1, encodedData.length);
- },
- processData: false,
- });
- break;
- default:
- break;
- }
- const getQuiz = (id) => {
- const quizTitle = $('.info-con')[0].children[0].innerText;
- const quizCollection = $('.topic-item');
- const quizAnswerCollection = $('.answer-l');
- let quizList = [];
- let answerList = {};
- // 获取 所有题目
- for (let quizIndex = 0; quizIndex < quizCollection.length; quizIndex++) {
- const quiz = quizCollection[quizIndex];
- const num = quiz.children[0].children[0].innerHTML;
- const question =
- quiz.children[0].children[1].children[1].children[0].innerText;
- const optionCount =
- quiz.children[0].children[1].children[2].childElementCount;
- let options = [];
- // 获取 该题所有选项
- for (let optionIndex = 0; optionIndex < optionCount; optionIndex++) {
- const optionMark =
- quiz.children[0].children[1].children[2].children[optionIndex]
- .children[0].innerText;
- const option =
- quiz.children[0].children[1].children[2].children[optionIndex]
- .children[1].innerText;
- options.push(`
- ${optionMark} ${option}`);
- }
- // 获取 答案
- let answer = quizAnswerCollection[quizIndex].children[0].innerHTML;
- quizList.push(`
- ${num}. ${question} ${answer}
- ${options}`);
- answerList[question] = answer;
- }
- // 整理内容
- var detail = `题目标题: ${quizTitle}
- 题目总数: ${quizCollection.length}
- 题目: ${quizList}
- `;
- var oInput = document.createElement('textarea');
- oInput.value = detail;
- document.body.appendChild(oInput);
- oInput.select();
- document.execCommand('Copy');
- oInput.className = 'oInput';
- oInput.style.display = 'none';
- alert('已复制到粘贴板');
- window.localStorage.setItem(id, JSON.stringify(answerList));
- copyButton.style =
- 'width: fit-content;padding: 30px;height: 50px;position: fixed;top: 400px;left: 30px;background-color: green;';
- };
- })();