File tree 2 files changed +31
-1
lines changed
playground/html/__tests__
2 files changed +31
-1
lines changed Original file line number Diff line number Diff line change @@ -140,6 +140,7 @@ const codeframeRE = /^(?:>?\s+\d+\s+\|.*|\s+\|\s*\^.*)\r?\n/gm
140
140
const { HTMLElement = class { } as typeof globalThis . HTMLElement } = globalThis
141
141
export class ErrorOverlay extends HTMLElement {
142
142
root : ShadowRoot
143
+ closeOnEsc : ( e : KeyboardEvent ) => void
143
144
144
145
constructor ( err : ErrorPayload [ 'err' ] , links = true ) {
145
146
super ( )
@@ -171,9 +172,18 @@ export class ErrorOverlay extends HTMLElement {
171
172
this . root . querySelector ( '.window' ) ! . addEventListener ( 'click' , ( e ) => {
172
173
e . stopPropagation ( )
173
174
} )
175
+
174
176
this . addEventListener ( 'click' , ( ) => {
175
177
this . close ( )
176
178
} )
179
+
180
+ this . closeOnEsc = ( e : KeyboardEvent ) => {
181
+ if ( e . key === 'Escape' || e . code === 'Escape' ) {
182
+ this . close ( )
183
+ }
184
+ }
185
+
186
+ document . addEventListener ( 'keydown' , this . closeOnEsc )
177
187
}
178
188
179
189
text ( selector : string , text : string , linkFiles = false ) : void {
@@ -201,9 +211,9 @@ export class ErrorOverlay extends HTMLElement {
201
211
}
202
212
}
203
213
}
204
-
205
214
close ( ) : void {
206
215
this . parentNode ?. removeChild ( this )
216
+ document . removeEventListener ( 'keydown' , this . closeOnEsc )
207
217
}
208
218
}
209
219
Original file line number Diff line number Diff line change @@ -245,6 +245,26 @@ describe.runIf(isServe)('invalid', () => {
245
245
expect ( message ) . toMatch ( / ^ U n a b l e t o p a r s e H T M L / )
246
246
} )
247
247
248
+ test ( 'should close overlay when clicked away' , async ( ) => {
249
+ await page . goto ( viteTestUrl + '/invalid.html' )
250
+ const errorOverlay = await page . waitForSelector ( 'vite-error-overlay' )
251
+ expect ( errorOverlay ) . toBeTruthy ( )
252
+
253
+ await page . click ( 'html' )
254
+ const isVisbleOverlay = await errorOverlay . isVisible ( )
255
+ expect ( isVisbleOverlay ) . toBeFalsy ( )
256
+ } )
257
+
258
+ test ( 'should close overlay when escape key is pressed' , async ( ) => {
259
+ await page . goto ( viteTestUrl + '/invalid.html' )
260
+ const errorOverlay = await page . waitForSelector ( 'vite-error-overlay' )
261
+ expect ( errorOverlay ) . toBeTruthy ( )
262
+
263
+ await page . keyboard . press ( 'Escape' )
264
+ const isVisbleOverlay = await errorOverlay . isVisible ( )
265
+ expect ( isVisbleOverlay ) . toBeFalsy ( )
266
+ } )
267
+
248
268
test ( 'should reload when fixed' , async ( ) => {
249
269
await page . goto ( viteTestUrl + '/invalid.html' )
250
270
await editFile ( 'invalid.html' , ( content ) => {
You can’t perform that action at this time.
0 commit comments