animare
Version:
Advanced animation library for modern JavaScript.
51 lines • 3.6 kB
JavaScript
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default=void 0;var _types=require("../types.js");class EventManager{#registeredEvents=Object.assign({});#onPlayPromise=null;#onResumePromise=null;#onPausePromise=null;#onStopPromise=null;#onCompletePromise=null;#onRepeatPromise=null;#remove(event,callback){if(!this.#registeredEvents[event])return false;return this.#registeredEvents[event].delete(callback);}/**
* Attaches an event listener to the timeline.
*
* @param event - The event to listen for.
* @param callback - The callback function to be executed when the event is triggered.
* @returns A function to unsubscribe the event listener.
*
* @example
* const unsubscribe = on(Event.Play, () => {
* // do something
* });
*
* unsubscribe(); // To remove the event listener
*/on(event,callback){if(!this.#registeredEvents[event])this.#registeredEvents[event]=new Set();this.#registeredEvents[event].add(callback);return()=>this.#remove(event,callback);}/**
* Attaches an event listener to the timeline that will be triggered only once.
*
* @param event - The event to listen for.
* @param callback - The callback function to be executed when the event is triggered.
* @returns A function to unsubscribe the event listener.
*
* @example
* const unsubscribe = once(Event.Play, () => {
* // do something
* });
*
* unsubscribe(); // To remove the event listener
*/once(event,callback){const remove=this.on(event,()=>{callback();remove();});return()=>this.#remove(event,callback);}emit(event){if(!this.#registeredEvents[event])return;this.#registeredEvents[event].forEach(callback=>callback());if(event===_types.Event.Play){this.#onPlayPromise?.();this.#onPlayPromise=null;return;}if(event===_types.Event.Resume){this.#onResumePromise?.();this.#onResumePromise=null;return;}if(event===_types.Event.Pause){this.#onPausePromise?.();this.#onPausePromise=null;return;}if(event===_types.Event.Complete){this.#onCompletePromise?.();this.#onCompletePromise=null;return;}if(event===_types.Event.Repeat){this.#onRepeatPromise?.();this.#onRepeatPromise=null;return;}if(event===_types.Event.Stop){this.#onStopPromise?.();this.#onStopPromise=null;}}/** Removes all event listeners. */clear(){this.#registeredEvents=Object.assign({});}/**
* Waits until the timeline starts playing.
* @example
* await onPlayAsync();
*/onPlayAsync(){if(this.#onPlayPromise!==null)return;return new Promise(resolve=>{this.#onPlayPromise=resolve;});}/**
* Waits until the timeline resumes.
* @example
* await onResumeAsync();
*/onResumeAsync(){if(this.#onResumePromise!==null)return;return new Promise(resolve=>{this.#onResumePromise=resolve;});}/**
* Waits until the timeline pauses.
* @example
* await onPauseAsync();
*/onPauseAsync(){if(this.#onPausePromise!==null)return;return new Promise(resolve=>{this.#onPausePromise=resolve;});}/**
* Waits until the timeline stops.
* @example
* await onStopAsync();
*/onStopAsync(){if(this.#onStopPromise!==null)return;return new Promise(resolve=>{this.#onStopPromise=resolve;});}/**
* Waits until the timeline completes.
* @example
* await onCompleteAsync();
*/onCompleteAsync(){if(this.#onCompletePromise!==null)return;return new Promise(resolve=>{this.#onCompletePromise=resolve;});}/**
* Waits until the timeline repeats.
* @example
* await onRepeatAsync();
*/onRepeatAsync(){if(this.#onRepeatPromise!==null)return;return new Promise(resolve=>{this.#onRepeatPromise=resolve;});}}exports.default=EventManager;