diff --git a/src/public/app/widgets/type_widgets/ckeditor/config.spec.ts b/src/public/app/widgets/type_widgets/ckeditor/config.spec.ts new file mode 100644 index 000000000..8c96629b9 --- /dev/null +++ b/src/public/app/widgets/type_widgets/ckeditor/config.spec.ts @@ -0,0 +1,31 @@ +import { describe, expect, it } from "vitest"; +import { buildClassicToolbar, buildFloatingToolbar } from "./config.js"; + +type ToolbarConfig = string | "|" | { items: ToolbarConfig[] }; + +describe("CKEditor config", () => { + it("has same toolbar items for fixed and floating", () => { + function traverseItems(config: ToolbarConfig): string[] { + const result = []; + if (typeof config === "object") { + for (const item of config.items) { + result.push(traverseItems(item)); + } + } else if (config !== "|") { + result.push(config); + } + return result.flat(); + } + + const classicToolbarConfig = buildClassicToolbar(false); + const classicToolbarItems = new Set(traverseItems(classicToolbarConfig.toolbar)); + + const floatingToolbarConfig = buildFloatingToolbar(); + const floatingToolbarItems = traverseItems(floatingToolbarConfig.toolbar); + const floatingBlockToolbarItems = traverseItems({ items: floatingToolbarConfig.blockToolbar }); + const floatingToolbarAllItems = new Set([ ...floatingToolbarItems, ...floatingBlockToolbarItems ]); + + expect([ ...classicToolbarItems ].toSorted()) + .toStrictEqual([...floatingToolbarAllItems ].toSorted()); + }); +}); diff --git a/src/public/app/widgets/type_widgets/ckeditor/config.ts b/src/public/app/widgets/type_widgets/ckeditor/config.ts index 935854417..010379ee1 100644 --- a/src/public/app/widgets/type_widgets/ckeditor/config.ts +++ b/src/public/app/widgets/type_widgets/ckeditor/config.ts @@ -110,7 +110,7 @@ export function buildToolbarConfig(isClassicToolbar: boolean) { } } -function buildClassicToolbar(multilineToolbar: boolean) { +export function buildClassicToolbar(multilineToolbar: boolean) { // For nested toolbars, refer to https://ckeditor.com/docs/ckeditor5/latest/getting-started/setup/toolbar.html#grouping-toolbar-items-in-dropdowns-nested-toolbars. return { toolbar: { @@ -156,7 +156,7 @@ function buildClassicToolbar(multilineToolbar: boolean) { }; } -function buildFloatingToolbar() { +export function buildFloatingToolbar() { return { toolbar: { items: [