Skip to content

Commit

Permalink
Allow passing bubbles / cancelable via event args
Browse files Browse the repository at this point in the history
  • Loading branch information
volkanceylan committed May 11, 2024
1 parent 7f1be99 commit 91565fb
Showing 1 changed file with 11 additions and 7 deletions.
18 changes: 11 additions & 7 deletions packages/corelib/src/base/fluent-events.ts
Original file line number Diff line number Diff line change
Expand Up @@ -67,10 +67,14 @@ function getElementEvents(element: EventTarget): ElementEvents {
return events;
}

function hydrateObj(obj: any, meta = {}) {
function hydrateEvent(obj: Event, meta = {}) {
for (const [key, value] of Object.entries(meta)) {
if (key === 'bubbles' || key === 'cancelable') {
// these should be set when the event is constructed
continue;
}
try {
obj[key] = value
(obj as any)[key] = value
} catch {
Object.defineProperty(obj, key, {
configurable: true,
Expand All @@ -86,7 +90,7 @@ function hydrateObj(obj: any, meta = {}) {

function baseHandler(element: EventTarget, fn: any) {
return function handler(event: Event) {
hydrateObj(event, { delegateTarget: element })
hydrateEvent(event, { delegateTarget: element })

if ((handler as any).oneOff) {
removeListener(element, event.type, fn)
Expand All @@ -106,7 +110,7 @@ function delegationHandler(element: EventTarget, selector: string, fn: Function)
continue
}

hydrateObj(event, { delegateTarget: target })
hydrateEvent(event, { delegateTarget: target })

if ((handler as any).oneOff) {
removeListener(element, event.type, selector, fn)
Expand Down Expand Up @@ -264,19 +268,19 @@ export function triggerEvent(element: EventTarget, type: string, args?: any): Ev
const inNamespace = type !== typeEvent;

let jQueryEvent = null;
let bubbles = true;
let bubbles = args?.bubbles ?? true;
let nativeDispatch = true;
let defaultPrevented = false;

if (inNamespace && $) {
jQueryEvent = $.Event(type, args);
$(element).trigger(jQueryEvent);
bubbles = !jQueryEvent.isPropagationStopped();
bubbles = bubbles && !jQueryEvent.isPropagationStopped();
nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();
defaultPrevented = jQueryEvent.isDefaultPrevented();
}

const evt = hydrateObj(new Event(type, { bubbles, cancelable: true }), args);
const evt = hydrateEvent(new Event(type, { bubbles, cancelable: args?.cancelable ?? true }), args);

if (defaultPrevented) {
evt.preventDefault();
Expand Down

0 comments on commit 91565fb

Please sign in to comment.