@@ -20,13 +20,16 @@ export function pluckModuleFunction<F: Function> (
20
20
: []
21
21
}
22
22
23
-
export function addProp (el: ASTElement, name: string, value: string, range?: Range) {
24
-
(el.props || (el.props = [])).push(rangeSetItem({ name, value }, range))
23
+
export function addProp (el: ASTElement, name: string, value: string, range?: Range, dynamic?: boolean) {
24
+
(el.props || (el.props = [])).push(rangeSetItem({ name, value, dynamic }, range))
25
25
el.plain = false
26
26
}
27
27
28
-
export function addAttr (el: ASTElement, name: string, value: any, range?: Range) {
29
-
(el.attrs || (el.attrs = [])).push(rangeSetItem({ name, value }, range))
28
+
export function addAttr (el: ASTElement, name: string, value: any, range?: Range, dynamic?: boolean) {
29
+
const attrs = dynamic
30
+
? (el.dynamicAttrs || (el.dynamicAttrs = []))
31
+
: (el.attrs || (el.attrs = []))
32
+
attrs.push(rangeSetItem({ name, value, dynamic }, range))
30
33
el.plain = false
31
34
}
32
35
@@ -42,21 +45,36 @@ export function addDirective (
42
45
rawName: string,
43
46
value: string,
44
47
arg: ?string,
48
+
isDynamicArg: boolean,
45
49
modifiers: ?ASTModifiers,
46
50
range?: Range
47
51
) {
48
-
(el.directives || (el.directives = [])).push(rangeSetItem({ name, rawName, value, arg, modifiers }, range))
52
+
(el.directives || (el.directives = [])).push(rangeSetItem({
53
+
name,
54
+
rawName,
55
+
value,
56
+
arg,
57
+
isDynamicArg,
58
+
modifiers
59
+
}, range))
49
60
el.plain = false
50
61
}
51
62
63
+
function prependModifierMarker (symbol: string, name: string, dynamic?: boolean): string {
64
+
return dynamic
65
+
? `_p(${name},"${symbol}")`
66
+
: symbol + name // mark the event as captured
67
+
}
68
+
52
69
export function addHandler (
53
70
el: ASTElement,
54
71
name: string,
55
72
value: string,
56
73
modifiers: ?ASTModifiers,
57
74
important?: boolean,
58
75
warn?: ?Function,
59
-
range?: Range
76
+
range?: Range,
77
+
dynamic?: boolean
60
78
) {
61
79
modifiers = modifiers || emptyObject
62
80
// warn prevent and passive modifier
@@ -75,28 +93,34 @@ export function addHandler (
75
93
// normalize click.right and click.middle since they don't actually fire
76
94
// this is technically browser-specific, but at least for now browsers are
77
95
// the only target envs that have right/middle clicks.
78
-
if (name === 'click') {
79
-
if (modifiers.right) {
96
+
if (modifiers.right) {
97
+
if (dynamic) {
98
+
name = `(${name})==='click'?'contextmenu':(${name})`
99
+
} else if (name === 'click') {
80
100
name = 'contextmenu'
81
101
delete modifiers.right
82
-
} else if (modifiers.middle) {
102
+
}
103
+
} else if (modifiers.middle) {
104
+
if (dynamic) {
105
+
name = `(${name})==='click'?'mouseup':(${name})`
106
+
} else if (name === 'click') {
83
107
name = 'mouseup'
84
108
}
85
109
}
86
110
87
111
// check capture modifier
88
112
if (modifiers.capture) {
89
113
delete modifiers.capture
90
-
name = '!' + name // mark the event as captured
114
+
name = prependModifierMarker('!', name, dynamic)
91
115
}
92
116
if (modifiers.once) {
93
117
delete modifiers.once
94
-
name = '~' + name // mark the event as once
118
+
name = prependModifierMarker('~', name, dynamic)
95
119
}
96
120
/* istanbul ignore if */
97
121
if (modifiers.passive) {
98
122
delete modifiers.passive
99
-
name = '&' + name // mark the event as passive
123
+
name = prependModifierMarker('&', name, dynamic)
100
124
}
101
125
102
126
let events
@@ -107,7 +131,7 @@ export function addHandler (
107
131
events = el.events || (el.events = {})
108
132
}
109
133
110
-
const newHandler: any = rangeSetItem({ value: value.trim() }, range)
134
+
const newHandler: any = rangeSetItem({ value: value.trim(), dynamic }, range)
111
135
if (modifiers !== emptyObject) {
112
136
newHandler.modifiers = modifiers
113
137
}
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4