Skip to content

Commit 769e032

Browse files
committed
merge master -> gh-1088
2 parents 11469ef + 7c4b9a5 commit 769e032

File tree

4 files changed

+56
-4
lines changed

4 files changed

+56
-4
lines changed

src/shared/dom.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -73,12 +73,12 @@ export function createComment() {
7373
return document.createComment('');
7474
}
7575

76-
export function addListener(node, event, handler) {
77-
node.addEventListener(event, handler, false);
76+
export function addListener(node, event, handler, options) {
77+
node.addEventListener(event, handler, options);
7878
}
7979

80-
export function removeListener(node, event, handler) {
81-
node.removeEventListener(event, handler, false);
80+
export function removeListener(node, event, handler, options) {
81+
node.removeEventListener(event, handler, options);
8282
}
8383

8484
export function setAttribute(node, attribute, value) {

src/utils/getEventModifiers.ts

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import EventHandler from '../compile/nodes/EventHandler';
2+
import deindent from '../utils/deindent';
3+
4+
export default function getEventModifiers(handlerName: String) {
5+
// Ignore first element because it's the event name, i.e. click
6+
let modifiers = handlerName.split('|').slice(1);
7+
8+
let eventModifiers = modifiers.reduce((acc, m) => {
9+
if (m === 'stopPropagation')
10+
acc.bodyModifiers += 'event.stopPropagation();\n';
11+
else if (m === 'preventDefault')
12+
acc.bodyModifiers += 'event.preventDefault();\n';
13+
else if (m === 'capture')
14+
acc.optionModifiers[m] = true;
15+
else if (m === 'once')
16+
acc.optionModifiers[m] = true;
17+
else if (m === 'passive')
18+
acc.optionModifiers[m] = true;
19+
20+
return acc;
21+
}, {
22+
bodyModifiers: '',
23+
optionModifiers: {
24+
capture: false,
25+
once: false,
26+
passive: false,
27+
}
28+
});
29+
30+
if (eventModifiers.bodyModifiers !== '')
31+
eventModifiers.bodyModifiers = deindent`
32+
${eventModifiers.bodyModifiers}
33+
`;
34+
35+
return eventModifiers;
36+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
[{
2+
"message": "Valid event modifiers are stopPropagation, preventDefault, capture, once, passive.",
3+
"code": "invalid-event-modifiers",
4+
"start": {
5+
"line": 1,
6+
"column": 8,
7+
"character": 8
8+
},
9+
"end": {
10+
"line": 1,
11+
"column": 36,
12+
"character": 36
13+
},
14+
"pos": 8
15+
}]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<button on:click|stop|bad="doThat()"></button>

0 commit comments

Comments
 (0)