@xibosignage/xibo-layout-renderer 1.0.2 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"xibo-layout-renderer.esm.js","sources":["../node_modules/nanoevents/index.js","../../src/Modules/Platform/Platform.ts","../../src/Types/Layout/Layout.types.ts","../../src/Modules/Generators/Generators.ts","../../src/Types/Region/Region.types.ts","../../src/Types/Media/Media.types.ts","../../src/Modules/Transitions/Transitions.ts","../../src/Modules/Media/VideoMedia.ts","../../src/Modules/Media/AudioMedia.ts","../../src/Modules/Media/Media.ts","../../src/Modules/Region/Region.ts","../../src/Modules/Layout/Layout.ts","../../src/Types/XLR/XLR.types.ts","../src/Modules/SplashScreen/img/logo.png","../src/Modules/SplashScreen/img/loader.gif","../../src/Modules/SplashScreen/SplashScreen.ts","../../src/xibo-layout-renderer.ts"],"sourcesContent":["export let createNanoEvents = () => ({\n emit(event, ...args) {\n for (\n let i = 0,\n callbacks = this.events[event] || [],\n length = callbacks.length;\n i < length;\n i++\n ) {\n callbacks[i](...args)\n }\n },\n events: {},\n on(event, cb) {\n ;(this.events[event] ||= []).push(cb)\n return () => {\n this.events[event] = this.events[event]?.filter(i => cb !== i)\n }\n }\n})\n","/*\r\n * Copyright (C) 2024 Xibo Signage Ltd\r\n *\r\n * Xibo - Digital Signage - https://www.xibosignage.com\r\n *\r\n * This file is part of Xibo.\r\n *\r\n * Xibo is free software: you can redistribute it and/or modify\r\n * it under the terms of the GNU Lesser General Public License as published by\r\n * the Free Software Foundation, either version 3 of the License, or\r\n * any later version.\r\n *\r\n * Xibo is distributed in the hope that it will be useful,\r\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n * GNU Lesser General Public License for more details.\r\n *\r\n * You should have received a copy of the GNU Lesser General Public License\r\n * along with Xibo. If not, see <http://www.gnu.org/licenses/>.\r\n */\r\nimport {OptionsType} from \"../../Types/Layout\";\r\n\r\nconst RESOURCE_URL = '/playlist/widget/resource/:regionId/:id';\r\nconst XLF_URL = '/layout/xlf/:layoutId';\r\nconst LAYOUT_BACKGROUND_DOWNLOAD_URL = '/layout/background/:id';\r\nconst LAYOUT_PREVIEW_URL = '/layout/preview/[layoutCode]';\r\nconst LIBRARY_DOWNLOAD_URL = '/library/download/:id';\r\nconst LOADER_URL = '/theme/default/img/loader.gif';\r\n\r\nexport const platform: OptionsType = {\r\n getResourceUrl: RESOURCE_URL,\r\n xlfUrl: XLF_URL,\r\n layoutBackgroundDownloadUrl: LAYOUT_BACKGROUND_DOWNLOAD_URL,\r\n layoutPreviewUrl: LAYOUT_PREVIEW_URL,\r\n libraryDownloadUrl: LIBRARY_DOWNLOAD_URL,\r\n loaderUrl: LOADER_URL,\r\n idCounter: 0,\r\n inPreview: true,\r\n appHost: null,\r\n platform: 'CMS',\r\n};\r\n","/*\r\n * Copyright (C) 2024 Xibo Signage Ltd\r\n *\r\n * Xibo - Digital Signage - https://www.xibosignage.com\r\n *\r\n * This file is part of Xibo.\r\n *\r\n * Xibo is free software: you can redistribute it and/or modify\r\n * it under the terms of the GNU Lesser General Public License as published by\r\n * the Free Software Foundation, either version 3 of the License, or\r\n * any later version.\r\n *\r\n * Xibo is distributed in the hope that it will be useful,\r\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n * GNU Lesser General Public License for more details.\r\n *\r\n * You should have received a copy of the GNU Lesser General Public License\r\n * along with Xibo. If not, see <http://www.gnu.org/licenses/>.\r\n */\r\nimport {DefaultEvents, Emitter, Unsubscribe} from 'nanoevents';\r\nimport {IRegion} from '../Region';\r\nimport {platform} from '../../Modules/Platform';\r\nimport {ILayoutEvents} from '../../Modules/Layout';\r\nimport {IXlr} from '../XLR';\r\n\r\nexport type InputLayoutType = {\r\n layoutId: number | null;\r\n path?: string;\r\n};\r\n\r\nexport type OptionsType = {\r\n xlfUrl: string;\r\n getResourceUrl: string;\r\n layoutBackgroundDownloadUrl: string;\r\n layoutPreviewUrl: string;\r\n libraryDownloadUrl: string;\r\n loaderUrl: string;\r\n idCounter: number;\r\n inPreview: boolean;\r\n appHost?: string | null;\r\n platform: 'CMS' | 'chromeOS';\r\n config?: {\r\n cmsUrl: string | null;\r\n schemaVersion: number;\r\n cmsKey: string | null;\r\n hardwareKey: string | null;\r\n };\r\n};\r\n\r\nexport interface ILayout {\r\n id: number | null;\r\n layoutId: number | null;\r\n sw: number | null;\r\n sh: number | null;\r\n xw: number | null;\r\n xh: number | null;\r\n zIndex: number | null;\r\n scaleFactor: number;\r\n sWidth: number;\r\n sHeight: number;\r\n offsetX: number;\r\n offsetY: number;\r\n bgColor: string;\r\n bgImage: string;\r\n bgId: string;\r\n containerName: string;\r\n layoutNode: Document | null;\r\n regionMaxZIndex: number;\r\n ready: boolean;\r\n regionObjects: IRegion[];\r\n drawer: String[];\r\n allExpired: boolean;\r\n regions: IRegion[];\r\n actions: String[];\r\n options: OptionsType;\r\n done: boolean;\r\n allEnded: boolean;\r\n path?: string;\r\n prepareLayout(): void;\r\n parseXlf(): void;\r\n run(): void;\r\n emitter: Emitter<ILayoutEvents>;\r\n on<E extends keyof ILayoutEvents>(event: E, callback: ILayoutEvents[E]): Unsubscribe;\r\n regionExpired(): void;\r\n end(): void;\r\n regionEnded(): void;\r\n stopAllMedia(): Promise<void>;\r\n resetLayout(): Promise<void>;\r\n index: number;\r\n}\r\n\r\nexport const initialLayout: ILayout = {\r\n id: null,\r\n layoutId: null,\r\n sw: 0,\r\n sh: 0,\r\n xw: 0,\r\n xh: 0,\r\n zIndex: 0,\r\n scaleFactor: 1,\r\n sWidth: 0,\r\n sHeight: 0,\r\n offsetX: 0,\r\n offsetY: 0,\r\n bgColor: '',\r\n bgImage: '',\r\n bgId: '',\r\n containerName: '',\r\n layoutNode: null,\r\n regionMaxZIndex: 0,\r\n ready: false,\r\n regionObjects: [],\r\n drawer: [],\r\n allExpired: false,\r\n regions: [],\r\n actions: [],\r\n options: platform,\r\n done: false,\r\n allEnded: false,\r\n path: '',\r\n prepareLayout() {\r\n },\r\n parseXlf() {\r\n },\r\n run() {\r\n },\r\n on<E extends keyof ILayoutEvents>(event: E, callback: ILayoutEvents[E]): Unsubscribe {\r\n return <Unsubscribe>{};\r\n },\r\n regionExpired() {\r\n },\r\n end() {\r\n },\r\n regionEnded() {\r\n },\r\n stopAllMedia() {\r\n return Promise.resolve();\r\n },\r\n resetLayout() {\r\n return Promise.resolve();\r\n },\r\n emitter: <Emitter<ILayoutEvents>>{},\r\n index: -1,\r\n};\r\n\r\nexport type GetLayoutParamType = {\r\n xlr: IXlr;\r\n moveNext?: boolean;\r\n}\r\n\r\nexport type GetLayoutType = {\r\n currentLayoutIndex: number;\r\n inputLayouts: InputLayoutType[];\r\n current: ILayout | undefined;\r\n next: ILayout | undefined;\r\n}\r\n","/*\r\n * Copyright (C) 2024 Xibo Signage Ltd\r\n *\r\n * Xibo - Digital Signage - https://www.xibosignage.com\r\n *\r\n * This file is part of Xibo.\r\n *\r\n * Xibo is free software: you can redistribute it and/or modify\r\n * it under the terms of the GNU Lesser General Public License as published by\r\n * the Free Software Foundation, either version 3 of the License, or\r\n * any later version.\r\n *\r\n * Xibo is distributed in the hope that it will be useful,\r\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n * GNU Lesser General Public License for more details.\r\n *\r\n * You should have received a copy of the GNU Lesser General Public License\r\n * along with Xibo. If not, see <http://www.gnu.org/licenses/>.\r\n */\r\nimport { IMedia } from '../../Types/Media';\r\nimport {InputLayoutType, OptionsType} from '../../Types/Layout';\r\n\r\nexport function nextId(options: { idCounter: number; }) {\r\n if (options.idCounter > 500) {\r\n options.idCounter = 0;\r\n }\r\n\r\n options.idCounter = options.idCounter + 1;\r\n return options.idCounter;\r\n}\r\n\r\nexport const getMediaId = ({mediaType, containerName}: IMedia) => {\r\n let mediaId = containerName;\r\n\r\n if (mediaType === 'video') {\r\n mediaId = mediaId + '-vid';\r\n } else if (mediaType === 'audio') {\r\n mediaId = mediaId + '-aud';\r\n }\r\n\r\n return mediaId;\r\n};\r\n\r\nexport const capitalizeStr = (inputStr: string) => {\r\n if (inputStr === null) {\r\n return '';\r\n }\r\n\r\n return String(inputStr).charAt(0).toUpperCase() + String(inputStr).substring(1);\r\n};\r\n\r\nexport async function getDataBlob(src: string) {\r\n return fetch(src, {mode: 'no-cors'})\r\n .then((res) => res.blob())\r\n .then((blob) => new Promise((res, rej) => {\r\n const reader = new FileReader();\r\n\r\n reader.onloadend = () => res(reader.result);\r\n reader.onerror = rej;\r\n reader.readAsDataURL(blob);\r\n }));\r\n}\r\n\r\nexport async function preloadMediaBlob(src: string, type: 'video' | 'audio' | 'image') {\r\n const res = await fetch(src, {mode: 'no-cors'});\r\n let blob: Blob | MediaSource = new Blob();\r\n\r\n if (type === 'image') {\r\n blob = new Blob()\r\n } else if (type === 'video') {\r\n blob = await res.blob();\r\n } else if (type === 'audio') {\r\n const data = await res.arrayBuffer();\r\n blob = new Blob([data], { type: audioFileType(getFileExt(src)) })\r\n }\r\n\r\n return URL.createObjectURL(blob);\r\n}\r\n\r\nexport async function fetchJSON(url: string) {\r\n return fetch(url)\r\n .then(res => res.json())\r\n .catch(err => {\r\n console.debug(err);\r\n });\r\n}\r\n\r\nexport async function fetchText(url: string): Promise<string> {\r\n return fetch(url)\r\n .then(res => res.text())\r\n .then((responseText) => {\r\n if (String(responseText).length > 0) {\r\n return responseText;\r\n } else {\r\n return '';\r\n }\r\n })\r\n .catch(err => {\r\n console.debug(err);\r\n return err?.message;\r\n });\r\n}\r\n\r\nexport function getFileExt(filename: string) {\r\n const filenameArr = String(filename).split('.');\r\n\r\n return filenameArr[filenameArr.length - 1];\r\n}\r\n\r\nexport function audioFileType(str: string) {\r\n const validAudioTypes = {\r\n 'mp3': 'audio/mp3',\r\n 'wav': 'audio/wav',\r\n 'ogg': 'audio/ogg',\r\n };\r\n\r\n if (Boolean(validAudioTypes[str as 'mp3' | 'wav' | 'ogg'])) {\r\n return validAudioTypes[str as 'mp3' | 'wav' | 'ogg'];\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nexport function composeResourceUrlByPlatform(options: OptionsType, params: any) {\r\n let resourceUrl = params.regionOptions.getResourceUrl\r\n .replace(\":regionId\", params.regionId)\r\n .replace(\":id\", params.mediaId) +\r\n '?preview=1&layoutPreview=1';\r\n\r\n if (options.platform === 'chromeOS') {\r\n const resourceEndpoint = '/required-files/resource/';\r\n\r\n if (!params.isGlobalContent && params.isImageOrVideo) {\r\n resourceUrl = resourceEndpoint + params.fileId + '?saveAs=' + params.uri;\r\n }\r\n } else if (!Boolean(params['mediaType'])) {\r\n resourceUrl += '&scale_override=' + params.scaleFactor;\r\n }\r\n\r\n return resourceUrl;\r\n}\r\n\r\nexport function composeResourceUrl(options: OptionsType, params: any) {\r\n const schemaVersion = (options) && options.config?.schemaVersion;\r\n const hardwareKey = (options) && options.config?.hardwareKey;\r\n const serverKey = (options) && options.config?.cmsKey;\r\n\r\n return '/pwa/getResource' +\r\n '?v=' + schemaVersion +\r\n '&serverKey=' + serverKey +\r\n '&hardwareKey=' + hardwareKey +\r\n '&layoutId=' + params.layoutId +\r\n '&regionId=' + params.regionId +\r\n '&mediaId=' + params.mediaId;\r\n}\r\n\r\nexport function composeVideoUrl(params: any) {\r\n return '/xmds.php?file=' + params.uri;\r\n}\r\n\r\nexport function composeBgUrlByPlatform(\r\n platform: OptionsType['platform'],\r\n params: any\r\n) {\r\n let bgImageUrl = params.layoutBackgroundDownloadUrl.replace(\":id\", (params.layout.id as unknown) as string) +\r\n '?preview=1&width=' + params.layout.sWidth +\r\n '&height=' + params.layout.sHeight +\r\n '&dynamic&proportional=0';\r\n\r\n if (platform === 'chromeOS') {\r\n bgImageUrl = '/required-files/resource/' + params.layout.id +\r\n '?saveAs=' + params.layout.bgImage;\r\n }\r\n\r\n return bgImageUrl;\r\n}\r\n\r\ntype LayoutIndexType = {\r\n [k: string]: InputLayoutType & {\r\n index: number;\r\n }\r\n}\r\n\r\nexport function getIndexByLayoutId(layoutsInput: InputLayoutType[], layoutId?: number | null) {\r\n let layoutIndexes = layoutsInput.reduce((a: LayoutIndexType, b, indx) => {\r\n a[Number(b.layoutId)] = {\r\n ...b,\r\n index: indx\r\n };\r\n\r\n return a;\r\n }, {});\r\n\r\n if (layoutId === null || !layoutId) {\r\n return layoutIndexes;\r\n }\r\n\r\n if (Boolean(layoutIndexes[layoutId])) {\r\n return layoutIndexes[layoutId];\r\n }\r\n\r\n // Defaults to 0\r\n return {index: 0};\r\n}\r\n\r\nexport function isEmpty(input: any) {\r\n return !Boolean(input) || String(input).length === 0;\r\n}\r\n\r\nexport const splashScreenLayoutObj: InputLayoutType = {\r\n layoutId: 0,\r\n path: '',\r\n};\r\n\r\nexport function splashScreenDOM() {\r\n const mediaItem = document.querySelector('.media--item');\r\n const newImg = document.createElement('img');\r\n\r\n newImg.src = new URL('./logo.png', import.meta.url).href;\r\n\r\n if (mediaItem !== null) {\r\n mediaItem.insertBefore(newImg, mediaItem.lastElementChild);\r\n }\r\n\r\n return newImg;\r\n}\r\n","/*\r\n * Copyright (C) 2024 Xibo Signage Ltd\r\n *\r\n * Xibo - Digital Signage - https://www.xibosignage.com\r\n *\r\n * This file is part of Xibo.\r\n *\r\n * Xibo is free software: you can redistribute it and/or modify\r\n * it under the terms of the GNU Lesser General Public License as published by\r\n * the Free Software Foundation, either version 3 of the License, or\r\n * any later version.\r\n *\r\n * Xibo is distributed in the hope that it will be useful,\r\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n * GNU Lesser General Public License for more details.\r\n *\r\n * You should have received a copy of the GNU Lesser General Public License\r\n * along with Xibo. If not, see <http://www.gnu.org/licenses/>.\r\n */\r\nimport { DefaultEvents, Emitter, Unsubscribe } from 'nanoevents';\r\nimport {ILayout, initialLayout} from '../Layout';\r\nimport {IMedia} from '../Media';\r\n\r\nexport interface IRegionEvents {\r\n start: (layout: IRegion) => void;\r\n end: (layout: IRegion) => void;\r\n}\r\n\r\nexport interface IRegion {\r\n layout: ILayout;\r\n id: string;\r\n regionId: string;\r\n xml: null | Element;\r\n mediaObjects: IMedia[];\r\n mediaObjectsActions: String[];\r\n currentMedia: number;\r\n complete: boolean;\r\n containerName: string;\r\n ending: boolean;\r\n ended: boolean;\r\n oneMedia: boolean;\r\n oldMedia: IMedia | undefined;\r\n curMedia: IMedia | undefined;\r\n nxtMedia: IMedia | undefined;\r\n currentMediaIndex: number;\r\n totalMediaObjects: number;\r\n ready: boolean;\r\n options: {\r\n [k: string]: any;\r\n };\r\n sWidth: number;\r\n sHeight: number;\r\n offsetX: number;\r\n offsetY: number;\r\n zIndex: number;\r\n index: number;\r\n emitter?: Emitter<DefaultEvents>;\r\n prepareRegion(): void;\r\n playNextMedia(): void;\r\n transitionNodes(oldMedia: IMedia | undefined, newMedia: IMedia | undefined): void;\r\n finished(): void;\r\n run(): void;\r\n end(): void;\r\n exitTransition(): void;\r\n exitTransitionComplete(): void;\r\n on<E extends keyof IRegionEvents>(event: E, callback: IRegionEvents[E]): Unsubscribe;\r\n prepareMediaObjects(): void;\r\n reset(): void;\r\n}\r\n\r\nexport const initialRegion: IRegion = {\r\n layout: initialLayout,\r\n id: '',\r\n regionId: '',\r\n xml: null,\r\n mediaObjects: [],\r\n mediaObjectsActions: [],\r\n currentMedia: -1,\r\n complete: false,\r\n containerName: '',\r\n ending: false,\r\n ended: false,\r\n oneMedia: false,\r\n oldMedia: undefined,\r\n curMedia: undefined,\r\n nxtMedia: undefined,\r\n currentMediaIndex: 0,\r\n totalMediaObjects: 0,\r\n ready: false,\r\n options: {},\r\n sWidth: 0,\r\n sHeight: 0,\r\n offsetX: 0,\r\n offsetY: 0,\r\n zIndex: 0,\r\n index: -1,\r\n prepareRegion() {\r\n },\r\n playNextMedia() {\r\n },\r\n transitionNodes() {\r\n },\r\n finished() {\r\n },\r\n run() {\r\n },\r\n end() {\r\n },\r\n exitTransition() {},\r\n exitTransitionComplete() {},\r\n on<E extends keyof IRegionEvents>(event: E, callback: IRegionEvents[E]): Unsubscribe {\r\n return <Unsubscribe>{};\r\n },\r\n prepareMediaObjects() {\r\n },\r\n reset() {\r\n }\r\n};\r\n","/*\r\n * Copyright (C) 2024 Xibo Signage Ltd\r\n *\r\n * Xibo - Digital Signage - https://www.xibosignage.com\r\n *\r\n * This file is part of Xibo.\r\n *\r\n * Xibo is free software: you can redistribute it and/or modify\r\n * it under the terms of the GNU Lesser General Public License as published by\r\n * the Free Software Foundation, either version 3 of the License, or\r\n * any later version.\r\n *\r\n * Xibo is distributed in the hope that it will be useful,\r\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n * GNU Lesser General Public License for more details.\r\n *\r\n * You should have received a copy of the GNU Lesser General Public License\r\n * along with Xibo. If not, see <http://www.gnu.org/licenses/>.\r\n */\r\nimport {Emitter, Unsubscribe} from 'nanoevents';\r\nimport { IMediaEvents } from '../../Modules/Media/Media';\r\nimport {initialRegion, IRegion} from '../Region';\r\nimport {OptionsType} from '../Layout';\r\n\r\nexport interface IMedia {\r\n checkIframeStatus: boolean;\r\n run(): void;\r\n divHeight: number;\r\n type: string;\r\n timeoutId: ReturnType<typeof setTimeout>;\r\n divWidth: number;\r\n tempSrc: string;\r\n duration: number;\r\n iframeName: string;\r\n loadIframeOnRun: boolean;\r\n xml: Element | null;\r\n containerName: string;\r\n ready: boolean;\r\n loop: boolean;\r\n options: OptionsType & {\r\n [k: string]: any\r\n };\r\n useDuration: boolean;\r\n html: HTMLElement | null;\r\n id: string;\r\n mediaId: string;\r\n iframe: HTMLIFrameElement | null;\r\n render: string;\r\n attachedAudio: boolean;\r\n on<E extends keyof IMediaEvents>(event: E, callback: IMediaEvents[E]): Unsubscribe;\r\n init(): void;\r\n schemaVersion: string;\r\n index: number;\r\n mediaType: string;\r\n finished: boolean;\r\n uri: string;\r\n url: string | null;\r\n singlePlay: boolean;\r\n stop(): Promise<void>;\r\n idCounter: number;\r\n region: IRegion;\r\n fileId: string;\r\n emitter: Emitter<IMediaEvents>;\r\n}\r\n\r\nexport const initialMedia: IMedia = {\r\n region: initialRegion,\r\n xml: null,\r\n id: '',\r\n mediaId: '',\r\n index: 0,\r\n idCounter: 0,\r\n containerName: '',\r\n html: null,\r\n iframe: null,\r\n iframeName: '',\r\n mediaType: '',\r\n render: 'html',\r\n attachedAudio: false,\r\n singlePlay: false,\r\n timeoutId: setTimeout(() => {}, 0),\r\n ready: true,\r\n checkIframeStatus: false,\r\n loadIframeOnRun: false,\r\n tempSrc: '',\r\n finished: false,\r\n schemaVersion: '1',\r\n type: '',\r\n duration: 0,\r\n useDuration: Boolean(0),\r\n fileId: '',\r\n uri: '',\r\n options: <OptionsType>{},\r\n divWidth: 0,\r\n divHeight: 0,\r\n url: null,\r\n loop: false,\r\n run() {},\r\n init() {},\r\n stop() {\r\n return Promise.resolve();\r\n },\r\n on<E extends keyof IMediaEvents>(event: E, callback: IMediaEvents[E]): Unsubscribe {\r\n return <Unsubscribe>{};\r\n },\r\n emitter: <Emitter<IMediaEvents>>{},\r\n}\r\n","/*\n * Copyright (C) 2024 Xibo Signage Ltd\n *\n * Xibo - Digital Signage - https://www.xibosignage.com\n *\n * This file is part of Xibo.\n *\n * Xibo is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * any later version.\n *\n * Xibo is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * along with Xibo. If not, see <http://www.gnu.org/licenses/>.\n */\nexport const defaultTrans = (duration: number, trans: 'in' | 'out') => {\n const defaultKeyframes = [\n { display: trans === 'in' ? 'none' : 'block' },\n { display: trans === 'out' ? 'none' : 'block' },\n ];\n const defaultTiming: number | KeyframeAnimationOptions | undefined = {\n duration,\n };\n\n return {\n keyframes: defaultKeyframes,\n timing: defaultTiming,\n };\n};\n\nexport const fadeInElem = (duration: number) => {\n const fadeInKeyframes = [\n { opacity: 0 },\n { opacity: 1 },\n ];\n const fadeInTiming: number | KeyframeAnimationOptions | undefined = {\n duration,\n fill: 'forwards',\n };\n\n return {\n keyframes: fadeInKeyframes,\n timing: fadeInTiming,\n }\n};\n\nexport const fadeOutElem = (duration: number) => {\n const fadeOutKeyframes = [\n { opacity: 1 },\n { opacity: 0, zIndex: -1 },\n ];\n const fadeOutTiming: number | KeyframeAnimationOptions | undefined = {\n duration,\n fill: 'forwards',\n };\n\n return {\n keyframes: fadeOutKeyframes,\n timing: fadeOutTiming,\n }\n};\n\nexport type KeyframeOptionsType = {\n from: {\n [k: string]: any,\n },\n to: {\n [k: string]: any,\n },\n}\n\nexport const flyInElem = (duration: number, keyframeOptions: KeyframeOptionsType | undefined, direction?: string) => {\n const flyInKeyframes = [\n {opacity: 0},\n {opacity: 1, zIndex: 1},\n ];\n const flyInTiming: number | KeyframeAnimationOptions | undefined = {\n duration,\n fill: 'forwards',\n };\n\n if (keyframeOptions && Boolean(keyframeOptions.from)) {\n flyInKeyframes[0] = {...keyframeOptions.from, ...flyInKeyframes[0]};\n }\n\n if (keyframeOptions && Boolean(keyframeOptions.to)) {\n flyInKeyframes[1] = {...keyframeOptions.to, ...flyInKeyframes[1]};\n }\n\n return {\n keyframes: flyInKeyframes,\n timing: flyInTiming,\n };\n};\n\nexport const flyOutElem = (duration: number, keyframeOptions: KeyframeOptionsType | undefined, direction?: string) => {\n const flyOutKeyframes: Keyframe[] = [\n {opacity: 1},\n {opacity: 0, zIndex: -1},\n ];\n const flyOutTiming: number | KeyframeAnimationOptions | undefined = {\n duration,\n fill: 'forwards',\n };\n\n if (keyframeOptions && Boolean(keyframeOptions.from)) {\n flyOutKeyframes[0] = {...keyframeOptions.from, ...flyOutKeyframes[0]};\n }\n\n if (keyframeOptions && Boolean(keyframeOptions.to)) {\n flyOutKeyframes[1] = {...keyframeOptions.to, ...flyOutKeyframes[1]};\n }\n\n return {\n keyframes: flyOutKeyframes,\n timing: flyOutTiming,\n };\n};\n\nexport type TransitionNameType = 'fadeIn' | 'fadeOut' | 'flyIn' | 'flyOut' | 'defaultIn' | 'defaultOut';\n\nexport type TransitionElementOptions = {\n duration: number;\n keyframes?: KeyframeOptionsType;\n direction?: string;\n};\n\nexport const transitionElement = (transition: TransitionNameType, options: TransitionElementOptions) => {\n const transitions = {\n fadeIn: fadeInElem(options.duration),\n fadeOut: fadeOutElem(options.duration),\n flyIn: flyInElem(options.duration, options.keyframes, options.direction),\n flyOut: flyOutElem(options.duration, options.keyframes, options.direction),\n defaultIn: defaultTrans(options.duration, 'in'),\n defaultOut: defaultTrans(options.duration, 'out'),\n };\n\n return transitions[transition];\n};\n\nexport type compassPoints = 'N' | 'NE' | 'E' | 'SE' | 'S' | 'SW' | 'W' | 'NW';\n\nexport type flyTransitionParams = {\n trans: 'in' | 'out';\n direction: compassPoints;\n height: string | number;\n width: string | number;\n};\n\nexport const flyTransitionKeyframes = (params: flyTransitionParams): KeyframeOptionsType => {\n const keyframes = {\n from: {},\n to: {},\n };\n const opacityAttr = (source: 'from' | 'to') => {\n if (source === 'from') {\n return params.trans === 'in' ? 0 : 1;\n }\n \n return params.trans === 'out' ? 1 : 0;\n };\n\n switch (params.direction) {\n case 'N':\n keyframes.from = {\n opacity: opacityAttr('from'),\n top: params.trans === 'in' ? `${params.height}px` : 0,\n };\n keyframes.to = {\n opacity: opacityAttr('to'),\n top: params.trans === 'in' ? 0 : `-${params.height}px`,\n };\n break;\n case 'NE':\n keyframes.from = {\n opacity: opacityAttr('from'),\n top: params.trans === 'in' ? `${params.height}px` : 0,\n left: params.trans === 'in' ? `-${params.width}px` : 0,\n };\n keyframes.to = {\n opacity: opacityAttr('to'),\n top: params.trans === 'in' ? 0 : `-${params.height}px`,\n left: params.trans === 'in' ? 0 : `${params.width}px`,\n };\n break;\n case 'E':\n keyframes.from = {\n opacity: opacityAttr('from'),\n left: params.trans === 'in' ? `-${params.width}px` : 0,\n };\n keyframes.to = {\n opacity: opacityAttr('to'),\n left: params.trans === 'in' ? 0 : `${params.width}px`,\n };\n break;\n case 'SE':\n keyframes.from = {\n opacity: opacityAttr('from'),\n top: params.trans === 'in' ? `-${params.height}px` : 0,\n left: params.trans === 'in' ? `-${params.width}px` : 0,\n };\n keyframes.to = {\n opacity: opacityAttr('to'),\n top: params.trans === 'in' ? 0 : `${params.height}px`,\n left: params.trans === 'in' ? 0 : `${params.width}px`,\n };\n break;\n case 'S':\n keyframes.from = {\n opacity: opacityAttr('from'),\n top: params.trans === 'in' ? `-${params.height}px` : 0,\n };\n keyframes.to = {\n opacity: opacityAttr('to'),\n top: params.trans === 'in' ? 0 : `${params.height}px`,\n };\n break;\n case 'SW':\n keyframes.from = {\n opacity: opacityAttr('from'),\n top: params.trans === 'in' ? `-${params.height}px` : 0,\n left: params.trans === 'in' ? `${params.width}px` : 0,\n };\n keyframes.to = {\n opacity: opacityAttr('to'),\n top: params.trans === 'in' ? 0 : `${params.height}px`,\n left: params.trans === 'in' ? 0 : `-${params.width}px`,\n };\n break;\n case 'W':\n keyframes.from = {\n opacity: opacityAttr('from'),\n left: params.trans === 'in' ? `${params.width}px` : 0,\n };\n keyframes.to = {\n opacity: opacityAttr('to'),\n left: params.trans === 'in' ? 0 : `-${params.width}px`,\n };\n break;\n case 'NW':\n keyframes.from = {\n opacity: opacityAttr('from'),\n top: params.trans === 'in' ? `${params.height}px` : 0,\n left: params.trans === 'in' ? `${params.width}px` : 0,\n };\n keyframes.to = {\n opacity: opacityAttr('to'),\n top: params.trans === 'in' ? 0 : `-${params.height}px`,\n left: params.trans === 'in' ? 0 : `-${params.width}px`,\n };\n break;\n default:\n keyframes.from = {\n opacity: opacityAttr('from'),\n top: params.trans === 'in' ? `${params.height}px` : 0,\n };\n keyframes.to = {\n opacity: opacityAttr('to'),\n top: params.trans === 'in' ? 0 : `-${params.height}px`,\n };\n break;\n }\n\n return keyframes;\n};\n","/*\n * Copyright (C) 2024 Xibo Signage Ltd\n *\n * Xibo - Digital Signage - https://www.xibosignage.com\n *\n * This file is part of Xibo.\n *\n * Xibo is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * any later version.\n *\n * Xibo is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * along with Xibo. If not, see <http://www.gnu.org/licenses/>.\n */\nimport { IMedia } from '../../Types/Media';\nimport { capitalizeStr, getMediaId } from '../Generators';\n\nexport default function VideoMedia(media: IMedia) {\n const videoMediaObject = {\n init() {\n const $videoMedia = document.getElementById(getMediaId(media)) as HTMLVideoElement;\n\n if ($videoMedia) {\n $videoMedia.onloadstart = () => {\n console.debug(`${capitalizeStr(media.mediaType)} for media > ${media.id} has started loading data . . .`);\n };\n $videoMedia.onloadeddata = () => {\n if ($videoMedia.readyState >= 2) {\n console.debug(`${capitalizeStr(media.mediaType)} data for media > ${media.id} has been fully loaded . . .`);\n }\n };\n $videoMedia.oncanplay = () => {\n console.debug(`${capitalizeStr(media.mediaType)} for media > ${media.id} can be played . . .`);\n \n const videoPlayPromise = $videoMedia.play();\n \n if (videoPlayPromise !== undefined) {\n videoPlayPromise.then(() => {\n console.debug('autoplay started . . .');\n // Autoplay restarted\n }).catch(error => {\n $videoMedia.muted = true;\n $videoMedia.play();\n });\n }\n };\n $videoMedia.onplaying = () => {\n console.debug(`${capitalizeStr(media.mediaType)} for media > ${media.id} is now playing . . .`);\n };\n\n if (media.duration === 0) {\n $videoMedia.ondurationchange = () => {\n console.debug('Showing Media ' + media.id + ' for ' + $videoMedia.duration + 's of Region ' + media.region.regionId);\n };\n $videoMedia.onended = () => {\n console.debug(`${capitalizeStr(media.mediaType)} for media > ${media.id} has ended playing . . .`);\n media.emitter?.emit('end', media);\n };\n }\n }\n }\n }\n\n return videoMediaObject;\n}\n","/*\n * Copyright (C) 2024 Xibo Signage Ltd\n *\n * Xibo - Digital Signage - https://www.xibosignage.com\n *\n * This file is part of Xibo.\n *\n * Xibo is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * any later version.\n *\n * Xibo is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * along with Xibo. If not, see <http://www.gnu.org/licenses/>.\n */\nimport { IMedia } from '../../Types/Media';\nimport { capitalizeStr, getMediaId } from '../Generators';\n\nimport './media.css';\n\nexport default function AudioMedia(media: IMedia) {\n const audioMediaObject = {\n init() {\n const $audioMedia = document.getElementById(getMediaId(media)) as HTMLAudioElement;\n let $playBtn: HTMLButtonElement | null = null;\n\n if ($audioMedia) {\n $audioMedia.onloadstart = () => {\n console.debug(`${capitalizeStr(media.mediaType)} for media > ${media.id} has started loading data . . .`);\n };\n $audioMedia.onloadeddata = () => {\n if ($audioMedia.readyState >= 2) {\n console.debug(`${capitalizeStr(media.mediaType)} data for media > ${media.id} has been fully loaded . . .`);\n }\n };\n $audioMedia.oncanplay = () => {\n console.debug(`${capitalizeStr(media.mediaType)} for media > ${media.id} can be played . . .`);\n };\n $audioMedia.onplaying = () => {\n console.debug(`${capitalizeStr(media.mediaType)} for media > ${media.id} is now playing . . .`);\n\n if ($playBtn !== null) {\n $playBtn.remove();\n }\n };\n\n const audioPlayPromise = $audioMedia.play();\n \n if (audioPlayPromise !== undefined) {\n audioPlayPromise.then(() => {\n console.debug('autoplay started . . .');\n // Autoplay restarted\n }).catch(error => {\n if (error.name === 'NotAllowedError') {\n // Let's show a play audio button\n $playBtn = document.createElement('button');\n\n $playBtn.classList.add('play-audio-btn');\n $playBtn.textContent = 'Play Audio';\n $playBtn.addEventListener('click', () => {\n $audioMedia.muted = false;\n $audioMedia.play();\n });\n $audioMedia.parentNode?.insertBefore($playBtn, $audioMedia.nextSibling);\n }\n });\n }\n if (media.duration === 0) {\n $audioMedia.ondurationchange = () => {\n console.debug('Showing Media ' + media.id + ' for ' + $audioMedia.duration + 's of Region ' + media.region.regionId);\n };\n $audioMedia.onended = () => {\n console.debug(`${capitalizeStr(media.mediaType)} for media > ${media.id} has ended playing . . .`);\n media.emitter?.emit('end', media);\n };\n }\n }\n },\n };\n\n return audioMediaObject;\n}\n","/*\r\n * Copyright (C) 2024 Xibo Signage Ltd\r\n *\r\n * Xibo - Digital Signage - https://www.xibosignage.com\r\n *\r\n * This file is part of Xibo.\r\n *\r\n * Xibo is free software: you can redistribute it and/or modify\r\n * it under the terms of the GNU Lesser General Public License as published by\r\n * the Free Software Foundation, either version 3 of the License, or\r\n * any later version.\r\n *\r\n * Xibo is distributed in the hope that it will be useful,\r\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n * GNU Lesser General Public License for more details.\r\n *\r\n * You should have received a copy of the GNU Lesser General Public License\r\n * along with Xibo. If not, see <http://www.gnu.org/licenses/>.\r\n */\r\nimport { createNanoEvents } from 'nanoevents';\r\nimport { OptionsType } from '../../Types/Layout';\r\nimport { IRegion } from '../../Types/Region';\r\nimport { IMedia, initialMedia } from '../../Types/Media';\r\nimport { fetchJSON, getMediaId, nextId, preloadMediaBlob } from '../Generators';\r\nimport { TransitionElementOptions, compassPoints, flyTransitionKeyframes, transitionElement } from '../Transitions';\r\nimport VideoMedia from './VideoMedia';\r\nimport AudioMedia from './AudioMedia';\r\nimport {composeResourceUrl, composeResourceUrlByPlatform, composeVideoUrl, fetchText, getDataBlob} from '../Generators/Generators';\r\nimport {IXlr} from '../../Types/XLR';\r\n\r\nexport interface IMediaEvents {\r\n start: (media: IMedia) => void;\r\n end: (media: IMedia) => void;\r\n}\r\n\r\nexport default function Media(\r\n region: IRegion,\r\n mediaId: string,\r\n xml: Element,\r\n options: OptionsType,\r\n xlr: IXlr,\r\n) {\r\n const props = {\r\n region: region,\r\n mediaId: mediaId,\r\n xml: xml,\r\n options: options,\r\n };\r\n let mediaTimer: string | number | NodeJS.Timeout | null | undefined = null;\r\n let mediaTimeCount = 0;\r\n const emitter = createNanoEvents<IMediaEvents>();\r\n const mediaObject: IMedia = {\r\n ...initialMedia,\r\n ...props,\r\n };\r\n const startMediaTimer = (media: IMedia) => {\r\n mediaTimer = setInterval(() => {\r\n mediaTimeCount++;\r\n if (mediaTimeCount > media.duration) {\r\n media.emitter.emit('end', media);\r\n }\r\n }, 1000);\r\n\r\n console.debug('Showing Media ' + media.id + ' for ' + media.duration + 's of Region ' + media.region.regionId);\r\n };\r\n\r\n emitter.on('start', function(media: IMedia) {\r\n if (media.mediaType === 'video') {\r\n VideoMedia(media).init();\r\n\r\n if (media.duration > 0) {\r\n startMediaTimer(media);\r\n }\r\n } else if (media.mediaType === 'audio') {\r\n AudioMedia(media).init();\r\n if (media.duration > 0) {\r\n startMediaTimer(media);\r\n }\r\n } else {\r\n startMediaTimer(media);\r\n }\r\n });\r\n\r\n emitter.on('end', function(media) {\r\n if (mediaTimer) {\r\n clearInterval(mediaTimer);\r\n mediaTimeCount = 0;\r\n }\r\n\r\n media.region.playNextMedia();\r\n });\r\n\r\n mediaObject.on = function<E extends keyof IMediaEvents>(event: E, callback: IMediaEvents[E]) {\r\n return emitter.on(event, callback);\r\n };\r\n\r\n mediaObject.emitter = emitter;\r\n\r\n mediaObject.init = function() {\r\n const self = mediaObject;\r\n self.id = props.mediaId;\r\n self.fileId = self.xml?.getAttribute('fileId') || '';\r\n self.idCounter = nextId(props.options);\r\n self.containerName = `M-${self.id}-${self.idCounter}`;\r\n self.iframeName = `${self.containerName}-iframe`;\r\n self.mediaType = self.xml?.getAttribute('type') || '';\r\n self.render = self.xml?.getAttribute('render') || '';\r\n self.duration = parseInt(self.xml?.getAttribute('duration') as string) || 0;\r\n self.options = { ...props.options };\r\n\r\n const $mediaIframe = document.createElement('iframe');\r\n const mediaOptions = self.xml?.getElementsByTagName('options');\r\n\r\n if (mediaOptions) {\r\n for (let _options of Array.from(mediaOptions)) {\r\n // Get options\r\n const _mediaOptions = _options.children;\r\n for (let mediaOption of Array.from(_mediaOptions)) {\r\n self.options[mediaOption.nodeName.toLowerCase()] = mediaOption.textContent;\r\n }\r\n }\r\n }\r\n\r\n // Check for options.uri and add it to media\r\n if (Boolean(self.options['uri'])) {\r\n self.uri = self.options['uri'];\r\n }\r\n\r\n // Show in fullscreen?\r\n if(self.options.showfullscreen === \"1\") {\r\n // Set dimensions as the layout ones\r\n self.divWidth = self.region.layout.sWidth;\r\n self.divHeight = self.region.layout.sHeight;\r\n } else {\r\n // Set dimensions as the region ones\r\n self.divWidth = self.region.sWidth;\r\n self.divHeight = self.region.sHeight;\r\n }\r\n\r\n $mediaIframe.scrolling = 'no';\r\n $mediaIframe.id = self.iframeName;\r\n $mediaIframe.width = `${self.divWidth}px`;\r\n $mediaIframe.height = `${self.divHeight}px`;\r\n $mediaIframe.style.cssText = `border: 0;`;\r\n\r\n const $mediaId = getMediaId(self);\r\n let $media = document.getElementById($mediaId);\r\n\r\n if ($media === null) {\r\n if (self.mediaType === 'video') {\r\n $media = document.createElement('video');\r\n } else if (self.mediaType === 'audio') {\r\n $media = new Audio();\r\n } else {\r\n $media = document.createElement('div');\r\n }\r\n \r\n $media.id = $mediaId;\r\n }\r\n\r\n $media.className = 'media--item';\r\n\r\n /* Scale the Content Container */\r\n $media.style.cssText = `\r\n display: none;\r\n width: ${self.divWidth}px;\r\n height: ${self.divHeight}px;\r\n position: absolute;\r\n background-size: contain;\r\n background-repeat: no-repeat;\r\n background-position: center;\r\n `;\r\n\r\n const $region = document.getElementById(`${self.region.containerName}`);\r\n\r\n const resourceUrlParams: any = {\r\n ...xlr.config.config,\r\n regionOptions: self.region.options,\r\n layoutId: self.region.layout.layoutId,\r\n regionId: self.region.id,\r\n mediaId: self.id,\r\n fileId: self.fileId,\r\n scaleFactor: self.region.layout.scaleFactor,\r\n uri: self.uri,\r\n isGlobalContent: self.mediaType === 'global',\r\n isImageOrVideo: self.mediaType === 'image' || self.mediaType === 'video',\r\n };\r\n\r\n if (self.mediaType === 'image' || self.mediaType === 'video') {\r\n resourceUrlParams.mediaType = self.mediaType;\r\n }\r\n\r\n let tmpUrl = '';\r\n\r\n if (xlr.config.platform === 'CMS') {\r\n tmpUrl = composeResourceUrlByPlatform(xlr.config, resourceUrlParams);\r\n } else if (xlr.config.platform === 'chromeOS') {\r\n tmpUrl = composeResourceUrl(xlr.config, resourceUrlParams);\r\n\r\n if (self.mediaType === 'video') {\r\n tmpUrl = composeVideoUrl(resourceUrlParams);\r\n }\r\n }\r\n\r\n self.url = tmpUrl;\r\n\r\n // Loop if media has loop, or if region has loop and a single media\r\n self.loop =\r\n self.options['loop'] == '1' ||\r\n (self.region.options['loop'] == '1' && self.region.totalMediaObjects == 1);\r\n\r\n if (self.render === 'html' || self.render === 'webpage') {\r\n $mediaIframe.src = self.url;\r\n } else {\r\n $mediaIframe.src = `${self.url}&width=${self.divWidth}&height=${self.divHeight}`;\r\n }\r\n\r\n // Check/set iframe based widgets play status\r\n // Populate mediaIframe content without using src attribute\r\n // let iframeSrc = tmpUrl;\r\n //\r\n // if (self.render !== 'html' && self.render !== 'webpage') {\r\n // iframeSrc = `${tmpUrl}&width=${self.divWidth}&height=${self.divHeight}`;\r\n // }\r\n //\r\n // if (self.render === 'html' || self.render === 'webpage') {\r\n // if (xlr.config.platform === 'CMS') {\r\n // $mediaIframe.src = iframeSrc;\r\n // } else if (xlr.config.platform === 'chromeOS') {\r\n // (async () => {\r\n // const mediaHtml = await fetchText(iframeSrc);\r\n //\r\n // if ($mediaIframe) {\r\n // $mediaIframe.contentDocument?.open();\r\n // $mediaIframe.contentDocument?.write(mediaHtml);\r\n // $mediaIframe.contentDocument?.close();\r\n // }\r\n // })();\r\n // }\r\n // }\r\n\r\n if (self.render === 'html' || self.mediaType === 'ticker' || self.mediaType === 'webpage') {\r\n self.checkIframeStatus = true;\r\n self.iframe = $mediaIframe;\r\n } else if (self.mediaType === \"image\") {\r\n if (self.options['scaletype'] === 'stretch') {\r\n $media.style.cssText = $media.style.cssText.concat(`background-size: 100% 100%;`);\r\n } else if (self.options['scaletype'] === 'fit') {\r\n $media.style.cssText = $media.style.cssText.concat(`background-size: cover;`);\r\n } else {\r\n // Center scale type, do we have align or valign?\r\n const align = (self.options['align'] == \"\") ? \"center\" : self.options['align'];\r\n const valign = (self.options['valign'] == \"\" || self.options['valign'] == \"middle\") ? \"center\" : self.options['valign'];\r\n $media.style.cssText = $media.style.cssText.concat(`background-position: ${align} ${valign}`);\r\n }\r\n } else if (self.mediaType === 'video') {\r\n const $videoMedia = $media as HTMLVideoElement;\r\n\r\n $videoMedia.preload = 'auto';\r\n $videoMedia.textContent = 'Unsupported Video';\r\n\r\n if (Boolean(self.options['mute'])) {\r\n $videoMedia.muted = self.options.mute === '1';\r\n }\r\n\r\n if (Boolean(self.options['scaletype'])) {\r\n if (self.options.scaletype === 'stretch') {\r\n $videoMedia.style.objectFit = 'fill';\r\n }\r\n }\r\n $videoMedia.playsInline = true;\r\n\r\n if (self.loop) {\r\n $videoMedia.loop = true;\r\n }\r\n\r\n $media = $videoMedia;\r\n } else if (self.mediaType === 'audio') {\r\n const $audioMedia = $media as HTMLAudioElement;\r\n\r\n $audioMedia.preload = 'auto';\r\n $audioMedia.textContent = 'Unsupported Audio';\r\n $audioMedia.autoplay = true;\r\n\r\n if (self.loop) {\r\n $audioMedia.loop = true;\r\n }\r\n\r\n $media = $audioMedia;\r\n }\r\n\r\n // Duration is per item condition\r\n if (self.render === 'html' || self.mediaType === 'ticker') {\r\n /* Check if the ticker duration is based on the number of items in the feed */\r\n if (self.options['durationisperitem'] === '1') {\r\n const regex = new RegExp('<!-- NUMITEMS=(.*?) -->');\r\n\r\n (async () => {\r\n let html = await fetchJSON(`${tmpUrl}&width=${self.divWidth}&height=${self.divHeight}`);\r\n console.debug({html});\r\n const res = regex.exec(html);\r\n\r\n if (res !== null) {\r\n self.duration = parseInt(String(self.duration)) * parseInt(res[1]);\r\n }\r\n })();\r\n }\r\n }\r\n\r\n // Check if the media has fade-in/out transitions\r\n if (Boolean(self.options['transin']) && Boolean(self.options['transinduration'])) {\r\n const transInDuration = Number(self.options.transinduration);\r\n const fadeInTrans = transitionElement('fadeIn', { duration: transInDuration });\r\n $media.animate(fadeInTrans.keyframes, fadeInTrans.timing);\r\n }\r\n\r\n // Add media to the region\r\n // Second media if exists, will be off-canvas\r\n // All added media will be hidden by default\r\n // It will start showing when region.nextMedia() function is called\r\n\r\n // When there's only 1 item and loop = false, don't remove the item but leave it at its last state\r\n // For image, and only 1 item, it should still have the transition for next state\r\n // Add conditions for video duration being 0 or 1 and also the loop property\r\n // For video url, we have to create a URL out of the XLF video URL\r\n\r\n /**\r\n * @DONE\r\n * Case 1: Video duration = 0, this will play the video for its entire duration\r\n * Case 2: Video duration is set > 0 and loop = false\r\n * E.g. Set duration = 100s, video duration = 62s\r\n * the video will play until 62s and will stop to its last frame until 100s\r\n * After 100s, it will expire\r\n * Case 3: Video duration is set > 0 and loop = true\r\n * E.g. Set duration = 100s, video duration = 62s, loop = true\r\n * the video will play until 62s and will loop through until the remaining 38s\r\n * to complete the 100s set duration\r\n */\r\n\r\n // Add html node to media for\r\n self.html = $media;\r\n };\r\n\r\n mediaObject.run = function() {\r\n const self = this;\r\n let transInDuration = 1;\r\n let transInDirection: compassPoints = 'E';\r\n\r\n if (Boolean(self.options['transinduration'])) {\r\n transInDuration = Number(self.options.transinduration);\r\n }\r\n\r\n if (Boolean(self.options['transindirection'])) {\r\n transInDirection = self.options.transindirection;\r\n }\r\n\r\n let defaultTransInOptions: TransitionElementOptions = {duration: transInDuration};\r\n let transIn = transitionElement('defaultIn', {duration: defaultTransInOptions.duration});\r\n \r\n if (Boolean(self.options['transin'])) {\r\n let transInName = self.options['transin'];\r\n\r\n if (transInName === 'fly') {\r\n transInName = `${transInName}In`;\r\n defaultTransInOptions.keyframes = flyTransitionKeyframes({\r\n trans: 'in',\r\n direction: transInDirection,\r\n height: self.divHeight,\r\n width: self.divWidth,\r\n });\r\n }\r\n\r\n transIn = transitionElement(transInName, defaultTransInOptions);\r\n }\r\n\r\n const showCurrentMedia = async () => {\r\n let $mediaId = getMediaId(self);\r\n let $media = document.getElementById($mediaId);\r\n const isCMS = xlr.config.platform === 'CMS';\r\n\r\n if (!$media) {\r\n $media = getNewMedia();\r\n }\r\n\r\n if ($media) {\r\n $media.style.setProperty('display', 'block');\r\n\r\n if (Boolean(self.options['transin'])) {\r\n $media.animate(transIn.keyframes, transIn.timing);\r\n }\r\n\r\n if (self.mediaType === 'image' && self.url !== null) {\r\n ($media as HTMLImageElement).style\r\n .setProperty(\r\n 'background-image',\r\n `url(${!isCMS ? self.url : await getDataBlob(self.url)}`\r\n );\r\n } else if (self.mediaType === 'video' && self.url !== null) {\r\n ($media as HTMLVideoElement).src = await preloadMediaBlob(self.url, self.mediaType);\r\n } else if (self.mediaType === 'audio' && self.url !== null) {\r\n ($media as HTMLAudioElement).src =\r\n isCMS ? await preloadMediaBlob(self.url, self.mediaType) : self.url;\r\n } else if ((self.render === 'html' || self.mediaType === 'webpage') &&\r\n self.iframe && self.checkIframeStatus\r\n ) {\r\n // Set state as false ( for now )\r\n self.ready = false;\r\n\r\n // Append iframe\r\n $media.innerHTML = '';\r\n $media.appendChild(self.iframe as Node);\r\n\r\n // On iframe load, set state as ready to play full preview\r\n // (self.iframe) && self.iframe.addEventListener('load', function(){\r\n // self.ready = true;\r\n // if (self.iframe) {\r\n // const iframeStyles = self.iframe.style.cssText;\r\n // self.iframe.style.cssText = iframeStyles?.concat('visibility: visible;');\r\n // }\r\n // });\r\n }\r\n\r\n self.emitter.emit('start', self);\r\n }\r\n };\r\n const getNewMedia = (): HTMLElement | null => {\r\n const $region = document.getElementById(`${self.region.containerName}`);\r\n // This function is for checking whether\r\n // the region still has to show a media item\r\n // when another region is not finished yet\r\n if (self.region.complete && !self.region.layout.allEnded) {\r\n // Add currentMedia to the region\r\n\r\n ($region) && $region.insertBefore(self.html as Node, $region.lastElementChild);\r\n\r\n return self.html as HTMLElement;\r\n }\r\n\r\n return null;\r\n };\r\n\r\n showCurrentMedia();\r\n };\r\n\r\n mediaObject.stop = async function() {\r\n const self = mediaObject;\r\n const $media = document.getElementById(getMediaId(self));\r\n\r\n if ($media) {\r\n $media.style.display = 'none';\r\n $media.remove();\r\n }\r\n };\r\n\r\n mediaObject.init();\r\n\r\n return mediaObject;\r\n}","/*\r\n * Copyright (C) 2024 Xibo Signage Ltd\r\n *\r\n * Xibo - Digital Signage - https://www.xibosignage.com\r\n *\r\n * This file is part of Xibo.\r\n *\r\n * Xibo is free software: you can redistribute it and/or modify\r\n * it under the terms of the GNU Lesser General Public License as published by\r\n * the Free Software Foundation, either version 3 of the License, or\r\n * any later version.\r\n *\r\n * Xibo is distributed in the hope that it will be useful,\r\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n * GNU Lesser General Public License for more details.\r\n *\r\n * You should have received a copy of the GNU Lesser General Public License\r\n * along with Xibo. If not, see <http://www.gnu.org/licenses/>.\r\n */\r\nimport { createNanoEvents } from 'nanoevents';\r\nimport { ILayout, OptionsType } from '../../Types/Layout';\r\nimport { initialRegion, IRegion, IRegionEvents } from '../../Types/Region';\r\nimport { IMedia } from '../../Types/Media';\r\nimport { getMediaId, nextId } from '../Generators';\r\nimport { platform } from '../Platform';\r\nimport { Media } from '../Media';\r\nimport {\r\n TransitionElementOptions,\r\n TransitionNameType,\r\n compassPoints,\r\n flyTransitionKeyframes,\r\n transitionElement,\r\n} from '../Transitions';\r\nimport {IXlr} from '../../Types/XLR';\r\n\r\nexport default function Region(\r\n layout: ILayout,\r\n xml: Element,\r\n regionId: string,\r\n options: OptionsType,\r\n xlr: IXlr,\r\n) {\r\n const props = {\r\n layout: layout,\r\n xml: xml,\r\n regionId: regionId,\r\n options: options,\r\n }\r\n const emitter = createNanoEvents<IRegionEvents>();\r\n let regionObject: IRegion = {\r\n ...initialRegion,\r\n ...props,\r\n };\r\n\r\n regionObject.prepareRegion = function() {\r\n const self = regionObject;\r\n const {layout, options} = self;\r\n self.complete = false;\r\n self.ending = false;\r\n self.ended = false;\r\n self.id = props.regionId;\r\n self.options = {...platform, ...props.options};\r\n self.containerName = `R-${self.id}-${nextId(self.options as OptionsType & IRegion[\"options\"])}`;\r\n self.xml = props.xml;\r\n self.mediaObjects = [];\r\n\r\n self.sWidth = (self.xml) && Number(self.xml?.getAttribute('width')) * layout.scaleFactor;\r\n self.sHeight = (self.xml) && Number(self.xml?.getAttribute('height')) * layout.scaleFactor;\r\n self.offsetX = (self.xml) && Number(self.xml?.getAttribute('left')) * layout.scaleFactor;\r\n self.offsetY = (self.xml) && Number(self.xml?.getAttribute('top')) * layout.scaleFactor;\r\n self.zIndex = (self.xml) && Number(self.xml?.getAttribute('zindex'));\r\n \r\n const regionOptions = self.xml?.getElementsByTagName('options');\r\n\r\n if (regionOptions) {\r\n for (let _options of Array.from(regionOptions)) {\r\n // Get options\r\n const _regionOptions = _options.children;\r\n for (let regionOption of Array.from(_regionOptions)) {\r\n self.options[regionOption.nodeName.toLowerCase()] = regionOption.textContent;\r\n }\r\n }\r\n }\r\n\r\n\r\n let $region = document.getElementById(self.containerName);\r\n const $layout = document.getElementById(`${self.layout.containerName}`);\r\n\r\n if ($region === null) {\r\n $region = document.createElement('div');\r\n $region.id = self.containerName;\r\n }\r\n\r\n ($layout) && $layout.appendChild($region);\r\n\r\n /* Scale the Layout Container */\r\n /* Add region styles */\r\n $region.style.cssText = `\r\n width: ${self.sWidth}px;\r\n height: ${self.sHeight}px;\r\n position: absolute;\r\n left: ${self.offsetX}px;\r\n top: ${self.offsetY}px;\r\n z-index: ${Math.round(self.zIndex)};\r\n `;\r\n $region.className = 'region--item';\r\n\r\n /* Parse region media objects */\r\n const regionMediaItems = Array.from(self.xml.getElementsByTagName('media'));\r\n self.totalMediaObjects = regionMediaItems.length;\r\n\r\n Array.from(regionMediaItems).forEach((mediaXml, indx) => {\r\n const mediaObj = Media(\r\n self,\r\n mediaXml?.getAttribute('id') || '',\r\n mediaXml,\r\n options as OptionsType & IRegion[\"options\"],\r\n xlr,\r\n );\r\n\r\n mediaObj.index = indx;\r\n self.mediaObjects.push(mediaObj);\r\n });\r\n\r\n self.prepareMediaObjects();\r\n };\r\n\r\n regionObject.finished = function() {\r\n const self = regionObject;\r\n console.debug('Region::finished called . . . ', self.id);\r\n // Mark as complete\r\n self.complete = true;\r\n self.layout.regions[regionObject.index] = regionObject;\r\n self.layout.regionExpired();\r\n };\r\n\r\n regionObject.prepareMediaObjects = function() {\r\n const self = regionObject;\r\n let nextMediaIndex;\r\n\r\n if (self.mediaObjects.length > 0) {\r\n\r\n if (self.curMedia) {\r\n self.oldMedia = self.curMedia;\r\n } else {\r\n self.oldMedia = undefined;\r\n }\r\n\r\n if (self.currentMediaIndex >= self.mediaObjects.length) {\r\n self.currentMediaIndex = 0;\r\n }\r\n\r\n self.curMedia = self.mediaObjects[self.currentMediaIndex];\r\n\r\n nextMediaIndex = self.currentMediaIndex + 1;\r\n\r\n if (nextMediaIndex >= self.mediaObjects.length ||\r\n (\r\n !Boolean(self.mediaObjects[nextMediaIndex]) &&\r\n self.mediaObjects.length === 1\r\n )\r\n ) {\r\n nextMediaIndex = 0;\r\n }\r\n\r\n if (Boolean(self.mediaObjects[nextMediaIndex])) {\r\n self.nxtMedia = self.mediaObjects[nextMediaIndex];\r\n }\r\n\r\n const $region = document.getElementById(`${self.containerName}`);\r\n // Append available media to region DOM\r\n if (self.curMedia) {\r\n ($region) && $region.insertBefore(self.curMedia.html as Node, $region.lastElementChild);\r\n }\r\n\r\n if (self.nxtMedia) {\r\n ($region) && $region.insertBefore(self.nxtMedia.html as Node, $region.lastElementChild);\r\n }\r\n }\r\n };\r\n\r\n regionObject.run = function() {\r\n console.debug('Called Region::run > ', regionObject.id);\r\n\r\n // Reset region states\r\n regionObject.reset();\r\n\r\n if (regionObject.curMedia) {\r\n regionObject.transitionNodes(regionObject.oldMedia, regionObject.curMedia);\r\n }\r\n };\r\n\r\n regionObject.transitionNodes = function(oldMedia: IMedia | undefined, newMedia: IMedia | undefined) {\r\n const self = regionObject;\r\n let transOutDuration = 1;\r\n let transOutDirection: compassPoints = 'E';\r\n\r\n if (newMedia) {\r\n if (oldMedia && Boolean(oldMedia.options['transoutduration'])) {\r\n transOutDuration = Number(oldMedia.options.transoutduration);\r\n }\r\n\r\n if (oldMedia && Boolean(oldMedia.options['transoutdirection'])) {\r\n transOutDirection = oldMedia.options.transoutdirection;\r\n }\r\n \r\n let defaultTransOutOptions: TransitionElementOptions = {duration: transOutDuration};\r\n let transOut = transitionElement('defaultOut', {duration: defaultTransOutOptions.duration});\r\n \r\n let transOutName: TransitionNameType | string;\r\n if (oldMedia && Boolean(oldMedia.options['transout'])) {\r\n transOutName = oldMedia.options['transout'];\r\n \r\n if (transOutName === 'fly') {\r\n transOutName = `${transOutName}Out`;\r\n defaultTransOutOptions.keyframes = flyTransitionKeyframes({\r\n trans: 'out',\r\n direction: transOutDirection,\r\n height: oldMedia.divHeight,\r\n width: oldMedia.divWidth,\r\n });\r\n }\r\n \r\n transOut = transitionElement(transOutName as TransitionNameType, defaultTransOutOptions);\r\n }\r\n \r\n const hideOldMedia = new Promise((resolve) => {\r\n // Hide oldMedia\r\n if (oldMedia) {\r\n const $oldMedia = document.getElementById(getMediaId(oldMedia));\r\n if ($oldMedia) {\r\n const removeOldMedia = () => {\r\n $oldMedia.style.setProperty('display', 'none');\r\n $oldMedia.remove();\r\n };\r\n\r\n let oldMediaAnimate: any;\r\n if (Boolean(oldMedia.options['transout'])) {\r\n oldMediaAnimate = $oldMedia.animate(transOut.keyframes, transOut.timing);\r\n }\r\n\r\n if (Boolean(oldMedia.options['transout']) && self.totalMediaObjects > 1) {\r\n if (transOutName === 'flyOut') {\r\n // Reset last item to original position and state\r\n oldMediaAnimate ? oldMediaAnimate.finished\r\n .then(() => {\r\n resolve(true);\r\n oldMediaAnimate?.effect?.updateTiming({fill: 'none'});\r\n removeOldMedia();\r\n }) : undefined;\r\n } else {\r\n setTimeout(removeOldMedia, transOutDuration / 2);\r\n resolve(true);\r\n }\r\n } else {\r\n removeOldMedia();\r\n // Resolve this right away\r\n // As a result, the transition between two media object\r\n // seems like a cross-over\r\n resolve(true);\r\n\r\n }\r\n }\r\n }\r\n });\r\n \r\n if (oldMedia) {\r\n hideOldMedia.then((isDone) => {\r\n if (isDone) {\r\n newMedia.run();\r\n }\r\n });\r\n } else {\r\n newMedia.run();\r\n }\r\n }\r\n };\r\n\r\n regionObject.playNextMedia = function() {\r\n const self = regionObject;\r\n /* The current media has finished running */\r\n if (self.ended) {\r\n return;\r\n }\r\n\r\n if (self.currentMediaIndex === self.mediaObjects.length - 1) {\r\n self.finished();\r\n\r\n if (self.layout.allEnded) {\r\n return;\r\n }\r\n }\r\n\r\n // When the region has completed and when currentMedia is html\r\n // Then, preserve the currentMedia state\r\n if (self.complete &&\r\n self.curMedia?.render === 'html'\r\n ) {\r\n return;\r\n }\r\n\r\n // When the region has completed and mediaObjects.length = 1\r\n // and curMedia.loop = false, then put the media on\r\n // its current state\r\n if (self.complete && self.mediaObjects.length === 1 &&\r\n self.curMedia?.render !== 'html' &&\r\n self.curMedia?.mediaType === 'image' &&\r\n !self.curMedia?.loop\r\n ) {\r\n return;\r\n }\r\n\r\n self.currentMediaIndex = self.currentMediaIndex + 1;\r\n self.prepareMediaObjects();\r\n\r\n console.debug('region::playNextMedia', self);\r\n self.transitionNodes(self.oldMedia, self.curMedia);\r\n };\r\n \r\n regionObject.end = function() {\r\n const self = regionObject;\r\n self.ending = true;\r\n /* The Layout has finished running */\r\n /* Do any region exit transition then clean up */\r\n self.layout.regions[self.index] = self;\r\n\r\n console.debug('Calling Region::end ', self);\r\n self.exitTransition();\r\n };\r\n\r\n regionObject.exitTransition = function() {\r\n const self = regionObject;\r\n /* TODO: Actually implement region exit transitions */\r\n const $region = document.getElementById(`${self.containerName}`);\r\n\r\n if ($region) {\r\n $region.style.display = 'none';\r\n }\r\n\r\n console.debug('Called Region::exitTransition ', self.id);\r\n\r\n self.exitTransitionComplete();\r\n };\r\n\r\n regionObject.exitTransitionComplete = function() {\r\n const self = regionObject;\r\n console.debug('Called Region::exitTransitionComplete ', self.id);\r\n self.ended = true;\r\n self.layout.regions[self.index] = self;\r\n self.layout.regionEnded();\r\n };\r\n\r\n regionObject.reset = function() {\r\n regionObject.ended = false;\r\n regionObject.complete = false;\r\n regionObject.ending = false;\r\n console.debug('Resetting region states', regionObject);\r\n };\r\n\r\n regionObject.on = function<E extends keyof IRegionEvents>(event: E, callback: IRegionEvents[E]) {\r\n return emitter.on(event, callback);\r\n };\r\n\r\n regionObject.emitter = emitter;\r\n\r\n regionObject.prepareRegion();\r\n\r\n return regionObject;\r\n}","/*\r\n * Copyright (C) 2024 Xibo Signage Ltd\r\n *\r\n * Xibo - Digital Signage - https://www.xibosignage.com\r\n *\r\n * This file is part of Xibo.\r\n *\r\n * Xibo is free software: you can redistribute it and/or modify\r\n * it under the terms of the GNU Lesser General Public License as published by\r\n * the Free Software Foundation, either version 3 of the License, or\r\n * any later version.\r\n *\r\n * Xibo is distributed in the hope that it will be useful,\r\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n * GNU Lesser General Public License for more details.\r\n *\r\n * You should have received a copy of the GNU Lesser General Public License\r\n * along with Xibo. If not, see <http://www.gnu.org/licenses/>.\r\n */\r\nimport {createNanoEvents} from 'nanoevents';\r\nimport {\r\n GetLayoutParamType,\r\n GetLayoutType,\r\n ILayout,\r\n initialLayout,\r\n OptionsType,\r\n} from '../../Types/Layout';\r\nimport { IXlr } from '../../Types/XLR';\r\nimport { nextId } from '../Generators';\r\nimport { Region } from '../Region';\r\n\r\nimport './layout.css';\r\nimport {composeBgUrlByPlatform, getIndexByLayoutId} from '../Generators/Generators';\r\n\r\nconst playAgainClickHandle = function(ev: { preventDefault: () => void; }) {\r\n ev.preventDefault();\r\n history.go(0);\r\n};\r\n\r\nexport function initRenderingDOM(targetContainer: Element | null) {\r\n let _targetContainer = targetContainer;\r\n const previewPlayer = document.createElement('div');\r\n const previewScreen = document.createElement('div');\r\n const endPlay = document.createElement('div');\r\n const playAgainLink = document.createElement('a');\r\n\r\n // Preview player\r\n previewPlayer.className = 'player-preview';\r\n previewPlayer.id = 'player_container';\r\n\r\n // Preview screen\r\n previewScreen.className = 'screen-preview';\r\n previewScreen.id = 'screen_container';\r\n\r\n // Ended play\r\n endPlay.className = 'preview-ended';\r\n endPlay.id = 'play_ended';\r\n endPlay.style.display = 'none';\r\n\r\n // Play again link\r\n playAgainLink.id = 'play_back_preview';\r\n playAgainLink.className = 'play-back-preview';\r\n playAgainLink.style.cssText = 'text-decoration: none; color: #ffffff;';\r\n playAgainLink.innerHTML = 'Play again?';\r\n playAgainLink.removeEventListener('click', playAgainClickHandle);\r\n playAgainLink.addEventListener('click', playAgainClickHandle);\r\n\r\n if (!_targetContainer) {\r\n _targetContainer = document.body;\r\n }\r\n\r\n if (_targetContainer) {\r\n if (_targetContainer.querySelector('#player_container') === null) {\r\n _targetContainer.insertBefore(previewPlayer, _targetContainer.firstChild);\r\n\r\n if (previewPlayer.querySelector('#screen_container') === null) {\r\n previewPlayer.appendChild(previewScreen);\r\n }\r\n\r\n if (previewPlayer.querySelector('#play_ended') === null) {\r\n previewPlayer.appendChild(endPlay);\r\n\r\n if (endPlay.querySelector('a') === null) {\r\n endPlay.appendChild(playAgainLink);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport async function getXlf(layoutOptions: OptionsType) {\r\n let apiHost = window.location.origin;\r\n\r\n let xlfUrl = apiHost + layoutOptions.xlfUrl;\r\n let fetchOptions: RequestInit = {};\r\n\r\n if (layoutOptions.platform === 'CMS') {\r\n xlfUrl = apiHost + layoutOptions.xlfUrl;\r\n fetchOptions.mode = 'no-cors';\r\n } else if (layoutOptions.platform === 'chromeOS') {\r\n xlfUrl = layoutOptions.xlfUrl;\r\n fetchOptions.mode = 'cors';\r\n fetchOptions.headers = {\r\n 'Content-Type': 'text/xml',\r\n };\r\n } else if (layoutOptions.platform !== 'CMS' && layoutOptions.appHost !== null) {\r\n xlfUrl = layoutOptions.appHost + layoutOptions.xlfUrl;\r\n }\r\n\r\n const res = await fetch(xlfUrl);\r\n\r\n return await res.text();\r\n}\r\n\r\nexport function handleAxiosError(error: any, message?: string) {\r\n console.error(error);\r\n if (error.response.status == 500) {\r\n // SOAP responses are always 500's\r\n // Return the body\r\n throw new Error(error.response.data);\r\n } else {\r\n throw new Error(message || 'Unknown Error');\r\n }\r\n}\r\n\r\nexport function getLayout(params: GetLayoutParamType): GetLayoutType {\r\n let _currentLayout = undefined;\r\n let _nextLayout = undefined;\r\n let {\r\n inputLayouts,\r\n currentLayout,\r\n nextLayout,\r\n currentLayoutIndex: currLayoutIndx\r\n } = params.xlr;\r\n const hasLayout = inputLayouts.length > 0;\r\n let currentLayoutIndex = currLayoutIndx;\r\n let nextLayoutIndex = currentLayoutIndex + 1;\r\n\r\n if (currentLayout === undefined && nextLayout === undefined) {\r\n let activeLayout;\r\n // Preview just got started\r\n if (hasLayout) {\r\n let nextLayoutTemp = {...initialLayout};\r\n activeLayout = inputLayouts[currentLayoutIndex];\r\n _currentLayout = {...initialLayout, ...activeLayout};\r\n\r\n if (inputLayouts.length > 1) {\r\n nextLayoutTemp = {...nextLayoutTemp, ...inputLayouts[nextLayoutIndex]};\r\n _nextLayout = nextLayoutTemp;\r\n } else {\r\n _nextLayout = _currentLayout;\r\n }\r\n\r\n _currentLayout.id = activeLayout.layoutId;\r\n\r\n if (nextLayoutTemp) {\r\n _nextLayout.id = nextLayoutTemp.layoutId;\r\n }\r\n }\r\n } else {\r\n if (hasLayout) {\r\n _currentLayout = nextLayout;\r\n\r\n currentLayoutIndex = getIndexByLayoutId(inputLayouts, _currentLayout?.layoutId).index as number;\r\n nextLayoutIndex = currentLayoutIndex + 1;\r\n\r\n if (inputLayouts.length > 1 && nextLayoutIndex < inputLayouts.length) {\r\n if (Boolean(params.xlr.layouts[nextLayoutIndex])) {\r\n _nextLayout = params.xlr.layouts[nextLayoutIndex];\r\n } else {\r\n _nextLayout = {...initialLayout, ...inputLayouts[nextLayoutIndex]};\r\n }\r\n }\r\n\r\n // If _nextLayout is undefined, then we go back to first layout\r\n if (_nextLayout === undefined) {\r\n _nextLayout = params.xlr.layouts[0];\r\n }\r\n }\r\n }\r\n\r\n return {\r\n currentLayoutIndex,\r\n inputLayouts: params.xlr.inputLayouts,\r\n current: _currentLayout,\r\n next: _nextLayout,\r\n }\r\n}\r\n\r\nexport interface ILayoutEvents {\r\n start: (layout: ILayout) => void;\r\n end: (layout: ILayout) => void;\r\n}\r\n\r\nexport default function Layout(\r\n data: Document | null,\r\n options: OptionsType,\r\n xlr: IXlr,\r\n layout?: ILayout\r\n) {\r\n const props = {\r\n data: data,\r\n options: options,\r\n layout: layout || initialLayout,\r\n }\r\n const emitter = createNanoEvents<ILayoutEvents>();\r\n\r\n emitter.on('start', (layout: ILayout) => {\r\n layout.done = false;\r\n console.debug('Layout start emitted > Layout ID > ', layout.id);\r\n });\r\n\r\n emitter.on('end', async (layout: ILayout) => {\r\n console.debug('Ending layout with ID of > ', layout.layoutId);\r\n /* Remove layout that has ended */\r\n const $layout = document.getElementById(layout.containerName);\r\n\r\n layout.done = true;\r\n console.debug({$layout});\r\n\r\n if ($layout !== null) {\r\n $layout.remove();\r\n }\r\n\r\n if (xlr.config.platform !== 'CMS') {\r\n // Transition next layout to current layout and prepare next layout if exist\r\n xlr.prepareLayouts().then((parent) => {\r\n xlr.playSchedules(parent);\r\n });\r\n }\r\n });\r\n\r\n const layoutObject: ILayout = {\r\n ...props.layout,\r\n options: props.options,\r\n };\r\n\r\n layoutObject.on = function<E extends keyof ILayoutEvents>(event: E, callback: ILayoutEvents[E]) {\r\n return emitter.on(event, callback);\r\n };\r\n layoutObject.emitter = emitter;\r\n\r\n layoutObject.run = function() {\r\n const layout = layoutObject;\r\n const $layoutContainer = document.getElementById(`${layout.containerName}`);\r\n const $splashScreen = document.getElementById(`splash_${layout.id}`);\r\n\r\n if ($layoutContainer) {\r\n $layoutContainer.style.display = 'block';\r\n }\r\n\r\n if ($splashScreen) {\r\n $splashScreen.style.display = 'none';\r\n }\r\n\r\n console.debug('Layout running > Layout ID > ', layout.id);\r\n console.debug('Layout Regions > ', layout.regions);\r\n for (let i = 0; i < layout.regions.length; i++) {\r\n // playLog(4, \"debug\", \"Running region \" + self.regions[i].id, false);\r\n layout.regions[i].run();\r\n }\r\n };\r\n\r\n layoutObject.prepareLayout = function(){\r\n layoutObject.parseXlf();\r\n };\r\n\r\n layoutObject.parseXlf = function() {\r\n const layout = this;\r\n const {options} = layout;\r\n\r\n layout.done = false;\r\n layout.allEnded = false;\r\n layout.allExpired = false;\r\n layout.containerName = \"L\" + layout.id + \"-\" + nextId(options);\r\n layout.regions = [];\r\n\r\n /* Create a hidden div to show the layout in */\r\n let $layout = document.getElementById(layout.containerName);\r\n\r\n if ($layout === null) {\r\n $layout = document.createElement('div');\r\n $layout.id = layout.containerName;\r\n }\r\n\r\n let $screen = document.getElementById('screen_container');\r\n ($screen) && $screen.appendChild($layout);\r\n\r\n if ($layout) {\r\n $layout.style.display = 'none';\r\n if (xlr.config.platform === 'CMS') {\r\n $layout.style.outline = 'red solid thin';\r\n }\r\n }\r\n\r\n layout.layoutNode = props.data;\r\n\r\n /* Calculate the screen size */\r\n layout.sw = $screen?.offsetWidth || 0;\r\n layout.sh = $screen?.offsetHeight || 0;\r\n\r\n layout.xw = Number(layout.layoutNode?.firstElementChild?.getAttribute('width'));\r\n layout.xh = Number(layout.layoutNode?.firstElementChild?.getAttribute('height'));\r\n layout.zIndex = Number(layout.layoutNode?.firstElementChild?.getAttribute('zindex')) || 0;\r\n\r\n /* Calculate Scale Factor */\r\n layout.scaleFactor = Math.min((layout.sw / layout.xw), (layout.sh / layout.xh));\r\n layout.sWidth = layout.xw * layout.scaleFactor;\r\n layout.sHeight = layout.xh * layout.scaleFactor;\r\n layout.offsetX = Math.abs(layout.sw - layout.sWidth) / 2;\r\n layout.offsetY = Math.abs(layout.sh - layout.sHeight) / 2;\r\n\r\n /* Scale the Layout Container */\r\n if ($layout) {\r\n $layout.style.width = `${layout.sWidth}px`;\r\n $layout.style.height = `${layout.sHeight}px`;\r\n $layout.style.position = 'absolute';\r\n $layout.style.left = `${layout.offsetX}px`;\r\n $layout.style.top = `${layout.offsetY}px`;\r\n }\r\n\r\n if ($layout && layout.zIndex !== null) {\r\n $layout.style.zIndex = `${layout.zIndex}`;\r\n }\r\n\r\n /* Set the layout background */\r\n layout.bgColor = layout.layoutNode?.firstElementChild?.getAttribute('bgcolor') || '';\r\n layout.bgImage = layout.layoutNode?.firstElementChild?.getAttribute('background') || '';\r\n\r\n if (!(layout.bgImage === \"\" || typeof layout.bgImage === 'undefined')) {\r\n /* Extract the image ID from the filename */\r\n layout.bgId = layout.bgImage.substring(0, layout.bgImage.indexOf('.'));\r\n\r\n const bgImageUrl = composeBgUrlByPlatform(\r\n xlr.config.platform,\r\n {\r\n ...options,\r\n layout,\r\n }\r\n );\r\n\r\n if ($layout) {\r\n $layout.style.backgroundImage = `url(\"${bgImageUrl}\")`;\r\n $layout.style.backgroundRepeat = 'no-repeat';\r\n $layout.style.backgroundSize = `${layout.sWidth}px ${layout.sHeight}px`;\r\n $layout.style.backgroundPosition = '0px 0px';\r\n }\r\n }\r\n\r\n // Set the background color\r\n if ($layout && layout.bgColor) {\r\n $layout.style.backgroundColor = `${layout.bgColor}`;\r\n }\r\n\r\n // Hide if layout is not the currentLayout\r\n if ($layout && xlr.currentLayoutId !== undefined && xlr.currentLayoutId !== layout.id) {\r\n $layout.style.display = 'none';\r\n }\r\n\r\n // Create regions\r\n const layoutRegions = Array.from(layout?.layoutNode?.getElementsByTagName('region') || []);\r\n\r\n Array.from(layoutRegions).forEach((regionXml, indx) => {\r\n const regionObj = Region(\r\n layout,\r\n regionXml,\r\n regionXml?.getAttribute('id') || '',\r\n options,\r\n xlr,\r\n );\r\n\r\n regionObj.index = indx;\r\n layout.regions.push(regionObj);\r\n });\r\n };\r\n\r\n layoutObject.regionExpired = function() {\r\n const self = layoutObject;\r\n self.allExpired = true;\r\n\r\n for (let layoutRegion of self.regions) {\r\n if (!layoutRegion.complete) {\r\n self.allExpired = false;\r\n }\r\n }\r\n\r\n if (self.allExpired) {\r\n self.end();\r\n }\r\n };\r\n\r\n layoutObject.regionEnded = function() {\r\n const self = layoutObject;\r\n self.allEnded = true;\r\n \r\n for (var i = 0; i < self.regions.length; i++) {\r\n if (! self.regions[i].ended) {\r\n self.allEnded = false;\r\n }\r\n }\r\n \r\n if (self.allEnded) {\r\n self.stopAllMedia().then(async () => {\r\n console.debug('starting to end layout . . .');\r\n if (xlr.config.platform === 'CMS') {\r\n const $end = document.getElementById('play_ended');\r\n const $preview = document.getElementById('screen_container');\r\n \r\n if ($preview) {\r\n while($preview.firstChild) {\r\n $preview.removeChild($preview.firstChild);\r\n }\r\n \r\n $preview.style.display = 'none';\r\n }\r\n \r\n if ($end) {\r\n $end.style.display = 'block';\r\n }\r\n }\r\n \r\n self.emitter.emit('end', self);\r\n });\r\n\r\n }\r\n };\r\n\r\n layoutObject.end = function() {\r\n console.debug('Executing Layout::end and Calling Region::end ', layoutObject);\r\n\r\n /* Ask the layout to gracefully stop running now */\r\n for (let layoutRegion of layoutObject.regions) {\r\n layoutRegion.end();\r\n }\r\n };\r\n\r\n layoutObject.stopAllMedia = function() {\r\n console.debug('Stopping all media . . .');\r\n return new Promise(async (resolve) => {\r\n for(var i = 0;i < layoutObject.regions.length;i++) {\r\n var region = layoutObject.regions[i];\r\n for(var j = 0;j < region.mediaObjects.length;j++) {\r\n var media = region.mediaObjects[j];\r\n await media.stop();\r\n }\r\n }\r\n\r\n resolve();\r\n });\r\n };\r\n\r\n layoutObject.prepareLayout();\r\n\r\n return layoutObject;\r\n}\r\n","/*\r\n * Copyright (C) 2024 Xibo Signage Ltd\r\n *\r\n * Xibo - Digital Signage - https://www.xibosignage.com\r\n *\r\n * This file is part of Xibo.\r\n *\r\n * Xibo is free software: you can redistribute it and/or modify\r\n * it under the terms of the GNU Lesser General Public License as published by\r\n * the Free Software Foundation, either version 3 of the License, or\r\n * any later version.\r\n *\r\n * Xibo is distributed in the hope that it will be useful,\r\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n * GNU Lesser General Public License for more details.\r\n *\r\n * You should have received a copy of the GNU Lesser General Public License\r\n * along with Xibo. If not, see <http://www.gnu.org/licenses/>.\r\n */\r\nimport {ILayout, InputLayoutType, OptionsType} from '../Layout';\r\nimport {platform} from '../../Modules/Platform';\r\n\r\nexport type PrepareLayoutsType = {\r\n moveNext?: boolean;\r\n};\r\n\r\nexport enum ELayoutType {\r\n CURRENT,\r\n NEXT,\r\n}\r\n\r\nexport interface IXlr {\r\n inputLayouts: InputLayoutType[],\r\n config: OptionsType,\r\n layouts: ILayout[],\r\n currentLayoutIndex: number;\r\n currentLayoutId: number | null;\r\n currentLayout: ILayout | undefined;\r\n nextLayout: ILayout | undefined;\r\n bootstrap(): void;\r\n init(): Promise<IXlr>;\r\n playSchedules(xlr: IXlr): void;\r\n prepareLayoutXlf(inputLayout: ILayout | undefined): Promise<ILayout>;\r\n prepareLayouts(): Promise<IXlr>;\r\n updateLayouts(inputLayouts: InputLayoutType[]): void;\r\n updateLoop(inputLayouts: InputLayoutType[]): void;\r\n}\r\n\r\nexport const initialXlr: IXlr = {\r\n inputLayouts: [],\r\n config: platform,\r\n layouts: [],\r\n currentLayoutIndex: 0,\r\n currentLayoutId: null,\r\n currentLayout: undefined,\r\n nextLayout: undefined,\r\n bootstrap() {\r\n },\r\n init() {\r\n return Promise.resolve(<IXlr>{});\r\n },\r\n playSchedules() {\r\n },\r\n prepareLayoutXlf(inputLayout: ILayout | undefined): Promise<ILayout> {\r\n return Promise.resolve(<ILayout>{});\r\n },\r\n prepareLayouts(): Promise<IXlr> {\r\n return Promise.resolve(<IXlr>{});\r\n },\r\n updateLayouts(inputLayouts: InputLayoutType[]) {\r\n },\r\n updateLoop(inputLayouts: InputLayoutType[]) {\r\n }\r\n};\r\n","var img = \"data:image/png;base64,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\";\n export default img;","var img = \"data:image/gif;base64,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\";\n export default img;","/*\r\n * Copyright (C) 2024 Xibo Signage Ltd\r\n *\r\n * Xibo - Digital Signage - https://www.xibosignage.com\r\n *\r\n * This file is part of Xibo.\r\n *\r\n * Xibo is free software: you can redistribute it and/or modify\r\n * it under the terms of the GNU Lesser General Public License as published by\r\n * the Free Software Foundation, either version 3 of the License, or\r\n * any later version.\r\n *\r\n * Xibo is distributed in the hope that it will be useful,\r\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n * GNU Lesser General Public License for more details.\r\n *\r\n * You should have received a copy of the GNU Lesser General Public License\r\n * along with Xibo. If not, see <http://www.gnu.org/licenses/>.\r\n */\r\nimport './splash-screen.css';\r\nimport xiboLogoImg from './img/logo.png';\r\nimport loaderImg from './img/loader.gif';\r\nimport {OptionsType} from '../../Types/Layout';\r\n\r\nexport interface ISplashScreen {\r\n init: () => void;\r\n show: () => void;\r\n hide: () => void;\r\n}\r\n\r\nexport interface PreviewSplashElement extends HTMLDivElement {\r\n hide: () => void;\r\n}\r\n\r\nexport default function SplashScreen($parent: Element | null, config?: OptionsType): ISplashScreen {\r\n const $previewSplash = document.createElement('div') as PreviewSplashElement;\r\n const $previewLoader = document.createElement('div');\r\n const $previewLoaderCaption = document.createElement('div');\r\n const $defaultNoLayout = document.createElement('div');\r\n\r\n const splashScreenObj = {\r\n init() {\r\n $previewSplash.classList.add('preview-splash');\r\n\r\n // Don't show Xibo logo on CMS Preview\r\n if (config && config.platform !== 'CMS') {\r\n $previewSplash.style.setProperty(\r\n 'background-image',\r\n `url(${xiboLogoImg})`,\r\n );\r\n $previewSplash.style.setProperty(\r\n 'background-size',\r\n '200px 120px',\r\n );\r\n $previewSplash.style.setProperty(\r\n 'background-position',\r\n 'calc(100% - 50px) calc(100% - 30px)',\r\n );\r\n }\r\n\r\n $previewSplash.constructor.prototype.hide = () => {\r\n this.hide();\r\n };\r\n\r\n $previewLoader.classList.add('preview-loader');\r\n $previewLoaderCaption.classList.add('preview-loaderCaption');\r\n\r\n // Show loader bar and text on CMS Preview\r\n if (config && config.platform === 'CMS') {\r\n $previewLoader.style.setProperty(\r\n 'background-image',\r\n `url(${loaderImg})`,\r\n );\r\n $previewLoaderCaption.innerHTML = '<p>Loading Layout...</p>';\r\n }\r\n\r\n $previewSplash.insertBefore($previewLoader, $previewSplash.lastElementChild);\r\n $previewSplash.insertBefore($previewLoaderCaption, null);\r\n\r\n this.hide();\r\n },\r\n show() {\r\n if ($parent) {\r\n $parent.insertBefore($previewSplash, $parent.firstElementChild);\r\n $previewSplash.style.setProperty('display', 'block');\r\n }\r\n },\r\n hide() {\r\n $previewSplash.style.setProperty('display', 'none');\r\n },\r\n };\r\n\r\n splashScreenObj.init();\r\n\r\n return splashScreenObj;\r\n}\r\n","/*\r\n * Copyright (C) 2024 Xibo Signage Ltd\r\n *\r\n * Xibo - Digital Signage - https://www.xibosignage.com\r\n *\r\n * This file is part of Xibo.\r\n *\r\n * Xibo is free software: you can redistribute it and/or modify\r\n * it under the terms of the GNU Lesser General Public License as published by\r\n * the Free Software Foundation, either version 3 of the License, or\r\n * any later version.\r\n *\r\n * Xibo is distributed in the hope that it will be useful,\r\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n * GNU Lesser General Public License for more details.\r\n *\r\n * You should have received a copy of the GNU Lesser General Public License\r\n * along with Xibo. If not, see <http://www.gnu.org/licenses/>.\r\n */\r\nimport Layout, { getLayout, getXlf, initRenderingDOM } from './Modules/Layout';\r\nimport { platform } from './Modules/Platform';\r\nimport {\r\n ILayout, initialLayout, InputLayoutType, OptionsType,\r\n} from './Types/Layout';\r\nimport { initialXlr, IXlr } from './Types/XLR';\r\nimport SplashScreen, {PreviewSplashElement} from './Modules/SplashScreen';\r\nimport {getIndexByLayoutId} from './Modules/Generators/Generators';\r\n\r\nexport default function XiboLayoutRenderer(\r\n inputLayouts: InputLayoutType[],\r\n options?: OptionsType,\r\n) {\r\n const props = {\r\n inputLayouts,\r\n options,\r\n }\r\n\r\n const xlrObject: IXlr = {\r\n ...initialXlr,\r\n };\r\n\r\n\r\n xlrObject.bootstrap = function() {\r\n // Place to set configurations and initialize required props\r\n const self = this;\r\n self.inputLayouts = !Array.isArray(props.inputLayouts) ?\r\n [props.inputLayouts] : props.inputLayouts;\r\n self.config = JSON.parse(JSON.stringify({...platform, ...props.options}));\r\n\r\n // Prepare rendering DOM\r\n const previewCanvas = document.querySelector('#preview_canvas');\r\n\r\n initRenderingDOM(previewCanvas);\r\n\r\n // Prepare splash screen\r\n const splashScreen = SplashScreen(\r\n document.querySelector('.player-preview'),\r\n self.config,\r\n );\r\n\r\n splashScreen.show();\r\n };\r\n xlrObject.init = function() {\r\n return new Promise<IXlr>((resolve) => {\r\n const self = this;\r\n\r\n // Check if only have splash screen from inputLayouts\r\n if (self.inputLayouts.length === 1 && self.inputLayouts[0].layoutId === 0) {\r\n resolve(self);\r\n } else {\r\n self.prepareLayouts().then((xlr) => {\r\n resolve(xlr);\r\n });\r\n }\r\n });\r\n };\r\n\r\n xlrObject.playSchedules = function(xlr: IXlr) {\r\n // Check if there's a current layout\r\n if (xlr.currentLayout !== undefined) {\r\n const $splashScreen = document.querySelector('.preview-splash') as PreviewSplashElement;\r\n if ($splashScreen && $splashScreen.style.display === 'block') {\r\n $splashScreen?.hide();\r\n }\r\n\r\n xlr.currentLayout.emitter.emit('start', xlr.currentLayout);\r\n xlr.currentLayout.run();\r\n }\r\n };\r\n\r\n xlrObject.updateLoop = function(inputLayouts: InputLayoutType[]) {\r\n this.updateLayouts(inputLayouts);\r\n };\r\n\r\n xlrObject.updateLayouts = async function(inputLayouts: InputLayoutType[]) {\r\n /**\r\n * @TODO\r\n * Case 1: If currentLayout in inputLayouts and in the same sequence,\r\n * Then, continue playing currentLayout.\r\n * Check nextLayout in inputLayouts. If in inputLayouts and same sequence, then don't change.\r\n * If not in inputLayouts, then replace and prepare nextLayout.\r\n *\r\n * Case 2: If currentLayout in inputLayouts but not in the same sequence,\r\n * Then, replace loop, prepare layouts and start currentLayout\r\n *\r\n * Case 3: If currentLayout not in inputLayouts,\r\n * Then, replace everything and start from first layout in sequence.\r\n */\r\n\r\n this.inputLayouts = inputLayouts;\r\n /** Case 1: When currentLayout is not in inputLayouts\r\n * Then, replace everything and start from first layout\r\n */\r\n if (inputLayouts.filter((inputLayout) => inputLayout.layoutId === this.currentLayout?.layoutId).length === 0) {\r\n // Unset currentLayout, nextLayout and layouts\r\n this.layouts = [];\r\n this.currentLayout = undefined;\r\n this.nextLayout = undefined;\r\n\r\n const xlr = await this.prepareLayouts();\r\n this.playSchedules(xlr);\r\n } else {\r\n /** Case 2: When currentLayout is in inputLayouts, then continue playing\r\n * Also check for nextLayout if in inputLayouts and same sequence, then don't change and continue playing.\r\n * If not in inputLayouts, then replace and prepare nextLayout.\r\n */\r\n\r\n // 2.1 We don't have to do anything for currentLayout\r\n // 2.2 Check for nextLayout\r\n // Get nextLayout index\r\n const currLayoutIndex = getIndexByLayoutId(inputLayouts, this.currentLayout?.layoutId).index as number;\r\n const nxtLayoutIndex = getIndexByLayoutId(inputLayouts, this.nextLayout?.layoutId).index as number;\r\n const tempOldNxtLayout = this.layouts[nxtLayoutIndex];\r\n let newNxtLayoutIndex = currLayoutIndex + 1;\r\n\r\n if (nxtLayoutIndex !== newNxtLayoutIndex) {\r\n // Delete old nextLayout\r\n delete this.layouts[nxtLayoutIndex];\r\n\r\n if (Boolean(this.layouts[newNxtLayoutIndex])) {\r\n this.nextLayout = this.layouts[newNxtLayoutIndex];\r\n this.layouts[newNxtLayoutIndex] = this.nextLayout;\r\n } else {\r\n // Check if newNxtLayoutIndex is still within inputLayouts\r\n if ((newNxtLayoutIndex + 1) > inputLayouts.length) {\r\n // Goes back to first layout in the sequence\r\n newNxtLayoutIndex = 0;\r\n }\r\n\r\n if (Boolean(inputLayouts[newNxtLayoutIndex])) {\r\n const tempNxtLayout = {...initialLayout, ...inputLayouts[newNxtLayoutIndex]};\r\n this.nextLayout = await this.prepareLayoutXlf(tempNxtLayout);\r\n this.layouts[newNxtLayoutIndex] = this.nextLayout;\r\n }\r\n\r\n // Move old nextLayout to its index\r\n let hasOldNxtLayout = inputLayouts\r\n .filter((_layout) => _layout.layoutId === tempOldNxtLayout?.layoutId);\r\n\r\n if (hasOldNxtLayout.length === 1) {\r\n const oldNxtLayoutIndex =\r\n getIndexByLayoutId(inputLayouts, hasOldNxtLayout[0].layoutId).index as number;\r\n this.layouts[oldNxtLayoutIndex] = tempOldNxtLayout;\r\n }\r\n }\r\n } else {\r\n // Check if newNxtLayout is not the same with nextLayout\r\n // Then, replace nextLayout with new one\r\n if (inputLayouts[nxtLayoutIndex].layoutId !== this.nextLayout?.layoutId) {\r\n const tempNewNxtLayout = {...initialLayout, ...inputLayouts[nxtLayoutIndex]};\r\n this.nextLayout = await this.prepareLayoutXlf(tempNewNxtLayout);\r\n this.layouts[nxtLayoutIndex] = this.nextLayout;\r\n }\r\n\r\n // Remove old nextLayout if it's not in inputLayouts\r\n if (tempOldNxtLayout?.index && Boolean(this.layouts[tempOldNxtLayout?.index])) {\r\n if (inputLayouts.filter((_layout) => _layout.layoutId === tempOldNxtLayout?.layoutId).length === 0) {\r\n delete this.layouts[tempOldNxtLayout?.index];\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n xlrObject.prepareLayouts = async function() {\r\n const self = this;\r\n // Get layouts\r\n const xlrLayouts = getLayout({xlr: self});\r\n\r\n console.debug('prepareLayouts::xlrLayouts', xlrLayouts);\r\n\r\n self.currentLayoutId = xlrLayouts.current?.layoutId as ILayout['layoutId'];\r\n\r\n const layoutsXlf = () => {\r\n let xlf = [];\r\n\r\n xlf.push(xlrLayouts.current);\r\n\r\n if (xlrLayouts.current?.layoutId !== xlrLayouts.next?.layoutId) {\r\n xlf.push(xlrLayouts.next);\r\n }\r\n\r\n return xlf.reduce((coll: Promise<ILayout>[], item) => {\r\n return [\r\n ...coll,\r\n self.prepareLayoutXlf(item),\r\n ];\r\n }, []);\r\n };\r\n const layouts = await Promise.all<Array<Promise<ILayout>>>(layoutsXlf());\r\n console.debug('prepareLayouts::layouts', layouts);\r\n console.debug('prepareLayouts::xlr>layouts', self.layouts);\r\n\r\n return new Promise<IXlr>((resolve) => {\r\n layouts.map((layoutItem) => {\r\n if (!Boolean(self.layouts[layoutItem.index])) {\r\n self.layouts[layoutItem.index] = layoutItem;\r\n }\r\n });\r\n self.currentLayoutIndex = xlrLayouts.currentLayoutIndex;\r\n self.currentLayout = self.layouts[self.currentLayoutIndex];\r\n\r\n if (Boolean(layouts[1])) {\r\n self.nextLayout = layouts[1];\r\n } else {\r\n // Use current layout as next layout if only one layout is available\r\n self.nextLayout = self.layouts[0];\r\n }\r\n\r\n self.layouts[self.currentLayoutIndex] = self.currentLayout;\r\n\r\n resolve(self);\r\n });\r\n };\r\n\r\n xlrObject.prepareLayoutXlf = async function(inputLayout: ILayout) {\r\n const self = this;\r\n // Compose layout props first\r\n let newOptions: OptionsType = Object.assign({}, platform);\r\n\r\n newOptions = {\r\n ...newOptions,\r\n ...props.options,\r\n };\r\n\r\n if (self.config.platform ==='CMS' &&\r\n inputLayout && Boolean(inputLayout.layoutId)\r\n ) {\r\n newOptions.xlfUrl =\r\n newOptions.xlfUrl.replace(':layoutId', String(inputLayout.layoutId));\r\n } else if (self.config.platform === 'chromeOS') {\r\n newOptions.xlfUrl = inputLayout.path as string;\r\n }\r\n\r\n let layoutXlf: string;\r\n let layoutXlfNode: Document | null;\r\n if (inputLayout && inputLayout.layoutNode === null) {\r\n layoutXlf = await getXlf(newOptions);\r\n\r\n const parser = new window.DOMParser();\r\n layoutXlfNode = parser.parseFromString(layoutXlf as string, 'text/xml');\r\n } else {\r\n layoutXlfNode = inputLayout && inputLayout.layoutNode;\r\n }\r\n\r\n return new Promise<ILayout>((resolve) => {\r\n const xlrLayoutObj = initialLayout;\r\n\r\n xlrLayoutObj.id = Number(inputLayout.layoutId);\r\n xlrLayoutObj.layoutId = Number(inputLayout.layoutId);\r\n xlrLayoutObj.options = newOptions;\r\n xlrLayoutObj.index = getIndexByLayoutId(this.inputLayouts, xlrLayoutObj.layoutId).index as number;\r\n\r\n resolve(Layout(layoutXlfNode, newOptions, self, xlrLayoutObj));\r\n });\r\n };\r\n\r\n xlrObject.bootstrap();\r\n\r\n return xlrObject;\r\n}\r\n"],"names":["createNanoEvents","emit","event","_len","arguments","length","args","Array","_key","i","callbacks","events","apply","on","cb","_this$events","_this","push","_this$events$event","filter","RESOURCE_URL","XLF_URL","LAYOUT_BACKGROUND_DOWNLOAD_URL","LAYOUT_PREVIEW_URL","LIBRARY_DOWNLOAD_URL","LOADER_URL","platform","getResourceUrl","xlfUrl","layoutBackgroundDownloadUrl","layoutPreviewUrl","libraryDownloadUrl","loaderUrl","idCounter","inPreview","appHost","initialLayout","id","layoutId","sw","sh","xw","xh","zIndex","scaleFactor","sWidth","sHeight","offsetX","offsetY","bgColor","bgImage","bgId","containerName","layoutNode","regionMaxZIndex","ready","regionObjects","drawer","allExpired","regions","actions","options","done","allEnded","path","prepareLayout","parseXlf","run","callback","regionExpired","end","regionEnded","stopAllMedia","Promise","resolve","resetLayout","emitter","index","nextId","getMediaId","_ref","mediaType","mediaId","capitalizeStr","inputStr","String","charAt","toUpperCase","substring","getDataBlob","_x","_getDataBlob","_asyncToGenerator","_regeneratorRuntime","mark","_callee","src","wrap","_callee$","_context","prev","next","abrupt","fetch","mode","then","res","blob","rej","reader","FileReader","onloadend","result","onerror","readAsDataURL","stop","preloadMediaBlob","_x2","_x3","_preloadMediaBlob","_callee2","type","data","_callee2$","_context2","sent","Blob","arrayBuffer","audioFileType","getFileExt","URL","createObjectURL","fetchJSON","_x4","_fetchJSON","_callee3","url","_callee3$","_context3","json","err","console","debug","filename","filenameArr","split","str","validAudioTypes","Boolean","undefined","composeResourceUrlByPlatform","params","resourceUrl","regionOptions","replace","regionId","resourceEndpoint","isGlobalContent","isImageOrVideo","fileId","uri","composeResourceUrl","_options$config","_options$config2","_options$config3","schemaVersion","config","hardwareKey","serverKey","cmsKey","composeVideoUrl","composeBgUrlByPlatform","bgImageUrl","layout","getIndexByLayoutId","layoutsInput","layoutIndexes","reduce","a","b","indx","Number","_objectSpread","initialRegion","xml","mediaObjects","mediaObjectsActions","currentMedia","complete","ending","ended","oneMedia","oldMedia","curMedia","nxtMedia","currentMediaIndex","totalMediaObjects","prepareRegion","playNextMedia","transitionNodes","finished","exitTransition","exitTransitionComplete","prepareMediaObjects","reset","initialMedia","region","html","iframe","iframeName","render","attachedAudio","singlePlay","timeoutId","setTimeout","checkIframeStatus","loadIframeOnRun","tempSrc","duration","useDuration","divWidth","divHeight","loop","init","defaultTrans","trans","defaultKeyframes","display","defaultTiming","keyframes","timing","fadeInElem","fadeInKeyframes","opacity","fadeInTiming","fill","fadeOutElem","fadeOutKeyframes","fadeOutTiming","flyInElem","keyframeOptions","direction","flyInKeyframes","flyInTiming","from","to","flyOutElem","flyOutKeyframes","flyOutTiming","transitionElement","transition","transitions","fadeIn","fadeOut","flyIn","flyOut","defaultIn","defaultOut","flyTransitionKeyframes","opacityAttr","source","top","concat","height","left","width","VideoMedia","media","videoMediaObject","$videoMedia","document","getElementById","onloadstart","onloadeddata","readyState","oncanplay","videoPlayPromise","play","error","muted","onplaying","ondurationchange","onended","_media$emitter","AudioMedia","audioMediaObject","$audioMedia","$playBtn","remove","audioPlayPromise","name","_$audioMedia$parentNo","createElement","classList","add","textContent","addEventListener","parentNode","insertBefore","nextSibling","Media","xlr","props","mediaTimer","mediaTimeCount","mediaObject","startMediaTimer","setInterval","clearInterval","_self$xml","_self$xml2","_self$xml3","_self$xml4","_self$xml5","self","getAttribute","parseInt","$mediaIframe","mediaOptions","getElementsByTagName","_i","_Array$from","_options","_mediaOptions","children","_i2","_Array$from2","mediaOption","nodeName","toLowerCase","showfullscreen","scrolling","style","cssText","$mediaId","$media","Audio","className","resourceUrlParams","tmpUrl","align","valign","preload","mute","scaletype","objectFit","playsInline","autoplay","regex","RegExp","exec","transInDuration","transinduration","fadeInTrans","animate","transInDirection","transindirection","defaultTransInOptions","transIn","transInName","showCurrentMedia","_ref2","isCMS","getNewMedia","setProperty","t0","t1","t2","t3","t4","call","t5","innerHTML","appendChild","$region","lastElementChild","Region","regionObject","_self$xml6","_regionOptions","regionOption","$layout","Math","round","regionMediaItems","forEach","mediaXml","mediaObj","nextMediaIndex","newMedia","transOutDuration","transOutDirection","transoutduration","transoutdirection","defaultTransOutOptions","transOut","transOutName","hideOldMedia","$oldMedia","removeOldMedia","oldMediaAnimate","_oldMediaAnimate","effect","updateTiming","isDone","_self$curMedia","_self$curMedia2","_self$curMedia3","_self$curMedia4","playAgainClickHandle","ev","preventDefault","history","go","initRenderingDOM","targetContainer","_targetContainer","previewPlayer","previewScreen","endPlay","playAgainLink","removeEventListener","body","querySelector","firstChild","getXlf","_getXlf","_callee4","layoutOptions","apiHost","fetchOptions","_callee4$","_context4","window","location","origin","headers","text","getLayout","_currentLayout","_nextLayout","_params$xlr","inputLayouts","currentLayout","nextLayout","currLayoutIndx","currentLayoutIndex","hasLayout","nextLayoutIndex","activeLayout","nextLayoutTemp","_currentLayout2","layouts","current","Layout","prepareLayouts","parent","playSchedules","layoutObject","$layoutContainer","$splashScreen","_layout$layoutNode","_layout$layoutNode2","_layout$layoutNode3","_layout$layoutNode4","_layout$layoutNode5","_layout$layoutNode6","$screen","outline","offsetWidth","offsetHeight","firstElementChild","min","abs","position","indexOf","backgroundImage","backgroundRepeat","backgroundSize","backgroundPosition","backgroundColor","currentLayoutId","layoutRegions","regionXml","regionObj","_iterator","_createForOfIteratorHelper","_step","s","n","layoutRegion","value","e","f","$end","$preview","removeChild","_iterator2","_step2","_ref3","j","ELayoutType","initialXlr","bootstrap","prepareLayoutXlf","inputLayout","updateLayouts","updateLoop","img","SplashScreen","$parent","$previewSplash","$previewLoader","$previewLoaderCaption","splashScreenObj","xiboLogoImg","constructor","prototype","hide","loaderImg","show","XiboLayoutRenderer","xlrObject","isArray","JSON","parse","stringify","previewCanvas","splashScreen","_this2","_this$currentLayout","_this$nextLayout","currLayoutIndex","nxtLayoutIndex","tempOldNxtLayout","newNxtLayoutIndex","tempNxtLayout","hasOldNxtLayout","oldNxtLayoutIndex","_this$nextLayout2","tempNewNxtLayout","_this2$currentLayout","_layout","_xlrLayouts$current","xlrLayouts","layoutsXlf","_xlrLayouts$current2","_xlrLayouts$next","xlf","coll","item","_toConsumableArray","all","map","layoutItem","_this3","newOptions","layoutXlf","layoutXlfNode","parser","Object","assign","DOMParser","parseFromString","xlrLayoutObj"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"xibo-layout-renderer.esm.js","sources":["../node_modules/nanoevents/index.js","../../src/Modules/Platform/Platform.ts","../../src/Types/Layout/Layout.types.ts","../../src/Modules/Generators/Generators.ts","../../src/Types/Region/Region.types.ts","../../src/Types/Media/Media.types.ts","../../src/Modules/Transitions/Transitions.ts","../../src/Modules/Media/VideoMedia.ts","../../src/Modules/Media/AudioMedia.ts","../../src/Modules/Media/Media.ts","../../src/Modules/Region/Region.ts","../../src/Modules/ActionController/ActionController.ts","../../src/Modules/Layout/Layout.ts","../../src/Types/XLR/XLR.types.ts","../src/Modules/SplashScreen/img/logo.png","../src/Modules/SplashScreen/img/loader.gif","../../src/Modules/SplashScreen/SplashScreen.ts","../../src/xibo-layout-renderer.ts"],"sourcesContent":["export let createNanoEvents = () => ({\n emit(event, ...args) {\n for (\n let i = 0,\n callbacks = this.events[event] || [],\n length = callbacks.length;\n i < length;\n i++\n ) {\n callbacks[i](...args)\n }\n },\n events: {},\n on(event, cb) {\n ;(this.events[event] ||= []).push(cb)\n return () => {\n this.events[event] = this.events[event]?.filter(i => cb !== i)\n }\n }\n})\n","/*\r\n * Copyright (C) 2024 Xibo Signage Ltd\r\n *\r\n * Xibo - Digital Signage - https://www.xibosignage.com\r\n *\r\n * This file is part of Xibo.\r\n *\r\n * Xibo is free software: you can redistribute it and/or modify\r\n * it under the terms of the GNU Lesser General Public License as published by\r\n * the Free Software Foundation, either version 3 of the License, or\r\n * any later version.\r\n *\r\n * Xibo is distributed in the hope that it will be useful,\r\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n * GNU Lesser General Public License for more details.\r\n *\r\n * You should have received a copy of the GNU Lesser General Public License\r\n * along with Xibo. If not, see <http://www.gnu.org/licenses/>.\r\n */\r\nimport {OptionsType} from \"../../Types/Layout\";\r\n\r\nconst RESOURCE_URL = '/playlist/widget/resource/:regionId/:id';\r\nconst XLF_URL = '/layout/xlf/:layoutId';\r\nconst LAYOUT_BACKGROUND_DOWNLOAD_URL = '/layout/background/:id';\r\nconst LAYOUT_PREVIEW_URL = '/layout/preview/[layoutCode]';\r\nconst LIBRARY_DOWNLOAD_URL = '/library/download/:id';\r\nconst LOADER_URL = '/theme/default/img/loader.gif';\r\n\r\nexport const platform: OptionsType = {\r\n getResourceUrl: RESOURCE_URL,\r\n xlfUrl: XLF_URL,\r\n layoutBackgroundDownloadUrl: LAYOUT_BACKGROUND_DOWNLOAD_URL,\r\n layoutPreviewUrl: LAYOUT_PREVIEW_URL,\r\n libraryDownloadUrl: LIBRARY_DOWNLOAD_URL,\r\n loaderUrl: LOADER_URL,\r\n idCounter: 0,\r\n inPreview: true,\r\n appHost: null,\r\n platform: 'CMS',\r\n};\r\n","/*\r\n * Copyright (C) 2024 Xibo Signage Ltd\r\n *\r\n * Xibo - Digital Signage - https://www.xibosignage.com\r\n *\r\n * This file is part of Xibo.\r\n *\r\n * Xibo is free software: you can redistribute it and/or modify\r\n * it under the terms of the GNU Lesser General Public License as published by\r\n * the Free Software Foundation, either version 3 of the License, or\r\n * any later version.\r\n *\r\n * Xibo is distributed in the hope that it will be useful,\r\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n * GNU Lesser General Public License for more details.\r\n *\r\n * You should have received a copy of the GNU Lesser General Public License\r\n * along with Xibo. If not, see <http://www.gnu.org/licenses/>.\r\n */\r\nimport {Emitter, Unsubscribe} from 'nanoevents';\r\nimport {IRegion} from '../Region';\r\nimport {platform} from '../../Modules/Platform';\r\nimport {ILayoutEvents} from '../../Modules/Layout';\r\nimport {IXlr} from '../XLR';\r\nimport InteractiveActions, { Action } from '../../Modules/ActionController';\r\n\r\nexport type InputLayoutType = {\r\n layoutId: number | null;\r\n path?: string;\r\n};\r\n\r\nexport type OptionsType = {\r\n xlfUrl: string;\r\n getResourceUrl: string;\r\n layoutBackgroundDownloadUrl: string;\r\n layoutPreviewUrl: string;\r\n libraryDownloadUrl: string;\r\n loaderUrl: string;\r\n idCounter: number;\r\n inPreview: boolean;\r\n appHost?: string | null;\r\n platform: 'CMS' | 'chromeOS';\r\n config?: {\r\n cmsUrl: string | null;\r\n schemaVersion: number;\r\n cmsKey: string | null;\r\n hardwareKey: string | null;\r\n };\r\n previewTranslations?: {\r\n [k: string]: any;\r\n }\r\n};\r\n\r\nexport interface ILayout {\r\n id: number | null;\r\n layoutId: number | null;\r\n sw: number | null;\r\n sh: number | null;\r\n xw: number | null;\r\n xh: number | null;\r\n zIndex: number | null;\r\n scaleFactor: number;\r\n sWidth: number;\r\n sHeight: number;\r\n offsetX: number;\r\n offsetY: number;\r\n bgColor: string;\r\n bgImage: string;\r\n bgId: string;\r\n containerName: string;\r\n layoutNode: Document | null;\r\n regionMaxZIndex: number;\r\n ready: boolean;\r\n regionObjects: IRegion[];\r\n drawer: Element | null;\r\n allExpired: boolean;\r\n regions: IRegion[];\r\n actions: Action[];\r\n options: OptionsType;\r\n done: boolean;\r\n allEnded: boolean;\r\n path?: string;\r\n prepareLayout(): void;\r\n parseXlf(): void;\r\n run(): void;\r\n emitter: Emitter<ILayoutEvents>;\r\n on<E extends keyof ILayoutEvents>(event: E, callback: ILayoutEvents[E]): Unsubscribe;\r\n regionExpired(): void;\r\n end(): void;\r\n regionEnded(): void;\r\n stopAllMedia(): Promise<void>;\r\n resetLayout(): Promise<void>;\r\n index: number;\r\n actionController: InteractiveActions | undefined;\r\n}\r\n\r\nexport const initialLayout: ILayout = {\r\n id: null,\r\n layoutId: null,\r\n sw: 0,\r\n sh: 0,\r\n xw: 0,\r\n xh: 0,\r\n zIndex: 0,\r\n scaleFactor: 1,\r\n sWidth: 0,\r\n sHeight: 0,\r\n offsetX: 0,\r\n offsetY: 0,\r\n bgColor: '',\r\n bgImage: '',\r\n bgId: '',\r\n containerName: '',\r\n layoutNode: null,\r\n regionMaxZIndex: 0,\r\n ready: false,\r\n regionObjects: [],\r\n drawer: null,\r\n allExpired: false,\r\n regions: [],\r\n actions: [],\r\n options: platform,\r\n done: false,\r\n allEnded: false,\r\n path: '',\r\n prepareLayout() {\r\n },\r\n parseXlf() {\r\n },\r\n run() {\r\n },\r\n on<E extends keyof ILayoutEvents>(event: E, callback: ILayoutEvents[E]): Unsubscribe {\r\n return <Unsubscribe>{};\r\n },\r\n regionExpired() {\r\n },\r\n end() {\r\n },\r\n regionEnded() {\r\n },\r\n stopAllMedia() {\r\n return Promise.resolve();\r\n },\r\n resetLayout() {\r\n return Promise.resolve();\r\n },\r\n emitter: <Emitter<ILayoutEvents>>{},\r\n index: -1,\r\n actionController: undefined,\r\n};\r\n\r\nexport type GetLayoutParamType = {\r\n xlr: IXlr;\r\n moveNext?: boolean;\r\n}\r\n\r\nexport type GetLayoutType = {\r\n currentLayoutIndex: number;\r\n inputLayouts: InputLayoutType[];\r\n current: ILayout | undefined;\r\n next: ILayout | undefined;\r\n}\r\n","/*\r\n * Copyright (C) 2024 Xibo Signage Ltd\r\n *\r\n * Xibo - Digital Signage - https://www.xibosignage.com\r\n *\r\n * This file is part of Xibo.\r\n *\r\n * Xibo is free software: you can redistribute it and/or modify\r\n * it under the terms of the GNU Lesser General Public License as published by\r\n * the Free Software Foundation, either version 3 of the License, or\r\n * any later version.\r\n *\r\n * Xibo is distributed in the hope that it will be useful,\r\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n * GNU Lesser General Public License for more details.\r\n *\r\n * You should have received a copy of the GNU Lesser General Public License\r\n * along with Xibo. If not, see <http://www.gnu.org/licenses/>.\r\n */\r\nimport { IMedia } from '../../Types/Media';\r\nimport {InputLayoutType, OptionsType} from '../../Types/Layout';\r\n\r\nexport function nextId(options: { idCounter: number; }) {\r\n if (options.idCounter > 500) {\r\n options.idCounter = 0;\r\n }\r\n\r\n options.idCounter = options.idCounter + 1;\r\n return options.idCounter;\r\n}\r\n\r\nexport const getMediaId = ({mediaType, containerName}: IMedia) => {\r\n let mediaId = containerName;\r\n\r\n if (mediaType === 'video') {\r\n mediaId = mediaId + '-vid';\r\n } else if (mediaType === 'audio') {\r\n mediaId = mediaId + '-aud';\r\n }\r\n\r\n return mediaId;\r\n};\r\n\r\nexport const capitalizeStr = (inputStr: string) => {\r\n if (inputStr === null) {\r\n return '';\r\n }\r\n\r\n return String(inputStr).charAt(0).toUpperCase() + String(inputStr).substring(1);\r\n};\r\n\r\nexport async function getDataBlob(src: string) {\r\n return fetch(src, {mode: 'no-cors'})\r\n .then((res) => res.blob())\r\n .then((blob) => new Promise((res, rej) => {\r\n const reader = new FileReader();\r\n\r\n reader.onloadend = () => res(reader.result);\r\n reader.onerror = rej;\r\n reader.readAsDataURL(blob);\r\n }));\r\n}\r\n\r\nexport async function preloadMediaBlob(src: string, type: 'video' | 'audio' | 'image') {\r\n const res = await fetch(src, {mode: 'no-cors'});\r\n let blob: Blob | MediaSource = new Blob();\r\n\r\n if (type === 'image') {\r\n blob = new Blob()\r\n } else if (type === 'video') {\r\n blob = await res.blob();\r\n } else if (type === 'audio') {\r\n const data = await res.arrayBuffer();\r\n blob = new Blob([data], { type: audioFileType(getFileExt(src)) })\r\n }\r\n\r\n return URL.createObjectURL(blob);\r\n}\r\n\r\nexport async function fetchJSON(url: string) {\r\n return fetch(url)\r\n .then(res => res.json())\r\n .catch(err => {\r\n console.debug(err);\r\n });\r\n}\r\n\r\nexport async function fetchText(url: string): Promise<string> {\r\n return fetch(url)\r\n .then(res => res.text())\r\n .then((responseText) => {\r\n if (String(responseText).length > 0) {\r\n return responseText;\r\n } else {\r\n return '';\r\n }\r\n })\r\n .catch(err => {\r\n console.debug(err);\r\n return err?.message;\r\n });\r\n}\r\n\r\nexport function getFileExt(filename: string) {\r\n const filenameArr = String(filename).split('.');\r\n\r\n return filenameArr[filenameArr.length - 1];\r\n}\r\n\r\nexport function audioFileType(str: string) {\r\n const validAudioTypes = {\r\n 'mp3': 'audio/mp3',\r\n 'wav': 'audio/wav',\r\n 'ogg': 'audio/ogg',\r\n };\r\n\r\n if (Boolean(validAudioTypes[str as 'mp3' | 'wav' | 'ogg'])) {\r\n return validAudioTypes[str as 'mp3' | 'wav' | 'ogg'];\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nexport function composeResourceUrlByPlatform(options: OptionsType, params: any) {\r\n let resourceUrl = params.regionOptions.getResourceUrl\r\n .replace(\":regionId\", params.regionId)\r\n .replace(\":id\", params.mediaId) +\r\n '?preview=1&layoutPreview=1';\r\n\r\n if (options.platform === 'chromeOS') {\r\n const resourceEndpoint = '/required-files/resource/';\r\n\r\n if (!params.isGlobalContent && params.isImageOrVideo) {\r\n resourceUrl = resourceEndpoint + params.fileId + '?saveAs=' + params.uri;\r\n }\r\n } else if (!Boolean(params['mediaType'])) {\r\n resourceUrl += '&scale_override=' + params.scaleFactor;\r\n }\r\n\r\n return resourceUrl;\r\n}\r\n\r\nexport function composeResourceUrl(options: OptionsType, params: any) {\r\n const schemaVersion = (options) && options.config?.schemaVersion;\r\n const hardwareKey = (options) && options.config?.hardwareKey;\r\n const serverKey = (options) && options.config?.cmsKey;\r\n\r\n return '/pwa/getResource' +\r\n '?v=' + schemaVersion +\r\n '&serverKey=' + serverKey +\r\n '&hardwareKey=' + hardwareKey +\r\n '&layoutId=' + params.layoutId +\r\n '&regionId=' + params.regionId +\r\n '&mediaId=' + params.mediaId;\r\n}\r\n\r\nexport function composeVideoUrl(params: any) {\r\n return '/xmds.php?file=' + params.uri;\r\n}\r\n\r\nexport function composeBgUrlByPlatform(\r\n platform: OptionsType['platform'],\r\n params: any\r\n) {\r\n let bgImageUrl = params.layoutBackgroundDownloadUrl.replace(\":id\", (params.layout.id as unknown) as string) +\r\n '?preview=1&width=' + params.layout.sWidth +\r\n '&height=' + params.layout.sHeight +\r\n '&dynamic&proportional=0';\r\n\r\n if (platform === 'chromeOS') {\r\n bgImageUrl = '/required-files/resource/' + params.layout.id +\r\n '?saveAs=' + params.layout.bgImage;\r\n }\r\n\r\n return bgImageUrl;\r\n}\r\n\r\ntype LayoutIndexType = {\r\n [k: string]: InputLayoutType & {\r\n index: number;\r\n }\r\n}\r\n\r\nexport function getIndexByLayoutId(layoutsInput: InputLayoutType[], layoutId?: number | null) {\r\n let layoutIndexes = layoutsInput.reduce((a: LayoutIndexType, b, indx) => {\r\n a[Number(b.layoutId)] = {\r\n ...b,\r\n index: indx\r\n };\r\n\r\n return a;\r\n }, {});\r\n\r\n if (layoutId === null || !layoutId) {\r\n return layoutIndexes;\r\n }\r\n\r\n if (Boolean(layoutIndexes[layoutId])) {\r\n return layoutIndexes[layoutId];\r\n }\r\n\r\n // Defaults to 0\r\n return {index: 0};\r\n}\r\n\r\nexport function isEmpty(input: any) {\r\n return !Boolean(input) || String(input).length === 0;\r\n}\r\n\r\nexport const splashScreenLayoutObj: InputLayoutType = {\r\n layoutId: 0,\r\n path: '',\r\n};\r\n\r\nexport function splashScreenDOM() {\r\n const mediaItem = document.querySelector('.media--item');\r\n const newImg = document.createElement('img');\r\n\r\n newImg.src = new URL('./logo.png', import.meta.url).href;\r\n\r\n if (mediaItem !== null) {\r\n mediaItem.insertBefore(newImg, mediaItem.lastElementChild);\r\n }\r\n\r\n return newImg;\r\n}\r\n\r\nexport function getAllAttributes(elem: Element) {\r\n if (!elem || elem === null) {\r\n return {};\r\n }\r\n\r\n return elem.getAttributeNames()\r\n .reduce((obj, name) => ({\r\n ...obj,\r\n [name]: {\r\n value: elem.getAttribute(name),\r\n },\r\n }), <{[k: string]: any}>{});\r\n}\r\n","/*\r\n * Copyright (C) 2024 Xibo Signage Ltd\r\n *\r\n * Xibo - Digital Signage - https://www.xibosignage.com\r\n *\r\n * This file is part of Xibo.\r\n *\r\n * Xibo is free software: you can redistribute it and/or modify\r\n * it under the terms of the GNU Lesser General Public License as published by\r\n * the Free Software Foundation, either version 3 of the License, or\r\n * any later version.\r\n *\r\n * Xibo is distributed in the hope that it will be useful,\r\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n * GNU Lesser General Public License for more details.\r\n *\r\n * You should have received a copy of the GNU Lesser General Public License\r\n * along with Xibo. If not, see <http://www.gnu.org/licenses/>.\r\n */\r\nimport { DefaultEvents, Emitter, Unsubscribe } from 'nanoevents';\r\nimport {ILayout, initialLayout} from '../Layout';\r\nimport {IMedia} from '../Media';\r\n\r\nexport interface IRegionEvents {\r\n start: (layout: IRegion) => void;\r\n end: (layout: IRegion) => void;\r\n}\r\n\r\nexport interface IRegion {\r\n layout: ILayout;\r\n id: string;\r\n regionId: string;\r\n uniqueId: string;\r\n xml: null | Element;\r\n mediaObjects: IMedia[];\r\n mediaObjectsActions: IMedia[];\r\n currentMedia: number;\r\n complete: boolean;\r\n containerName: string;\r\n ending: boolean;\r\n ended: boolean;\r\n oneMedia: boolean;\r\n oldMedia: IMedia | undefined;\r\n curMedia: IMedia | undefined;\r\n nxtMedia: IMedia | undefined;\r\n currentMediaIndex: number;\r\n totalMediaObjects: number;\r\n ready: boolean;\r\n options: {\r\n [k: string]: any;\r\n };\r\n sWidth: number;\r\n sHeight: number;\r\n offsetX: number;\r\n offsetY: number;\r\n zIndex: number;\r\n index: number;\r\n emitter?: Emitter<DefaultEvents>;\r\n prepareRegion(): void;\r\n playNextMedia(): void;\r\n playPreviousMedia(): void;\r\n transitionNodes(oldMedia: IMedia | undefined, newMedia: IMedia | undefined): void;\r\n finished(): void;\r\n run(): void;\r\n end(): void;\r\n exitTransition(): void;\r\n exitTransitionComplete(): void;\r\n on<E extends keyof IRegionEvents>(event: E, callback: IRegionEvents[E]): Unsubscribe;\r\n prepareMediaObjects(): void;\r\n reset(): void;\r\n}\r\n\r\nexport const initialRegion: IRegion = {\r\n layout: initialLayout,\r\n id: '',\r\n regionId: '',\r\n uniqueId: '',\r\n xml: null,\r\n mediaObjects: [],\r\n mediaObjectsActions: [],\r\n currentMedia: -1,\r\n complete: false,\r\n containerName: '',\r\n ending: false,\r\n ended: false,\r\n oneMedia: false,\r\n oldMedia: undefined,\r\n curMedia: undefined,\r\n nxtMedia: undefined,\r\n currentMediaIndex: 0,\r\n totalMediaObjects: 0,\r\n ready: false,\r\n options: {},\r\n sWidth: 0,\r\n sHeight: 0,\r\n offsetX: 0,\r\n offsetY: 0,\r\n zIndex: 0,\r\n index: -1,\r\n prepareRegion() {\r\n },\r\n playNextMedia() {\r\n },\r\n playPreviousMedia() {\r\n },\r\n transitionNodes() {\r\n },\r\n finished() {\r\n },\r\n run() {\r\n },\r\n end() {\r\n },\r\n exitTransition() {},\r\n exitTransitionComplete() {},\r\n on<E extends keyof IRegionEvents>(event: E, callback: IRegionEvents[E]): Unsubscribe {\r\n return <Unsubscribe>{};\r\n },\r\n prepareMediaObjects() {\r\n },\r\n reset() {\r\n }\r\n};\r\n","/*\r\n * Copyright (C) 2024 Xibo Signage Ltd\r\n *\r\n * Xibo - Digital Signage - https://www.xibosignage.com\r\n *\r\n * This file is part of Xibo.\r\n *\r\n * Xibo is free software: you can redistribute it and/or modify\r\n * it under the terms of the GNU Lesser General Public License as published by\r\n * the Free Software Foundation, either version 3 of the License, or\r\n * any later version.\r\n *\r\n * Xibo is distributed in the hope that it will be useful,\r\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n * GNU Lesser General Public License for more details.\r\n *\r\n * You should have received a copy of the GNU Lesser General Public License\r\n * along with Xibo. If not, see <http://www.gnu.org/licenses/>.\r\n */\r\nimport {Emitter, Unsubscribe} from 'nanoevents';\r\nimport { IMediaEvents } from '../../Modules/Media/Media';\r\nimport {initialRegion, IRegion} from '../Region';\r\nimport {OptionsType} from '../Layout';\r\n\r\nexport interface IMedia {\r\n checkIframeStatus: boolean;\r\n run(): void;\r\n divHeight: number;\r\n type: string;\r\n timeoutId: ReturnType<typeof setTimeout>;\r\n divWidth: number;\r\n tempSrc: string;\r\n duration: number;\r\n iframeName: string;\r\n loadIframeOnRun: boolean;\r\n xml: Element | null;\r\n containerName: string;\r\n ready: boolean;\r\n loop: boolean;\r\n options: OptionsType & {\r\n [k: string]: any\r\n };\r\n useDuration: boolean;\r\n html: HTMLElement | null;\r\n id: string;\r\n mediaId: string;\r\n iframe: HTMLIFrameElement | null;\r\n render: string;\r\n attachedAudio: boolean;\r\n on<E extends keyof IMediaEvents>(event: E, callback: IMediaEvents[E]): Unsubscribe;\r\n init(): void;\r\n schemaVersion: string;\r\n index: number;\r\n mediaType: string;\r\n finished: boolean;\r\n uri: string;\r\n url: string | null;\r\n singlePlay: boolean;\r\n stop(): Promise<void>;\r\n idCounter: number;\r\n region: IRegion;\r\n fileId: string;\r\n emitter: Emitter<IMediaEvents>;\r\n}\r\n\r\nexport const initialMedia: IMedia = {\r\n region: initialRegion,\r\n xml: null,\r\n id: '',\r\n mediaId: '',\r\n index: 0,\r\n idCounter: 0,\r\n containerName: '',\r\n html: null,\r\n iframe: null,\r\n iframeName: '',\r\n mediaType: '',\r\n render: 'html',\r\n attachedAudio: false,\r\n singlePlay: false,\r\n timeoutId: setTimeout(() => {}, 0),\r\n ready: true,\r\n checkIframeStatus: false,\r\n loadIframeOnRun: false,\r\n tempSrc: '',\r\n finished: false,\r\n schemaVersion: '1',\r\n type: '',\r\n duration: 0,\r\n useDuration: Boolean(0),\r\n fileId: '',\r\n uri: '',\r\n options: <OptionsType>{},\r\n divWidth: 0,\r\n divHeight: 0,\r\n url: null,\r\n loop: false,\r\n run() {},\r\n init() {},\r\n stop() {\r\n return Promise.resolve();\r\n },\r\n on<E extends keyof IMediaEvents>(event: E, callback: IMediaEvents[E]): Unsubscribe {\r\n return <Unsubscribe>{};\r\n },\r\n emitter: <Emitter<IMediaEvents>>{},\r\n}\r\n","/*\n * Copyright (C) 2024 Xibo Signage Ltd\n *\n * Xibo - Digital Signage - https://www.xibosignage.com\n *\n * This file is part of Xibo.\n *\n * Xibo is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * any later version.\n *\n * Xibo is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * along with Xibo. If not, see <http://www.gnu.org/licenses/>.\n */\nexport const defaultTrans = (duration: number, trans: 'in' | 'out') => {\n const defaultKeyframes = [\n { display: trans === 'in' ? 'none' : 'block' },\n { display: trans === 'out' ? 'none' : 'block' },\n ];\n const defaultTiming: number | KeyframeAnimationOptions | undefined = {\n duration,\n };\n\n return {\n keyframes: defaultKeyframes,\n timing: defaultTiming,\n };\n};\n\nexport const fadeInElem = (duration: number) => {\n const fadeInKeyframes = [\n { opacity: 0 },\n { opacity: 1 },\n ];\n const fadeInTiming: number | KeyframeAnimationOptions | undefined = {\n duration,\n fill: 'forwards',\n };\n\n return {\n keyframes: fadeInKeyframes,\n timing: fadeInTiming,\n }\n};\n\nexport const fadeOutElem = (duration: number) => {\n const fadeOutKeyframes = [\n { opacity: 1 },\n { opacity: 0, zIndex: -1 },\n ];\n const fadeOutTiming: number | KeyframeAnimationOptions | undefined = {\n duration,\n fill: 'forwards',\n };\n\n return {\n keyframes: fadeOutKeyframes,\n timing: fadeOutTiming,\n }\n};\n\nexport type KeyframeOptionsType = {\n from: {\n [k: string]: any,\n },\n to: {\n [k: string]: any,\n },\n}\n\nexport const flyInElem = (duration: number, keyframeOptions: KeyframeOptionsType | undefined, direction?: string) => {\n const flyInKeyframes = [\n {opacity: 0},\n {opacity: 1, zIndex: 1},\n ];\n const flyInTiming: number | KeyframeAnimationOptions | undefined = {\n duration,\n fill: 'forwards',\n };\n\n if (keyframeOptions && Boolean(keyframeOptions.from)) {\n flyInKeyframes[0] = {...keyframeOptions.from, ...flyInKeyframes[0]};\n }\n\n if (keyframeOptions && Boolean(keyframeOptions.to)) {\n flyInKeyframes[1] = {...keyframeOptions.to, ...flyInKeyframes[1]};\n }\n\n return {\n keyframes: flyInKeyframes,\n timing: flyInTiming,\n };\n};\n\nexport const flyOutElem = (duration: number, keyframeOptions: KeyframeOptionsType | undefined, direction?: string) => {\n const flyOutKeyframes: Keyframe[] = [\n {opacity: 1},\n {opacity: 0, zIndex: -1},\n ];\n const flyOutTiming: number | KeyframeAnimationOptions | undefined = {\n duration,\n fill: 'forwards',\n };\n\n if (keyframeOptions && Boolean(keyframeOptions.from)) {\n flyOutKeyframes[0] = {...keyframeOptions.from, ...flyOutKeyframes[0]};\n }\n\n if (keyframeOptions && Boolean(keyframeOptions.to)) {\n flyOutKeyframes[1] = {...keyframeOptions.to, ...flyOutKeyframes[1]};\n }\n\n return {\n keyframes: flyOutKeyframes,\n timing: flyOutTiming,\n };\n};\n\nexport type TransitionNameType = 'fadeIn' | 'fadeOut' | 'flyIn' | 'flyOut' | 'defaultIn' | 'defaultOut';\n\nexport type TransitionElementOptions = {\n duration: number;\n keyframes?: KeyframeOptionsType;\n direction?: string;\n};\n\nexport const transitionElement = (transition: TransitionNameType, options: TransitionElementOptions) => {\n const transitions = {\n fadeIn: fadeInElem(options.duration),\n fadeOut: fadeOutElem(options.duration),\n flyIn: flyInElem(options.duration, options.keyframes, options.direction),\n flyOut: flyOutElem(options.duration, options.keyframes, options.direction),\n defaultIn: defaultTrans(options.duration, 'in'),\n defaultOut: defaultTrans(options.duration, 'out'),\n };\n\n return transitions[transition];\n};\n\nexport type compassPoints = 'N' | 'NE' | 'E' | 'SE' | 'S' | 'SW' | 'W' | 'NW';\n\nexport type flyTransitionParams = {\n trans: 'in' | 'out';\n direction: compassPoints;\n height: string | number;\n width: string | number;\n};\n\nexport const flyTransitionKeyframes = (params: flyTransitionParams): KeyframeOptionsType => {\n const keyframes = {\n from: {},\n to: {},\n };\n const opacityAttr = (source: 'from' | 'to') => {\n if (source === 'from') {\n return params.trans === 'in' ? 0 : 1;\n }\n \n return params.trans === 'out' ? 1 : 0;\n };\n\n switch (params.direction) {\n case 'N':\n keyframes.from = {\n opacity: opacityAttr('from'),\n top: params.trans === 'in' ? `${params.height}px` : 0,\n };\n keyframes.to = {\n opacity: opacityAttr('to'),\n top: params.trans === 'in' ? 0 : `-${params.height}px`,\n };\n break;\n case 'NE':\n keyframes.from = {\n opacity: opacityAttr('from'),\n top: params.trans === 'in' ? `${params.height}px` : 0,\n left: params.trans === 'in' ? `-${params.width}px` : 0,\n };\n keyframes.to = {\n opacity: opacityAttr('to'),\n top: params.trans === 'in' ? 0 : `-${params.height}px`,\n left: params.trans === 'in' ? 0 : `${params.width}px`,\n };\n break;\n case 'E':\n keyframes.from = {\n opacity: opacityAttr('from'),\n left: params.trans === 'in' ? `-${params.width}px` : 0,\n };\n keyframes.to = {\n opacity: opacityAttr('to'),\n left: params.trans === 'in' ? 0 : `${params.width}px`,\n };\n break;\n case 'SE':\n keyframes.from = {\n opacity: opacityAttr('from'),\n top: params.trans === 'in' ? `-${params.height}px` : 0,\n left: params.trans === 'in' ? `-${params.width}px` : 0,\n };\n keyframes.to = {\n opacity: opacityAttr('to'),\n top: params.trans === 'in' ? 0 : `${params.height}px`,\n left: params.trans === 'in' ? 0 : `${params.width}px`,\n };\n break;\n case 'S':\n keyframes.from = {\n opacity: opacityAttr('from'),\n top: params.trans === 'in' ? `-${params.height}px` : 0,\n };\n keyframes.to = {\n opacity: opacityAttr('to'),\n top: params.trans === 'in' ? 0 : `${params.height}px`,\n };\n break;\n case 'SW':\n keyframes.from = {\n opacity: opacityAttr('from'),\n top: params.trans === 'in' ? `-${params.height}px` : 0,\n left: params.trans === 'in' ? `${params.width}px` : 0,\n };\n keyframes.to = {\n opacity: opacityAttr('to'),\n top: params.trans === 'in' ? 0 : `${params.height}px`,\n left: params.trans === 'in' ? 0 : `-${params.width}px`,\n };\n break;\n case 'W':\n keyframes.from = {\n opacity: opacityAttr('from'),\n left: params.trans === 'in' ? `${params.width}px` : 0,\n };\n keyframes.to = {\n opacity: opacityAttr('to'),\n left: params.trans === 'in' ? 0 : `-${params.width}px`,\n };\n break;\n case 'NW':\n keyframes.from = {\n opacity: opacityAttr('from'),\n top: params.trans === 'in' ? `${params.height}px` : 0,\n left: params.trans === 'in' ? `${params.width}px` : 0,\n };\n keyframes.to = {\n opacity: opacityAttr('to'),\n top: params.trans === 'in' ? 0 : `-${params.height}px`,\n left: params.trans === 'in' ? 0 : `-${params.width}px`,\n };\n break;\n default:\n keyframes.from = {\n opacity: opacityAttr('from'),\n top: params.trans === 'in' ? `${params.height}px` : 0,\n };\n keyframes.to = {\n opacity: opacityAttr('to'),\n top: params.trans === 'in' ? 0 : `-${params.height}px`,\n };\n break;\n }\n\n return keyframes;\n};\n","/*\n * Copyright (C) 2024 Xibo Signage Ltd\n *\n * Xibo - Digital Signage - https://www.xibosignage.com\n *\n * This file is part of Xibo.\n *\n * Xibo is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * any later version.\n *\n * Xibo is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * along with Xibo. If not, see <http://www.gnu.org/licenses/>.\n */\nimport { IMedia } from '../../Types/Media';\nimport { capitalizeStr, getMediaId } from '../Generators';\n\nexport default function VideoMedia(media: IMedia) {\n const videoMediaObject = {\n init() {\n const $videoMedia = document.getElementById(getMediaId(media)) as HTMLVideoElement;\n\n if ($videoMedia) {\n $videoMedia.onloadstart = () => {\n console.debug(`${capitalizeStr(media.mediaType)} for media > ${media.id} has started loading data . . .`);\n };\n $videoMedia.onloadeddata = () => {\n if ($videoMedia.readyState >= 2) {\n console.debug(`${capitalizeStr(media.mediaType)} data for media > ${media.id} has been fully loaded . . .`);\n }\n };\n $videoMedia.oncanplay = () => {\n console.debug(`${capitalizeStr(media.mediaType)} for media > ${media.id} can be played . . .`);\n \n const videoPlayPromise = $videoMedia.play();\n \n if (videoPlayPromise !== undefined) {\n videoPlayPromise.then(() => {\n console.debug('autoplay started . . .');\n // Autoplay restarted\n }).catch(error => {\n $videoMedia.muted = true;\n $videoMedia.play();\n });\n }\n };\n $videoMedia.onplaying = () => {\n console.debug(`${capitalizeStr(media.mediaType)} for media > ${media.id} is now playing . . .`);\n };\n\n if (media.duration === 0) {\n $videoMedia.ondurationchange = () => {\n console.debug('Showing Media ' + media.id + ' for ' + $videoMedia.duration + 's of Region ' + media.region.regionId);\n };\n $videoMedia.onended = () => {\n console.debug(`${capitalizeStr(media.mediaType)} for media > ${media.id} has ended playing . . .`);\n media.emitter?.emit('end', media);\n };\n }\n }\n }\n }\n\n return videoMediaObject;\n}\n","/*\n * Copyright (C) 2024 Xibo Signage Ltd\n *\n * Xibo - Digital Signage - https://www.xibosignage.com\n *\n * This file is part of Xibo.\n *\n * Xibo is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * any later version.\n *\n * Xibo is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * along with Xibo. If not, see <http://www.gnu.org/licenses/>.\n */\nimport { IMedia } from '../../Types/Media';\nimport { capitalizeStr, getMediaId } from '../Generators';\n\nimport './media.css';\n\nexport default function AudioMedia(media: IMedia) {\n const audioMediaObject = {\n init() {\n const $audioMedia = document.getElementById(getMediaId(media)) as HTMLAudioElement;\n let $playBtn: HTMLButtonElement | null = null;\n\n if ($audioMedia) {\n $audioMedia.onloadstart = () => {\n console.debug(`${capitalizeStr(media.mediaType)} for media > ${media.id} has started loading data . . .`);\n };\n $audioMedia.onloadeddata = () => {\n if ($audioMedia.readyState >= 2) {\n console.debug(`${capitalizeStr(media.mediaType)} data for media > ${media.id} has been fully loaded . . .`);\n }\n };\n $audioMedia.oncanplay = () => {\n console.debug(`${capitalizeStr(media.mediaType)} for media > ${media.id} can be played . . .`);\n };\n $audioMedia.onplaying = () => {\n console.debug(`${capitalizeStr(media.mediaType)} for media > ${media.id} is now playing . . .`);\n\n if ($playBtn !== null) {\n $playBtn.remove();\n }\n };\n\n const audioPlayPromise = $audioMedia.play();\n \n if (audioPlayPromise !== undefined) {\n audioPlayPromise.then(() => {\n console.debug('autoplay started . . .');\n // Autoplay restarted\n }).catch(error => {\n if (error.name === 'NotAllowedError') {\n // Let's show a play audio button\n $playBtn = document.createElement('button');\n\n $playBtn.classList.add('play-audio-btn');\n $playBtn.textContent = 'Play Audio';\n $playBtn.addEventListener('click', () => {\n $audioMedia.muted = false;\n $audioMedia.play();\n });\n $audioMedia.parentNode?.insertBefore($playBtn, $audioMedia.nextSibling);\n }\n });\n }\n if (media.duration === 0) {\n $audioMedia.ondurationchange = () => {\n console.debug('Showing Media ' + media.id + ' for ' + $audioMedia.duration + 's of Region ' + media.region.regionId);\n };\n $audioMedia.onended = () => {\n console.debug(`${capitalizeStr(media.mediaType)} for media > ${media.id} has ended playing . . .`);\n media.emitter?.emit('end', media);\n };\n }\n }\n },\n };\n\n return audioMediaObject;\n}\n","/*\r\n * Copyright (C) 2024 Xibo Signage Ltd\r\n *\r\n * Xibo - Digital Signage - https://www.xibosignage.com\r\n *\r\n * This file is part of Xibo.\r\n *\r\n * Xibo is free software: you can redistribute it and/or modify\r\n * it under the terms of the GNU Lesser General Public License as published by\r\n * the Free Software Foundation, either version 3 of the License, or\r\n * any later version.\r\n *\r\n * Xibo is distributed in the hope that it will be useful,\r\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n * GNU Lesser General Public License for more details.\r\n *\r\n * You should have received a copy of the GNU Lesser General Public License\r\n * along with Xibo. If not, see <http://www.gnu.org/licenses/>.\r\n */\r\nimport { createNanoEvents } from 'nanoevents';\r\nimport { OptionsType } from '../../Types/Layout';\r\nimport { IRegion } from '../../Types/Region';\r\nimport { IMedia, initialMedia } from '../../Types/Media';\r\nimport { fetchJSON, getMediaId, nextId, preloadMediaBlob } from '../Generators';\r\nimport { TransitionElementOptions, compassPoints, flyTransitionKeyframes, transitionElement } from '../Transitions';\r\nimport VideoMedia from './VideoMedia';\r\nimport AudioMedia from './AudioMedia';\r\nimport {composeResourceUrl, composeResourceUrlByPlatform, composeVideoUrl, fetchText, getDataBlob} from '../Generators/Generators';\r\nimport {IXlr} from '../../Types/XLR';\r\n\r\nexport interface IMediaEvents {\r\n start: (media: IMedia) => void;\r\n end: (media: IMedia) => void;\r\n}\r\n\r\nexport default function Media(\r\n region: IRegion,\r\n mediaId: string,\r\n xml: Element,\r\n options: OptionsType,\r\n xlr: IXlr,\r\n) {\r\n const props = {\r\n region: region,\r\n mediaId: mediaId,\r\n xml: xml,\r\n options: options,\r\n };\r\n let mediaTimer: string | number | NodeJS.Timeout | null | undefined = null;\r\n let mediaTimeCount = 0;\r\n const emitter = createNanoEvents<IMediaEvents>();\r\n const mediaObject: IMedia = {\r\n ...initialMedia,\r\n ...props,\r\n };\r\n const startMediaTimer = (media: IMedia) => {\r\n mediaTimer = setInterval(() => {\r\n mediaTimeCount++;\r\n if (mediaTimeCount > media.duration) {\r\n media.emitter.emit('end', media);\r\n }\r\n }, 1000);\r\n\r\n console.debug('Showing Media ' + media.id + ' for ' + media.duration + 's of Region ' + media.region.regionId);\r\n };\r\n\r\n emitter.on('start', function(media: IMedia) {\r\n if (media.mediaType === 'video') {\r\n VideoMedia(media).init();\r\n\r\n if (media.duration > 0) {\r\n startMediaTimer(media);\r\n }\r\n } else if (media.mediaType === 'audio') {\r\n AudioMedia(media).init();\r\n if (media.duration > 0) {\r\n startMediaTimer(media);\r\n }\r\n } else {\r\n startMediaTimer(media);\r\n }\r\n });\r\n\r\n emitter.on('end', function(media) {\r\n if (mediaTimer) {\r\n clearInterval(mediaTimer);\r\n mediaTimeCount = 0;\r\n }\r\n\r\n media.region.playNextMedia();\r\n });\r\n\r\n mediaObject.on = function<E extends keyof IMediaEvents>(event: E, callback: IMediaEvents[E]) {\r\n return emitter.on(event, callback);\r\n };\r\n\r\n mediaObject.emitter = emitter;\r\n\r\n mediaObject.init = function() {\r\n const self = mediaObject;\r\n self.id = props.mediaId;\r\n self.fileId = self.xml?.getAttribute('fileId') || '';\r\n self.idCounter = nextId(props.options);\r\n self.containerName = `M-${self.id}-${self.idCounter}`;\r\n self.iframeName = `${self.containerName}-iframe`;\r\n self.mediaType = self.xml?.getAttribute('type') || '';\r\n self.render = self.xml?.getAttribute('render') || '';\r\n self.duration = parseInt(self.xml?.getAttribute('duration') as string) || 0;\r\n self.options = { ...props.options };\r\n\r\n const $mediaIframe = document.createElement('iframe');\r\n const mediaOptions = self.xml?.getElementsByTagName('options');\r\n\r\n if (mediaOptions) {\r\n for (let _options of Array.from(mediaOptions)) {\r\n // Get options\r\n const _mediaOptions = _options.children;\r\n for (let mediaOption of Array.from(_mediaOptions)) {\r\n self.options[mediaOption.nodeName.toLowerCase()] = mediaOption.textContent;\r\n }\r\n }\r\n }\r\n\r\n // Check for options.uri and add it to media\r\n if (Boolean(self.options['uri'])) {\r\n self.uri = self.options['uri'];\r\n }\r\n\r\n // Show in fullscreen?\r\n if(self.options.showfullscreen === \"1\") {\r\n // Set dimensions as the layout ones\r\n self.divWidth = self.region.layout.sWidth;\r\n self.divHeight = self.region.layout.sHeight;\r\n } else {\r\n // Set dimensions as the region ones\r\n self.divWidth = self.region.sWidth;\r\n self.divHeight = self.region.sHeight;\r\n }\r\n\r\n $mediaIframe.scrolling = 'no';\r\n $mediaIframe.id = self.iframeName;\r\n $mediaIframe.width = `${self.divWidth}px`;\r\n $mediaIframe.height = `${self.divHeight}px`;\r\n $mediaIframe.style.cssText = `border: 0;`;\r\n\r\n const $mediaId = getMediaId(self);\r\n let $media = document.getElementById($mediaId);\r\n\r\n if ($media === null) {\r\n if (self.mediaType === 'video') {\r\n $media = document.createElement('video');\r\n } else if (self.mediaType === 'audio') {\r\n $media = new Audio();\r\n } else {\r\n $media = document.createElement('div');\r\n }\r\n \r\n $media.id = $mediaId;\r\n }\r\n\r\n $media.className = 'media--item';\r\n\r\n /* Scale the Content Container */\r\n $media.style.cssText = `\r\n display: none;\r\n width: ${self.divWidth}px;\r\n height: ${self.divHeight}px;\r\n position: absolute;\r\n background-size: contain;\r\n background-repeat: no-repeat;\r\n background-position: center;\r\n `;\r\n\r\n const $region = document.getElementById(`${self.region.containerName}`);\r\n\r\n const resourceUrlParams: any = {\r\n ...xlr.config.config,\r\n regionOptions: self.region.options,\r\n layoutId: self.region.layout.layoutId,\r\n regionId: self.region.id,\r\n mediaId: self.id,\r\n fileId: self.fileId,\r\n scaleFactor: self.region.layout.scaleFactor,\r\n uri: self.uri,\r\n isGlobalContent: self.mediaType === 'global',\r\n isImageOrVideo: self.mediaType === 'image' || self.mediaType === 'video',\r\n };\r\n\r\n if (self.mediaType === 'image' || self.mediaType === 'video') {\r\n resourceUrlParams.mediaType = self.mediaType;\r\n }\r\n\r\n let tmpUrl = '';\r\n\r\n if (xlr.config.platform === 'CMS') {\r\n tmpUrl = composeResourceUrlByPlatform(xlr.config, resourceUrlParams);\r\n } else if (xlr.config.platform === 'chromeOS') {\r\n tmpUrl = composeResourceUrl(xlr.config, resourceUrlParams);\r\n\r\n if (self.mediaType === 'video') {\r\n tmpUrl = composeVideoUrl(resourceUrlParams);\r\n }\r\n }\r\n\r\n self.url = tmpUrl;\r\n\r\n // Loop if media has loop, or if region has loop and a single media\r\n self.loop =\r\n self.options['loop'] == '1' ||\r\n (self.region.options['loop'] == '1' && self.region.totalMediaObjects == 1);\r\n\r\n if (self.render === 'html' || self.render === 'webpage') {\r\n $mediaIframe.src = self.url;\r\n } else {\r\n $mediaIframe.src = `${self.url}&width=${self.divWidth}&height=${self.divHeight}`;\r\n }\r\n\r\n // Check/set iframe based widgets play status\r\n // Populate mediaIframe content without using src attribute\r\n // let iframeSrc = tmpUrl;\r\n //\r\n // if (self.render !== 'html' && self.render !== 'webpage') {\r\n // iframeSrc = `${tmpUrl}&width=${self.divWidth}&height=${self.divHeight}`;\r\n // }\r\n //\r\n // if (self.render === 'html' || self.render === 'webpage') {\r\n // if (xlr.config.platform === 'CMS') {\r\n // $mediaIframe.src = iframeSrc;\r\n // } else if (xlr.config.platform === 'chromeOS') {\r\n // (async () => {\r\n // const mediaHtml = await fetchText(iframeSrc);\r\n //\r\n // if ($mediaIframe) {\r\n // $mediaIframe.contentDocument?.open();\r\n // $mediaIframe.contentDocument?.write(mediaHtml);\r\n // $mediaIframe.contentDocument?.close();\r\n // }\r\n // })();\r\n // }\r\n // }\r\n\r\n if (self.render === 'html' || self.mediaType === 'ticker' || self.mediaType === 'webpage') {\r\n self.checkIframeStatus = true;\r\n self.iframe = $mediaIframe;\r\n } else if (self.mediaType === \"image\") {\r\n if (self.options['scaletype'] === 'stretch') {\r\n $media.style.cssText = $media.style.cssText.concat(`background-size: 100% 100%;`);\r\n } else if (self.options['scaletype'] === 'fit') {\r\n $media.style.cssText = $media.style.cssText.concat(`background-size: cover;`);\r\n } else {\r\n // Center scale type, do we have align or valign?\r\n const align = (self.options['align'] == \"\") ? \"center\" : self.options['align'];\r\n const valign = (self.options['valign'] == \"\" || self.options['valign'] == \"middle\") ? \"center\" : self.options['valign'];\r\n $media.style.cssText = $media.style.cssText.concat(`background-position: ${align} ${valign}`);\r\n }\r\n } else if (self.mediaType === 'video') {\r\n const $videoMedia = $media as HTMLVideoElement;\r\n\r\n $videoMedia.preload = 'auto';\r\n $videoMedia.textContent = 'Unsupported Video';\r\n\r\n if (Boolean(self.options['mute'])) {\r\n $videoMedia.muted = self.options.mute === '1';\r\n }\r\n\r\n if (Boolean(self.options['scaletype'])) {\r\n if (self.options.scaletype === 'stretch') {\r\n $videoMedia.style.objectFit = 'fill';\r\n }\r\n }\r\n $videoMedia.playsInline = true;\r\n\r\n if (self.loop) {\r\n $videoMedia.loop = true;\r\n }\r\n\r\n $media = $videoMedia;\r\n } else if (self.mediaType === 'audio') {\r\n const $audioMedia = $media as HTMLAudioElement;\r\n\r\n $audioMedia.preload = 'auto';\r\n $audioMedia.textContent = 'Unsupported Audio';\r\n $audioMedia.autoplay = true;\r\n\r\n if (self.loop) {\r\n $audioMedia.loop = true;\r\n }\r\n\r\n $media = $audioMedia;\r\n }\r\n\r\n // Duration is per item condition\r\n if (self.render === 'html' || self.mediaType === 'ticker') {\r\n /* Check if the ticker duration is based on the number of items in the feed */\r\n if (self.options['durationisperitem'] === '1') {\r\n const regex = new RegExp('<!-- NUMITEMS=(.*?) -->');\r\n\r\n (async () => {\r\n let html = await fetchJSON(`${tmpUrl}&width=${self.divWidth}&height=${self.divHeight}`);\r\n console.debug({html});\r\n const res = regex.exec(html);\r\n\r\n if (res !== null) {\r\n self.duration = parseInt(String(self.duration)) * parseInt(res[1]);\r\n }\r\n })();\r\n }\r\n }\r\n\r\n // Check if the media has fade-in/out transitions\r\n if (Boolean(self.options['transin']) && Boolean(self.options['transinduration'])) {\r\n const transInDuration = Number(self.options.transinduration);\r\n const fadeInTrans = transitionElement('fadeIn', { duration: transInDuration });\r\n $media.animate(fadeInTrans.keyframes, fadeInTrans.timing);\r\n }\r\n\r\n // Add media to the region\r\n // Second media if exists, will be off-canvas\r\n // All added media will be hidden by default\r\n // It will start showing when region.nextMedia() function is called\r\n\r\n // When there's only 1 item and loop = false, don't remove the item but leave it at its last state\r\n // For image, and only 1 item, it should still have the transition for next state\r\n // Add conditions for video duration being 0 or 1 and also the loop property\r\n // For video url, we have to create a URL out of the XLF video URL\r\n\r\n /**\r\n * @DONE\r\n * Case 1: Video duration = 0, this will play the video for its entire duration\r\n * Case 2: Video duration is set > 0 and loop = false\r\n * E.g. Set duration = 100s, video duration = 62s\r\n * the video will play until 62s and will stop to its last frame until 100s\r\n * After 100s, it will expire\r\n * Case 3: Video duration is set > 0 and loop = true\r\n * E.g. Set duration = 100s, video duration = 62s, loop = true\r\n * the video will play until 62s and will loop through until the remaining 38s\r\n * to complete the 100s set duration\r\n */\r\n\r\n // Add html node to media for\r\n self.html = $media;\r\n };\r\n\r\n mediaObject.run = function() {\r\n const self = this;\r\n let transInDuration = 1;\r\n let transInDirection: compassPoints = 'E';\r\n\r\n if (Boolean(self.options['transinduration'])) {\r\n transInDuration = Number(self.options.transinduration);\r\n }\r\n\r\n if (Boolean(self.options['transindirection'])) {\r\n transInDirection = self.options.transindirection;\r\n }\r\n\r\n let defaultTransInOptions: TransitionElementOptions = {duration: transInDuration};\r\n let transIn = transitionElement('defaultIn', {duration: defaultTransInOptions.duration});\r\n \r\n if (Boolean(self.options['transin'])) {\r\n let transInName = self.options['transin'];\r\n\r\n if (transInName === 'fly') {\r\n transInName = `${transInName}In`;\r\n defaultTransInOptions.keyframes = flyTransitionKeyframes({\r\n trans: 'in',\r\n direction: transInDirection,\r\n height: self.divHeight,\r\n width: self.divWidth,\r\n });\r\n }\r\n\r\n transIn = transitionElement(transInName, defaultTransInOptions);\r\n }\r\n\r\n const showCurrentMedia = async () => {\r\n let $mediaId = getMediaId(self);\r\n let $media = document.getElementById($mediaId);\r\n const isCMS = xlr.config.platform === 'CMS';\r\n\r\n if (!$media) {\r\n $media = getNewMedia();\r\n }\r\n\r\n if ($media) {\r\n $media.style.setProperty('display', 'block');\r\n\r\n if (Boolean(self.options['transin'])) {\r\n $media.animate(transIn.keyframes, transIn.timing);\r\n }\r\n\r\n if (self.mediaType === 'image' && self.url !== null) {\r\n ($media as HTMLImageElement).style\r\n .setProperty(\r\n 'background-image',\r\n `url(${!isCMS ? self.url : await getDataBlob(self.url)}`\r\n );\r\n } else if (self.mediaType === 'video' && self.url !== null) {\r\n ($media as HTMLVideoElement).src = await preloadMediaBlob(self.url, self.mediaType);\r\n } else if (self.mediaType === 'audio' && self.url !== null) {\r\n ($media as HTMLAudioElement).src =\r\n isCMS ? await preloadMediaBlob(self.url, self.mediaType) : self.url;\r\n } else if ((self.render === 'html' || self.mediaType === 'webpage') &&\r\n self.iframe && self.checkIframeStatus\r\n ) {\r\n // Set state as false ( for now )\r\n self.ready = false;\r\n\r\n // Append iframe\r\n $media.innerHTML = '';\r\n $media.appendChild(self.iframe as Node);\r\n\r\n // On iframe load, set state as ready to play full preview\r\n // (self.iframe) && self.iframe.addEventListener('load', function(){\r\n // self.ready = true;\r\n // if (self.iframe) {\r\n // const iframeStyles = self.iframe.style.cssText;\r\n // self.iframe.style.cssText = iframeStyles?.concat('visibility: visible;');\r\n // }\r\n // });\r\n }\r\n\r\n self.emitter.emit('start', self);\r\n }\r\n };\r\n const getNewMedia = (): HTMLElement | null => {\r\n const $region = document.getElementById(`${self.region.containerName}`);\r\n // This function is for checking whether\r\n // the region still has to show a media item\r\n // when another region is not finished yet\r\n if (self.region.complete && !self.region.layout.allEnded) {\r\n // Add currentMedia to the region\r\n\r\n ($region) && $region.insertBefore(self.html as Node, $region.lastElementChild);\r\n\r\n return self.html as HTMLElement;\r\n }\r\n\r\n return null;\r\n };\r\n\r\n showCurrentMedia();\r\n };\r\n\r\n mediaObject.stop = async function() {\r\n const self = mediaObject;\r\n const $media = document.getElementById(getMediaId(self));\r\n\r\n if ($media) {\r\n $media.style.display = 'none';\r\n $media.remove();\r\n }\r\n };\r\n\r\n mediaObject.init();\r\n\r\n return mediaObject;\r\n}","/*\r\n * Copyright (C) 2024 Xibo Signage Ltd\r\n *\r\n * Xibo - Digital Signage - https://www.xibosignage.com\r\n *\r\n * This file is part of Xibo.\r\n *\r\n * Xibo is free software: you can redistribute it and/or modify\r\n * it under the terms of the GNU Lesser General Public License as published by\r\n * the Free Software Foundation, either version 3 of the License, or\r\n * any later version.\r\n *\r\n * Xibo is distributed in the hope that it will be useful,\r\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n * GNU Lesser General Public License for more details.\r\n *\r\n * You should have received a copy of the GNU Lesser General Public License\r\n * along with Xibo. If not, see <http://www.gnu.org/licenses/>.\r\n */\r\nimport { createNanoEvents } from 'nanoevents';\r\nimport { ILayout, OptionsType } from '../../Types/Layout';\r\nimport { initialRegion, IRegion, IRegionEvents } from '../../Types/Region';\r\nimport { IMedia } from '../../Types/Media';\r\nimport { getMediaId, nextId } from '../Generators';\r\nimport { platform } from '../Platform';\r\nimport { Media } from '../Media';\r\nimport {\r\n TransitionElementOptions,\r\n TransitionNameType,\r\n compassPoints,\r\n flyTransitionKeyframes,\r\n transitionElement,\r\n} from '../Transitions';\r\nimport {IXlr} from '../../Types/XLR';\r\nimport { getAllAttributes } from '../Generators/Generators';\r\n\r\nexport default function Region(\r\n layout: ILayout,\r\n xml: Element,\r\n regionId: string,\r\n options: OptionsType,\r\n xlr: IXlr,\r\n) {\r\n const props = {\r\n layout: layout,\r\n xml: xml,\r\n regionId: regionId,\r\n options: options,\r\n }\r\n const emitter = createNanoEvents<IRegionEvents>();\r\n let regionObject: IRegion = {\r\n ...initialRegion,\r\n ...props,\r\n };\r\n\r\n regionObject.prepareRegion = function() {\r\n const self = regionObject;\r\n const {layout, options} = self;\r\n self.complete = false;\r\n self.ending = false;\r\n self.ended = false;\r\n self.id = props.regionId;\r\n self.uniqueId = `${nextId(self.options as OptionsType & IRegion[\"options\"])}`;\r\n self.options = {...platform, ...props.options};\r\n self.containerName = `R-${self.id}-${self.uniqueId}`;\r\n self.xml = props.xml;\r\n self.mediaObjects = [];\r\n\r\n self.sWidth = (self.xml) && Number(self.xml?.getAttribute('width')) * layout.scaleFactor;\r\n self.sHeight = (self.xml) && Number(self.xml?.getAttribute('height')) * layout.scaleFactor;\r\n self.offsetX = (self.xml) && Number(self.xml?.getAttribute('left')) * layout.scaleFactor;\r\n self.offsetY = (self.xml) && Number(self.xml?.getAttribute('top')) * layout.scaleFactor;\r\n self.zIndex = (self.xml) && Number(self.xml?.getAttribute('zindex'));\r\n \r\n const regionOptions = self.xml?.getElementsByTagName('options');\r\n\r\n if (regionOptions) {\r\n for (let _options of Array.from(regionOptions)) {\r\n // Get options\r\n const _regionOptions = _options.children;\r\n for (let regionOption of Array.from(_regionOptions)) {\r\n self.options[regionOption.nodeName.toLowerCase()] = regionOption.textContent;\r\n }\r\n }\r\n }\r\n\r\n\r\n let $region = document.getElementById(self.containerName);\r\n const $layout = document.getElementById(`${self.layout.containerName}`);\r\n\r\n if ($region === null) {\r\n $region = document.createElement('div');\r\n $region.id = self.containerName;\r\n }\r\n\r\n ($layout) && $layout.appendChild($region);\r\n\r\n /* Scale the Layout Container */\r\n /* Add region styles */\r\n $region.style.cssText = `\r\n width: ${self.sWidth}px;\r\n height: ${self.sHeight}px;\r\n position: absolute;\r\n left: ${self.offsetX}px;\r\n top: ${self.offsetY}px;\r\n z-index: ${Math.round(self.zIndex)};\r\n `;\r\n $region.className = 'region--item';\r\n\r\n /* Parse region media objects */\r\n const regionMediaItems = Array.from(self.xml.getElementsByTagName('media'));\r\n self.totalMediaObjects = regionMediaItems.length;\r\n\r\n Array.from(regionMediaItems).forEach((mediaXml, indx) => {\r\n const mediaObj = Media(\r\n self,\r\n mediaXml?.getAttribute('id') || '',\r\n mediaXml,\r\n options as OptionsType & IRegion[\"options\"],\r\n xlr,\r\n );\r\n\r\n mediaObj.index = indx;\r\n self.mediaObjects.push(mediaObj);\r\n });\r\n\r\n\r\n // Add media to region for targetted actions\r\n self.layout.actionController?.actions.forEach((action) => {\r\n const attributes = getAllAttributes(action.xml);\r\n\r\n if (attributes.target.value === 'region' &&\r\n attributes.actionType.value === 'navWidget' &&\r\n attributes.targetId.value == self.id\r\n ) {\r\n const drawerMediaItems = Array.from(self.layout.drawer?.getElementsByTagName('media') || []);\r\n \r\n drawerMediaItems.forEach((drawerMedia) => {\r\n if (drawerMedia.id === attributes.widgetId.value) {\r\n // Add drawer media to the region\r\n self.mediaObjectsActions.push(Media(\r\n self,\r\n drawerMedia?.getAttribute('id') || '',\r\n drawerMedia as Element,\r\n options as OptionsType & IRegion['options'],\r\n xlr,\r\n ));\r\n }\r\n });\r\n }\r\n });\r\n\r\n self.prepareMediaObjects();\r\n };\r\n\r\n regionObject.finished = function() {\r\n const self = regionObject;\r\n console.debug('Region::finished called . . . ', self.id);\r\n // Mark as complete\r\n self.complete = true;\r\n self.layout.regions[regionObject.index] = regionObject;\r\n self.layout.regionExpired();\r\n };\r\n\r\n regionObject.prepareMediaObjects = function() {\r\n const self = regionObject;\r\n let nextMediaIndex;\r\n\r\n if (self.mediaObjects.length > 0) {\r\n\r\n if (self.curMedia) {\r\n self.oldMedia = self.curMedia;\r\n } else {\r\n self.oldMedia = undefined;\r\n }\r\n\r\n if (self.currentMediaIndex >= self.mediaObjects.length) {\r\n self.currentMediaIndex = 0;\r\n }\r\n\r\n self.curMedia = self.mediaObjects[self.currentMediaIndex];\r\n\r\n nextMediaIndex = self.currentMediaIndex + 1;\r\n\r\n if (nextMediaIndex >= self.mediaObjects.length ||\r\n (\r\n !Boolean(self.mediaObjects[nextMediaIndex]) &&\r\n self.mediaObjects.length === 1\r\n )\r\n ) {\r\n nextMediaIndex = 0;\r\n }\r\n\r\n if (Boolean(self.mediaObjects[nextMediaIndex])) {\r\n self.nxtMedia = self.mediaObjects[nextMediaIndex];\r\n }\r\n\r\n const $region = document.getElementById(`${self.containerName}`);\r\n // Append available media to region DOM\r\n if (self.curMedia) {\r\n ($region) && $region.insertBefore(self.curMedia.html as Node, $region.lastElementChild);\r\n }\r\n\r\n if (self.nxtMedia) {\r\n ($region) && $region.insertBefore(self.nxtMedia.html as Node, $region.lastElementChild);\r\n }\r\n }\r\n };\r\n\r\n regionObject.run = function() {\r\n console.debug('Called Region::run > ', regionObject.id);\r\n\r\n // Reset region states\r\n regionObject.reset();\r\n\r\n if (regionObject.curMedia) {\r\n regionObject.transitionNodes(regionObject.oldMedia, regionObject.curMedia);\r\n }\r\n };\r\n\r\n regionObject.transitionNodes = function(oldMedia: IMedia | undefined, newMedia: IMedia | undefined) {\r\n const self = regionObject;\r\n let transOutDuration = 1;\r\n let transOutDirection: compassPoints = 'E';\r\n\r\n if (newMedia) {\r\n if (oldMedia && Boolean(oldMedia.options['transoutduration'])) {\r\n transOutDuration = Number(oldMedia.options.transoutduration);\r\n }\r\n\r\n if (oldMedia && Boolean(oldMedia.options['transoutdirection'])) {\r\n transOutDirection = oldMedia.options.transoutdirection;\r\n }\r\n \r\n let defaultTransOutOptions: TransitionElementOptions = {duration: transOutDuration};\r\n let transOut = transitionElement('defaultOut', {duration: defaultTransOutOptions.duration});\r\n \r\n let transOutName: TransitionNameType | string;\r\n if (oldMedia && Boolean(oldMedia.options['transout'])) {\r\n transOutName = oldMedia.options['transout'];\r\n \r\n if (transOutName === 'fly') {\r\n transOutName = `${transOutName}Out`;\r\n defaultTransOutOptions.keyframes = flyTransitionKeyframes({\r\n trans: 'out',\r\n direction: transOutDirection,\r\n height: oldMedia.divHeight,\r\n width: oldMedia.divWidth,\r\n });\r\n }\r\n \r\n transOut = transitionElement(transOutName as TransitionNameType, defaultTransOutOptions);\r\n }\r\n \r\n const hideOldMedia = new Promise((resolve) => {\r\n // Hide oldMedia\r\n if (oldMedia) {\r\n const $oldMedia = document.getElementById(getMediaId(oldMedia));\r\n if ($oldMedia) {\r\n const removeOldMedia = () => {\r\n $oldMedia.style.setProperty('display', 'none');\r\n $oldMedia.remove();\r\n };\r\n\r\n let oldMediaAnimate: any;\r\n if (Boolean(oldMedia.options['transout'])) {\r\n oldMediaAnimate = $oldMedia.animate(transOut.keyframes, transOut.timing);\r\n }\r\n\r\n if (Boolean(oldMedia.options['transout']) && self.totalMediaObjects > 1) {\r\n if (transOutName === 'flyOut') {\r\n // Reset last item to original position and state\r\n oldMediaAnimate ? oldMediaAnimate.finished\r\n .then(() => {\r\n resolve(true);\r\n oldMediaAnimate?.effect?.updateTiming({fill: 'none'});\r\n removeOldMedia();\r\n }) : undefined;\r\n } else {\r\n setTimeout(removeOldMedia, transOutDuration / 2);\r\n resolve(true);\r\n }\r\n } else {\r\n removeOldMedia();\r\n // Resolve this right away\r\n // As a result, the transition between two media object\r\n // seems like a cross-over\r\n resolve(true);\r\n\r\n }\r\n }\r\n }\r\n });\r\n \r\n if (oldMedia) {\r\n hideOldMedia.then((isDone) => {\r\n if (isDone) {\r\n newMedia.run();\r\n }\r\n });\r\n } else {\r\n newMedia.run();\r\n }\r\n }\r\n };\r\n\r\n regionObject.playNextMedia = function() {\r\n const self = regionObject;\r\n /* The current media has finished running */\r\n if (self.ended) {\r\n return;\r\n }\r\n\r\n if (self.currentMediaIndex === self.mediaObjects.length - 1) {\r\n self.finished();\r\n\r\n if (self.layout.allEnded) {\r\n return;\r\n }\r\n }\r\n\r\n // When the region has completed and when currentMedia is html\r\n // Then, preserve the currentMedia state\r\n if (self.complete &&\r\n self.curMedia?.render === 'html'\r\n ) {\r\n return;\r\n }\r\n\r\n // When the region has completed and mediaObjects.length = 1\r\n // and curMedia.loop = false, then put the media on\r\n // its current state\r\n if (self.complete && self.mediaObjects.length === 1 &&\r\n self.curMedia?.render !== 'html' &&\r\n self.curMedia?.mediaType === 'image' &&\r\n !self.curMedia?.loop\r\n ) {\r\n return;\r\n }\r\n\r\n self.currentMediaIndex = self.currentMediaIndex + 1;\r\n self.prepareMediaObjects();\r\n\r\n console.debug('region::playNextMedia', self);\r\n self.transitionNodes(self.oldMedia, self.curMedia);\r\n };\r\n \r\n regionObject.playPreviousMedia = function() {\r\n const self = regionObject;\r\n self.currentMediaIndex = self.currentMediaIndex - 1;\r\n\r\n if(self.currentMediaIndex < 0 || self.ended) {\r\n self.currentMediaIndex = 0;\r\n return;\r\n }\r\n\r\n self.prepareMediaObjects();\r\n\r\n console.debug('region::playPreviousMedia', self);\r\n /* Do the transition */\r\n self.transitionNodes(self.oldMedia, self.curMedia);\r\n };\r\n\r\n regionObject.end = function() {\r\n const self = regionObject;\r\n self.ending = true;\r\n /* The Layout has finished running */\r\n /* Do any region exit transition then clean up */\r\n self.layout.regions[self.index] = self;\r\n\r\n console.debug('Calling Region::end ', self);\r\n self.exitTransition();\r\n };\r\n\r\n regionObject.exitTransition = function() {\r\n const self = regionObject;\r\n /* TODO: Actually implement region exit transitions */\r\n const $region = document.getElementById(`${self.containerName}`);\r\n\r\n if ($region) {\r\n $region.style.display = 'none';\r\n }\r\n\r\n console.debug('Called Region::exitTransition ', self.id);\r\n\r\n self.exitTransitionComplete();\r\n };\r\n\r\n regionObject.exitTransitionComplete = function() {\r\n const self = regionObject;\r\n console.debug('Called Region::exitTransitionComplete ', self.id);\r\n self.ended = true;\r\n self.layout.regions[self.index] = self;\r\n self.layout.regionEnded();\r\n };\r\n\r\n regionObject.reset = function() {\r\n regionObject.ended = false;\r\n regionObject.complete = false;\r\n regionObject.ending = false;\r\n console.debug('Resetting region states', regionObject);\r\n };\r\n\r\n regionObject.on = function<E extends keyof IRegionEvents>(event: E, callback: IRegionEvents[E]) {\r\n return emitter.on(event, callback);\r\n };\r\n\r\n regionObject.emitter = emitter;\r\n\r\n regionObject.prepareRegion();\r\n\r\n return regionObject;\r\n}","/*\n * Copyright (C) 2024 Xibo Signage Ltd\n *\n * Xibo - Digital Signage - https://www.xibosignage.com\n *\n * This file is part of Xibo.\n *\n * Xibo is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * any later version.\n *\n * Xibo is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * along with Xibo. If not, see <http://www.gnu.org/licenses/>.\n */\n// import Moveable from 'moveable';\nimport { ILayout, IMedia, IRegion, OptionsType } from '../../types';\nimport { getAllAttributes, nextId } from '../Generators/Generators';\nimport './action-controller.css';\n\nexport class Action {\n readonly id: string;\n readonly xml: Element;\n\n constructor(id: string, xml: Element) {\n this.id = id;\n this.xml = xml;\n }\n}\n\nexport class ActionsWrapper extends HTMLDivElement {\n constructor() {\n super();\n\n this.classList.add('action-controller', 'noselect');\n }\n}\n\ncustomElements.define('action-controller', ActionsWrapper, { extends: 'div' });\n\nexport type InactOptions = {\n [k: string]: any;\n} & OptionsType['previewTranslations'];\n\nexport default class ActionController {\n readonly parent: ILayout;\n readonly actions: Action[];\n readonly options: InactOptions;\n readonly $actionController: ActionsWrapper;\n readonly $actionListContainer: Element | null;\n translations: any = {};\n\n constructor(parent: ILayout, actions: Action[], options: InactOptions) {\n this.parent = parent;\n this.actions = actions;\n this.options = options;\n this.$actionController = document.createElement('div', { is: 'action-controller' });\n this.$actionListContainer = null;\n\n this.init();\n }\n\n init() {\n const self = this;\n let previewTranslations: any = {};\n\n // get preview translations\n if ('previewTranslations' in window) {\n previewTranslations = window['previewTranslations'];\n self.translations = previewTranslations;\n }\n \n const $container = document.getElementById(this.parent.containerName);\n const $actionTitle = document.createElement('div');\n const $actionsContainer = document.createElement('div');\n\n $actionTitle.classList.add('action-controller-title');\n $actionTitle.innerHTML = `\n <button class=\"toggle\"></button>\n <span class=\"title\">${previewTranslations.actionControllerTitle}</span>\n `;\n\n $actionsContainer.classList.add('actions-container');\n\n if ($container) {\n $container.insertBefore(this.$actionController, $container.firstElementChild);\n \n this.$actionController.appendChild($actionTitle);\n this.$actionController.appendChild($actionsContainer);\n\n // Loop through actions\n Array.from(this.actions).forEach(function(newAction) {\n // Create new action object\n const $newAction = document.createElement('div');\n\n // Copy element attributes\n const attributes = getAllAttributes(newAction.xml);\n\n Array.from(Object.keys(attributes)).forEach((attribKey) => {\n $newAction.setAttribute(`data-${attribKey}`, attributes[attribKey].value);\n $newAction.setAttribute(attribKey, attributes[attribKey].value);\n });\n\n // Build html for the new action\n let html = '';\n\n // Add action type\n html += '<span class=\"action-row-title\">' + previewTranslations[$newAction.getAttribute('actiontype') || ''];\n\n if ($newAction.getAttribute('actiontype') == 'navWidget') {\n html += ' <span title=\"' + previewTranslations.widgetId + '\">[' + $newAction.getAttribute('widgetid') + ']</span>';\n } else if ($newAction.getAttribute('actiontype') == 'navLayout') {\n html += ' <span title=\"' + previewTranslations.layoutCode + '\">[' + $newAction.getAttribute('layoutcode') + ']</span>';\n }\n html += '</span>';\n\n // Add target\n html += '<span class=\"action-row-target\" title=\"' + previewTranslations.target + '\">' + $newAction.getAttribute('target');\n if ($newAction.getAttribute('targetid') != '') {\n html += '(' + $newAction.getAttribute('targetid') + $newAction.getAttribute('layoutcode') + ')';\n }\n html += '</span>';\n \n // Add HTML string to the action\n $newAction.innerHTML = html;\n\n // Append new action to the controller\n $newAction.classList.add('action');\n $newAction.setAttribute('originalid', newAction.id);\n $newAction.setAttribute('id', 'A-' + newAction.id + '-' + nextId(self.options as OptionsType));\n $actionsContainer.insertBefore($newAction, $actionsContainer.lastElementChild);\n });\n\n // \n // Enable dragging\n // const $draggableContainer = new Moveable($container, {\n // target: this.$actionController,\n // draggable: true,\n // });\n\n // Toggle actions visibility\n const $actionsToggler = this.$actionController.querySelector<HTMLElement>('.toggle');\n \n if ($actionsToggler) {\n $actionsToggler.onclick = function() {\n self.$actionController.classList.toggle('d-none');\n };\n }\n\n const $webhookActions = this.$actionController.querySelectorAll<HTMLElement>('.action[triggertype=\"webhook\"]');\n // Display according to the number of clickable actions\n this.$actionController.style.setProperty(\n 'display',\n $webhookActions.length === 0 ?\n 'none' : 'flex'\n );\n\n // Handle webhook action trigger click\n if ($webhookActions.length > 0) {\n $webhookActions.forEach(($webhookAction) => {\n $webhookAction.onclick = function(event: Event) {\n event.stopPropagation();\n self.runAction($webhookAction.dataset, self.options);\n };\n $webhookAction.classList.add('clickable');\n });\n }\n }\n }\n\n openLayoutInNewTab(layoutCode: string, options: InactOptions) {\n if(confirm(this.translations.navigateToLayout.replace('[layoutTag]', layoutCode))) {\n var url = options.layoutPreviewUrl.replace('[layoutCode]', layoutCode) + '?findByCode=1';\n window.open(url, '_blank');\n }\n }\n\n /** Change media in region (next/previous) */\n nextMediaInRegion(regionId: string, actionType: string) {\n // Find target region\n this.parent.regions.forEach((regionObj) => {\n if (regionObj.id === regionId) {\n if (actionType === 'next') {\n regionObj.playNextMedia();\n } else {\n regionObj.playPreviousMedia();\n }\n }\n });\n }\n\n loadMediaInRegion(regionId: string, widgetId: string) {\n const self = this;\n // Find target region\n let targetRegion: IRegion | undefined;\n \n self.parent.regions.forEach((regionObj) => {\n if (regionObj.id === regionId) {\n targetRegion = regionObj;\n }\n });\n\n // Find media in actions\n let targetMedia: IMedia | undefined;\n if (targetRegion) {\n targetRegion.mediaObjectsActions.forEach((media) => {\n if (media.id === widgetId) {\n targetMedia = media;\n }\n });\n }\n\n // Mark media as temporary (removed after region stop playing or loops)\n if (targetMedia) {\n targetMedia.singlePlay = true;\n }\n\n // If region is empty, remove the background color and empty message\n if (targetRegion?.mediaObjects.length === 0) {\n targetRegion.complete = false;\n }\n\n // Create media in region and play it next\n targetRegion?.mediaObjects.splice(targetRegion.currentMediaIndex + 1, 0, targetMedia as IMedia);\n targetRegion?.playNextMedia();\n }\n\n /** Run action based on action data */\n runAction(actionData: {[k: string]: any}, options: InactOptions) {\n if(actionData.actiontype == 'navLayout') {\n // Open layout preview in a new tab\n this.openLayoutInNewTab(actionData.layoutcode, options);\n } else if((actionData.actiontype == 'previous' || actionData.actiontype == 'next') && actionData.target == 'region') {\n this.nextMediaInRegion(actionData.targetid, actionData.actiontype);\n } else if(actionData.actiontype == 'navWidget' && actionData.target == 'region') {\n this.loadMediaInRegion(actionData.targetid, actionData.widgetid);\n } else {\n // TODO Handle other action types ( later? )\n console.log(actionData.actiontype + ' > ' + actionData.target + '[' + actionData.targetid + ']');\n }\n };\n\n initTouchActions() {\n const self = this;\n\n this.$actionController.querySelectorAll<HTMLElement>('.action[triggerType=\"touch\"]').forEach(function($el) {\n const dataset = $el.dataset;\n\n // Find source object\n let $sourceObj;\n\n if (dataset.source === 'layout') {\n $sourceObj = document.getElementById(self.parent.containerName);\n } else {\n const regionObjects = Array.from(self.parent.regions);\n\n // Loop through layout regions\n for (const regionObj of regionObjects) {\n if (dataset.source === 'region') {\n // Try to find the region\n if (regionObj.id === dataset.sourceid) {\n $sourceObj = document.getElementById(regionObj.containerName);\n break;\n }\n } else if (dataset.source === 'widget') {\n // Try to find widget/media\n const mediaObjects = Array.from(regionObj.mediaObjects);\n\n for (const mediaObject of mediaObjects) {\n if (mediaObject.id === dataset.sourceid) {\n $sourceObj = document.getElementById(mediaObject.containerName);\n break;\n }\n }\n }\n\n // Break loop if we already have a $sourceObj\n if ($sourceObj != undefined) {\n break;\n }\n }\n }\n\n // Handle source click\n // FIXME: We need to handle the case where a drawer widget has an action and it has been loaded to the preview\n if($sourceObj != undefined) {\n $sourceObj.onclick = function(ev: Event) {\n ev.stopPropagation();\n self.runAction(dataset, self.options);\n };\n $sourceObj.classList.add('clickable');\n }\n });\n }\n}\n","/*\r\n * Copyright (C) 2024 Xibo Signage Ltd\r\n *\r\n * Xibo - Digital Signage - https://www.xibosignage.com\r\n *\r\n * This file is part of Xibo.\r\n *\r\n * Xibo is free software: you can redistribute it and/or modify\r\n * it under the terms of the GNU Lesser General Public License as published by\r\n * the Free Software Foundation, either version 3 of the License, or\r\n * any later version.\r\n *\r\n * Xibo is distributed in the hope that it will be useful,\r\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n * GNU Lesser General Public License for more details.\r\n *\r\n * You should have received a copy of the GNU Lesser General Public License\r\n * along with Xibo. If not, see <http://www.gnu.org/licenses/>.\r\n */\r\nimport {createNanoEvents} from 'nanoevents';\r\nimport {\r\n GetLayoutParamType,\r\n GetLayoutType,\r\n ILayout,\r\n initialLayout,\r\n OptionsType,\r\n} from '../../Types/Layout';\r\nimport { IXlr } from '../../Types/XLR';\r\nimport { nextId } from '../Generators';\r\nimport { Region } from '../Region';\r\n\r\nimport './layout.css';\r\nimport {composeBgUrlByPlatform, getIndexByLayoutId} from '../Generators/Generators';\r\nimport ActionController, { Action } from '../ActionController';\r\n\r\nconst playAgainClickHandle = function(ev: { preventDefault: () => void; }) {\r\n ev.preventDefault();\r\n history.go(0);\r\n};\r\n\r\nexport function initRenderingDOM(targetContainer: Element | null) {\r\n let _targetContainer = targetContainer;\r\n const previewPlayer = document.createElement('div');\r\n const previewScreen = document.createElement('div');\r\n const endPlay = document.createElement('div');\r\n const playAgainLink = document.createElement('a');\r\n\r\n // Preview player\r\n previewPlayer.className = 'player-preview';\r\n previewPlayer.id = 'player_container';\r\n\r\n // Preview screen\r\n previewScreen.className = 'screen-preview';\r\n previewScreen.id = 'screen_container';\r\n\r\n // Ended play\r\n endPlay.className = 'preview-ended';\r\n endPlay.id = 'play_ended';\r\n endPlay.style.display = 'none';\r\n\r\n // Play again link\r\n playAgainLink.id = 'play_back_preview';\r\n playAgainLink.className = 'play-back-preview';\r\n playAgainLink.style.cssText = 'text-decoration: none; color: #ffffff;';\r\n playAgainLink.innerHTML = 'Play again?';\r\n playAgainLink.removeEventListener('click', playAgainClickHandle);\r\n playAgainLink.addEventListener('click', playAgainClickHandle);\r\n\r\n if (!_targetContainer) {\r\n _targetContainer = document.body;\r\n }\r\n\r\n if (_targetContainer) {\r\n if (_targetContainer.querySelector('#player_container') === null) {\r\n _targetContainer.insertBefore(previewPlayer, _targetContainer.firstChild);\r\n\r\n if (previewPlayer.querySelector('#screen_container') === null) {\r\n previewPlayer.appendChild(previewScreen);\r\n }\r\n\r\n if (previewPlayer.querySelector('#play_ended') === null) {\r\n previewPlayer.appendChild(endPlay);\r\n\r\n if (endPlay.querySelector('a') === null) {\r\n endPlay.appendChild(playAgainLink);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport async function getXlf(layoutOptions: OptionsType) {\r\n let apiHost = window.location.origin;\r\n\r\n let xlfUrl = apiHost + layoutOptions.xlfUrl;\r\n let fetchOptions: RequestInit = {};\r\n\r\n if (layoutOptions.platform === 'CMS') {\r\n xlfUrl = apiHost + layoutOptions.xlfUrl;\r\n fetchOptions.mode = 'no-cors';\r\n } else if (layoutOptions.platform === 'chromeOS') {\r\n xlfUrl = layoutOptions.xlfUrl;\r\n fetchOptions.mode = 'cors';\r\n fetchOptions.headers = {\r\n 'Content-Type': 'text/xml',\r\n };\r\n } else if (layoutOptions.platform !== 'CMS' && layoutOptions.appHost !== null) {\r\n xlfUrl = layoutOptions.appHost + layoutOptions.xlfUrl;\r\n }\r\n\r\n const res = await fetch(xlfUrl);\r\n\r\n return await res.text();\r\n}\r\n\r\nexport function handleAxiosError(error: any, message?: string) {\r\n console.error(error);\r\n if (error.response.status == 500) {\r\n // SOAP responses are always 500's\r\n // Return the body\r\n throw new Error(error.response.data);\r\n } else {\r\n throw new Error(message || 'Unknown Error');\r\n }\r\n}\r\n\r\nexport function getLayout(params: GetLayoutParamType): GetLayoutType {\r\n let _currentLayout = undefined;\r\n let _nextLayout = undefined;\r\n let {\r\n inputLayouts,\r\n currentLayout,\r\n nextLayout,\r\n currentLayoutIndex: currLayoutIndx\r\n } = params.xlr;\r\n const hasLayout = inputLayouts.length > 0;\r\n let currentLayoutIndex = currLayoutIndx;\r\n let nextLayoutIndex = currentLayoutIndex + 1;\r\n\r\n if (currentLayout === undefined && nextLayout === undefined) {\r\n let activeLayout;\r\n // Preview just got started\r\n if (hasLayout) {\r\n let nextLayoutTemp = {...initialLayout};\r\n activeLayout = inputLayouts[currentLayoutIndex];\r\n _currentLayout = {...initialLayout, ...activeLayout};\r\n\r\n if (inputLayouts.length > 1) {\r\n nextLayoutTemp = {...nextLayoutTemp, ...inputLayouts[nextLayoutIndex]};\r\n _nextLayout = nextLayoutTemp;\r\n } else {\r\n _nextLayout = _currentLayout;\r\n }\r\n\r\n _currentLayout.id = activeLayout.layoutId;\r\n\r\n if (nextLayoutTemp) {\r\n _nextLayout.id = nextLayoutTemp.layoutId;\r\n }\r\n }\r\n } else {\r\n if (hasLayout) {\r\n _currentLayout = nextLayout;\r\n\r\n currentLayoutIndex = getIndexByLayoutId(inputLayouts, _currentLayout?.layoutId).index as number;\r\n nextLayoutIndex = currentLayoutIndex + 1;\r\n\r\n if (inputLayouts.length > 1 && nextLayoutIndex < inputLayouts.length) {\r\n if (Boolean(params.xlr.layouts[nextLayoutIndex])) {\r\n _nextLayout = params.xlr.layouts[nextLayoutIndex];\r\n } else {\r\n _nextLayout = {...initialLayout, ...inputLayouts[nextLayoutIndex]};\r\n }\r\n }\r\n\r\n // If _nextLayout is undefined, then we go back to first layout\r\n if (_nextLayout === undefined) {\r\n _nextLayout = params.xlr.layouts[0];\r\n }\r\n }\r\n }\r\n\r\n return {\r\n currentLayoutIndex,\r\n inputLayouts: params.xlr.inputLayouts,\r\n current: _currentLayout,\r\n next: _nextLayout,\r\n }\r\n}\r\n\r\nexport interface ILayoutEvents {\r\n start: (layout: ILayout) => void;\r\n end: (layout: ILayout) => void;\r\n}\r\n\r\nexport default function Layout(\r\n data: Document | null,\r\n options: OptionsType,\r\n xlr: IXlr,\r\n layout?: ILayout\r\n) {\r\n const props = {\r\n data: data,\r\n options: options,\r\n layout: layout || initialLayout,\r\n }\r\n const emitter = createNanoEvents<ILayoutEvents>();\r\n\r\n emitter.on('start', (layout: ILayout) => {\r\n layout.done = false;\r\n console.debug('Layout start emitted > Layout ID > ', layout.id);\r\n });\r\n\r\n emitter.on('end', async (layout: ILayout) => {\r\n console.debug('Ending layout with ID of > ', layout.layoutId);\r\n /* Remove layout that has ended */\r\n const $layout = document.getElementById(layout.containerName);\r\n\r\n layout.done = true;\r\n console.debug({$layout});\r\n\r\n if ($layout !== null) {\r\n $layout.remove();\r\n }\r\n\r\n if (xlr.config.platform !== 'CMS') {\r\n // Transition next layout to current layout and prepare next layout if exist\r\n xlr.prepareLayouts().then((parent) => {\r\n xlr.playSchedules(parent);\r\n });\r\n }\r\n });\r\n\r\n const layoutObject: ILayout = {\r\n ...props.layout,\r\n options: props.options,\r\n };\r\n\r\n layoutObject.on = function<E extends keyof ILayoutEvents>(event: E, callback: ILayoutEvents[E]) {\r\n return emitter.on(event, callback);\r\n };\r\n layoutObject.emitter = emitter;\r\n\r\n layoutObject.run = function() {\r\n const layout = layoutObject;\r\n const $layoutContainer = document.getElementById(`${layout.containerName}`);\r\n const $splashScreen = document.getElementById(`splash_${layout.id}`);\r\n\r\n if ($layoutContainer) {\r\n $layoutContainer.style.display = 'block';\r\n }\r\n\r\n if ($splashScreen) {\r\n $splashScreen.style.display = 'none';\r\n }\r\n\r\n console.debug('Layout running > Layout ID > ', layout.id);\r\n console.debug('Layout Regions > ', layout.regions);\r\n for (let i = 0; i < layout.regions.length; i++) {\r\n // playLog(4, \"debug\", \"Running region \" + self.regions[i].id, false);\r\n layout.regions[i].run();\r\n }\r\n };\r\n\r\n layoutObject.prepareLayout = function(){\r\n layoutObject.parseXlf();\r\n };\r\n\r\n layoutObject.parseXlf = function() {\r\n const layout = this;\r\n const {options} = layout;\r\n\r\n layout.done = false;\r\n layout.allEnded = false;\r\n layout.allExpired = false;\r\n layout.containerName = \"L\" + layout.id + \"-\" + nextId(options);\r\n layout.regions = [];\r\n\r\n /* Create a hidden div to show the layout in */\r\n let $layout = document.getElementById(layout.containerName);\r\n\r\n if ($layout === null) {\r\n $layout = document.createElement('div');\r\n $layout.id = layout.containerName;\r\n }\r\n\r\n let $screen = document.getElementById('screen_container');\r\n ($screen) && $screen.appendChild($layout);\r\n\r\n if ($layout) {\r\n $layout.style.display = 'none';\r\n if (xlr.config.platform === 'CMS') {\r\n $layout.style.outline = 'red solid thin';\r\n }\r\n }\r\n\r\n layout.layoutNode = props.data;\r\n\r\n /* Calculate the screen size */\r\n layout.sw = $screen?.offsetWidth || 0;\r\n layout.sh = $screen?.offsetHeight || 0;\r\n\r\n layout.xw = Number(layout.layoutNode?.firstElementChild?.getAttribute('width'));\r\n layout.xh = Number(layout.layoutNode?.firstElementChild?.getAttribute('height'));\r\n layout.zIndex = Number(layout.layoutNode?.firstElementChild?.getAttribute('zindex')) || 0;\r\n\r\n /* Calculate Scale Factor */\r\n layout.scaleFactor = Math.min((layout.sw / layout.xw), (layout.sh / layout.xh));\r\n layout.sWidth = layout.xw * layout.scaleFactor;\r\n layout.sHeight = layout.xh * layout.scaleFactor;\r\n layout.offsetX = Math.abs(layout.sw - layout.sWidth) / 2;\r\n layout.offsetY = Math.abs(layout.sh - layout.sHeight) / 2;\r\n\r\n /* Scale the Layout Container */\r\n if ($layout) {\r\n $layout.style.width = `${layout.sWidth}px`;\r\n $layout.style.height = `${layout.sHeight}px`;\r\n $layout.style.position = 'absolute';\r\n $layout.style.left = `${layout.offsetX}px`;\r\n $layout.style.top = `${layout.offsetY}px`;\r\n }\r\n\r\n if ($layout && layout.zIndex !== null) {\r\n $layout.style.zIndex = `${layout.zIndex}`;\r\n }\r\n\r\n /* Set the layout background */\r\n layout.bgColor = layout.layoutNode?.firstElementChild?.getAttribute('bgcolor') || '';\r\n layout.bgImage = layout.layoutNode?.firstElementChild?.getAttribute('background') || '';\r\n\r\n if (!(layout.bgImage === \"\" || typeof layout.bgImage === 'undefined')) {\r\n /* Extract the image ID from the filename */\r\n layout.bgId = layout.bgImage.substring(0, layout.bgImage.indexOf('.'));\r\n\r\n const bgImageUrl = composeBgUrlByPlatform(\r\n xlr.config.platform,\r\n {\r\n ...options,\r\n layout,\r\n }\r\n );\r\n\r\n if ($layout) {\r\n $layout.style.backgroundImage = `url(\"${bgImageUrl}\")`;\r\n $layout.style.backgroundRepeat = 'no-repeat';\r\n $layout.style.backgroundSize = `${layout.sWidth}px ${layout.sHeight}px`;\r\n $layout.style.backgroundPosition = '0px 0px';\r\n }\r\n }\r\n\r\n // Set the background color\r\n if ($layout && layout.bgColor) {\r\n $layout.style.backgroundColor = `${layout.bgColor}`;\r\n }\r\n\r\n // Hide if layout is not the currentLayout\r\n if ($layout && xlr.currentLayoutId !== undefined && xlr.currentLayoutId !== layout.id) {\r\n $layout.style.display = 'none';\r\n }\r\n\r\n // Create actions\r\n const layoutActions = Array.from(layout?.layoutNode?.getElementsByTagName('action') || []);\r\n Array.from(layoutActions).forEach((actionXml, indx) => {\r\n layout.actions.push(new Action(actionXml?.getAttribute('id') || '', actionXml));\r\n });\r\n\r\n // Create interactive actions\r\n layout.actionController = new ActionController(\r\n layout,\r\n layout.actions,\r\n options,\r\n );\r\n\r\n // Create drawer\r\n const layoutDrawers = Array.from(layout?.layoutNode?.getElementsByTagName('drawer') || []);\r\n\r\n Array.from(layoutDrawers).forEach((layoutDrawerXml) => {\r\n layout.drawer = layoutDrawerXml;\r\n });\r\n\r\n // Create regions\r\n const layoutRegions = Array.from(layout?.layoutNode?.getElementsByTagName('region') || []);\r\n\r\n Array.from(layoutRegions).forEach((regionXml, indx) => {\r\n const regionObj = Region(\r\n layout,\r\n regionXml,\r\n regionXml?.getAttribute('id') || '',\r\n options,\r\n xlr,\r\n );\r\n\r\n regionObj.index = indx;\r\n layout.regions.push(regionObj);\r\n });\r\n\r\n layout.actionController.initTouchActions();\r\n };\r\n\r\n layoutObject.regionExpired = function() {\r\n const self = layoutObject;\r\n self.allExpired = true;\r\n\r\n for (let layoutRegion of self.regions) {\r\n if (!layoutRegion.complete) {\r\n self.allExpired = false;\r\n }\r\n }\r\n\r\n if (self.allExpired) {\r\n self.end();\r\n }\r\n };\r\n\r\n layoutObject.regionEnded = function() {\r\n const self = layoutObject;\r\n self.allEnded = true;\r\n \r\n for (var i = 0; i < self.regions.length; i++) {\r\n if (! self.regions[i].ended) {\r\n self.allEnded = false;\r\n }\r\n }\r\n \r\n if (self.allEnded) {\r\n self.stopAllMedia().then(async () => {\r\n console.debug('starting to end layout . . .');\r\n if (xlr.config.platform === 'CMS') {\r\n const $end = document.getElementById('play_ended');\r\n const $preview = document.getElementById('screen_container');\r\n \r\n if ($preview) {\r\n while($preview.firstChild) {\r\n $preview.removeChild($preview.firstChild);\r\n }\r\n \r\n $preview.style.display = 'none';\r\n }\r\n \r\n if ($end) {\r\n $end.style.display = 'block';\r\n }\r\n }\r\n \r\n self.emitter.emit('end', self);\r\n });\r\n\r\n }\r\n };\r\n\r\n layoutObject.end = function() {\r\n console.debug('Executing Layout::end and Calling Region::end ', layoutObject);\r\n\r\n /* Ask the layout to gracefully stop running now */\r\n for (let layoutRegion of layoutObject.regions) {\r\n layoutRegion.end();\r\n }\r\n };\r\n\r\n layoutObject.stopAllMedia = function() {\r\n console.debug('Stopping all media . . .');\r\n return new Promise(async (resolve) => {\r\n for(var i = 0;i < layoutObject.regions.length;i++) {\r\n var region = layoutObject.regions[i];\r\n for(var j = 0;j < region.mediaObjects.length;j++) {\r\n var media = region.mediaObjects[j];\r\n await media.stop();\r\n }\r\n }\r\n\r\n resolve();\r\n });\r\n };\r\n\r\n layoutObject.prepareLayout();\r\n\r\n return layoutObject;\r\n}\r\n","/*\r\n * Copyright (C) 2024 Xibo Signage Ltd\r\n *\r\n * Xibo - Digital Signage - https://www.xibosignage.com\r\n *\r\n * This file is part of Xibo.\r\n *\r\n * Xibo is free software: you can redistribute it and/or modify\r\n * it under the terms of the GNU Lesser General Public License as published by\r\n * the Free Software Foundation, either version 3 of the License, or\r\n * any later version.\r\n *\r\n * Xibo is distributed in the hope that it will be useful,\r\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n * GNU Lesser General Public License for more details.\r\n *\r\n * You should have received a copy of the GNU Lesser General Public License\r\n * along with Xibo. If not, see <http://www.gnu.org/licenses/>.\r\n */\r\nimport {ILayout, InputLayoutType, OptionsType} from '../Layout';\r\nimport {platform} from '../../Modules/Platform';\r\n\r\nexport type PrepareLayoutsType = {\r\n moveNext?: boolean;\r\n};\r\n\r\nexport enum ELayoutType {\r\n CURRENT,\r\n NEXT,\r\n}\r\n\r\nexport interface IXlr {\r\n inputLayouts: InputLayoutType[],\r\n config: OptionsType,\r\n layouts: ILayout[],\r\n currentLayoutIndex: number;\r\n currentLayoutId: number | null;\r\n currentLayout: ILayout | undefined;\r\n nextLayout: ILayout | undefined;\r\n bootstrap(): void;\r\n init(): Promise<IXlr>;\r\n playSchedules(xlr: IXlr): void;\r\n prepareLayoutXlf(inputLayout: ILayout | undefined): Promise<ILayout>;\r\n prepareLayouts(): Promise<IXlr>;\r\n updateLayouts(inputLayouts: InputLayoutType[]): void;\r\n updateLoop(inputLayouts: InputLayoutType[]): void;\r\n}\r\n\r\nexport const initialXlr: IXlr = {\r\n inputLayouts: [],\r\n config: platform,\r\n layouts: [],\r\n currentLayoutIndex: 0,\r\n currentLayoutId: null,\r\n currentLayout: undefined,\r\n nextLayout: undefined,\r\n bootstrap() {\r\n },\r\n init() {\r\n return Promise.resolve(<IXlr>{});\r\n },\r\n playSchedules() {\r\n },\r\n prepareLayoutXlf(inputLayout: ILayout | undefined): Promise<ILayout> {\r\n return Promise.resolve(<ILayout>{});\r\n },\r\n prepareLayouts(): Promise<IXlr> {\r\n return Promise.resolve(<IXlr>{});\r\n },\r\n updateLayouts(inputLayouts: InputLayoutType[]) {\r\n },\r\n updateLoop(inputLayouts: InputLayoutType[]) {\r\n }\r\n};\r\n","var img = \"data:image/png;base64,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\";\n export default img;","var img = \"data:image/gif;base64,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\";\n export default img;","/*\r\n * Copyright (C) 2024 Xibo Signage Ltd\r\n *\r\n * Xibo - Digital Signage - https://www.xibosignage.com\r\n *\r\n * This file is part of Xibo.\r\n *\r\n * Xibo is free software: you can redistribute it and/or modify\r\n * it under the terms of the GNU Lesser General Public License as published by\r\n * the Free Software Foundation, either version 3 of the License, or\r\n * any later version.\r\n *\r\n * Xibo is distributed in the hope that it will be useful,\r\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n * GNU Lesser General Public License for more details.\r\n *\r\n * You should have received a copy of the GNU Lesser General Public License\r\n * along with Xibo. If not, see <http://www.gnu.org/licenses/>.\r\n */\r\nimport './splash-screen.css';\r\nimport xiboLogoImg from './img/logo.png';\r\nimport loaderImg from './img/loader.gif';\r\nimport {OptionsType} from '../../Types/Layout';\r\n\r\nexport interface ISplashScreen {\r\n init: () => void;\r\n show: () => void;\r\n hide: () => void;\r\n}\r\n\r\nexport interface PreviewSplashElement extends HTMLDivElement {\r\n hide: () => void;\r\n}\r\n\r\nexport default function SplashScreen($parent: Element | null, config?: OptionsType): ISplashScreen {\r\n const $previewSplash = document.createElement('div') as PreviewSplashElement;\r\n const $previewLoader = document.createElement('div');\r\n const $previewLoaderCaption = document.createElement('div');\r\n const $defaultNoLayout = document.createElement('div');\r\n\r\n const splashScreenObj = {\r\n init() {\r\n $previewSplash.classList.add('preview-splash');\r\n\r\n // Don't show Xibo logo on CMS Preview\r\n if (config && config.platform !== 'CMS') {\r\n $previewSplash.style.setProperty(\r\n 'background-image',\r\n `url(${xiboLogoImg})`,\r\n );\r\n $previewSplash.style.setProperty(\r\n 'background-size',\r\n '200px 120px',\r\n );\r\n $previewSplash.style.setProperty(\r\n 'background-position',\r\n 'calc(100% - 50px) calc(100% - 30px)',\r\n );\r\n }\r\n\r\n $previewSplash.constructor.prototype.hide = () => {\r\n this.hide();\r\n };\r\n\r\n $previewLoader.classList.add('preview-loader');\r\n $previewLoaderCaption.classList.add('preview-loaderCaption');\r\n\r\n // Show loader bar and text on CMS Preview\r\n if (config && config.platform === 'CMS') {\r\n $previewLoader.style.setProperty(\r\n 'background-image',\r\n `url(${loaderImg})`,\r\n );\r\n $previewLoaderCaption.innerHTML = '<p>Loading Layout...</p>';\r\n }\r\n\r\n $previewSplash.insertBefore($previewLoader, $previewSplash.lastElementChild);\r\n $previewSplash.insertBefore($previewLoaderCaption, null);\r\n\r\n this.hide();\r\n },\r\n show() {\r\n if ($parent) {\r\n $parent.insertBefore($previewSplash, $parent.firstElementChild);\r\n $previewSplash.style.setProperty('display', 'block');\r\n }\r\n },\r\n hide() {\r\n $previewSplash.style.setProperty('display', 'none');\r\n },\r\n };\r\n\r\n splashScreenObj.init();\r\n\r\n return splashScreenObj;\r\n}\r\n","/*\r\n * Copyright (C) 2024 Xibo Signage Ltd\r\n *\r\n * Xibo - Digital Signage - https://www.xibosignage.com\r\n *\r\n * This file is part of Xibo.\r\n *\r\n * Xibo is free software: you can redistribute it and/or modify\r\n * it under the terms of the GNU Lesser General Public License as published by\r\n * the Free Software Foundation, either version 3 of the License, or\r\n * any later version.\r\n *\r\n * Xibo is distributed in the hope that it will be useful,\r\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n * GNU Lesser General Public License for more details.\r\n *\r\n * You should have received a copy of the GNU Lesser General Public License\r\n * along with Xibo. If not, see <http://www.gnu.org/licenses/>.\r\n */\r\nimport Layout, { getLayout, getXlf, initRenderingDOM } from './Modules/Layout';\r\nimport { platform } from './Modules/Platform';\r\nimport {\r\n ILayout, initialLayout, InputLayoutType, OptionsType,\r\n} from './Types/Layout';\r\nimport { initialXlr, IXlr } from './Types/XLR';\r\nimport SplashScreen, {PreviewSplashElement} from './Modules/SplashScreen';\r\nimport {getIndexByLayoutId} from './Modules/Generators/Generators';\r\n\r\nexport default function XiboLayoutRenderer(\r\n inputLayouts: InputLayoutType[],\r\n options?: OptionsType,\r\n) {\r\n const props = {\r\n inputLayouts,\r\n options,\r\n }\r\n\r\n const xlrObject: IXlr = {\r\n ...initialXlr,\r\n };\r\n\r\n\r\n xlrObject.bootstrap = function() {\r\n // Place to set configurations and initialize required props\r\n const self = this;\r\n self.inputLayouts = !Array.isArray(props.inputLayouts) ?\r\n [props.inputLayouts] : props.inputLayouts;\r\n self.config = JSON.parse(JSON.stringify({...platform, ...props.options}));\r\n\r\n // Prepare rendering DOM\r\n const previewCanvas = document.querySelector('#preview_canvas');\r\n\r\n initRenderingDOM(previewCanvas);\r\n\r\n // Prepare splash screen\r\n const splashScreen = SplashScreen(\r\n document.querySelector('.player-preview'),\r\n self.config,\r\n );\r\n\r\n splashScreen.show();\r\n };\r\n xlrObject.init = function() {\r\n return new Promise<IXlr>((resolve) => {\r\n const self = this;\r\n\r\n // Check if only have splash screen from inputLayouts\r\n if (self.inputLayouts.length === 1 && self.inputLayouts[0].layoutId === 0) {\r\n resolve(self);\r\n } else {\r\n self.prepareLayouts().then((xlr) => {\r\n resolve(xlr);\r\n });\r\n }\r\n });\r\n };\r\n\r\n xlrObject.playSchedules = function(xlr: IXlr) {\r\n // Check if there's a current layout\r\n if (xlr.currentLayout !== undefined) {\r\n const $splashScreen = document.querySelector('.preview-splash') as PreviewSplashElement;\r\n if ($splashScreen && $splashScreen.style.display === 'block') {\r\n $splashScreen?.hide();\r\n }\r\n\r\n xlr.currentLayout.emitter.emit('start', xlr.currentLayout);\r\n xlr.currentLayout.run();\r\n }\r\n };\r\n\r\n xlrObject.updateLoop = function(inputLayouts: InputLayoutType[]) {\r\n this.updateLayouts(inputLayouts);\r\n };\r\n\r\n xlrObject.updateLayouts = async function(inputLayouts: InputLayoutType[]) {\r\n /**\r\n * @TODO\r\n * Case 1: If currentLayout in inputLayouts and in the same sequence,\r\n * Then, continue playing currentLayout.\r\n * Check nextLayout in inputLayouts. If in inputLayouts and same sequence, then don't change.\r\n * If not in inputLayouts, then replace and prepare nextLayout.\r\n *\r\n * Case 2: If currentLayout in inputLayouts but not in the same sequence,\r\n * Then, replace loop, prepare layouts and start currentLayout\r\n *\r\n * Case 3: If currentLayout not in inputLayouts,\r\n * Then, replace everything and start from first layout in sequence.\r\n */\r\n\r\n this.inputLayouts = inputLayouts;\r\n /** Case 1: When currentLayout is not in inputLayouts\r\n * Then, replace everything and start from first layout\r\n */\r\n if (inputLayouts.filter((inputLayout) => inputLayout.layoutId === this.currentLayout?.layoutId).length === 0) {\r\n // Unset currentLayout, nextLayout and layouts\r\n this.layouts = [];\r\n this.currentLayout = undefined;\r\n this.nextLayout = undefined;\r\n\r\n const xlr = await this.prepareLayouts();\r\n this.playSchedules(xlr);\r\n } else {\r\n /** Case 2: When currentLayout is in inputLayouts, then continue playing\r\n * Also check for nextLayout if in inputLayouts and same sequence, then don't change and continue playing.\r\n * If not in inputLayouts, then replace and prepare nextLayout.\r\n */\r\n\r\n // 2.1 We don't have to do anything for currentLayout\r\n // 2.2 Check for nextLayout\r\n // Get nextLayout index\r\n const currLayoutIndex = getIndexByLayoutId(inputLayouts, this.currentLayout?.layoutId).index as number;\r\n const nxtLayoutIndex = getIndexByLayoutId(inputLayouts, this.nextLayout?.layoutId).index as number;\r\n const tempOldNxtLayout = this.layouts[nxtLayoutIndex];\r\n let newNxtLayoutIndex = currLayoutIndex + 1;\r\n\r\n if (nxtLayoutIndex !== newNxtLayoutIndex) {\r\n // Delete old nextLayout\r\n delete this.layouts[nxtLayoutIndex];\r\n\r\n if (Boolean(this.layouts[newNxtLayoutIndex])) {\r\n this.nextLayout = this.layouts[newNxtLayoutIndex];\r\n this.layouts[newNxtLayoutIndex] = this.nextLayout;\r\n } else {\r\n // Check if newNxtLayoutIndex is still within inputLayouts\r\n if ((newNxtLayoutIndex + 1) > inputLayouts.length) {\r\n // Goes back to first layout in the sequence\r\n newNxtLayoutIndex = 0;\r\n }\r\n\r\n if (Boolean(inputLayouts[newNxtLayoutIndex])) {\r\n const tempNxtLayout = {...initialLayout, ...inputLayouts[newNxtLayoutIndex]};\r\n this.nextLayout = await this.prepareLayoutXlf(tempNxtLayout);\r\n this.layouts[newNxtLayoutIndex] = this.nextLayout;\r\n }\r\n\r\n // Move old nextLayout to its index\r\n let hasOldNxtLayout = inputLayouts\r\n .filter((_layout) => _layout.layoutId === tempOldNxtLayout?.layoutId);\r\n\r\n if (hasOldNxtLayout.length === 1) {\r\n const oldNxtLayoutIndex =\r\n getIndexByLayoutId(inputLayouts, hasOldNxtLayout[0].layoutId).index as number;\r\n this.layouts[oldNxtLayoutIndex] = tempOldNxtLayout;\r\n }\r\n }\r\n } else {\r\n // Check if newNxtLayout is not the same with nextLayout\r\n // Then, replace nextLayout with new one\r\n if (inputLayouts[nxtLayoutIndex].layoutId !== this.nextLayout?.layoutId) {\r\n const tempNewNxtLayout = {...initialLayout, ...inputLayouts[nxtLayoutIndex]};\r\n this.nextLayout = await this.prepareLayoutXlf(tempNewNxtLayout);\r\n this.layouts[nxtLayoutIndex] = this.nextLayout;\r\n }\r\n\r\n // Remove old nextLayout if it's not in inputLayouts\r\n if (tempOldNxtLayout?.index && Boolean(this.layouts[tempOldNxtLayout?.index])) {\r\n if (inputLayouts.filter((_layout) => _layout.layoutId === tempOldNxtLayout?.layoutId).length === 0) {\r\n delete this.layouts[tempOldNxtLayout?.index];\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n xlrObject.prepareLayouts = async function() {\r\n const self = this;\r\n // Get layouts\r\n const xlrLayouts = getLayout({xlr: self});\r\n\r\n console.debug('prepareLayouts::xlrLayouts', xlrLayouts);\r\n\r\n self.currentLayoutId = xlrLayouts.current?.layoutId as ILayout['layoutId'];\r\n\r\n const layoutsXlf = () => {\r\n let xlf = [];\r\n\r\n xlf.push(xlrLayouts.current);\r\n\r\n if (xlrLayouts.current?.layoutId !== xlrLayouts.next?.layoutId) {\r\n xlf.push(xlrLayouts.next);\r\n }\r\n\r\n return xlf.reduce((coll: Promise<ILayout>[], item) => {\r\n return [\r\n ...coll,\r\n self.prepareLayoutXlf(item),\r\n ];\r\n }, []);\r\n };\r\n const layouts = await Promise.all<Array<Promise<ILayout>>>(layoutsXlf());\r\n console.debug('prepareLayouts::layouts', layouts);\r\n console.debug('prepareLayouts::xlr>layouts', self.layouts);\r\n\r\n return new Promise<IXlr>((resolve) => {\r\n layouts.map((layoutItem) => {\r\n if (!Boolean(self.layouts[layoutItem.index])) {\r\n self.layouts[layoutItem.index] = layoutItem;\r\n }\r\n });\r\n self.currentLayoutIndex = xlrLayouts.currentLayoutIndex;\r\n self.currentLayout = self.layouts[self.currentLayoutIndex];\r\n\r\n if (Boolean(layouts[1])) {\r\n self.nextLayout = layouts[1];\r\n } else {\r\n // Use current layout as next layout if only one layout is available\r\n self.nextLayout = self.layouts[0];\r\n }\r\n\r\n self.layouts[self.currentLayoutIndex] = self.currentLayout;\r\n\r\n resolve(self);\r\n });\r\n };\r\n\r\n xlrObject.prepareLayoutXlf = async function(inputLayout: ILayout) {\r\n const self = this;\r\n // Compose layout props first\r\n let newOptions: OptionsType = Object.assign({}, platform);\r\n\r\n newOptions = {\r\n ...newOptions,\r\n ...props.options,\r\n };\r\n\r\n if (self.config.platform ==='CMS' &&\r\n inputLayout && Boolean(inputLayout.layoutId)\r\n ) {\r\n newOptions.xlfUrl =\r\n newOptions.xlfUrl.replace(':layoutId', String(inputLayout.layoutId));\r\n } else if (self.config.platform === 'chromeOS') {\r\n newOptions.xlfUrl = inputLayout.path as string;\r\n }\r\n\r\n let layoutXlf: string;\r\n let layoutXlfNode: Document | null;\r\n if (inputLayout && inputLayout.layoutNode === null) {\r\n layoutXlf = await getXlf(newOptions);\r\n\r\n const parser = new window.DOMParser();\r\n layoutXlfNode = parser.parseFromString(layoutXlf as string, 'text/xml');\r\n } else {\r\n layoutXlfNode = inputLayout && inputLayout.layoutNode;\r\n }\r\n\r\n return new Promise<ILayout>((resolve) => {\r\n const xlrLayoutObj = initialLayout;\r\n\r\n xlrLayoutObj.id = Number(inputLayout.layoutId);\r\n xlrLayoutObj.layoutId = Number(inputLayout.layoutId);\r\n xlrLayoutObj.options = newOptions;\r\n xlrLayoutObj.index = getIndexByLayoutId(this.inputLayouts, xlrLayoutObj.layoutId).index as number;\r\n\r\n resolve(Layout(layoutXlfNode, newOptions, self, xlrLayoutObj));\r\n });\r\n };\r\n\r\n xlrObject.bootstrap();\r\n\r\n return xlrObject;\r\n}\r\n"],"names":["createNanoEvents","emit","event","_len","arguments","length","args","Array","_key","i","callbacks","events","apply","on","cb","_this$events","_this","push","_this$events$event","filter","RESOURCE_URL","XLF_URL","LAYOUT_BACKGROUND_DOWNLOAD_URL","LAYOUT_PREVIEW_URL","LIBRARY_DOWNLOAD_URL","LOADER_URL","platform","getResourceUrl","xlfUrl","layoutBackgroundDownloadUrl","layoutPreviewUrl","libraryDownloadUrl","loaderUrl","idCounter","inPreview","appHost","initialLayout","id","layoutId","sw","sh","xw","xh","zIndex","scaleFactor","sWidth","sHeight","offsetX","offsetY","bgColor","bgImage","bgId","containerName","layoutNode","regionMaxZIndex","ready","regionObjects","drawer","allExpired","regions","actions","options","done","allEnded","path","prepareLayout","parseXlf","run","callback","regionExpired","end","regionEnded","stopAllMedia","Promise","resolve","resetLayout","emitter","index","actionController","undefined","nextId","getMediaId","_ref","mediaType","mediaId","capitalizeStr","inputStr","String","charAt","toUpperCase","substring","getDataBlob","_x","_getDataBlob","_asyncToGenerator","_regeneratorRuntime","mark","_callee","src","wrap","_callee$","_context","prev","next","abrupt","fetch","mode","then","res","blob","rej","reader","FileReader","onloadend","result","onerror","readAsDataURL","stop","preloadMediaBlob","_x2","_x3","_preloadMediaBlob","_callee2","type","data","_callee2$","_context2","sent","Blob","arrayBuffer","audioFileType","getFileExt","URL","createObjectURL","fetchJSON","_x4","_fetchJSON","_callee3","url","_callee3$","_context3","json","err","console","debug","filename","filenameArr","split","str","validAudioTypes","Boolean","composeResourceUrlByPlatform","params","resourceUrl","regionOptions","replace","regionId","resourceEndpoint","isGlobalContent","isImageOrVideo","fileId","uri","composeResourceUrl","_options$config","_options$config2","_options$config3","schemaVersion","config","hardwareKey","serverKey","cmsKey","composeVideoUrl","composeBgUrlByPlatform","bgImageUrl","layout","getIndexByLayoutId","layoutsInput","layoutIndexes","reduce","a","b","indx","Number","_objectSpread","getAllAttributes","elem","getAttributeNames","obj","name","_defineProperty","value","getAttribute","initialRegion","uniqueId","xml","mediaObjects","mediaObjectsActions","currentMedia","complete","ending","ended","oneMedia","oldMedia","curMedia","nxtMedia","currentMediaIndex","totalMediaObjects","prepareRegion","playNextMedia","playPreviousMedia","transitionNodes","finished","exitTransition","exitTransitionComplete","prepareMediaObjects","reset","initialMedia","region","html","iframe","iframeName","render","attachedAudio","singlePlay","timeoutId","setTimeout","checkIframeStatus","loadIframeOnRun","tempSrc","duration","useDuration","divWidth","divHeight","loop","init","defaultTrans","trans","defaultKeyframes","display","defaultTiming","keyframes","timing","fadeInElem","fadeInKeyframes","opacity","fadeInTiming","fill","fadeOutElem","fadeOutKeyframes","fadeOutTiming","flyInElem","keyframeOptions","direction","flyInKeyframes","flyInTiming","from","to","flyOutElem","flyOutKeyframes","flyOutTiming","transitionElement","transition","transitions","fadeIn","fadeOut","flyIn","flyOut","defaultIn","defaultOut","flyTransitionKeyframes","opacityAttr","source","top","concat","height","left","width","VideoMedia","media","videoMediaObject","$videoMedia","document","getElementById","onloadstart","onloadeddata","readyState","oncanplay","videoPlayPromise","play","error","muted","onplaying","ondurationchange","onended","_media$emitter","AudioMedia","audioMediaObject","$audioMedia","$playBtn","remove","audioPlayPromise","_$audioMedia$parentNo","createElement","classList","add","textContent","addEventListener","parentNode","insertBefore","nextSibling","Media","xlr","props","mediaTimer","mediaTimeCount","mediaObject","startMediaTimer","setInterval","clearInterval","_self$xml","_self$xml2","_self$xml3","_self$xml4","_self$xml5","self","parseInt","$mediaIframe","mediaOptions","getElementsByTagName","_i","_Array$from","_options","_mediaOptions","children","_i2","_Array$from2","mediaOption","nodeName","toLowerCase","showfullscreen","scrolling","style","cssText","$mediaId","$media","Audio","className","resourceUrlParams","tmpUrl","align","valign","preload","mute","scaletype","objectFit","playsInline","autoplay","regex","RegExp","exec","transInDuration","transinduration","fadeInTrans","animate","transInDirection","transindirection","defaultTransInOptions","transIn","transInName","showCurrentMedia","_ref2","isCMS","getNewMedia","setProperty","t0","t1","t2","t3","t4","call","t5","innerHTML","appendChild","$region","lastElementChild","Region","regionObject","_self$xml6","_self$layout$actionCo","_regionOptions","regionOption","$layout","Math","round","regionMediaItems","forEach","mediaXml","mediaObj","action","attributes","target","actionType","targetId","_self$layout$drawer","drawerMediaItems","drawerMedia","widgetId","nextMediaIndex","newMedia","transOutDuration","transOutDirection","transoutduration","transoutdirection","defaultTransOutOptions","transOut","transOutName","hideOldMedia","$oldMedia","removeOldMedia","oldMediaAnimate","_oldMediaAnimate","effect","updateTiming","isDone","_self$curMedia","_self$curMedia2","_self$curMedia3","_self$curMedia4","Action","_createClass","_classCallCheck","ActionsWrapper","_HTMLDivElement","_callSuper","_inherits","_wrapNativeSuper","HTMLDivElement","customElements","define","ActionController","parent","$actionController","is","$actionListContainer","key","previewTranslations","window","translations","$container","$actionTitle","$actionsContainer","actionControllerTitle","firstElementChild","newAction","$newAction","Object","keys","attribKey","setAttribute","layoutCode","$actionsToggler","querySelector","onclick","toggle","$webhookActions","querySelectorAll","$webhookAction","stopPropagation","runAction","dataset","openLayoutInNewTab","confirm","navigateToLayout","open","nextMediaInRegion","regionObj","loadMediaInRegion","_targetRegion","_targetRegion2","_targetRegion3","targetRegion","targetMedia","splice","actionData","actiontype","layoutcode","targetid","widgetid","log","initTouchActions","$el","$sourceObj","_regionObjects","sourceid","_mediaObjects","ev","playAgainClickHandle","preventDefault","history","go","initRenderingDOM","targetContainer","_targetContainer","previewPlayer","previewScreen","endPlay","playAgainLink","removeEventListener","body","firstChild","getXlf","_getXlf","_callee4","layoutOptions","apiHost","fetchOptions","_callee4$","_context4","location","origin","headers","text","getLayout","_currentLayout","_nextLayout","_params$xlr","inputLayouts","currentLayout","nextLayout","currLayoutIndx","currentLayoutIndex","hasLayout","nextLayoutIndex","activeLayout","nextLayoutTemp","_currentLayout2","layouts","current","Layout","prepareLayouts","playSchedules","layoutObject","$layoutContainer","$splashScreen","_layout$layoutNode","_layout$layoutNode2","_layout$layoutNode3","_layout$layoutNode4","_layout$layoutNode5","_layout$layoutNode6","_layout$layoutNode7","_layout$layoutNode8","$screen","outline","offsetWidth","offsetHeight","min","abs","position","indexOf","backgroundImage","backgroundRepeat","backgroundSize","backgroundPosition","backgroundColor","currentLayoutId","layoutActions","actionXml","layoutDrawers","layoutDrawerXml","layoutRegions","regionXml","_iterator","_createForOfIteratorHelper","_step","s","n","layoutRegion","e","f","$end","$preview","removeChild","_iterator2","_step2","_ref3","j","ELayoutType","initialXlr","bootstrap","prepareLayoutXlf","inputLayout","updateLayouts","updateLoop","img","SplashScreen","$parent","$previewSplash","$previewLoader","$previewLoaderCaption","splashScreenObj","xiboLogoImg","constructor","prototype","hide","loaderImg","show","XiboLayoutRenderer","xlrObject","isArray","JSON","parse","stringify","previewCanvas","splashScreen","_this2","_this$currentLayout","_this$nextLayout","currLayoutIndex","nxtLayoutIndex","tempOldNxtLayout","newNxtLayoutIndex","tempNxtLayout","hasOldNxtLayout","oldNxtLayoutIndex","_this$nextLayout2","tempNewNxtLayout","_this2$currentLayout","_layout","_xlrLayouts$current","xlrLayouts","layoutsXlf","_xlrLayouts$current2","_xlrLayouts$next","xlf","coll","item","_toConsumableArray","all","map","layoutItem","_this3","newOptions","layoutXlf","layoutXlfNode","parser","assign","DOMParser","parseFromString","xlrLayoutObj"],"mappings":"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","x_google_ignoreList":[0]}