From 54af458b6b06fc4c43b6ee512d4c9a3d60f859a4 Mon Sep 17 00:00:00 2001 From: David limkys Date: Sun, 12 Apr 2015 00:03:44 +0300 Subject: [PATCH 1/4] Added the ability to navigate to a route using the components name. --- src/grammar.ats | 41 +++++++++++++++++++++++++++++++++++++++++ src/router.ats | 6 +++++- 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/src/grammar.ats b/src/grammar.ats index 8ef066a..fe29fee 100644 --- a/src/grammar.ats +++ b/src/grammar.ats @@ -71,6 +71,43 @@ export class Grammar { return instruction; } + recognizeComponent(name:string, parentComponentName = '/') { + if (typeof name === 'undefined') { + return; + } + + var componentRecognizer = this.rules[parentComponentName]; + if (!componentRecognizer) { + return; + } + + var handlers = componentRecognizer.handlersFor(name); + if (!handlers) { + return; + } + + var handler = handlers[0].handler; + + var instruction = { + viewports: {}, + params: {}, + canonicalUrl: handler.path + }; + + + forEach(handler.components, (componentName, viewportName) => { + instruction.viewports[viewportName] = { + viewports: {} + }; + }); + + forEach(instruction.viewports, (instruction, componentName) => { + instruction.component = handler.components[componentName]; + }); + + return instruction; + } + generate(name, params) { var path = ''; var solution; @@ -183,6 +220,10 @@ class CanonicalRecognizer { return context; } + handlersFor(componentName) { + return this.recognizer.handlersFor(componentName); + } + generate(name, params) { return this.recognizer.generate(name, params); } diff --git a/src/router.ats b/src/router.ats index 89d3856..5104b13 100644 --- a/src/router.ats +++ b/src/router.ats @@ -73,7 +73,7 @@ class Router { this.lastNavigationAttempt = url; - var instruction = this.recognize(url); + var instruction = this.recognize(url) || this.recognizeComponent(url); if (!instruction) { return Promise.reject(); @@ -161,6 +161,10 @@ class Router { return this.registry.recognize(url); } + recognizeComponent(name) { + return this.registry.recognizeComponent(name); + } + /** From 6d4bbef9a46f8b5ebe74266f7640ddd5c7b03957 Mon Sep 17 00:00:00 2001 From: David limkys Date: Sun, 12 Apr 2015 00:04:57 +0300 Subject: [PATCH 2/4] Changed docs. --- src/router.ats | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/router.ats b/src/router.ats index 5104b13..1db1a8f 100644 --- a/src/router.ats +++ b/src/router.ats @@ -63,7 +63,7 @@ class Router { /** - * @description Navigate to a URL. + * @description Navigate to a URL or Component. * Returns the cannonical URL for the route navigated to. */ navigate(url) { From e9c8bc6fc4385d34af48e084269b644161c7158f Mon Sep 17 00:00:00 2001 From: David limkys Date: Sun, 26 Apr 2015 23:43:33 +0300 Subject: [PATCH 3/4] Added a test. --- test/router-viewport.es5.spec.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/test/router-viewport.es5.spec.js b/test/router-viewport.es5.spec.js index 53f12c4..fb7b303 100644 --- a/test/router-viewport.es5.spec.js +++ b/test/router-viewport.es5.spec.js @@ -701,6 +701,18 @@ describe('ngOutlet', function () { expect($router.navigating).toBe(false); }); + it('Should allow navigating by component name', function () { + compile(''); + + $router.config([ + { path: '/', component: 'one' } + ]); + + $router.navigate('/'); + $rootScope.$digest(); + + expect(elt.text()).toBe('one'); + }); function registerComponent(name, template, componentConstructor, routeConfig) { if (!template) { From ae0b3c75c49a8b46dec1305a90a030c881b443c1 Mon Sep 17 00:00:00 2001 From: David limkys Date: Fri, 8 May 2015 07:47:21 +0300 Subject: [PATCH 4/4] Fixed test. --- test/router-viewport.es5.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/router-viewport.es5.spec.js b/test/router-viewport.es5.spec.js index fb7b303..9c41f5c 100644 --- a/test/router-viewport.es5.spec.js +++ b/test/router-viewport.es5.spec.js @@ -708,7 +708,7 @@ describe('ngOutlet', function () { { path: '/', component: 'one' } ]); - $router.navigate('/'); + $router.navigate('one'); $rootScope.$digest(); expect(elt.text()).toBe('one');