@@ -15,41 +15,45 @@ function quote_attr(str) {
1515 return '"' + str . replace ( '"' , '\\"' ) + '"' ;
1616}
1717
18- function build_version_select ( release ) {
19- let buf = [ '<select id="version_select">' ] ;
20- const major_minor = release . split ( "." ) . slice ( 0 , 2 ) . join ( "." ) ;
21-
22- Object . entries ( all_versions ) . forEach ( function ( [ version , title ] ) {
18+ const _create_version_select = ( release ) => {
19+ const major_minor = release . split ( '.' ) . slice ( 0 , 2 ) . join ( '.' ) ;
20+ const select = document . createElement ( 'select' ) ;
21+ select . className = 'version-select' ;
22+
23+ for ( const [ version , title ] in all_versions ) {
24+ const option = document . createElement ( 'option' ) ;
25+ option . value = version ;
2326 if ( version === major_minor ) {
24- buf . push ( '<option value=' + quote_attr ( version ) + ' selected="selected">' + release + '</option>' ) ;
27+ option . text = release ;
28+ option . selected = true ;
2529 } else {
26- buf . push ( '< option value=' + quote_attr ( version ) + '>' + title + '</option>' ) ;
30+ option . text = title ;
2731 }
28- } ) ;
29-
30- buf . push ( '</select>' ) ;
31- return buf . join ( '' ) ;
32- }
32+ select . add ( option ) ;
33+ }
3334
34- function build_language_select ( current_language ) {
35- let buf = [ '<select id="language_select">' ] ;
35+ return select ;
36+ } ;
3637
37- Object . entries ( all_languages ) . forEach ( function ( [ language , title ] ) {
38- if ( language === current_language ) {
39- buf . push ( '<option value="' + language + '" selected="selected">' + title + '</option>' ) ;
40- } else {
41- buf . push ( '<option value="' + language + '">' + title + '</option>' ) ;
42- }
43- } ) ;
38+ const _create_language_select = ( current_language ) => {
4439 if ( ! ( current_language in all_languages ) ) {
45- // In case we're browsing a language that is not yet in all_languages.
46- buf . push ( '<option value="' + current_language + '" selected="selected">' +
47- current_language + '</option>' ) ;
48- all_languages [ current_language ] = current_language ;
40+ // In case we are browsing a language that is not yet in all_languages.
41+ all_languages [ current_language ] = current_language ;
4942 }
50- buf . push ( '</select>' ) ;
51- return buf . join ( '' ) ;
52- }
43+
44+ const select = document . createElement ( 'select' ) ;
45+ select . className = 'language-select' ;
46+
47+ for ( const [ language , title ] in all_languages ) {
48+ const option = document . createElement ( 'option' ) ;
49+ option . value = language ;
50+ option . text = title ;
51+ if ( language === current_language ) option . selected = true ;
52+ select . add ( option ) ;
53+ }
54+
55+ return select ;
56+ } ;
5357
5458function navigate_to_first_existing ( urls ) {
5559 // Navigate to the first existing URL in urls.
@@ -134,21 +138,23 @@ const _initialise_switchers = () => {
134138 const language_segment = language_segment_from_url ( ) ;
135139 const current_language = language_segment . replace ( / \/ + $ / g, '' ) || 'en' ;
136140
137- const version_select = build_version_select ( DOCUMENTATION_OPTIONS . VERSION ) ;
138- document . querySelectorAll ( '.version_switcher_placeholder' ) . forEach ( ( placeholder ) => {
139- placeholder . innerHTML = version_select ;
140-
141- let selectElement = placeholder . querySelector ( 'select' ) ;
142- selectElement . addEventListener ( 'change' , on_version_switch ) ;
143- } ) ;
144-
145- const language_select = build_language_select ( current_language ) ;
146- document . querySelectorAll ( '.language_switcher_placeholder' ) . forEach ( ( placeholder ) => {
147- placeholder . innerHTML = language_select ;
141+ const version_select = _create_version_select ( DOCUMENTATION_OPTIONS . VERSION ) ;
142+ document
143+ . querySelectorAll ( '.version_switcher_placeholder' )
144+ . forEach ( ( placeholder ) => {
145+ const s = version_select . cloneNode ( true ) ;
146+ s . addEventListener ( 'change' , on_version_switch ) ;
147+ placeholder . append ( s ) ;
148+ } ) ;
148149
149- let selectElement = placeholder . querySelector ( 'select' ) ;
150- selectElement . addEventListener ( 'change' , on_language_switch ) ;
151- } ) ;
150+ const language_select = _create_language_select ( current_language ) ;
151+ document
152+ . querySelectorAll ( '.language_switcher_placeholder' )
153+ . forEach ( ( placeholder ) => {
154+ const s = language_select . cloneNode ( true ) ;
155+ s . addEventListener ( 'change' , on_language_switch ) ;
156+ placeholder . append ( s ) ;
157+ } ) ;
152158} ;
153159
154160if ( document . readyState !== 'loading' ) {
0 commit comments