From d62a546655c5443223f6b317741d89a8d65c6902 Mon Sep 17 00:00:00 2001 From: mrfry Date: Sun, 22 Nov 2020 15:04:21 +0100 Subject: [PATCH] Question getting improvements, handling dropdown in test --- stable.user.js | 41 ++++++++++++++++++++++++++++++++--------- 1 file changed, 32 insertions(+), 9 deletions(-) diff --git a/stable.user.js b/stable.user.js index 628ae4b..16d27da 100755 --- a/stable.user.js +++ b/stable.user.js @@ -182,8 +182,7 @@ // : Basic processing helpers {{{ function getTextPromisesFromNode(node) { - const promises = [] - Array.from(node.childNodes).forEach(elem => { + return Array.from(node.childNodes).reduce((promises, elem) => { let img = elem if (elem.tagName !== 'IMG') { const t = elem.tagName ? elem.getElementsByTagName('img') : [] @@ -192,6 +191,12 @@ } } + let select = elem.tagName ? elem.getElementsByTagName('select') : [] + if (select.length > 0) { + promises.push({ type: 'txt', val: '...', node: select[0] }) + return promises + } + if (img.tagName === 'IMG') { promises.push( new Promise(resolve => { @@ -209,8 +214,9 @@ } else { promises.push({ type: 'txt', val: elem.innerText, node: elem }) } - }) - return promises + + return promises + }, []) } function makeTextFromElements(acc, item) { @@ -369,9 +375,20 @@ function getPossibleAnswersFromTest(node) { const promises = [] - const answerRoot = node.getElementsByClassName('answer')[0] + let answerRoot = node.getElementsByClassName('answer')[0] - if (answerRoot.tagName === 'DIV') { + if (!answerRoot) { + answerRoot = node.getElementsByClassName('subquestion')[0] + const options = Array.from(answerRoot.getElementsByTagName('option')) + const possibleAnswers = options.reduce((acc, option) => { + if (!emptyOrWhiteSpace(option.innerText)) { + acc.push(option.innerText) + } + return acc + }, []) + + return possibleAnswers + } else if (answerRoot.tagName === 'DIV') { const answers = Array.from(answerRoot.childNodes) answers.forEach(answer => { @@ -418,11 +435,17 @@ function getQuestionPromiseForSingleQuestion(node) { return new Promise(resolve => { try { - const qtextNode = node.getElementsByClassName('qtext')[0] + let qtextNode = node.getElementsByClassName('qtext')[0] + if (!qtextNode) { + qtextNode = node.getElementsByClassName('subquestion')[0] + qtextNode = qtextNode.parentNode + } const questionPromises = getTextPromisesFromNode(qtextNode) const possibleAnswerPromises = getPossibleAnswersFromTest(node) + console.log(questionPromises) + const unflattenedPossibleAnswerPromises = possibleAnswerPromises ? possibleAnswerPromises.map(x => { return Promise.all(x) @@ -1379,8 +1402,7 @@ function installedFromCorrectSource(source) { // https://qmining.frylabs.net/moodle-test-userscript/stable.user.js?up - // TODO: test this - return info().script.updateURL === correctSource && false + return info().script.updateURL === correctSource } // : }}} @@ -2290,6 +2312,7 @@ } function GetXHRQuestionAnswer(question) { + console.log('QUESTIONS', question) return new Promise((resolve, reject) => { let url = apiAdress + 'ask?' let params = []