From d8687303402e722d02e8d8fa525a94e3a7fda9dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcos=20C=C3=A1ceres?= Date: Mon, 9 Aug 2021 10:46:39 +1000 Subject: [PATCH] feat(core/web-monetization): add object configuration --- src/core/web-monetization.js | 43 +++++++++++++++++------- tests/spec/core/web-monetization-spec.js | 34 +++++++++++++++++++ 2 files changed, 65 insertions(+), 12 deletions(-) diff --git a/src/core/web-monetization.js b/src/core/web-monetization.js index 609508b7ac..51794e1bed 100644 --- a/src/core/web-monetization.js +++ b/src/core/web-monetization.js @@ -9,25 +9,44 @@ import { html } from "./import-maps.js"; export const name = "core/web-monetization"; -const DEFAULT_PAYMENT_POINTER = "$respec.org"; - export function run(conf) { - const { monetization } = conf; - if (monetization === false) { + if (conf.monetization === false) { return; } + const { monetization } = conf; - const paymentPointer = - typeof monetization === "string" ? monetization : DEFAULT_PAYMENT_POINTER; + const { removeOnSave, paymentPointer } = canonicalizeConfig(monetization); - if (paymentPointer === DEFAULT_PAYMENT_POINTER) { - document.head.append( - html` ` - ); - } + const cssClass = removeOnSave ? "removeOnSave" : null; document.head.append(html``); } + +/** + * @param {object|string} rawConfig + * - {string} paymentPointer - The payment pointer to use. + * - {boolean} removeOnSave - Whether to remove the meta tag when the document is saved. + */ +function canonicalizeConfig(rawConfig) { + const config = { + paymentPointer: "$respec.org", + removeOnSave: true, + }; + switch (typeof rawConfig) { + case "string": + config.paymentPointer = rawConfig; + break; + case "object": + if (rawConfig.paymentPointer) { + config.paymentPointer = String(rawConfig.paymentPointer); + } + if (rawConfig.removeOnSave === false) { + config.removeOnSave = false; + } + break; + } + return config; +} diff --git a/tests/spec/core/web-monetization-spec.js b/tests/spec/core/web-monetization-spec.js index 1387f9b03f..e22f66cd56 100644 --- a/tests/spec/core/web-monetization-spec.js +++ b/tests/spec/core/web-monetization-spec.js @@ -37,4 +37,38 @@ describe("Core - Web Monetization", () => { expect(metaTag.content).toBe("$wallet.example.org"); expect(metaTag.classList).toContain("removeOnSave"); }); + + describe("object-based configuration", () => { + it("uses default payment pointer when using an empty object", async () => { + const ops = makeStandardOps({ monetization: {} }); + const doc = await makeRSDoc(ops); + + const metaTag = doc.querySelector("meta[name='monetization']"); + expect(metaTag.content).toBe("$respec.org"); + expect(metaTag.classList).toContain("removeOnSave"); + }); + + it("allows just setting removeOnSave", async () => { + const ops = makeStandardOps({ monetization: { removeOnSave: false } }); + const doc = await makeRSDoc(ops); + + const metaTag = doc.querySelector("meta[name='monetization']"); + expect(metaTag.content).toBe("$respec.org"); + expect(metaTag.classList).not.toContain("removeOnSave"); + }); + + it("allows changing payment pointer", async () => { + const ops = makeStandardOps({ + monetization: { + paymentPointer: "$wallet.example.org", + removeOnSave: false, + }, + }); + const doc = await makeRSDoc(ops); + + const metaTag = doc.querySelector("meta[name='monetization']"); + expect(metaTag.content).toBe("$wallet.example.org"); + expect(metaTag.classList).not.toContain("removeOnSave"); + }); + }); });