@@ -91,24 +91,32 @@ const _prepareAccordion = (tocElement) => {
9191const _generateFallbackUrls = async ( targetUrl ) => {
9292
9393 const _deconstructUrl = ( urlObject ) => {
94+ let urlBase = urlObject . origin ;
9495 let version = '' ;
9596 let language = '' ;
9697 const originalPathParts = [ ] ;
9798 for ( let fragment of urlObject . pathname . split ( '/' ) . reverse ( ) ) {
98- if ( fragment . match ( / ^ (?: s a a s - ) ? \d { 2 } \. \d $ | ^ m a s t e r $ / ) ) {
99- version = fragment ;
100- } else if ( fragment . match ( / ^ [ a - z ] { 2 } (?: _ [ A - Z ] { 2 } ) ? $ / ) ) {
101- language = fragment ;
102- } else if ( fragment . length > 0 ) {
103- originalPathParts . unshift ( fragment ) ;
99+ if ( fragment . length > 0 ) {
100+ if ( fragment . match ( / ^ (?: s a a s - ) ? \d { 2 } \. \d $ | ^ m a s t e r $ / ) ) {
101+ // Try to match the version before considering the fragment part of the path.
102+ version = fragment ;
103+ } else if ( fragment . match ( / ^ [ a - z ] { 2 } (?: _ [ A - Z ] { 2 } ) ? $ / ) ) {
104+ // Try to match the language before considering the fragment part of the path.
105+ language = fragment ;
106+ } else if ( version || language ) {
107+ // The fragment is part of the base URL but cannot be part of the part anymore.
108+ urlBase += `/${ fragment } ` ;
109+ } else {
110+ // The fragment is part of the original path.
111+ originalPathParts . unshift ( fragment ) ;
112+ }
104113 }
105114 }
106- return [ version , language , originalPathParts ] ;
115+ return [ urlBase , version , language , originalPathParts ] ;
107116 } ;
108117
109118 const targetUrlObject = new URL ( targetUrl ) ;
110- const [ version , language , originalPathParts ] = _deconstructUrl ( targetUrlObject ) ;
111- const urlBase = targetUrlObject . origin ;
119+ const [ urlBase , version , language , originalPathParts ] = _deconstructUrl ( targetUrlObject ) ;
112120
113121 // Generate the fallback URLs.
114122 const fallbackUrls = [ ] ;
@@ -124,21 +132,23 @@ const _generateFallbackUrls = async (targetUrl) => {
124132 }
125133
126134 // Build the fallback URL from the version, language and path parts, if any.
127- if ( version && language )
135+ if ( version && language ) {
128136 fallbackUrls . push (
129137 `${ urlBase } /${ version } /${ language } /${ fallbackPathParts . join ( '/' ) } ` ,
130138 `${ urlBase } /${ version } /${ fallbackPathParts . join ( '/' ) } ` ,
131139 ) ;
132- else if ( version && ! language )
140+ } else if ( version && ! language ) {
133141 fallbackUrls . push ( `${ urlBase } /${ version } /${ fallbackPathParts . join ( '/' ) } ` ) ;
134- else if ( ! version && language )
142+ } else if ( ! version && language ) {
135143 fallbackUrls . push (
136144 `${ urlBase } /${ language } /${ fallbackPathParts . join ( '/' ) } ` ,
137145 `${ urlBase } /${ fallbackPathParts . join ( '/' ) } ` ,
138146 ) ;
139- else if ( ! version && ! language )
147+ } else if ( ! version && ! language ) {
140148 fallbackUrls . push ( `${ urlBase } /${ fallbackPathParts . join ( '/' ) } ` ) ;
149+ }
141150 }
151+ fallbackUrls . push ( `${ urlBase } /` ) ;
142152 return fallbackUrls ;
143153} ;
144154
0 commit comments