From 69e04334bc3d87f4e4d82f09730e9a03ac5fdf37 Mon Sep 17 00:00:00 2001 From: medi6 Date: Mon, 22 Apr 2024 02:26:44 +0200 Subject: [PATCH] Prevent overriding of theme's default toolbar settings (#4120) * theme toolbar's handlers overwritten fix * Fix handling for true values and add CHANGELOG --------- Co-authored-by: david ruty Co-authored-by: Zihua Li --- CHANGELOG.md | 2 ++ packages/quill/src/core/quill.ts | 27 ++++++++++++--------- packages/quill/test/unit/core/quill.spec.ts | 15 ++++++++++++ 3 files changed, 32 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7ad2b09df..fdbdc9d3e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,7 @@ # [Unreleased] +- Prevent overriding of theme's default toolbar settings mistakenly [#4120](https://github.com/quilljs/quill/pull/4120) + # 2.0.0 We are thrilled to announce the release of Quill 2.0! Please check out the [announcement post](https://slab.com/blog/announcing-quill-2-0/). diff --git a/packages/quill/src/core/quill.ts b/packages/quill/src/core/quill.ts index b88a4f5fa..2bfc29c00 100644 --- a/packages/quill/src/core/quill.ts +++ b/packages/quill/src/core/quill.ts @@ -766,7 +766,7 @@ function expandModuleConfig(config: Record | undefined) { ...expanded, [key]: value === true ? {} : value, }), - {}, + {} as Record, ); } @@ -797,23 +797,26 @@ function expandConfig( const { modules: quillModuleDefaults, ...quillDefaults } = Quill.DEFAULTS; const { modules: themeModuleDefaults, ...themeDefaults } = theme.DEFAULTS; - const modules: ExpandedQuillOptions['modules'] = merge( - {}, - expandModuleConfig(quillModuleDefaults), - expandModuleConfig(themeModuleDefaults), - expandModuleConfig(options.modules), - ); + let userModuleOptions = expandModuleConfig(options.modules); // Special case toolbar shorthand if ( - modules != null && - modules.toolbar && - modules.toolbar.constructor !== Object + userModuleOptions != null && + userModuleOptions.toolbar && + userModuleOptions.toolbar.constructor !== Object ) { - modules.toolbar = { - container: modules.toolbar, + userModuleOptions = { + ...userModuleOptions, + toolbar: { container: userModuleOptions.toolbar }, }; } + const modules: ExpandedQuillOptions['modules'] = merge( + {}, + expandModuleConfig(quillModuleDefaults), + expandModuleConfig(themeModuleDefaults), + userModuleOptions, + ); + const config = { ...quillDefaults, ...omitUndefinedValuesFromOptions(themeDefaults), diff --git a/packages/quill/test/unit/core/quill.spec.ts b/packages/quill/test/unit/core/quill.spec.ts index ca9f413af..21433856a 100644 --- a/packages/quill/test/unit/core/quill.spec.ts +++ b/packages/quill/test/unit/core/quill.spec.ts @@ -764,6 +764,21 @@ describe('Quill', () => { }); }); + test('toolbar container shorthand with theme options', () => { + const config = expandConfig(`#${testContainerId}`, { + modules: { + toolbar: document.querySelector(`#${testContainerId}`), + }, + theme: 'snow', + }); + for (const [format, handler] of Object.entries( + Snow.DEFAULTS.modules.toolbar!.handlers ?? {}, + )) { + // @ts-expect-error + expect(config.modules.toolbar.handlers[format]).toBe(handler); + } + }); + test('toolbar format array', () => { const config = expandConfig(`#${testContainerId}`, { modules: {