@@ -141,61 +141,80 @@ export default class ProjectVersionController extends Controller {
141141
142142 @action
143143 updateProject ( project , ver /*, component */ ) {
144- let projectVersionID = ver . compactVersion ;
145- let endingRoute ;
146- switch ( this . router . currentRouteName ) {
147- case 'project-version.classes.class' : {
148- let className = this . _getEncodedNameForCurrentClass ( ) ;
149- endingRoute = `classes/${ className } ` ;
150- break ;
151- }
152- case 'project-version.modules.module' : {
153- let moduleName = encodeURIComponent ( this . moduleController . model . name ) ;
154- endingRoute = `modules/${ moduleName } ` ;
155- break ;
156- }
157- case 'project-version.namespaces.namespace' : {
158- let namespaceName = this . namespaceController . model . name ;
159- endingRoute = `namespaces/${ namespaceName } ` ;
160- break ;
161- }
162- default :
163- endingRoute = '' ;
164- break ;
165- }
166- // if the user is navigating to/from api versions >= 2.16, take them
167- // to the home page instead of trying to translate the url
168- let shouldConvertPackages = this . _shouldConvertPackages (
169- ver ,
170- this . projectService . version ,
144+ this . router . transitionTo (
145+ findEndingRoute ( {
146+ project,
147+ targetVersion : ver . id ,
148+ currentVersion : this . projectService . version ,
149+ currentRouteName : this . router . currentRouteName ,
150+ classModelName : this . classController ?. model ?. get ( 'name' ) ,
151+ moduleModelName : this . moduleController ?. model ?. name ,
152+ namespaceModelName : this . namespaceController ?. model ?. name ,
153+ currentAnchor : window . location . hash ,
154+ } ) ,
171155 ) ;
172- let isEmberProject = project === 'ember' ;
173-
174- if ( ! isEmberProject || ! shouldConvertPackages ) {
175- this . router . transitionTo (
176- `/${ project } /${ projectVersionID } /${ endingRoute } ` ,
177- ) ;
178- } else {
179- this . router . transitionTo ( `/${ project } /${ projectVersionID } ` ) ;
180- }
181156 }
157+ }
182158
183- _getEncodedNameForCurrentClass ( ) {
184- // escape any reserved characters for url, like slashes
185- return encodeURIComponent ( this . classController . model . get ( 'name' ) ) ;
159+ export function findEndingRoute ( {
160+ project,
161+ targetVersion,
162+ currentVersion,
163+ currentRouteName,
164+ classModelName,
165+ moduleModelName,
166+ namespaceModelName,
167+ currentAnchor,
168+ } ) {
169+ let projectVersionID = getCompactVersion ( targetVersion ) ;
170+ let endingRoute ;
171+ switch ( currentRouteName ) {
172+ case 'project-version.classes.class' : {
173+ let className = encodeURIComponent ( classModelName ) ;
174+ endingRoute = `classes/${ className } ` ;
175+ break ;
176+ }
177+ case 'project-version.modules.module' : {
178+ let moduleName = encodeURIComponent ( moduleModelName ) ;
179+ endingRoute = `modules/${ moduleName } ` ;
180+ break ;
181+ }
182+ case 'project-version.namespaces.namespace' : {
183+ let namespaceName = namespaceModelName ;
184+ endingRoute = `namespaces/${ namespaceName } ` ;
185+ break ;
186+ }
187+ default :
188+ endingRoute = '' ;
189+ break ;
186190 }
187191
188- // Input some version info, returns a boolean based on
189- // whether the user is switching versions for a 2.16 docs release or later.
190- // The urls for pre-2.16 classes and later packages are quite different
191- _shouldConvertPackages ( targetVer , previousVer ) {
192- let targetVersion = getCompactVersion ( targetVer . id ) ;
193- let previousVersion = getCompactVersion ( previousVer ) ;
194- let previousComparison = semverCompare ( previousVersion , '2.16' ) ;
195- let targetComparison = semverCompare ( targetVersion , '2.16' ) ;
196- return (
197- ( previousComparison < 0 && targetComparison >= 0 ) ||
198- ( previousComparison >= 0 && targetComparison < 0 )
199- ) ;
192+ let isEmberProject = project === 'ember' ;
193+
194+ // if the user is navigating to/from api versions >= 2.16, take them
195+ // to the home page instead of trying to translate the url
196+ let shouldConvertPackages = _shouldConvertPackages (
197+ targetVersion ,
198+ currentVersion ,
199+ ) ;
200+
201+ if ( ! isEmberProject || ! shouldConvertPackages ) {
202+ return `/${ project } /${ projectVersionID } /${ endingRoute } ${ currentAnchor } ` ;
203+ } else {
204+ return `/${ project } /${ projectVersionID } ` ;
200205 }
201206}
207+
208+ // Input some version info, returns a boolean based on
209+ // whether the user is switching versions for a 2.16 docs release or later.
210+ // The urls for pre-2.16 classes and later packages are quite different
211+ function _shouldConvertPackages ( targetVer , previousVer ) {
212+ let targetVersion = getCompactVersion ( targetVer ) ;
213+ let previousVersion = getCompactVersion ( previousVer ) ;
214+ let previousComparison = semverCompare ( previousVersion , '2.16' ) ;
215+ let targetComparison = semverCompare ( targetVersion , '2.16' ) ;
216+ return (
217+ ( previousComparison < 0 && targetComparison >= 0 ) ||
218+ ( previousComparison >= 0 && targetComparison < 0 )
219+ ) ;
220+ }
0 commit comments