diff options
Diffstat (limited to 'comm/mail/components/storybook/.storybook/preview.mjs')
-rw-r--r-- | comm/mail/components/storybook/.storybook/preview.mjs | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/comm/mail/components/storybook/.storybook/preview.mjs b/comm/mail/components/storybook/.storybook/preview.mjs new file mode 100644 index 0000000000..6b654c6049 --- /dev/null +++ b/comm/mail/components/storybook/.storybook/preview.mjs @@ -0,0 +1,43 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +import { DOMLocalization } from "@fluent/dom"; +import { FluentBundle, FluentResource } from "@fluent/bundle"; + +// Base Fluent set up. +let storybookBundle = new FluentBundle("en-US"); +let loadedResources = new Set(); +function* generateBundles() { + yield* [storybookBundle]; +} +document.l10n = new DOMLocalization([], generateBundles); +document.l10n.connectRoot(document.documentElement); + +// Any fluent imports should go through MozXULElement.insertFTLIfNeeded. +window.MozXULElement = { + async insertFTLIfNeeded(name) { + if (loadedResources.has(name)) { + return; + } + //TODO might have to dynamically change this depending on where a component + // lives in the tree (for example for calendar or mailnews). + // eslint-disable-next-line no-unsanitized/method + let imported = await import( + /* webpackInclude: /.*[\/\\].*\.ftl/ */ + `mail/locales/en-US/${name}` + ); + let ftlContents = imported.default; + + if (loadedResources.has(name)) { + // Seems possible we've attempted to load this twice before the first call + // resolves, so once the first load is complete we can abandon the others. + return; + } + + let ftlResource = new FluentResource(ftlContents); + storybookBundle.addResource(ftlResource); + loadedResources.add(name); + document.l10n.translateRoots(); + }, +}; |