diff --git a/src/blockdom/config.ts b/src/blockdom/config.ts index 9e918f70..96490e8c 100644 --- a/src/blockdom/config.ts +++ b/src/blockdom/config.ts @@ -1,4 +1,4 @@ -export function filterOutModifiersFromData(dataList: any[]): { modifiers: string[], data: any[]} { +export function filterOutModifiersFromData(dataList: any[]): { modifiers: string[]; data: any[] } { dataList = dataList.slice(); const modifiers = []; let elm; diff --git a/src/blockdom/events.ts b/src/blockdom/events.ts index a3eb5043..d2488bc0 100644 --- a/src/blockdom/events.ts +++ b/src/blockdom/events.ts @@ -76,6 +76,8 @@ function setupSyntheticEvent(evName: string, eventKey: string, capture: boolean if (CONFIGURED_SYNTHETIC_EVENTS[eventKey]) { return; } - document.addEventListener(evName, (event) => nativeToSyntheticEvent(eventKey, event), { capture }); + document.addEventListener(evName, (event) => nativeToSyntheticEvent(eventKey, event), { + capture, + }); CONFIGURED_SYNTHETIC_EVENTS[eventKey] = true; } diff --git a/src/component/handler.ts b/src/component/handler.ts index c6acf616..fd05320f 100644 --- a/src/component/handler.ts +++ b/src/component/handler.ts @@ -1,6 +1,6 @@ import { filterOutModifiersFromData } from "../blockdom/config"; -export const mainEventHandler = (data: any, ev: Event, currentTarget?: EventTarget|null) => { +export const mainEventHandler = (data: any, ev: Event, currentTarget?: EventTarget | null) => { const { data: _data, modifiers } = filterOutModifiersFromData(data); data = _data; let stopped = false; @@ -9,9 +9,20 @@ export const mainEventHandler = (data: any, ev: Event, currentTarget?: EventTarg const isSelf = ev.target === currentTarget; for (const mod of modifiers) { switch (mod) { - case "self": selfMode = true; if (isSelf) { continue; } else { return stopped; }; - case "prevent": if ((selfMode && isSelf) || (!selfMode)) ev.preventDefault(); continue; - case "stop": if ((selfMode && isSelf) || (!selfMode)) ev.stopPropagation() ; stopped = true; continue; + case "self": + selfMode = true; + if (isSelf) { + continue; + } else { + return stopped; + } + case "prevent": + if ((selfMode && isSelf) || !selfMode) ev.preventDefault(); + continue; + case "stop": + if ((selfMode && isSelf) || !selfMode) ev.stopPropagation(); + stopped = true; + continue; } } } @@ -23,4 +34,4 @@ export const mainEventHandler = (data: any, ev: Event, currentTarget?: EventTarg data[0].__owl__.component[method](...args, ev); } return stopped; -} +}; diff --git a/src/qweb/compiler.ts b/src/qweb/compiler.ts index 5c456b8c..d3aaa539 100644 --- a/src/qweb/compiler.ts +++ b/src/qweb/compiler.ts @@ -474,7 +474,10 @@ export class QWebCompiler { args = _args.slice(1, -1); return ""; }); - const modifiers = rawEvent.split(".").slice(1).map(m => `"${m}"`); + const modifiers = rawEvent + .split(".") + .slice(1) + .map((m) => `"${m}"`); let modifiersCode = ""; if (modifiers.length) { modifiersCode = `${modifiers.join(",")}, `; diff --git a/tests/blockdom/block_event_handling.test.ts b/tests/blockdom/block_event_handling.test.ts index d95a8d42..a791c7a8 100644 --- a/tests/blockdom/block_event_handling.test.ts +++ b/tests/blockdom/block_event_handling.test.ts @@ -124,9 +124,11 @@ test("two same block nodes with different handlers (synthetic)", async () => { }); test("synthetic and native handlers can cohabitate", async () => { - const block = createBlock('