diff --git a/types/css-font-loading-module/css-font-loading-module-tests.ts b/types/css-font-loading-module/css-font-loading-module-tests.ts index ca94f558a0..553887bc11 100644 --- a/types/css-font-loading-module/css-font-loading-module-tests.ts +++ b/types/css-font-loading-module/css-font-loading-module-tests.ts @@ -18,4 +18,12 @@ contexts.forEach(context => { const b: boolean = context.fonts.check("12px Example", "ß"); const c: Promise = context.fonts.load("12px MyFont", "ß").then(); const d: Promise = context.fonts.ready.then(); + const e: FontFaceSetLoadEvent = new FontFaceSetLoadEvent('loading', {fontfaces: []}); + context.fonts.addEventListener('loading', (evt) => { + evt.fontfaces; + }); + context.fonts.onloadingdone = (evt) => { + evt.fontfaces; + }; + context.fonts.dispatchEvent(e); }); diff --git a/types/css-font-loading-module/index.d.ts b/types/css-font-loading-module/index.d.ts index 9095b15d9d..e6db39cdae 100644 --- a/types/css-font-loading-module/index.d.ts +++ b/types/css-font-loading-module/index.d.ts @@ -6,7 +6,6 @@ export type FontFaceLoadStatus = 'unloaded' | 'loading' | 'loaded' | 'error'; export type FontFaceSetLoadStatus = 'loading' | 'loaded'; export type BinaryData = ArrayBuffer | ArrayBufferView; -export type EventHandler = (event: Event) => void; export interface FontFaceDescriptors { style?: string; @@ -17,11 +16,27 @@ export interface FontFaceDescriptors { featureSettings?: string; } -export interface FontFaceSet extends Set { +export interface FontFaceSetLoadEventInit extends EventInit { + fontfaces?: FontFace[]; +} + +export interface FontFaceSetEventMap { + "loading": (this: FontFaceSet, event: FontFaceSetLoadEvent) => any; + "loadingdone": (this: FontFaceSet, event: FontFaceSetLoadEvent) => any; + "loadingerror": (this: FontFaceSet, event: FontFaceSetLoadEvent) => any; +} + +export interface FontFaceSet extends Set, EventTarget { // events for when loading state changes - onloading: EventHandler; - onloadingdone: EventHandler; - onloadingerror: EventHandler; + onloading: ((this: FontFaceSet, event: FontFaceSetLoadEvent) => any) | null; + onloadingdone: ((this: FontFaceSet, event: FontFaceSetLoadEvent) => any) | null; + onloadingerror: ((this: FontFaceSet, event: FontFaceSetLoadEvent) => any) | null; + + // EventTarget + addEventListener(type: K, listener: FontFaceSetEventMap[K], options?: boolean | AddEventListenerOptions): void; + addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; + removeEventListener(type: K, listener: FontFaceSetEventMap[K], options?: boolean | EventListenerOptions): void; + removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; // check and start loads if appropriate // and fulfill promise when all loads complete @@ -55,6 +70,11 @@ declare global { readonly loaded: Promise; } + class FontFaceSetLoadEvent extends Event { + constructor(type: string, eventInitDict?: FontFaceSetLoadEventInit); + readonly fontfaces: FontFace[]; + } + interface Document { fonts: FontFaceSet; }