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 {{{ // : 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',