main
js 33 lines 1006 Bytes
Raw
1 export function setupDocumentReadyState(
2 document: Document,
3 Event: typeof Event,
4 ) {
5 let readyState: 0 | 1 | 2 = 0;
6 Object.defineProperty(document, 'readyState', {
7 get() {
8 switch (readyState) {
9 case 0:
10 return 'loading';
11 case 1:
12 return 'interactive';
13 case 2:
14 return 'complete';
15 }
16 },
17 set(value) {
18 if (value === 'interactive' && readyState < 1) {
19 readyState = 1;
20 document.dispatchEvent(new Event('readystatechange'));
21 } else if (value === 'complete' && readyState < 2) {
22 readyState = 2;
23 document.dispatchEvent(new Event('readystatechange'));
24 document.dispatchEvent(new Event('DOMContentLoaded'));
25 } else if (value === 'loading') {
26 // We allow resetting the readyState to loading mostly for pragamtism.
27 // tests that use this environment don't reset the document between tests.
28 readyState = 0;
29 }
30 },
31 configurable: true,
32 });
33 }