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 {{{
|
||||
// ==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',
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue