🏠 Home 

🧰蓝墨云工具箱 Mosoteach Toolkit

让蓝墨云更加强大、易用!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;';
};
})();