Skip to content

Commit 7342d48

Browse files
committed
feat: #3372 added a new self event modifier
1 parent 2ef004e commit 7342d48

File tree

4 files changed

+12
-2
lines changed

4 files changed

+12
-2
lines changed

src/compiler/compile/nodes/Element.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,8 @@ const valid_modifiers = new Set([
6363
'stopPropagation',
6464
'capture',
6565
'once',
66-
'passive'
66+
'passive',
67+
'self'
6768
]);
6869

6970
const passive_events = new Set([

src/compiler/compile/render_dom/wrappers/shared/add_event_handlers.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ export default function add_event_handlers(
1010
let snippet = handler.render(block);
1111
if (handler.modifiers.has('preventDefault')) snippet = `@prevent_default(${snippet})`;
1212
if (handler.modifiers.has('stopPropagation')) snippet = `@stop_propagation(${snippet})`;
13+
if (handler.modifiers.has('self')) snippet = `@self(${snippet}, ${target})`;
1314

1415
const opts = ['passive', 'once', 'capture'].filter(mod => handler.modifiers.has(mod));
1516

src/runtime/internal/dom.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,14 @@ export function stop_propagation(fn) {
7373
};
7474
}
7575

76+
export function self(fn, el) {
77+
return function(event) {
78+
if(event.target !== el) return;
79+
// @ts-ignore
80+
return fn.call(this, event);
81+
};
82+
}
83+
7684
export function attr(node: Element, attribute: string, value?: string) {
7785
if (value == null) node.removeAttribute(attribute);
7886
else node.setAttribute(attribute, value);

test/validator/samples/event-modifiers-invalid/errors.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
[{
2-
"message": "Valid event modifiers are preventDefault, stopPropagation, capture, once or passive",
2+
"message": "Valid event modifiers are preventDefault, stopPropagation, capture, once, passive or self",
33
"code": "invalid-event-modifier",
44
"start": {
55
"line": 1,

0 commit comments

Comments
 (0)