@@ -4,42 +4,50 @@ import React from 'react';
4
4
5
5
import { releases } from '../public/releases.js' ;
6
6
7
- const createHeaderElement = ( element ) => {
8
- const timer = setInterval ( function ( ) {
9
- let selector = document . querySelector ( '.sidebar-header' ) ;
10
- if ( selector !== null ) {
11
- selector . parentNode . insertBefore ( element , selector . nextSibling ) ;
12
- if ( document . querySelector ( '#release-selector' ) . innerHTML ) {
13
- clearInterval ( timer ) ;
7
+ document . addEventListener ( 'DOMContentLoaded' , function ( ) {
8
+ const callback = function ( mutationsList ) {
9
+ for ( let i = 0 , len = mutationsList . length ; i < len ; i ++ ) {
10
+ if ( mutationsList [ i ] . type === 'childList' ) {
11
+
12
+ // Add version select
13
+ if ( ! document . querySelector ( '#release-selector' ) ) {
14
+ const urlVersionRegex = / \/ ( l a t e s t | v ( \d \. ? ) { 3 } [ ^ \/ ] * ) \/ / gmi;
15
+ const selector = document . querySelector ( '.sidebar-header' ) ;
16
+ let element ;
17
+ if ( urlVersionRegex . test ( location . href ) ) {
18
+ const releasesSelector = document . createElement ( 'select' ) ;
19
+ releasesSelector . id = 'release-selector' ;
20
+ Object . entries ( releases ) . forEach ( ( value ) => {
21
+ const option = document . createElement ( 'option' ) ;
22
+ option . text = value [ 0 ] ;
23
+ option . value = value [ 1 ] ;
24
+ releasesSelector . appendChild ( option )
25
+ } ) ;
26
+ element = releasesSelector ;
27
+
28
+ releasesSelector . onchange = ( selection ) => {
29
+ const version = selection . target . value === 'latest' ? 'latest' : `v${ selection . target . value } ` ;
30
+ location . pathname = location . pathname . replace ( urlVersionRegex , version ) ;
31
+ } ;
32
+ } else {
33
+ const version = document . createElement ( 'div' ) ;
34
+ version . id = 'release-selector' ;
35
+ version . innerText = Object . keys ( releases ) [ 0 ] ;
36
+ element = version ;
37
+ }
38
+ selector . parentNode . insertBefore ( element , selector . nextSibling ) ;
39
+
40
+ }
41
+ break ;
14
42
}
15
43
}
16
- } , 500 ) ;
17
- } ;
44
+ } ;
45
+ const observer = new MutationObserver ( callback ) ;
46
+ observer . observe ( document . body , { childList : true , subtree : false } ) ;
47
+ } , false ) ;
48
+
18
49
19
- setTimeout ( ( ) => {
20
- const urlVersionRegex = / \/ ( l a t e s t | v ( \d \. ? ) { 3 } [ ^ \/ ] * ) \/ / gmi;
21
- if ( urlVersionRegex . test ( location . href ) ) {
22
- const releasesSelector = document . createElement ( 'select' ) ;
23
- releasesSelector . id = 'release-selector' ;
24
- Object . entries ( releases ) . map ( ( value ) => {
25
- const option = document . createElement ( 'option' ) ;
26
- option . text = value [ 0 ] ;
27
- option . value = value [ 1 ] ;
28
- releasesSelector . appendChild ( option )
29
- } ) ;
30
- createHeaderElement ( releasesSelector ) ;
31
50
32
- releasesSelector . onchange = ( selection ) => {
33
- const version = selection . target . value === 'latest' ? 'latest' : `v${ selection . target . value } ` ;
34
- location . pathname = location . pathname . replace ( urlVersionRegex , version ) ;
35
- } ;
36
- } else {
37
- const version = document . createElement ( 'div' ) ;
38
- version . id = 'release-selector' ;
39
- version . innerText = Object . keys ( releases ) [ 0 ] ;
40
- createHeaderElement ( version ) ;
41
- }
42
- } , 2000 ) ;
43
51
44
52
addons . setConfig ( {
45
53
theme,
0 commit comments