diff --git a/stable.user.js b/stable.user.js index bbaa20f..d4c0b43 100755 --- a/stable.user.js +++ b/stable.user.js @@ -166,8 +166,16 @@ function getTextPromisesFromNode(node) { const promises = [] Array.from(node.childNodes).forEach(elem => { - if (elem.tagName === 'IMG') { - promises.push(digestMessage(getBase64Image(elem))) + let img = elem + if (elem.tagName !== 'IMG') { + const t = elem.tagName ? elem.getElementsByTagName('img') : [] + if (t.length > 0) { + img = t[0] + } + } + + if (img.tagName === 'IMG') { + promises.push(digestMessage(getBase64Image(img))) } else if (elem.tagName === undefined) { promises.push({ type: 'txt', val: elem.nodeValue }) } else { @@ -246,17 +254,33 @@ function getPossibleAnswersFromTest(node) { const promises = [] - const answers = Array.from( - node.getElementsByClassName('answer')[0].childNodes - ) + const answerRoot = node.getElementsByClassName('answer')[0] - answers.forEach(answer => { - if (answer.tagName) { - promises.push(getTextPromisesFromNode(answer)) - } - }) + if (answerRoot.tagName === 'DIV') { + const answers = Array.from(answerRoot.childNodes) - return promises + answers.forEach(answer => { + if (answer.tagName) { + promises.push(getTextPromisesFromNode(answer)) + } + }) + + return promises + } else if (answerRoot.tagName === 'TABLE') { + const answers = Array.from(answerRoot.childNodes[0].childNodes) + + answers.forEach(answer => { + if (answer.tagName) { + promises.push( + getTextPromisesFromNode(answer.getElementsByClassName('text')[0]) + ) + // here elements with classname 'control' could be added too. Those should be a dropdown, + // containing possible choices + } + }) + + return promises + } } function getQuestionPromiseForSingleQuestion(node) { @@ -268,19 +292,31 @@ Promise.all([ Promise.all(questionPromises), - Promise.all(possibleAnswerPromises), + Promise.all( + possibleAnswerPromises.map(x => { + return Promise.all(x) + }) + ), ]) .then(([question, possibleAnswerArray]) => { + console.log(question, possibleAnswerArray) const questionText = question.map(makeTextFromElements).join(' ') - const images = getImagesFromElements(question) - const data = getDataFromTest(images) const possibleAnswers = possibleAnswerArray.map(x => { return removeUnnecesarySpaces(x.map(makeTextFromElements).join(' ')) }) + let images = getImagesFromElements([ + ...question, + ...possibleAnswerArray.reduce((acc, x) => { + return [...acc, ...x] + }, []), + ]) + images = uniq(images) + const data = getDataFromTest(images, possibleAnswerArray) console.log('\n\n\n') console.log(questionText) console.log(images) + console.log(data) possibleAnswers.forEach(x => { console.log(x) }) @@ -387,7 +423,7 @@ const questionText = question.map(makeTextFromElements).join(' ') const answerText = answer.map(makeTextFromElements).join(' ') let images = getImagesFromElements([...question, ...answer]) - images = uniq(images) + // images = uniq(images) resolve({ Q: removeUnnecesarySpaces(questionText), @@ -542,6 +578,7 @@ } function getBase64Image(img) { + console.log(img) const copy = document.createElement('img') copy.src = img.src copy.crossOrigin = 'Anonymous'