mirror of
https://gitlab.com/MrFry/moodle-test-userscript
synced 2025-04-01 20:22:48 +02:00
added new type of question root (002203ca-581b-445c-b45d-85374f212e8e)
This commit is contained in:
parent
f759eb43b7
commit
54ea56343c
1 changed files with 80 additions and 16 deletions
|
@ -46,7 +46,7 @@
|
||||||
// : Script header {{{
|
// : Script header {{{
|
||||||
// ==UserScript==
|
// ==UserScript==
|
||||||
// @name Moodle/Elearning/KMOOC test help
|
// @name Moodle/Elearning/KMOOC test help
|
||||||
// @version 2.1.1.1
|
// @version 2.1.1.2
|
||||||
// @description Online Moodle/Elearning/KMOOC test help
|
// @description Online Moodle/Elearning/KMOOC test help
|
||||||
// @author MrFry
|
// @author MrFry
|
||||||
// @match https://elearning.uni-obuda.hu/*
|
// @match https://elearning.uni-obuda.hu/*
|
||||||
|
@ -110,11 +110,12 @@
|
||||||
// Devel vars
|
// Devel vars
|
||||||
// ------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------
|
||||||
// forcing pages for testing. unless you test, do not set these to true!
|
// forcing pages for testing. unless you test, do not set these to true!
|
||||||
setVal('ISDEVEL', false)
|
const isDevel = false
|
||||||
|
setVal('ISDEVEL', isDevel)
|
||||||
// only one of these should be true for testing
|
// only one of these should be true for testing
|
||||||
const forceTestPage = false
|
const forceTestPage = isDevel && false
|
||||||
const forceResultPage = false
|
const forceResultPage = isDevel && false
|
||||||
const forceDefaultPage = false
|
const forceDefaultPage = isDevel && false
|
||||||
// ------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------
|
||||||
|
|
||||||
const logElementGetting = false
|
const logElementGetting = false
|
||||||
|
@ -246,6 +247,7 @@
|
||||||
|
|
||||||
const select = elem.tagName ? elem.getElementsByTagName('select') : []
|
const select = elem.tagName ? elem.getElementsByTagName('select') : []
|
||||||
if (select.length > 0) {
|
if (select.length > 0) {
|
||||||
|
// test: 2c1d92a7-0ea2-4990-9451-7f19299bbbe4
|
||||||
const question = []
|
const question = []
|
||||||
Array.from(elem.childNodes).forEach(cn => {
|
Array.from(elem.childNodes).forEach(cn => {
|
||||||
if (cn.nodeValue) {
|
if (cn.nodeValue) {
|
||||||
|
@ -483,9 +485,11 @@
|
||||||
return promises
|
return promises
|
||||||
} else if (answerRoot.tagName === 'TABLE') {
|
} else if (answerRoot.tagName === 'TABLE') {
|
||||||
const answers = Array.from(answerRoot.childNodes[0].childNodes)
|
const answers = Array.from(answerRoot.childNodes[0].childNodes)
|
||||||
|
// test: 002203ca-581b-445c-b45d-85374f212e8e NOT WORING
|
||||||
|
|
||||||
answers.forEach(answer => {
|
answers.forEach(answer => {
|
||||||
if (answer.tagName) {
|
if (answer.tagName) {
|
||||||
|
// test: 817434df-a103-4edc-870e-c9ac953404dc
|
||||||
promises.push(
|
promises.push(
|
||||||
getTextPromisesFromNode(answer.getElementsByClassName('text')[0])
|
getTextPromisesFromNode(answer.getElementsByClassName('text')[0])
|
||||||
)
|
)
|
||||||
|
@ -519,15 +523,71 @@
|
||||||
}, [])
|
}, [])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const rootVariants = {
|
||||||
|
qtext: {
|
||||||
|
criteria: node => {
|
||||||
|
return node.getElementsByClassName('qtext').length > 0
|
||||||
|
},
|
||||||
|
getter: node => {
|
||||||
|
return node.getElementsByClassName('qtext')[0]
|
||||||
|
},
|
||||||
|
},
|
||||||
|
subquestion: {
|
||||||
|
criteria: node => {
|
||||||
|
return node.getElementsByClassName('subquestion').length > 0
|
||||||
|
},
|
||||||
|
getter: node => {
|
||||||
|
return node.getElementsByClassName('subquestion')[0].parentNode
|
||||||
|
},
|
||||||
|
},
|
||||||
|
content: {
|
||||||
|
// test: 002203ca-581b-445c-b45d-85374f212e8e
|
||||||
|
criteria: node => {
|
||||||
|
return node.getElementsByClassName('content').length > 0
|
||||||
|
},
|
||||||
|
getter: node => {
|
||||||
|
const content = node.getElementsByClassName('content')[0].childNodes[0]
|
||||||
|
const pNodes = Array.from(content.childNodes).filter(node => {
|
||||||
|
return node.tagName === 'P'
|
||||||
|
})
|
||||||
|
|
||||||
|
const parent = document.createElement('div')
|
||||||
|
pNodes.forEach(node => {
|
||||||
|
parent.appendChild(node.cloneNode(true))
|
||||||
|
})
|
||||||
|
|
||||||
|
return pNodes[0]
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
function getQuestionRootNode(node) {
|
||||||
|
try {
|
||||||
|
let qtextNode
|
||||||
|
Object.keys(rootVariants).some(key => {
|
||||||
|
const variant = rootVariants[key]
|
||||||
|
if (variant.criteria(node)) {
|
||||||
|
qtextNode = variant.getter(node)
|
||||||
|
if (!qtextNode) {
|
||||||
|
warn(
|
||||||
|
`question root node ${key} criteria was true, but result is null`
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return qtextNode
|
||||||
|
} catch (e) {
|
||||||
|
warn('Error in getQuestionRootNode')
|
||||||
|
warn(e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function getQuestionPromiseForSingleQuestion(node) {
|
function getQuestionPromiseForSingleQuestion(node) {
|
||||||
return new Promise(resolve => {
|
return new Promise(resolve => {
|
||||||
try {
|
try {
|
||||||
let qtextNode = node.getElementsByClassName('qtext')[0]
|
const qtextNode = getQuestionRootNode(node)
|
||||||
if (!qtextNode) {
|
|
||||||
qtextNode = node.getElementsByClassName('subquestion')[0]
|
|
||||||
qtextNode = qtextNode.parentNode
|
|
||||||
}
|
|
||||||
|
|
||||||
const questionPromises = getTextPromisesFromNode(qtextNode)
|
const questionPromises = getTextPromisesFromNode(qtextNode)
|
||||||
const possibleAnswerPromises = getPossibleAnswersFromTest(node)
|
const possibleAnswerPromises = getPossibleAnswersFromTest(node)
|
||||||
|
|
||||||
|
@ -560,13 +620,17 @@
|
||||||
...question,
|
...question,
|
||||||
...possibleAnswerArray,
|
...possibleAnswerArray,
|
||||||
])
|
])
|
||||||
const data = getDataFromTest(images, getLegacyImageID(imageNodes))
|
const data = getDataFromTest(
|
||||||
|
node,
|
||||||
|
images,
|
||||||
|
getLegacyImageID(imageNodes)
|
||||||
|
)
|
||||||
|
|
||||||
resolve({
|
resolve({
|
||||||
question: questionText,
|
question: questionText,
|
||||||
possibleAnswers,
|
possibleAnswers: possibleAnswers,
|
||||||
images,
|
images: images,
|
||||||
data,
|
data: data,
|
||||||
success: true,
|
success: true,
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
@ -583,7 +647,7 @@
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
function getDataFromTest(hashedImages, legacyImages) {
|
function getDataFromTest(node, hashedImages, legacyImages) {
|
||||||
if (hashedImages.length > 0) {
|
if (hashedImages.length > 0) {
|
||||||
return {
|
return {
|
||||||
type: 'image',
|
type: 'image',
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue