mirror of
https://github.com/siyuan-note/siyuan.git
synced 2025-02-28 05:32:52 +00:00
24 lines
785 B
TypeScript
24 lines
785 B
TypeScript
export class EventBus<DetailType = any> {
|
|
private eventTarget: EventTarget;
|
|
|
|
constructor(name = "") {
|
|
this.eventTarget = document.appendChild(document.createComment(name));
|
|
}
|
|
|
|
on(type: TEventBus, listener: (event: CustomEvent<DetailType>) => void) {
|
|
this.eventTarget.addEventListener(type, listener);
|
|
}
|
|
|
|
once(type: TEventBus, listener: (event: CustomEvent<DetailType>) => void) {
|
|
this.eventTarget.addEventListener(type, listener, {once: true});
|
|
}
|
|
|
|
off(type: TEventBus, listener: (event: CustomEvent<DetailType>) => void) {
|
|
this.eventTarget.removeEventListener(type, listener);
|
|
}
|
|
|
|
emit(type: TEventBus, detail?: DetailType) {
|
|
return this.eventTarget.dispatchEvent(new CustomEvent(type, {detail}));
|
|
}
|
|
}
|