Add initial VibeGuard browser extension
This commit is contained in:
parent
f251f0f8ce
commit
9c65a61ebb
43 changed files with 125275 additions and 2 deletions
41
src/content/filter.ts
Normal file
41
src/content/filter.ts
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
import type { InferenceResult, Settings } from "../shared/types";
|
||||
|
||||
const HIDDEN = "data-vibeguard-hidden";
|
||||
const ORIGINAL_DISPLAY = "data-vibeguard-display";
|
||||
|
||||
export function applyResult(element: Element, result: InferenceResult, settings: Settings): void {
|
||||
const shouldFilter = result.label === "toxic" && result.probability >= settings.threshold;
|
||||
if (!shouldFilter) { restore(element); return; }
|
||||
|
||||
element.setAttribute(HIDDEN, "true");
|
||||
if (settings.filterMode === "hide") {
|
||||
element.setAttribute(ORIGINAL_DISPLAY, (element as HTMLElement).style.display);
|
||||
(element as HTMLElement).style.display = "none";
|
||||
return;
|
||||
}
|
||||
|
||||
const html = element as HTMLElement;
|
||||
if (!html.dataset.vibeguardOriginalDisplay) html.dataset.vibeguardOriginalDisplay = html.style.display;
|
||||
html.style.display = "none";
|
||||
let placeholder = element.nextElementSibling;
|
||||
if (!placeholder?.matches("[data-vibeguard-placeholder]")) {
|
||||
placeholder = document.createElement("div");
|
||||
placeholder.setAttribute("data-vibeguard-placeholder", "true");
|
||||
element.insertAdjacentElement("afterend", placeholder);
|
||||
}
|
||||
placeholder.className = "vibeguard-placeholder";
|
||||
placeholder.textContent = `Content hidden as toxic${settings.showScore ? ` (${Math.round(result.probability * 100)}%)` : ""}`;
|
||||
const button = document.createElement("button");
|
||||
button.type = "button";
|
||||
button.textContent = "Show";
|
||||
button.addEventListener("click", () => { restore(element); placeholder?.remove(); });
|
||||
placeholder.append(" ", button);
|
||||
}
|
||||
|
||||
export function restore(element: Element): void {
|
||||
const html = element as HTMLElement;
|
||||
html.style.display = html.dataset.vibeguardOriginalDisplay ?? "";
|
||||
delete html.dataset.vibeguardOriginalDisplay;
|
||||
element.removeAttribute(HIDDEN);
|
||||
element.nextElementSibling?.matches("[data-vibeguard-placeholder]") && element.nextElementSibling.remove();
|
||||
}
|
||||
Loading…
Reference in a new issue