@@ -122,36 +122,44 @@ export function handle_event_propagation(handler_element, event) {
122
122
}
123
123
} ) ;
124
124
125
- while ( current_target !== null ) {
125
+ /** @param {Element } current_target */
126
+ function next ( current_target ) {
126
127
/** @type {null | Element } */
127
128
var parent_element =
128
129
current_target . parentNode || /** @type {any } */ ( current_target ) . host || null ;
129
- var internal_prop_name = '__' + event_name ;
130
- // @ts -ignore
131
- var delegated = current_target [ internal_prop_name ] ;
132
-
133
- if ( delegated !== undefined && ! ( /** @type {any } */ ( current_target ) . disabled ) ) {
134
- if ( is_array ( delegated ) ) {
135
- var [ fn , ...data ] = delegated ;
136
- fn . apply ( current_target , [ event , ...data ] ) ;
137
- } else {
138
- delegated . call ( current_target , event ) ;
130
+
131
+ try {
132
+ // @ts -expect-error
133
+ var delegated = current_target [ '__' + event_name ] ;
134
+
135
+ if ( delegated !== undefined && ! ( /** @type {any } */ ( current_target ) . disabled ) ) {
136
+ if ( is_array ( delegated ) ) {
137
+ var [ fn , ...data ] = delegated ;
138
+ fn . apply ( current_target , [ event , ...data ] ) ;
139
+ } else {
140
+ delegated . call ( current_target , event ) ;
141
+ }
142
+ }
143
+ } finally {
144
+ if (
145
+ event . cancelBubble ||
146
+ parent_element === handler_element ||
147
+ parent_element === null ||
148
+ current_target === handler_element
149
+ ) {
150
+ return ;
139
151
}
140
- }
141
152
142
- if (
143
- event . cancelBubble ||
144
- parent_element === handler_element ||
145
- current_target === handler_element
146
- ) {
147
- break ;
153
+ next ( parent_element ) ;
148
154
}
149
-
150
- current_target = parent_element ;
151
155
}
152
156
153
- // @ts -expect-error is used above
154
- event . __root = handler_element ;
155
- // @ts -expect-error is used above
156
- current_target = handler_element ;
157
+ try {
158
+ next ( current_target ) ;
159
+ } finally {
160
+ // @ts -expect-error is used above
161
+ event . __root = handler_element ;
162
+ // @ts -expect-error is used above
163
+ current_target = handler_element ;
164
+ }
157
165
}
0 commit comments