You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
svelte-kit-vice/src/uix/acel/utilities/events/compose-handlers.ts

24 lines
784 B

import type { EventCallback } from "./events.ts";
import type { ReadableBox } from "../box/box-extras.svelte.ts";
/**
* Composes event handlers into a single function that can be called with an event.
* If the previous handler cancels the event using `event.preventDefault()`, the handlers
* that follow will not be called.
*/
export function composeHandlers<E extends Event = Event, T extends Element = Element>(
...handlers: Array<EventCallback<E> | ReadableBox<EventCallback<E>> | undefined>
): (e: E) => void {
return function (this: T, e: E) {
for (const handler of handlers) {
if (!handler) continue;
if (e.defaultPrevented) return;
if (typeof handler === "function") {
handler.call(this, e);
} else {
handler.current?.call(this, e);
}
}
};
}

Powered by TurnKey Linux.