11
11
const utils = require ( '../utils' )
12
12
13
13
const SYSTEM_MODIFIERS = new Set ( [ 'ctrl' , 'shift' , 'alt' , 'meta' ] )
14
+ const GLOBAL_MODIFIERS = new Set ( [ 'stop' , 'prevent' , 'capture' , 'self' , 'once' , 'passive' , 'native' ] )
14
15
15
16
// ------------------------------------------------------------------------------
16
17
// Helpers
@@ -36,6 +37,16 @@ function getEventDirectives (attributes, sourceCode) {
36
37
} ) )
37
38
}
38
39
40
+ /**
41
+ * Checks whether given modifier is key modifier
42
+ *
43
+ * @param {string } modifier
44
+ * @returns {boolean }
45
+ */
46
+ function isKeyModifier ( modifier ) {
47
+ return ! GLOBAL_MODIFIERS . has ( modifier ) && ! SYSTEM_MODIFIERS . has ( modifier )
48
+ }
49
+
39
50
/**
40
51
* Checks whether given modifier is system one
41
52
*
@@ -86,6 +97,16 @@ function getSystemModifiersString (modifiers) {
86
97
return modifiers . filter ( isSystemModifier ) . sort ( ) . join ( ',' )
87
98
}
88
99
100
+ /**
101
+ * Creates alphabetically sorted string with key modifiers
102
+ *
103
+ * @param {array[string] } modifiers
104
+ * @returns {string } e.g. "enter,tab"
105
+ */
106
+ function getKeyModifiersString ( modifiers ) {
107
+ return modifiers . filter ( isKeyModifier ) . sort ( ) . join ( ',' )
108
+ }
109
+
89
110
/**
90
111
* Compares two events based on their modifiers
91
112
* to detect possible event leakeage
@@ -100,13 +121,21 @@ function hasConflictedModifiers (baseEvent, event) {
100
121
event . modifiers . includes ( 'exact' )
101
122
) return false
102
123
103
- const eventModifiers = getSystemModifiersString ( event . modifiers )
104
- const baseEventModifiers = getSystemModifiersString ( baseEvent . modifiers )
124
+ const eventKeyModifiers = getKeyModifiersString ( event . modifiers )
125
+ const baseEventKeyModifiers = getKeyModifiersString ( baseEvent . modifiers )
126
+
127
+ if (
128
+ eventKeyModifiers && baseEventKeyModifiers &&
129
+ eventKeyModifiers !== baseEventKeyModifiers
130
+ ) return false
131
+
132
+ const eventSystemModifiers = getSystemModifiersString ( event . modifiers )
133
+ const baseEventSystemModifiers = getSystemModifiersString ( baseEvent . modifiers )
105
134
106
135
return (
107
136
baseEvent . modifiers . length >= 1 &&
108
- baseEventModifiers !== eventModifiers &&
109
- baseEventModifiers . indexOf ( eventModifiers ) > - 1
137
+ baseEventSystemModifiers !== eventSystemModifiers &&
138
+ baseEventSystemModifiers . indexOf ( eventSystemModifiers ) > - 1
110
139
)
111
140
}
112
141
0 commit comments