diff --git a/extension.test.ts b/extension.test.ts new file mode 100644 index 0000000..9dd970d --- /dev/null +++ b/extension.test.ts @@ -0,0 +1,45 @@ +import { describe, expect, test } from "bun:test"; +import { existsSync } from "node:fs"; +import { join } from "node:path"; + +const extensionDir = join(import.meta.dir, "extension"); +const manifest = await Bun.file(join(extensionDir, "manifest.json")).json(); + +describe("manifest.json", () => { + test("est en Manifest V3", () => { + expect(manifest.manifest_version).toBe(3); + }); + + test("déclare background.js comme script d'arrière-plan", () => { + expect(manifest.background.scripts).toContain("background.js"); + }); + + test("demande les host_permissions des deux sources", () => { + expect(manifest.host_permissions).toEqual([ + "https://atelier-huit.frama.space/*", + "https://www.ville-cugnaux.fr/*", + ]); + }); + + test("ne définit PAS default_popup (sinon onClicked devient muet)", () => { + expect(manifest.action.default_popup).toBeUndefined(); + }); + + test("porte un identifiant gecko", () => { + expect(manifest.browser_specific_settings.gecko.id).toBeDefined(); + }); +}); + +describe("ressources référencées", () => { + test("background.js existe", () => { + expect(existsSync(join(extensionDir, "background.js"))).toBe(true); + }); + + test("liste.html existe", () => { + expect(existsSync(join(extensionDir, "liste.html"))).toBe(true); + }); + + test("l'icône référencée existe", () => { + expect(existsSync(join(extensionDir, manifest.action.default_icon))).toBe(true); + }); +}); diff --git a/extension/background.js b/extension/background.js new file mode 100644 index 0000000..2431475 --- /dev/null +++ b/extension/background.js @@ -0,0 +1,5 @@ +// Listener enregistré au niveau racine (synchrone) : l'event page peut être +// déchargée, le clic toolbar doit toujours la réveiller et être capté. +browser.action.onClicked.addListener(() => { + browser.tabs.create({ url: browser.runtime.getURL("liste.html") }); +}); diff --git a/extension/icons/icon.svg b/extension/icons/icon.svg new file mode 100644 index 0000000..6f79713 --- /dev/null +++ b/extension/icons/icon.svg @@ -0,0 +1,5 @@ + diff --git a/extension/liste.css b/extension/liste.css new file mode 100644 index 0000000..5bfee0a --- /dev/null +++ b/extension/liste.css @@ -0,0 +1,29 @@ +:root { + color-scheme: light dark; + font-family: system-ui, sans-serif; +} + +body { + margin: 0; +} + +main { + max-width: 48rem; + margin: 0 auto; + padding: 2rem 1.5rem; +} + +h1 { + margin-top: 0; +} + +#liste { + list-style: none; + margin: 0; + padding: 0; +} + +.liste-vide { + color: #666; + font-style: italic; +} diff --git a/extension/liste.html b/extension/liste.html new file mode 100644 index 0000000..a19bc08 --- /dev/null +++ b/extension/liste.html @@ -0,0 +1,16 @@ + + +
+ + +