/*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import { MessagePoster } from './messaging'; export class StyleLoadingMonitor { readonly #unloadedStyles: string[] = []; #finishedLoading: boolean = false; #poster?: MessagePoster; constructor() { const onStyleLoadError = (event: Event | string) => { if (!(event instanceof Event)) { return; } const source = (event.target as HTMLElement | null)?.dataset.source; if (source) { this.#unloadedStyles.push(source); } }; window.addEventListener('DOMContentLoaded', () => { for (const link of document.getElementsByClassName('code-user-style') as HTMLCollectionOf) { if (link.dataset.source) { link.onerror = onStyleLoadError; } } }); window.addEventListener('load', () => { if (!this.#unloadedStyles.length) { return; } this.#finishedLoading = true; this.#poster?.postMessage('previewStyleLoadError', { unloadedStyles: this.#unloadedStyles }); }); } public setPoster(poster: MessagePoster): void { this.#poster = poster; if (this.#finishedLoading) { poster.postMessage('previewStyleLoadError', { unloadedStyles: this.#unloadedStyles }); } } }