From 6213c1a7b8df238c81993ec4221cc5c0e8f9c917 Mon Sep 17 00:00:00 2001 From: mrfry Date: Sun, 15 May 2022 11:37:08 +0200 Subject: [PATCH] Variable depth nodes fix --- stable.user.js | 55 +++++++++++++++++++++++++++++++++----------------- 1 file changed, 37 insertions(+), 18 deletions(-) diff --git a/stable.user.js b/stable.user.js index 417aa1e..556cfe6 100755 --- a/stable.user.js +++ b/stable.user.js @@ -116,11 +116,11 @@ // Devel vars // ------------------------------------------------------------------------------ // forcing pages for testing. unless you test, do not set these to true! - const isDevel = true + const isDevel = false const forcedMatchString = isDevel ? 'default' : null // only one of these should be true for testing const forceTestPage = isDevel && false - const forceResultPage = isDevel && true + const forceResultPage = isDevel && false const forceDefaultPage = isDevel && false // ------------------------------------------------------------------------------ @@ -218,8 +218,12 @@ // : Basic processing helpers {{{ - function getTextPromisesFromNode(node) { - return Array.from(node.childNodes).reduce((promises, elem) => { + function getTextPromisesFromNode(inputNode) { + const nodes = Array.from(inputNode.childNodes) + .map((x) => flattenNode(x)) + .flat() + + return nodes.reduce((promises, elem) => { let img = elem if (elem.tagName !== 'IMG') { const t = elem.tagName ? elem.getElementsByTagName('img') : [] @@ -246,17 +250,21 @@ } if (img.tagName === 'IMG') { - promises.push( - new Promise((resolve) => { - digestMessage(getBase64Image(img)).then((res) => { - resolve({ - type: 'img', - val: res, - node: img, + if (img.title) { + promises.push({ type: 'txt', val: img.title, node: elem }) + } else { + promises.push( + new Promise((resolve) => { + digestMessage(getBase64Image(img)).then((res) => { + resolve({ + type: 'img', + val: res, + node: img, + }) }) }) - }) - ) + ) + } } else if (elem.tagName === undefined) { promises.push({ type: 'txt', val: elem.nodeValue, node: elem }) } else { @@ -267,6 +275,16 @@ }, []) } + function flattenNode(node) { + if (node.childNodes && node.childNodes.length > 0) { + return Array.from(node.childNodes) + .map((x) => flattenNode(x)) + .flat() + } else { + return node + } + } + function makeTextFromElements(acc, item) { if (emptyOrWhiteSpace(item.val)) { return acc @@ -1209,7 +1227,8 @@ ) }) } catch (e) { - console.warn(e) + debugLog('Error in handleAVRQuiz') + debugLog(e) } } @@ -1905,8 +1924,8 @@ ) } } catch (e) { - console.warn('Error showing answers') - console.warn(e) + debugLog('Error showing answers') + debugLog(e) } } @@ -2410,8 +2429,8 @@ result.msgContainer.child.msgDiv.elem.innerText = getCurrMsg().m } catch (e) { - console.warn('Error in message updating') - console.warn(e) + debugLog('Error in message updating') + debugLog(e) } } updateMessageText()