return boolean for dispatch

pull/7064/head
bluwy 5 years ago
parent c86bf54222
commit e1cdf849dc

@ -630,14 +630,10 @@ export function toggle_class(element, name, toggle) {
element.classList[toggle ? 'add' : 'remove'](name); element.classList[toggle ? 'add' : 'remove'](name);
} }
export interface CustomEventOpts {
bubbles?: boolean;
cancelable?: boolean;
}
export function custom_event<T=any>(type: string, detail?: T, opts: CustomEventOpts = {}) { export function custom_event<T=any>(type: string, detail?: T, { bubbles = false, cancelable = false } = {}): CustomEvent<T> {
const e: CustomEvent<T> = document.createEvent('CustomEvent'); const e: CustomEvent<T> = document.createEvent('CustomEvent');
e.initCustomEvent(type, opts.bubbles, opts.cancelable, detail); e.initCustomEvent(type, bubbles, cancelable, detail);
return e; return e;
} }

@ -1,4 +1,4 @@
import { custom_event, CustomEventOpts } from './dom'; import { custom_event } from './dom';
export let current_component; export let current_component;
@ -32,17 +32,20 @@ export function createEventDispatcher<
>(): <EventKey extends Extract<keyof EventMap, string>>(type: EventKey, detail?: EventMap[EventKey]) => void { >(): <EventKey extends Extract<keyof EventMap, string>>(type: EventKey, detail?: EventMap[EventKey]) => void {
const component = get_current_component(); const component = get_current_component();
return (type: string, detail?: any, opts?: CustomEventOpts) => { return (type: string, detail?: any, { cancelable = false } = {}): boolean => {
const callbacks = component.$$.callbacks[type]; const callbacks = component.$$.callbacks[type];
if (callbacks) { if (callbacks) {
// TODO are there situations where events could be dispatched // TODO are there situations where events could be dispatched
// in a server (non-DOM) environment? // in a server (non-DOM) environment?
const event = custom_event(type, detail, opts); const event = custom_event(type, detail, { cancelable });
callbacks.slice().forEach(fn => { callbacks.slice().forEach(fn => {
fn.call(component, event); fn.call(component, event);
}); });
return !event.defaultPrevented;
} }
return true;
}; };
} }

Loading…
Cancel
Save