mirror of
https://gitlab.com/MrFry/moodle-test-userscript
synced 2025-04-01 20:22:48 +02:00
Remove menu on middle click, test result page parsing improvements: get correct answer even if its not shown
This commit is contained in:
parent
e0c2e92578
commit
de768fb281
1 changed files with 83 additions and 13 deletions
|
@ -167,15 +167,16 @@
|
|||
|
||||
function getQuiz() {
|
||||
return new Promise(resolve => {
|
||||
let promises = []
|
||||
let i = 1
|
||||
let containerNode = document.getElementById(`q${i}`)
|
||||
do {
|
||||
promises.push(getQuizFromNode(containerNode))
|
||||
const promises = []
|
||||
const questionNodes = Array.from(
|
||||
document.getElementsByTagName('form')[0].childNodes[0].childNodes
|
||||
)
|
||||
|
||||
let i = 0
|
||||
while (i < questionNodes.length && questionNodes[i].tagName === 'DIV') {
|
||||
promises.push(getQuizFromNode(questionNodes[i]))
|
||||
i++
|
||||
containerNode = document.getElementById(`q${i}`)
|
||||
} while (containerNode)
|
||||
}
|
||||
|
||||
// [{
|
||||
// "Q": "Mekkora tényezővel kell számolnunk, ha 100.000 Ft jelenértékét keressük 24% kamatláb, havi tőkésítés és 2,5 éves futamidő mellett?\n\n\n",
|
||||
|
@ -201,10 +202,15 @@
|
|||
Object.keys(getters).some(key => {
|
||||
const getter = getters[key]
|
||||
if (getter.requirement(node)) {
|
||||
try {
|
||||
res = getter.getterFunction(node)
|
||||
return true
|
||||
} catch (e) {
|
||||
Log(`${key} failed`)
|
||||
console.log(e)
|
||||
}
|
||||
} else {
|
||||
Log(`${getter.description} did not pass`)
|
||||
Log(`${key} did not pass`)
|
||||
}
|
||||
})
|
||||
|
||||
|
@ -221,7 +227,9 @@
|
|||
answerGetters,
|
||||
node
|
||||
)
|
||||
|
||||
if (!answerPromises || !questionPromises) {
|
||||
Log('Answer or question array is empty, skipping question')
|
||||
resolve({ success: false })
|
||||
}
|
||||
|
||||
|
@ -250,8 +258,8 @@
|
|||
images = uniq(images)
|
||||
|
||||
resolve({
|
||||
A: removeUnnecesarySpaces(answerText),
|
||||
Q: removeUnnecesarySpaces(questionText),
|
||||
A: removeUnnecesarySpaces(answerText),
|
||||
data: getData(images),
|
||||
success: true,
|
||||
})
|
||||
|
@ -335,6 +343,61 @@
|
|||
return 'asd'
|
||||
},
|
||||
},
|
||||
noCorrect: {
|
||||
description: 'Gets correct answer, even if the correct is not shown',
|
||||
index: 2,
|
||||
requirement: node => {
|
||||
return (
|
||||
node.getElementsByClassName('rightanswer').length === 0 &&
|
||||
node.getElementsByClassName('answer').length > 0
|
||||
)
|
||||
},
|
||||
getterFunction: node => {
|
||||
const gradeText = node.getElementsByClassName('grade')[0].innerText
|
||||
const possibleAnswers = getPossibleAnswers(node)
|
||||
|
||||
if (gradeText.includes('0,00')) {
|
||||
if (possibleAnswers.length === 2) {
|
||||
return [
|
||||
{
|
||||
type: 'txt',
|
||||
val: possibleAnswers.find(x => {
|
||||
return x.selectedByUser === false
|
||||
}).text,
|
||||
},
|
||||
]
|
||||
}
|
||||
} else {
|
||||
return [
|
||||
{
|
||||
type: 'txt',
|
||||
val: possibleAnswers.find(x => {
|
||||
return x.selectedByUser === true
|
||||
}).text,
|
||||
},
|
||||
]
|
||||
}
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
function getPossibleAnswers(node) {
|
||||
const answerNodes = Array.from(
|
||||
node.getElementsByClassName('answer')[0].childNodes
|
||||
)
|
||||
|
||||
return answerNodes.reduce((acc, answerNode) => {
|
||||
let selectedByUser
|
||||
if (answerNode.childNodes.length > 0) {
|
||||
selectedByUser = answerNode.childNodes[0].checked
|
||||
}
|
||||
|
||||
acc.push({
|
||||
text: answerNode.innerText,
|
||||
selectedByUser: selectedByUser,
|
||||
})
|
||||
return acc
|
||||
}, [])
|
||||
}
|
||||
|
||||
function digestMessage(message) {
|
||||
|
@ -1041,11 +1104,12 @@
|
|||
function HandleResults(url) {
|
||||
getQuiz().then(res => {
|
||||
console.log('\n\n\n')
|
||||
res.forEach(r => {
|
||||
res.forEach((r, i) => {
|
||||
console.log('')
|
||||
console.log(i + 1)
|
||||
console.log(r.Q)
|
||||
console.log(r.A)
|
||||
console.log(r.data)
|
||||
console.log('')
|
||||
})
|
||||
SaveQuiz(res, ShowSaveQuizDialog) // saves the quiz questions and answers
|
||||
})
|
||||
|
@ -1727,6 +1791,12 @@
|
|||
|
||||
// APPEND EVERYTHING
|
||||
appedtTo.appendChild(menuButtonDiv)
|
||||
|
||||
addEventListener(menuButtonDiv, 'mousedown', function(e) {
|
||||
if (e.which === 2) {
|
||||
menuButtonDiv.parentNode.removeChild(menuButtonDiv)
|
||||
}
|
||||
})
|
||||
} catch (e) {
|
||||
Exception(e, 'script error at showing menu:')
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue