Remove menu on middle click, test result page parsing improvements: get correct answer even if its not shown

This commit is contained in:
mrfry 2020-11-19 14:30:00 +01:00
parent e0c2e92578
commit de768fb281

View file

@ -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:')
}