diff --git a/platform/commonUI/browse/bundle.json b/platform/commonUI/browse/bundle.json index 5f13a124a8..b7b8b29807 100644 --- a/platform/commonUI/browse/bundle.json +++ b/platform/commonUI/browse/bundle.json @@ -16,7 +16,7 @@ { "key": "BrowseController", "implementation": "BrowseController.js", - "depends": [ "$scope", "$route", "$location", "objectService", "navigationService" ] + "depends": [ "$scope", "$route", "$location", "objectService", "navigationService", "urlService"] }, { "key": "BrowseObjectController", diff --git a/platform/commonUI/browse/src/BrowseController.js b/platform/commonUI/browse/src/BrowseController.js index 241c39bb47..50f1da936c 100644 --- a/platform/commonUI/browse/src/BrowseController.js +++ b/platform/commonUI/browse/src/BrowseController.js @@ -41,19 +41,13 @@ define( * * @constructor */ - function BrowseController($scope, $route, $location, objectService, navigationService) { + function BrowseController($scope, $route, $location, objectService, navigationService, urlService) { var path = [ROOT_ID].concat( ($route.current.params.ids || DEFAULT_PATH).split("/") ); function updateRoute(domainObject) { - var context = domainObject && - domainObject.getCapability('context'), - objectPath = context ? context.getPath() : [], - ids = objectPath.map(function (domainObject) { - return domainObject.getId(); - }), - priorRoute = $route.current, + var priorRoute = $route.current, // Act as if params HADN'T changed to avoid page reload unlisten; @@ -61,8 +55,10 @@ define( $route.current = priorRoute; unlisten(); }); - - $location.path("/browse/" + ids.slice(1).join("/")); + // urlService.urlFor used to adjust current + // path to new, addressed, path based on + // domainObject + $location.path(urlService.urlFor("browse", domainObject)); } // Callback for updating the in-scope reference to the object diff --git a/platform/commonUI/browse/test/BrowseControllerSpec.js b/platform/commonUI/browse/test/BrowseControllerSpec.js index 335e2f94eb..3a14589131 100644 --- a/platform/commonUI/browse/test/BrowseControllerSpec.js +++ b/platform/commonUI/browse/test/BrowseControllerSpec.js @@ -36,6 +36,7 @@ define( mockObjectService, mockNavigationService, mockRootObject, + mockUrlService, mockDomainObject, mockNextObject, controller; @@ -58,6 +59,10 @@ define( "$location", [ "path" ] ); + mockUrlService = jasmine.createSpyObj( + "urlService", + ["urlFor"] + ); mockObjectService = jasmine.createSpyObj( "objectService", [ "getObjects" ] @@ -102,7 +107,8 @@ define( mockRoute, mockLocation, mockObjectService, - mockNavigationService + mockNavigationService, + mockUrlService ); }); @@ -112,7 +118,8 @@ define( mockRoute, mockLocation, mockObjectService, - mockNavigationService + mockNavigationService, + mockUrlService ); expect(mockNavigationService.setNavigation) .toHaveBeenCalledWith(mockDomainObject); @@ -125,7 +132,8 @@ define( mockRoute, mockLocation, mockObjectService, - mockNavigationService + mockNavigationService, + mockUrlService ); expect(mockScope.navigatedObject).toBe(mockDomainObject); }); @@ -200,7 +208,8 @@ define( it("updates the displayed route to reflect current navigation", function () { var mockContext = jasmine.createSpyObj('context', ['getPath']), - mockUnlisten = jasmine.createSpy('unlisten'); + mockUnlisten = jasmine.createSpy('unlisten'), + mockMode = "browse"; mockContext.getPath.andReturn( [mockRootObject, mockDomainObject, mockNextObject] @@ -213,7 +222,11 @@ define( mockNavigationService.addListener.mostRecentCall.args[0]( mockNextObject ); - expect(mockLocation.path).toHaveBeenCalledWith("/browse/mine/next"); + // location.path to be called with the urlService's + // urlFor function with the next domainObject and mode + expect(mockLocation.path).toHaveBeenCalledWith( + mockUrlService.urlFor(mockMode, mockNextObject) + ); // Exercise the Angular workaround mockScope.$on.mostRecentCall.args[1]();