|
1 | | -import { Fancybox } from "@fancyapps/ui"; |
2 | | -import { userSlideType } from "@fancyapps/ui/types/Carousel/types"; |
3 | | -import { OptionsType } from "@fancyapps/ui/types/Fancybox/options"; |
| 1 | +/** |
| 2 | + * @author Olaf Braun |
| 3 | + * @copyright 2001-2025 WoltLab GmbH |
| 4 | + * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php> |
| 5 | + */ |
| 6 | + |
| 7 | +import { Fancybox, CarouselSlide, FancyboxInstance } from "@fancyapps/ui"; |
4 | 8 | import { getPageOverlayContainer } from "WoltLabSuite/Core/Helper/PageOverlay"; |
| 9 | +import { getPhrase } from "WoltLabSuite/Core/Language"; |
| 10 | +import { ConsentPlugin } from "./Fancybox/ConsentPlugin"; |
5 | 11 |
|
6 | | -const LOCALES = ["cs", "de", "en", "es", "fr", "it", "lv", "pl", "sk"]; |
| 12 | +setDefaultConfig(); |
7 | 13 |
|
8 | 14 | export function setup() { |
9 | | - void getDefaultConfig().then((config) => { |
10 | | - Fancybox.bind("[data-fancybox]", config); |
11 | | - }); |
| 15 | + Fancybox.bind( |
| 16 | + '[data-fancybox]:is([data-type="image"],[data-type="youtube"],[data-type="vimeo"],[data-type="video"])', |
| 17 | + ); |
12 | 18 | } |
13 | 19 |
|
14 | 20 | export function setupLegacy() { |
15 | | - void getDefaultConfig().then((config) => { |
16 | | - Fancybox.bind(".jsImageViewer", { |
17 | | - ...config, |
18 | | - groupAll: true, |
19 | | - }); |
| 21 | + Fancybox.bind(".jsImageViewer", { |
| 22 | + groupAll: true, |
20 | 23 | }); |
21 | 24 | } |
22 | 25 |
|
23 | | -export async function createFancybox(userSlides?: Array<userSlideType>): Promise<Fancybox> { |
24 | | - return new Fancybox(userSlides, await getDefaultConfig()); |
| 26 | +export function showFancybox(userSlides?: Array<CarouselSlide>): FancyboxInstance { |
| 27 | + return Fancybox.show(userSlides); |
25 | 28 | } |
26 | 29 |
|
27 | | -async function getDefaultConfig(): Promise<Partial<OptionsType>> { |
28 | | - return { |
29 | | - l10n: await getLocalization(), |
30 | | - parentEl: getPageOverlayContainer(), |
31 | | - Html: { |
32 | | - videoAutoplay: false, |
| 30 | +function setDefaultConfig(): void { |
| 31 | + const defaultConfig = Fancybox.getDefaults(); |
| 32 | + defaultConfig.l10n = getLocalization(); |
| 33 | + defaultConfig.parentEl = getPageOverlayContainer(); |
| 34 | + defaultConfig.Carousel = { |
| 35 | + Video: { |
| 36 | + autoplay: false, |
33 | 37 | }, |
34 | 38 | }; |
35 | | -} |
36 | | - |
37 | | -export async function getLocalization(): Promise<Record<string, string>> { |
38 | | - let locale = document.documentElement.lang; |
39 | | - |
40 | | - if (!LOCALES.includes(locale)) { |
41 | | - locale = "en"; |
| 39 | + if (!defaultConfig.plugins) { |
| 40 | + defaultConfig.plugins = {}; |
42 | 41 | } |
| 42 | + defaultConfig.plugins.consent = () => { |
| 43 | + return new ConsentPlugin(); |
| 44 | + }; |
| 45 | +} |
43 | 46 |
|
44 | | - return (await import(`@fancyapps/ui/l10n/${locale}`))[locale]; |
| 47 | +export function getLocalization(): Record<string, string> { |
| 48 | + return { |
| 49 | + IMAGE_ERROR: getPhrase("wcf.fancybox.imageError"), |
| 50 | + MOVE_UP: getPhrase("wcf.fancybox.moveUp"), |
| 51 | + MOVE_DOWN: getPhrase("wcf.fancybox.moveDown"), |
| 52 | + MOVE_LEFT: getPhrase("wcf.fancybox.moveLeft"), |
| 53 | + MOVE_RIGHT: getPhrase("wcf.fancybox.moveRight"), |
| 54 | + ZOOM_IN: getPhrase("wcf.fancybox.zoomIn"), |
| 55 | + ZOOM_OUT: getPhrase("wcf.fancybox.zoomOut"), |
| 56 | + TOGGLE_FULL: getPhrase("wcf.fancybox.toggleFull"), |
| 57 | + TOGGLE_1TO1: getPhrase("wcf.fancybox.toggle1to1"), |
| 58 | + ITERATE_ZOOM: getPhrase("wcf.fancybox.iterateZoom"), |
| 59 | + ROTATE_CCW: getPhrase("wcf.fancybox.rotateCcw"), |
| 60 | + ROTATE_CW: getPhrase("wcf.fancybox.rotateCw"), |
| 61 | + FLIP_X: getPhrase("wcf.fancybox.flipX"), |
| 62 | + FLIP_Y: getPhrase("wcf.fancybox.flipY"), |
| 63 | + RESET: getPhrase("wcf.fancybox.reset"), |
| 64 | + ERROR: getPhrase("wcf.fancybox.error"), |
| 65 | + GOTO: getPhrase("wcf.fancybox.goto"), |
| 66 | + DOWNLOAD: getPhrase("wcf.fancybox.download"), |
| 67 | + TOGGLE_EXPAND: getPhrase("wcf.fancybox.toggleExpand"), |
| 68 | + TOGGLE_FULLSCREEN: getPhrase("wcf.fancybox.toggleFullscreen"), |
| 69 | + TOGGLE_THUMBS: getPhrase("wcf.fancybox.toggleThumbs"), |
| 70 | + TOGGLE_AUTOPLAY: getPhrase("wcf.fancybox.toggleAutoplay"), |
| 71 | + CLOSE: getPhrase("wcf.fancybox.close"), |
| 72 | + NEXT: getPhrase("wcf.fancybox.next"), |
| 73 | + PREV: getPhrase("wcf.fancybox.prev"), |
| 74 | + MODAL: getPhrase("wcf.fancybox.modal"), |
| 75 | + ELEMENT_NOT_FOUND: getPhrase("wcf.fancybox.elementNotFound"), |
| 76 | + IFRAME_ERROR: getPhrase("wcf.fancybox.iframeError"), |
| 77 | + }; |
45 | 78 | } |
0 commit comments