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() {
|
function getQuiz() {
|
||||||
return new Promise(resolve => {
|
return new Promise(resolve => {
|
||||||
let promises = []
|
const promises = []
|
||||||
let i = 1
|
const questionNodes = Array.from(
|
||||||
let containerNode = document.getElementById(`q${i}`)
|
document.getElementsByTagName('form')[0].childNodes[0].childNodes
|
||||||
do {
|
)
|
||||||
promises.push(getQuizFromNode(containerNode))
|
|
||||||
|
|
||||||
|
let i = 0
|
||||||
|
while (i < questionNodes.length && questionNodes[i].tagName === 'DIV') {
|
||||||
|
promises.push(getQuizFromNode(questionNodes[i]))
|
||||||
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",
|
// "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 => {
|
Object.keys(getters).some(key => {
|
||||||
const getter = getters[key]
|
const getter = getters[key]
|
||||||
if (getter.requirement(node)) {
|
if (getter.requirement(node)) {
|
||||||
res = getter.getterFunction(node)
|
try {
|
||||||
return true
|
res = getter.getterFunction(node)
|
||||||
|
return true
|
||||||
|
} catch (e) {
|
||||||
|
Log(`${key} failed`)
|
||||||
|
console.log(e)
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
Log(`${getter.description} did not pass`)
|
Log(`${key} did not pass`)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -221,7 +227,9 @@
|
||||||
answerGetters,
|
answerGetters,
|
||||||
node
|
node
|
||||||
)
|
)
|
||||||
|
|
||||||
if (!answerPromises || !questionPromises) {
|
if (!answerPromises || !questionPromises) {
|
||||||
|
Log('Answer or question array is empty, skipping question')
|
||||||
resolve({ success: false })
|
resolve({ success: false })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -250,8 +258,8 @@
|
||||||
images = uniq(images)
|
images = uniq(images)
|
||||||
|
|
||||||
resolve({
|
resolve({
|
||||||
A: removeUnnecesarySpaces(answerText),
|
|
||||||
Q: removeUnnecesarySpaces(questionText),
|
Q: removeUnnecesarySpaces(questionText),
|
||||||
|
A: removeUnnecesarySpaces(answerText),
|
||||||
data: getData(images),
|
data: getData(images),
|
||||||
success: true,
|
success: true,
|
||||||
})
|
})
|
||||||
|
@ -335,6 +343,61 @@
|
||||||
return 'asd'
|
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) {
|
function digestMessage(message) {
|
||||||
|
@ -1041,11 +1104,12 @@
|
||||||
function HandleResults(url) {
|
function HandleResults(url) {
|
||||||
getQuiz().then(res => {
|
getQuiz().then(res => {
|
||||||
console.log('\n\n\n')
|
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.Q)
|
||||||
console.log(r.A)
|
console.log(r.A)
|
||||||
console.log(r.data)
|
console.log(r.data)
|
||||||
console.log('')
|
|
||||||
})
|
})
|
||||||
SaveQuiz(res, ShowSaveQuizDialog) // saves the quiz questions and answers
|
SaveQuiz(res, ShowSaveQuizDialog) // saves the quiz questions and answers
|
||||||
})
|
})
|
||||||
|
@ -1727,6 +1791,12 @@
|
||||||
|
|
||||||
// APPEND EVERYTHING
|
// APPEND EVERYTHING
|
||||||
appedtTo.appendChild(menuButtonDiv)
|
appedtTo.appendChild(menuButtonDiv)
|
||||||
|
|
||||||
|
addEventListener(menuButtonDiv, 'mousedown', function(e) {
|
||||||
|
if (e.which === 2) {
|
||||||
|
menuButtonDiv.parentNode.removeChild(menuButtonDiv)
|
||||||
|
}
|
||||||
|
})
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
Exception(e, 'script error at showing menu:')
|
Exception(e, 'script error at showing menu:')
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue