Add cross-browser popup status handling

This commit is contained in:
Jordan Wages 2026-08-24 23:32:27 -05:00
commit 7e17470356
38 changed files with 1242 additions and 199 deletions

View file

@ -1,8 +1,10 @@
import { describe, expect, it } from "vitest";
import { applyResult, restore } from "../src/content/filter";
import { afterEach, describe, expect, it } from "vitest";
import { applyResult, removeOrphanedPlaceholders, restore } from "../src/content/filter";
import { DEFAULT_SETTINGS } from "../src/shared/types";
describe("content filtering", () => {
afterEach(() => document.body.replaceChildren());
it("collapses toxic content and restores it", () => {
const element = document.createElement("article");
document.body.append(element);
@ -13,4 +15,27 @@ describe("content filtering", () => {
expect(element.style.display).toBe("");
expect(document.querySelector("[data-vibeguard-placeholder]")).toBeNull();
});
it("preserves the original display value when filtering is reconciled repeatedly", () => {
const element = document.createElement("article");
document.body.append(element);
const result = { requestId: "1", id: "1", textHash: "x", label: "toxic" as const, probability: .91, navigationId: "n" };
applyResult(element, result, DEFAULT_SETTINGS);
applyResult(element, result, DEFAULT_SETTINGS);
restore(element);
expect(element.style.display).toBe("");
});
it("removes placeholders no longer paired with the current post element", () => {
const stale = document.createElement("div");
const orphan = document.createElement("div");
orphan.setAttribute("data-vibeguard-placeholder-for", "mastodon:1");
const current = document.createElement("article");
const currentPlaceholder = document.createElement("div");
currentPlaceholder.setAttribute("data-vibeguard-placeholder-for", "mastodon:1");
document.body.append(stale, orphan, current, currentPlaceholder);
removeOrphanedPlaceholders("mastodon:1", [current]);
expect(orphan.isConnected).toBe(false);
expect(currentPlaceholder.isConnected).toBe(true);
});
});