From 58dbaeb710a7b5290876d2219871b797a042be1f Mon Sep 17 00:00:00 2001 From: Sudeep Duggal <5505558+duggalsu@users.noreply.github.com> Date: Wed, 12 Jul 2023 15:53:42 +0530 Subject: [PATCH] Fix Uli slur redaction for general websites - Fixed Uli site rendering issues - Fixed dynamic page loading issues - Updated update-browserslist-db@latest --- browser-extension/plugin/package-lock.json | 16 +++++--- .../plugin/src/content-script.js | 19 ++++----- .../plugin/src/transform-general.js | 40 ++++++++++++++----- 3 files changed, 46 insertions(+), 29 deletions(-) diff --git a/browser-extension/plugin/package-lock.json b/browser-extension/plugin/package-lock.json index 64b9cee3..50f1def1 100644 --- a/browser-extension/plugin/package-lock.json +++ b/browser-extension/plugin/package-lock.json @@ -2226,9 +2226,9 @@ "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs=" }, "node_modules/caniuse-lite": { - "version": "1.0.30001441", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001441.tgz", - "integrity": "sha512-OyxRR4Vof59I3yGWXws6i908EtGbMzVUi3ganaZQHmydk1iwDhRnvaPG2WaR0KcqrDFKrxVZHULT396LEPhXfg==", + "version": "1.0.30001515", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001515.tgz", + "integrity": "sha512-eEFDwUOZbE24sb+Ecsx3+OvNETqjWIdabMy52oOkIgcUtAsQifjUG9q4U9dgTHJM2mfk4uEPxc0+xuFdJ629QA==", "dev": true, "funding": [ { @@ -2238,6 +2238,10 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ] }, @@ -7848,9 +7852,9 @@ "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs=" }, "caniuse-lite": { - "version": "1.0.30001441", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001441.tgz", - "integrity": "sha512-OyxRR4Vof59I3yGWXws6i908EtGbMzVUi3ganaZQHmydk1iwDhRnvaPG2WaR0KcqrDFKrxVZHULT396LEPhXfg==", + "version": "1.0.30001515", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001515.tgz", + "integrity": "sha512-eEFDwUOZbE24sb+Ecsx3+OvNETqjWIdabMy52oOkIgcUtAsQifjUG9q4U9dgTHJM2mfk4uEPxc0+xuFdJ629QA==", "dev": true }, "chalk": { diff --git a/browser-extension/plugin/src/content-script.js b/browser-extension/plugin/src/content-script.js index 0f27ad00..5dfe9ceb 100644 --- a/browser-extension/plugin/src/content-script.js +++ b/browser-extension/plugin/src/content-script.js @@ -49,22 +49,17 @@ function processPage(newUrl) { var mainLoadedChecker = setInterval(() => { - console.log('tick'); - const elems = document.querySelectorAll('p, span, li'); - - console.log({ elems }); - - if (elems) { - + console.log('tick'); + let body = document.getElementsByTagName("body") + let first_body = body[0] + if (first_body) { + console.log('tick 2'); - - transformGeneral.processNewlyAddedNodesGeneral(elems); - setOnChangeListener(elems, transformGeneral.processNewlyAddedNodesGeneral); - + transformGeneral.processNewlyAddedNodesGeneral(first_body); + clearInterval(mainLoadedChecker); console.log(mainLoadedChecker); - } else { console.log('main section loaded'); diff --git a/browser-extension/plugin/src/transform-general.js b/browser-extension/plugin/src/transform-general.js index 5c98c0fb..c7198188 100644 --- a/browser-extension/plugin/src/transform-general.js +++ b/browser-extension/plugin/src/transform-general.js @@ -50,19 +50,37 @@ function addInlineMenu(id, item, hasSlur) { ); } -const processNewlyAddedNodesGeneral = function (addedNodes) { - log('processing new nodes'); - const nodes = Array.from(addedNodes); - nodes.map((node) => { - // console.log(node) - const text = node.innerText; - // console.log(text) - const replacementText = replaceSlur(text); - node.innerText = replacementText; - +// Traverse dom nodes to find leaf node that are text nodes and process +function bft(nodes){ + // console.log("inside bft"); + if(nodes.childNodes.length===0 && nodes.nodeType === 3){ + // console.log("found leaf text node", nodes); + // console.log(nodes.textContent); + const replacementText = replaceSlur(nodes.textContent); + nodes.textContent = nodes.textContent.replace(nodes.textContent, replacementText) + } + else if(nodes.nodeName != "STYLE" && nodes.nodeName != "SCRIPT" && nodes.nodeName != "NOSCRIPT") { + // console.log(nodes.nodeName) + nodes.childNodes.forEach((nodes)=>bft(nodes)) + } +} +const processNewlyAddedNodesGeneral = function (firstBody) { + log('processing new nodes'); + const config = { attributes: true, childList: true, subtree: true }; + + const callback = (mutationList, observer) => { + let elems = firstBody.children + const nodes = Array.from(elems); + let relevant_elements = nodes.filter((element)=>["P","DIV"].includes(element.nodeName)) - }); + relevant_elements.map((element) => { + bft(element) + }); + } + const observer = new MutationObserver(callback); + observer.observe(firstBody, config); + }; export default {