diff --git a/main/content_script_gemini.js b/main/content_script_gemini.js new file mode 100644 index 0000000..b4a60dc --- /dev/null +++ b/main/content_script_gemini.js @@ -0,0 +1,50 @@ +/* window.addEventListener("load", function() { + document.getElementById("clickMe2").addEventListener("click", border); +}); */ + +/*function border() + {alert("elias müllbot")}; */ + +function highlight(){ + + /* const ding = document.getElementById("topTitle"); + ding.style.textDecoration = "underline"; + ding.style.textDecorationColor = "red"; + + const etwas = document.getElementById("personName"); + etwas.style.textDecoration = "underline"; + etwas.style.textDecorationColor = "red"; + // const texts = document.querySelectorAll('*'); */ + + + const listOfElements = document.querySelectorAll("*"); + console.log(listOfElements); + console.log("hallo"); + + + for(let elementNumber = 0; elementNumber <= listOfElements.length; elementNumber ++){ //für alle Elemente der Seite + tag = listOfElements[elementNumber]; //tag ist das Element, das gewählt ist + + console.log(elementNumber, tag); + + if (tag){ + + const hasChildren = tag.children.length > 0; + const elementText = tag.textContent ? tag.textContent.trim(): " "; + const hasText = elementText.length > 0; + + if (hasChildren != true && hasText == true){ + + const targetWord = "die" || "Du" || "funktion"; + let originalHTML = tag.innerHTML; //den ursprünglichen HTML-Inhalt speichern + + const regex = new RegExp(`\\b${targetWord}\\b`, 'gi'); + tag.innerHTML = originalHTML.replace(regex, `$&`); + } + } + } + + +} + +highlight(); \ No newline at end of file diff --git a/main/content_script_gemini_andmy.js b/main/content_script_gemini_andmy.js new file mode 100644 index 0000000..d4848f9 --- /dev/null +++ b/main/content_script_gemini_andmy.js @@ -0,0 +1,95 @@ + + +function highlight(){ + + + const listOfElements = document.querySelectorAll("*"); + console.log(listOfElements); + console.log("hallo"); + + detectedWordsOnThisPage = 0; + + for (let elementNumber = 0; elementNumber < listOfElements.length; elementNumber++) { + let tag = listOfElements[elementNumber]; + + console.log(elementNumber, tag); + + if (tag && tag.nodeType === Node.ELEMENT_NODE) { // Überprüfen, ob es ein gültiges Element ist + const hasChildren = tag.children.length > 0; + const elementText = tag.textContent ? tag.textContent.trim() : ""; + const hasText = elementText.length > 0; + + // Wir bearbeiten nur Elemente, die keinen Nachwuchs haben und Text enthalten + // Warum? Weil sonst innere Tags (wie , ) überschrieben und deren Formatierung verloren gehen würden. + if (!hasChildren && hasText) { + let targetWord = ["hass", "das", "die", "der", "windows"]; // Das Wort, das unterstrichen werden soll + + // Den Text des Elements in einzelne Wörter aufteilen + // Mithilfe eines Regulären Ausdrucks, um auch Satzzeichen am Wortende zu berücksichtigen + const words = elementText.split(/(\s+)/); // Splittet nach Leerzeichen, behält diese aber als separate Einträge bei + + let newHTMLContent = ''; + + for (let i = 0; i < words.length; i++) { + const word = words[i]; + + // Prüfen, ob das aktuelle "Wort" wirklich ein Wort ist (nicht nur Leerzeichen) + if (word.trim().length === 0) { + newHTMLContent += word; // Leerzeichen einfach wieder hinzufügen + continue; + } + + // Regulären Ausdruck verwenden, um Satzzeichen zu entfernen und nur das reine Wort zu erhalten + const cleanWord = word.replace(/[^a-zA-ZäöüÄÖÜß0-9]/g, ''); // Entfernt alle Nicht-Buchstaben/Zahlen + + // Bedingung: Ist das bereinigte Wort unser Zielwort (Groß-/Kleinschreibung ignorieren)? + if (targetWord.includes(cleanWord.toLowerCase())) { + // Wenn ja, umschließe das ursprüngliche Wort (inkl. Satzzeichen) mit dem Unterstreichungs-Span + newHTMLContent += `${word}`; + detectedWordsOnThisPage += 1; + } else { + // Sonst, füge das Wort unverändert hinzu + newHTMLContent += word; + } + } + + // Setze den neuen, bearbeiteten HTML-Inhalt in das Element ein + tag.innerHTML = newHTMLContent; + + console.log("Element bearbeitet. Neuer Inhalt:", tag.innerHTML); + } + } +} + + chrome.storage.local.set({ 'detectedWords': detectedWordsOnThisPage}); // gezählte Wörter werden gespeichert und später von popup.js aufgerufen + console.log("erkannte Wörter: ", detectedWordsOnThisPage); + chrome.storage.local.get(['detectedWords'], function(result){ + if(result.detectedWords) { + console.log("Wörter in storage: ", result.detectedWords); + } + + else{ + console.log("noch keine Wortanzahl vorhanden"); + } + }); + + + console.log("type of wörter: ", typeof chrome.storage.local.get('detectedWords')); +} + + + +chrome.storage.sync.get('checkboxState1', function(data){ + const checkboxState1 = data.checkboxState1 || false; + if (checkboxState1){ + highlight(); + } +}); + +chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) { + if (request.action === "checkboxStatusChanged") { + console.log("Checkbox-Status geändert, Seite wird neu geladen..."); + // Lade die Seite neu, um die Änderungen anzuwenden + window.location.reload(); + } +}); diff --git a/main/icon.png b/main/icon.png new file mode 100644 index 0000000..ec6f8bd Binary files /dev/null and b/main/icon.png differ diff --git a/main/inject.js b/main/inject.js new file mode 100644 index 0000000..06d7405 Binary files /dev/null and b/main/inject.js differ diff --git a/main/manifest.json b/main/manifest.json new file mode 100644 index 0000000..aef4eb3 --- /dev/null +++ b/main/manifest.json @@ -0,0 +1,18 @@ +{ + "name": "antihate", + "description": "markieren und aufklären von Hass im Netz", + "version": "1.2", + "action": {"default_popup": "popup.html", + "default_icon": "icon.png" + }, + "manifest_version": 3, + "content_scripts": [ + { + "js": ["content_script_gemini_andmy.js"], + "matches": [""] + } + ], + "permissions": [ + "activeTab", "storage" + ] +} \ No newline at end of file