diff options
Diffstat (limited to 'ext')
-rw-r--r-- | ext/fg/js/frontend.js | 48 | ||||
-rw-r--r-- | ext/fg/js/source.js | 44 |
2 files changed, 46 insertions, 46 deletions
diff --git a/ext/fg/js/frontend.js b/ext/fg/js/frontend.js index eea77d2a..b70bf036 100644 --- a/ext/fg/js/frontend.js +++ b/ext/fg/js/frontend.js @@ -515,58 +515,14 @@ class Frontend { length = textSource.text().length; while (textSource.range && length > 0) { - const nodes = Frontend.getNodesInRange(textSource.range); - if (Frontend.isValidScanningNodeList(nodes, this.ignoreNodes)) { + const nodes = TextSourceRange.getNodesInRange(textSource.range); + if (!TextSourceRange.anyNodeMatchesSelector(nodes, this.ignoreNodes)) { break; } --length; textSource.setEndOffset(length); } } - - static getNodesInRange(range) { - const end = range.endContainer; - const nodes = []; - for (let node = range.startContainer; node !== null; node = Frontend.getNextNode(node)) { - nodes.push(node); - if (node === end) { break; } - } - return nodes; - } - - static getNextNode(node) { - let next = node.firstChild; - if (next === null) { - while (true) { - next = node.nextSibling; - if (next !== null) { break; } - - next = node.parentNode; - if (node === null) { break; } - - node = next; - } - } - return next; - } - - static isValidScanningNodeList(nodeList, selector) { - for (const node of nodeList) { - if (!Frontend.isValidScanningNode(node, selector)) { - return false; - } - } - return true; - } - - static isValidScanningNode(node, selector) { - for (; node !== null; node = node.parentNode) { - if (node.nodeType === Node.ELEMENT_NODE) { - return !node.matches(selector); - } - } - return true; - } } window.yomichan_frontend = Frontend.create(); diff --git a/ext/fg/js/source.js b/ext/fg/js/source.js index e724488d..385b5001 100644 --- a/ext/fg/js/source.js +++ b/ext/fg/js/source.js @@ -232,6 +232,50 @@ class TextSourceRange { const writingMode = style.writingMode; return typeof writingMode === 'string' ? writingMode : 'horizontal-tb'; } + + static getNodesInRange(range) { + const end = range.endContainer; + const nodes = []; + for (let node = range.startContainer; node !== null; node = TextSourceRange.getNextNode(node)) { + nodes.push(node); + if (node === end) { break; } + } + return nodes; + } + + static getNextNode(node) { + let next = node.firstChild; + if (next === null) { + while (true) { + next = node.nextSibling; + if (next !== null) { break; } + + next = node.parentNode; + if (node === null) { break; } + + node = next; + } + } + return next; + } + + static anyNodeMatchesSelector(nodeList, selector) { + for (const node of nodeList) { + if (TextSourceRange.nodeMatchesSelector(node, selector)) { + return true; + } + } + return false; + } + + static nodeMatchesSelector(node, selector) { + for (; node !== null; node = node.parentNode) { + if (node.nodeType === Node.ELEMENT_NODE) { + return node.matches(selector); + } + } + return false; + } } |