2021-10-26 11:01:57 +02:00
|
|
|
import { filterOutModifiersFromData } from "../blockdom/config";
|
|
|
|
|
|
2021-10-27 14:45:29 +02:00
|
|
|
export const mainEventHandler = (data: any, ev: Event, currentTarget?: EventTarget|null) => {
|
|
|
|
|
const { data: _data, modifiers } = filterOutModifiersFromData(data);
|
|
|
|
|
data = _data;
|
|
|
|
|
let stopped = false;
|
|
|
|
|
if (modifiers.length) {
|
|
|
|
|
let selfMode = false;
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (typeof data[0] === "function") {
|
|
|
|
|
data[0](ev);
|
|
|
|
|
} else if (data[0].__owl__) {
|
2020-11-26 16:45:25 +01:00
|
|
|
const method = data[1];
|
|
|
|
|
const args = data[2] || [];
|
2021-10-27 14:45:29 +02:00
|
|
|
data[0].__owl__.component[method](...args, ev);
|
2020-11-26 16:45:25 +01:00
|
|
|
}
|
2021-10-27 14:45:29 +02:00
|
|
|
return stopped;
|
2020-11-26 16:45:25 +01:00
|
|
|
}
|