added new type of question root (002203ca-581b-445c-b45d-85374f212e8e)

This commit is contained in:
mrfry 2021-03-29 12:03:32 +02:00
parent f759eb43b7
commit 54ea56343c

View file

@ -46,7 +46,7 @@
// : Script header {{{
// ==UserScript==
// @name Moodle/Elearning/KMOOC test help
// @version 2.1.1.1
// @version 2.1.1.2
// @description Online Moodle/Elearning/KMOOC test help
// @author MrFry
// @match https://elearning.uni-obuda.hu/*
@ -110,11 +110,12 @@
// Devel vars
// ------------------------------------------------------------------------------
// 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
const forceTestPage = false
const forceResultPage = false
const forceDefaultPage = false
const forceTestPage = isDevel && false
const forceResultPage = isDevel && false
const forceDefaultPage = isDevel && false
// ------------------------------------------------------------------------------
const logElementGetting = false
@ -246,6 +247,7 @@
const select = elem.tagName ? elem.getElementsByTagName('select') : []
if (select.length > 0) {
// test: 2c1d92a7-0ea2-4990-9451-7f19299bbbe4
const question = []
Array.from(elem.childNodes).forEach(cn => {
if (cn.nodeValue) {
@ -483,9 +485,11 @@
return promises
} else if (answerRoot.tagName === 'TABLE') {
const answers = Array.from(answerRoot.childNodes[0].childNodes)
// test: 002203ca-581b-445c-b45d-85374f212e8e NOT WORING
answers.forEach(answer => {
if (answer.tagName) {
// test: 817434df-a103-4edc-870e-c9ac953404dc
promises.push(
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) {
return new Promise(resolve => {
try {
let qtextNode = node.getElementsByClassName('qtext')[0]
if (!qtextNode) {
qtextNode = node.getElementsByClassName('subquestion')[0]
qtextNode = qtextNode.parentNode
}
const qtextNode = getQuestionRootNode(node)
const questionPromises = getTextPromisesFromNode(qtextNode)
const possibleAnswerPromises = getPossibleAnswersFromTest(node)
@ -560,13 +620,17 @@
...question,
...possibleAnswerArray,
])
const data = getDataFromTest(images, getLegacyImageID(imageNodes))
const data = getDataFromTest(
node,
images,
getLegacyImageID(imageNodes)
)
resolve({
question: questionText,
possibleAnswers,
images,
data,
possibleAnswers: possibleAnswers,
images: images,
data: data,
success: true,
})
})
@ -583,7 +647,7 @@
})
}
function getDataFromTest(hashedImages, legacyImages) {
function getDataFromTest(node, hashedImages, legacyImages) {
if (hashedImages.length > 0) {
return {
type: 'image',