Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 13 additions & 1 deletion src/editor/configuration.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ export default class EditorConfiguration {
this.#editorElement = editorElement
this.#config = new Configuration(
Lexxy.presets.get("default"),
Lexxy.presets.get(editorElement.preset),
this.#presetConfig,
this.#overrides
)
}
Expand All @@ -19,6 +19,18 @@ export default class EditorConfiguration {
return this.#config.get(path)
}

get #presetConfig() {
const preset = this.#editorElement.preset
const config = Lexxy.presets.get(preset)

if (config) {
return config
} else {
console.warn(`Unknown Lexxy preset "${preset}". Falling back to the default preset.`)
return {}
}
Comment on lines +22 to +31
}

get #overrides() {
const overrides = {}
for (const option of this.#defaultOptions) {
Expand Down
20 changes: 20 additions & 0 deletions test/browser/fixtures/unknown-preset.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Lexxy Unknown Preset</title>
<link rel="stylesheet" href="/styles.css">
</head>
<body>
<form>
<div class="body">
<lexxy-editor class="lexxy-content" preset="not-registered" placeholder="Write something..."></lexxy-editor>
</div>

<div class="events"></div>
</form>

<script type="module" src="/editor.js"></script>
</body>
</html>
23 changes: 23 additions & 0 deletions test/browser/tests/editor/unknown_preset.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import { test } from "../../test_helper.js"
import { expect } from "@playwright/test"

test.describe("Editor with an unregistered preset", () => {
test("connects without crashing and warns about the unknown preset", async ({ page }) => {
const pageErrors = []
page.on("pageerror", (error) => pageErrors.push(error))

const warnings = []
page.on("console", (message) => {
if (message.type() === "warning") warnings.push(message.text())
})

await page.goto("/unknown-preset.html")
await page.waitForSelector("lexxy-editor[connected]")

// It connected (no crash in connectedCallback) and falls back to defaults.
await expect(page.locator("lexxy-editor")).toHaveAttribute("connected", "")

expect(pageErrors, pageErrors.map((e) => e.stack).join("\n\n")).toHaveLength(0)
expect(warnings.some((text) => text.includes('Unknown Lexxy preset "not-registered"'))).toBe(true)
})
})
Loading