hash images

This commit is contained in:
mrfry 2020-11-14 12:06:19 +01:00
parent a1d9f5e154
commit 2ae514b1fc

View file

@ -158,39 +158,29 @@
// Result page processing functions
// ----------------------------------------------------------------------------------------------
function getQuiz() {
let result = []
let i = 1
let containerNode = document.getElementById(`q${i}`)
do {
const question = getQuestionFromNode(containerNode)
const answer = getAnswerFromNode(containerNode)
const image = getImageFromNode(containerNode)
result = [
...result,
{
Q: question,
A: answer,
data: getData(image),
},
]
console.log(question)
console.log(answer)
console.log(image)
console.log('')
console.log('')
return new Promise(resolve => {
let promises = []
let i = 1
let containerNode = document.getElementById(`q${i}`)
do {
promises.push(getQuizFromNode(containerNode))
i++
containerNode = document.getElementById(`q${i}`)
} while (containerNode)
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",
// "A": "c.\n\n0,552\n",
// "data": {
// "type": "simple"
// }
// }]
return result
// [{
// "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",
// "A": "c.\n\n0,552\n",
// "data": {
// "type": "simple"
// }
// }]
Promise.all(promises).then(result => {
console.log(result)
resolve(result)
})
})
}
function getData(image) {
@ -206,24 +196,49 @@
}
}
function getImageFromNode(node) {
const img = node.getElementsByTagName('img')
if (img.length === 0) {
return []
}
return Array.from(img).map(image => {
return image.src
})
}
function getAnswerFromNode(node) {
function getAnswerPromisesFromNode(node) {
let answer = node.getElementsByClassName('rightanswer')
if (answer.length === 0) {
console.warn('NO ANSWER FOR ANSWER')
}
answer = answer[0]
const promises = []
return SUtils.RemoveUnnecesarySpaces(answer.innerHTML)
Array.from(answer.childNodes).forEach(elem => {
if (elem.tagName === 'IMG') {
promises.push(digestMessage(getBase64Image(elem)))
} else {
promises.push({ type: 'txt', val: elem.nodeValue })
}
})
return promises
}
function getQuizFromNode(node) {
return new Promise(resolve => {
const promises = getAnswerPromisesFromNode(node)
Promise.all(promises).then(res => {
const images = []
const question = getQuestionFromNode(node)
const solution = res
.map(i => {
if (i.type === 'img') {
images.push(i.val)
return '[' + i.val + ']'
} else {
return i.val
}
})
.join(' ')
resolve({
A: removeUnnecesarySpaces(solution),
Q: question,
images,
})
})
})
}
function getQuestionFromNode(node) {
@ -235,6 +250,54 @@
return SUtils.RemoveUnnecesarySpaces(question)
}
function getBase64Image(img) {
let canvas = document.createElement('canvas')
canvas.width = img.width
canvas.height = img.height
let ctx = canvas.getContext('2d')
ctx.drawImage(img, 0, 0)
let dataURL = canvas.toDataURL('image/png')
return dataURL.replace(/^data:image\/(png|jpg);base64,/, '')
}
function digestMessage(message) {
return new Promise(resolve => {
const encoder = new TextEncoder()
const data = encoder.encode(message)
const hash = crypto.subtle.digest('SHA-256', data).then(buf => {
let res = String.fromCharCode.apply(null, new Uint8Array(buf))
res = btoa(res)
.replace(/=/g, '')
.replace(/\+/g, '-')
.replace(/\//g, '_')
resolve({ type: 'img', val: res })
})
})
}
// ----------------------------------------------------------------------------------------------
// String utils 2
// ----------------------------------------------------------------------------------------------
function removeUnnecesarySpaces(toremove) {
assert(toremove)
toremove = normalizeSpaces(toremove).replace(/\t/g, '')
while (toremove.includes(' ')) {
toremove = toremove.replace(/ {2}/g, ' ')
}
while (toremove.includes('\n\n')) {
toremove = toremove.replace(/\n{2}/g, ' ')
}
return toremove.trim()
}
function normalizeSpaces(input) {
assert(input)
return input.replace(/\s/g, ' ')
}
// ----------------------------------------------------------------------------------------------
class StringUtils {
@ -1072,7 +1135,9 @@
// : Quiz saving {{{
function HandleResults(url) {
SaveQuiz(getQuiz(), ShowSaveQuizDialog) // saves the quiz questions and answers
getQuiz().then(res => {
SaveQuiz(res, ShowSaveQuizDialog) // saves the quiz questions and answers
})
}
function ShowSaveQuizDialog(sendResult, sentData, newQuestions) {