You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by ha...@apache.org on 2020/02/10 08:09:31 UTC

[royale-asjs] branch feature/router updated (5eeaab3 -> 7f72ead)

This is an automated email from the ASF dual-hosted git repository.

harbs pushed a change to branch feature/router
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git.


    from 5eeaab3  Merge branch 'develop' into feature/router
     add 20a1356  Swap to Collection renderer as default for Express DataGrid, aligning with Model dataProvider default (remove related temporary 'fix' from a Crux example)
     add 31f5200  Merge branch 'develop' of https://github.com/apache/royale-asjs into develop
     add 0795dbb  rudimentary support for lineargradient
     add 6e9d3b5  support 'justify' in VerticalLayout
     add d8aeacf  support custom skins in Spark Containers
     add a122377  refactor disabledChangeCheck to its own interface
     add 08768b9  - Implemented a js-only distribution
     add 87f454b  Merge pull request #707 from chrisdutz/feature/js-only-distribution
     add 18a5a14  maven-distribution: make js-only maven sdk to work on IDEs too
     add 550a049  jewel: little fixes and clenaning
     add 1bb1cdc  jewel-listcontroller: simplify all code to extend the basic one and left just jewel unique code
     add aefb576  frameworks: all libraries are checked for tests to run
     add e14fd19  maven-distribution: fix compilation for Moonshine IDE (and still works for VSCode)
     add 7cb2203  maven-distribution: remove commented execution
     add 0ce729f  maven-distribution: with a clean repo distribution was still trying to download Adobe AIR, seems latest two profiles was causing the bind and are not needed anymore
     add 1e3b815  Adding another model to network, can be convenient for displaying thumbnails before uploading.
     add 2ff66f3  jewel: Add VirtualList for performant lists that need to recycle renderers
     add 7dcc0f8  jewel: Add VirtualComboBox for combos that need performance in the popup list recycling renderers
     add 67dc91e  jewel-virtualcombox: fix popup reference
     add 1c4b9d8  tour-de-jewel: add virtual lists pane with VirtualList and VirtualComboBox
     add 4a0a652  some missing imports
     add 04f7abf  jewel.virtual: some fixes
     add 64dc10f  jewel: add combobox presentation model that brings "rowCount"  to combobox to manage how many items should show popup list (defaults to 5)
     add 82c143b  jewel-combobox: use rowCount and rowHeight in popup list
     add 277ac4f  jewel-itemrenderer: default rowHeight to 34px (as $item-min-height in sass), and return to flex layout now that we have more control of rowCount/rowHeight
     add 4c36170  jewel-combobox: fix list size not updating to match the component's width when combo's width resize
     add 19d6627  jewel-combobox: make possible item renderers in combobox popup list
     add d465081  jewel-label: refactor styles to be more flexible
     add 8ce359c  tour-de-jewel: add icons to the virtual combobox example
     add f734def  add missing import
     new 9c77576  Merge branch 'develop' into feature/router
     new 7f72ead  Router changes

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 distribution/jars/compiler-compjsc/pom.xml         |   2 +-
 distribution/jars/compiler-mxmljsc/pom.xml         |   2 +-
 distribution/pom.xml                               | 435 ++++++++++---------
 .../main/assembly/{bin.xml => bin-with-swf.xml}    |   3 +-
 distribution/src/main/assembly/bin.xml             |   2 +-
 .../{dir.xml => component-royale-with-swf.xml}     |  30 +-
 .../{component.xml => component-royale.xml}        |  61 ++-
 .../src/main/assembly/component-swfobject.xml      |  47 +++
 .../main/assembly/{dir.xml => dir-with-swf.xml}    |   4 +-
 distribution/src/main/assembly/dir.xml             |   5 +-
 ...ion.xml => royale-sdk-description-with-swf.xml} |  58 +--
 .../src/main/resources/royale-sdk-description.xml  |   1 -
 .../beads/DataItemRendererFactoryForArrayData.as   | 216 ----------
 .../src/main/resources/jewel-example-styles.css    |  12 +
 .../TourDeJewel/src/main/royale/MainContent.mxml   |  10 +-
 .../src/main/royale/VirtualListsPlayGround.mxml    | 152 +++++++
 .../itemRenderers/SimpleIconListItemRenderer.mxml  |  47 +++
 .../src/main/royale/models/ListsModel.as           |  46 ++
 .../src/main/royale/models/MainNavigationModel.as  |   1 +
 frameworks/build.xml                               | 160 ++++++-
 .../projects/Basic/src/main/resources/defaults.css |   5 +
 .../apache/royale/core/StyledMXMLItemRenderer.as   |   2 +-
 .../org/apache/royale/html/beads/DateFieldView.as  |   3 +-
 .../royale/html/beads/models/DateChooserModel.as   |   4 +-
 .../org/apache/royale/routing/IPathRouteBead.as}   |  19 +-
 .../{RouteToComponent.as => PathRouteBead.as}      |  91 +---
 .../org/apache/royale/routing/RouteToComponent.as  |  58 +--
 .../org/apache/royale/routing/RouteToState.as      |  34 +-
 .../royale/org/apache/royale/routing/Router.as     |   2 +
 .../projects/Core/src/main/royale/CoreClasses.as   |   2 +-
 .../org/apache/royale/core/IDateChooserModel.as    |  13 -
 .../core/IDateChooserModelWithChangeCheck.as}      |  37 +-
 .../Express/src/main/resources/defaults.css        |   2 +-
 .../src/main/resources/express-manifest.xml        |   1 +
 .../projects/Jewel/src/main/resources/defaults.css |  28 +-
 .../Jewel/src/main/resources/jewel-manifest.xml    |   6 +
 .../projects/Jewel/src/main/royale/JewelClasses.as |   1 +
 .../royale/org/apache/royale/jewel/ComboBox.as     |  49 ++-
 .../org/apache/royale/jewel/VirtualComboBox.as     |  56 +++
 .../royale/org/apache/royale/jewel/VirtualList.as  |  53 +++
 .../ListSingleSelectionMouseController.as          | 115 +----
 ...tualDataItemRendererFactoryForCollectionView.as | 253 +++++++++++
 .../jewel/beads/layouts/SimpleHorizontalLayout.as  |   5 +-
 .../jewel/beads/layouts/SimpleVerticalLayout.as    |   5 +-
 .../beads/layouts/VirtualListVerticalLayout.as     | 465 +++++++++++++++++++++
 .../beads/models/ComboBoxPresentationModel.as      |  71 ++++
 .../royale/jewel/beads/models/DateChooserModel.as  |  19 -
 .../jewel/beads/models/ListPresentationModel.as    |   2 +-
 .../royale/jewel/beads/views/ComboBoxPopUpView.as  |  62 ++-
 .../royale/jewel/beads/views/ComboBoxView.as       |  24 +-
 .../apache/royale/jewel/beads/views/ListView.as    |   6 +-
 .../jewel/beads/views/VirtualComboBoxPopUpView.as} |  47 ++-
 .../royale/jewel/beads/views/VirtualListView.as    | 137 ++++++
 .../jewel/supportClasses/combobox/ComboBoxPopUp.as |  65 +++
 .../combobox/IComboBoxPresentationModel.as}        |  56 ++-
 .../combobox/VirtualComboBoxPopUp.as}              |  36 +-
 .../projects/Jewel/src/main/sass/_global.sass      |   6 -
 .../Jewel/src/main/sass/components/_combobox.sass  |  10 +-
 .../src/main/sass/components/_itemRenderer.sass    |   3 +-
 .../Jewel/src/main/sass/components/_label.sass     |   5 +
 .../Jewel/src/main/sass/components/_list.sass      |   8 +-
 .../src/main/royale/mx/display/Graphics.as         | 156 ++++++-
 .../src/main/royale/mx/graphics/LinearGradient.as  |   8 +-
 .../Network/src/main/resources/basic-manifest.xml  |   1 +
 .../beads/FileModelWithParamsAndFileContent.as     |  58 +++
 .../SparkRoyale/src/main/resources/defaults.css    |   9 +-
 .../src/main/royale/SparkRoyaleClasses.as          |   1 +
 .../src/main/royale/spark/components/Panel.as      | 156 +++----
 .../components/beads/SkinnableContainerView.as     |  14 +
 .../spark/components/beads/SparkContainerView.as   |   5 +
 .../components/beads/SparkSkinScrollingViewport.as | 102 ++++-
 .../main/royale/spark/layouts/VerticalLayout.as    |   1 -
 .../spark/layouts/supportClasses/LayoutBase.as     |  32 +-
 .../layouts/supportClasses/SparkLayoutBead.as      |  10 +-
 .../main/royale/spark/skins/spark/PanelSkin.mxml   | 302 +++++++++++++
 .../JewelTheme/src/main/resources/defaults.css     |   6 +-
 .../src/main/sass/components-primary/_label.sass   |  19 +-
 pom.xml                                            |   2 +
 src/main/script/prerequisiteCheckFramework.groovy  |   4 +-
 79 files changed, 2994 insertions(+), 1052 deletions(-)
 copy distribution/src/main/assembly/{bin.xml => bin-with-swf.xml} (86%)
 copy distribution/src/main/assembly/{dir.xml => component-royale-with-swf.xml} (50%)
 rename distribution/src/main/assembly/{component.xml => component-royale.xml} (94%)
 create mode 100644 distribution/src/main/assembly/component-swfobject.xml
 copy distribution/src/main/assembly/{dir.xml => dir-with-swf.xml} (81%)
 copy distribution/src/main/resources/{royale-sdk-description.xml => royale-sdk-description-with-swf.xml} (91%)
 delete mode 100644 examples/crux/CruxGitHubCommitLogViewer/src/main/royale/org/apache/royale/html/beads/DataItemRendererFactoryForArrayData.as
 create mode 100644 examples/royale/TourDeJewel/src/main/royale/VirtualListsPlayGround.mxml
 create mode 100644 examples/royale/TourDeJewel/src/main/royale/itemRenderers/SimpleIconListItemRenderer.mxml
 copy frameworks/{themes/JewelTheme/src/main/sass/components-primary/_label.sass => projects/Basic/src/main/royale/org/apache/royale/routing/IPathRouteBead.as} (80%)
 copy frameworks/projects/Basic/src/main/royale/org/apache/royale/routing/{RouteToComponent.as => PathRouteBead.as} (59%)
 copy frameworks/{themes/JewelTheme/src/main/sass/components-primary/_label.sass => projects/Core/src/main/royale/org/apache/royale/core/IDateChooserModelWithChangeCheck.as} (52%)
 create mode 100644 frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/VirtualComboBox.as
 create mode 100644 frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/VirtualList.as
 create mode 100644 frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/VirtualDataItemRendererFactoryForCollectionView.as
 create mode 100644 frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/layouts/VirtualListVerticalLayout.as
 create mode 100644 frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/models/ComboBoxPresentationModel.as
 copy frameworks/projects/Jewel/src/main/{sass/components/_label.sass => royale/org/apache/royale/jewel/beads/views/VirtualComboBoxPopUpView.as} (51%)
 create mode 100644 frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/VirtualListView.as
 copy frameworks/projects/Jewel/src/main/{sass/components/_itemRenderer.sass => royale/org/apache/royale/jewel/supportClasses/combobox/IComboBoxPresentationModel.as} (52%)
 copy frameworks/{themes/JewelTheme/src/main/sass/components-primary/_label.sass => projects/Jewel/src/main/royale/org/apache/royale/jewel/supportClasses/combobox/VirtualComboBoxPopUp.as} (61%)
 create mode 100644 frameworks/projects/Network/src/main/royale/org/apache/royale/file/beads/FileModelWithParamsAndFileContent.as
 create mode 100644 frameworks/projects/SparkRoyale/src/main/royale/spark/skins/spark/PanelSkin.mxml


[royale-asjs] 01/02: Merge branch 'develop' into feature/router

Posted by ha...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

harbs pushed a commit to branch feature/router
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git

commit 9c77576b1dd2f925b15a95f9fb0626eb798109a2
Merge: 5eeaab3 f734def
Author: Harbs <ha...@in-tools.com>
AuthorDate: Sun Feb 9 23:02:17 2020 +0200

    Merge branch 'develop' into feature/router

 distribution/jars/compiler-compjsc/pom.xml         |   2 +-
 distribution/jars/compiler-mxmljsc/pom.xml         |   2 +-
 distribution/pom.xml                               | 435 ++++++++++---------
 .../main/assembly/{bin.xml => bin-with-swf.xml}    |   3 +-
 distribution/src/main/assembly/bin.xml             |   2 +-
 .../{dir.xml => component-royale-with-swf.xml}     |  30 +-
 .../{component.xml => component-royale.xml}        |  61 ++-
 .../src/main/assembly/component-swfobject.xml      |  47 +++
 .../main/assembly/{dir.xml => dir-with-swf.xml}    |   4 +-
 distribution/src/main/assembly/dir.xml             |   5 +-
 ...ion.xml => royale-sdk-description-with-swf.xml} |  58 +--
 .../src/main/resources/royale-sdk-description.xml  |   1 -
 .../beads/DataItemRendererFactoryForArrayData.as   | 216 ----------
 .../src/main/resources/jewel-example-styles.css    |  12 +
 .../TourDeJewel/src/main/royale/MainContent.mxml   |   1 +
 .../src/main/royale/VirtualListsPlayGround.mxml    | 152 +++++++
 .../itemRenderers/SimpleIconListItemRenderer.mxml  |  47 +++
 .../src/main/royale/models/ListsModel.as           |  46 ++
 .../src/main/royale/models/MainNavigationModel.as  |   1 +
 frameworks/build.xml                               | 160 ++++++-
 .../apache/royale/core/StyledMXMLItemRenderer.as   |   2 +-
 .../org/apache/royale/html/beads/DateFieldView.as  |   3 +-
 .../royale/html/beads/models/DateChooserModel.as   |   4 +-
 .../projects/Core/src/main/royale/CoreClasses.as   |   2 +-
 .../org/apache/royale/core/IDateChooserModel.as    |  13 -
 .../core/IDateChooserModelWithChangeCheck.as}      |  37 +-
 .../Express/src/main/resources/defaults.css        |   2 +-
 .../src/main/resources/express-manifest.xml        |   1 +
 .../projects/Jewel/src/main/resources/defaults.css |  28 +-
 .../Jewel/src/main/resources/jewel-manifest.xml    |   6 +
 .../projects/Jewel/src/main/royale/JewelClasses.as |   1 +
 .../royale/org/apache/royale/jewel/ComboBox.as     |  49 ++-
 .../org/apache/royale/jewel/VirtualComboBox.as     |  56 +++
 .../royale/org/apache/royale/jewel/VirtualList.as  |  53 +++
 .../ListSingleSelectionMouseController.as          | 115 +----
 ...tualDataItemRendererFactoryForCollectionView.as | 253 +++++++++++
 .../jewel/beads/layouts/SimpleHorizontalLayout.as  |   5 +-
 .../jewel/beads/layouts/SimpleVerticalLayout.as    |   5 +-
 .../beads/layouts/VirtualListVerticalLayout.as     | 465 +++++++++++++++++++++
 .../beads/models/ComboBoxPresentationModel.as      |  71 ++++
 .../royale/jewel/beads/models/DateChooserModel.as  |  19 -
 .../jewel/beads/models/ListPresentationModel.as    |   2 +-
 .../royale/jewel/beads/views/ComboBoxPopUpView.as  |  62 ++-
 .../royale/jewel/beads/views/ComboBoxView.as       |  24 +-
 .../apache/royale/jewel/beads/views/ListView.as    |   6 +-
 .../jewel/beads/views/VirtualComboBoxPopUpView.as} |  47 ++-
 .../royale/jewel/beads/views/VirtualListView.as    | 137 ++++++
 .../jewel/supportClasses/combobox/ComboBoxPopUp.as |  65 +++
 .../combobox/IComboBoxPresentationModel.as}        |  56 ++-
 .../combobox/VirtualComboBoxPopUp.as}              |  36 +-
 .../projects/Jewel/src/main/sass/_global.sass      |   6 -
 .../Jewel/src/main/sass/components/_combobox.sass  |  10 +-
 .../src/main/sass/components/_itemRenderer.sass    |   3 +-
 .../Jewel/src/main/sass/components/_label.sass     |   5 +
 .../Jewel/src/main/sass/components/_list.sass      |   8 +-
 .../src/main/royale/mx/display/Graphics.as         | 156 ++++++-
 .../src/main/royale/mx/graphics/LinearGradient.as  |   8 +-
 .../Network/src/main/resources/basic-manifest.xml  |   1 +
 .../beads/FileModelWithParamsAndFileContent.as     |  58 +++
 .../SparkRoyale/src/main/resources/defaults.css    |   9 +-
 .../src/main/royale/SparkRoyaleClasses.as          |   1 +
 .../src/main/royale/spark/components/Panel.as      | 156 +++----
 .../components/beads/SkinnableContainerView.as     |  14 +
 .../spark/components/beads/SparkContainerView.as   |   5 +
 .../components/beads/SparkSkinScrollingViewport.as | 102 ++++-
 .../main/royale/spark/layouts/VerticalLayout.as    |   1 -
 .../spark/layouts/supportClasses/LayoutBase.as     |  32 +-
 .../layouts/supportClasses/SparkLayoutBead.as      |  10 +-
 .../main/royale/spark/skins/spark/PanelSkin.mxml   | 302 +++++++++++++
 .../JewelTheme/src/main/resources/defaults.css     |   6 +-
 .../src/main/sass/components-primary/_label.sass   |  19 +-
 pom.xml                                            |   2 +
 src/main/script/prerequisiteCheckFramework.groovy  |   4 +-
 73 files changed, 2941 insertions(+), 887 deletions(-)


[royale-asjs] 02/02: Router changes

Posted by ha...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

harbs pushed a commit to branch feature/router
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git

commit 7f72ead004090c986f50f13ae31d667acbc08124
Author: Harbs <ha...@in-tools.com>
AuthorDate: Mon Feb 10 10:09:15 2020 +0200

    Router changes
---
 .../TourDeJewel/src/main/royale/MainContent.mxml   |  9 ++-
 .../projects/Basic/src/main/resources/defaults.css |  5 ++
 .../org/apache/royale/routing/IPathRouteBead.as    | 28 +++++++
 .../{RouteToComponent.as => PathRouteBead.as}      | 91 ++++++----------------
 .../org/apache/royale/routing/RouteToComponent.as  | 58 +-------------
 .../org/apache/royale/routing/RouteToState.as      | 34 ++------
 .../royale/org/apache/royale/routing/Router.as     |  2 +
 7 files changed, 71 insertions(+), 156 deletions(-)

diff --git a/examples/royale/TourDeJewel/src/main/royale/MainContent.mxml b/examples/royale/TourDeJewel/src/main/royale/MainContent.mxml
index 04e5c32..85d4167 100644
--- a/examples/royale/TourDeJewel/src/main/royale/MainContent.mxml
+++ b/examples/royale/TourDeJewel/src/main/royale/MainContent.mxml
@@ -39,8 +39,9 @@ limitations under the License.
             
             private function setNavSelection():void {
                 var routeState:RouteState = router.routeState;
-                if(routeState.state){
-                    setNavFromHash(routeState.state);
+                var baseName:String = routeState.getBaseName();
+                if(baseName){
+                    setNavFromHash(baseName);
                 } else {
                     goToHome();
                 }
@@ -89,7 +90,7 @@ limitations under the License.
                 currentNavOption = (event.target as Navigation).selectedItem as NavigationLinkVO;
                 
                 router.routeState.title = currentNavOption.label;
-                router.routeState.state = currentNavOption.hash;
+                router.routeState.path = currentNavOption.hash;
                 router.setState();
                 
                 navigateTo();
@@ -108,7 +109,7 @@ limitations under the License.
                 currentNavOption = currentNavOption.selectedChild;
                 
                 router.routeState.title = currentNavOption.label;
-                router.routeState.state = currentNavOption.hash;
+                router.routeState.path = currentNavOption.hash;
                 router.setState();
                 
                 navigateTo();
diff --git a/frameworks/projects/Basic/src/main/resources/defaults.css b/frameworks/projects/Basic/src/main/resources/defaults.css
index ae835f4..02804fb 100644
--- a/frameworks/projects/Basic/src/main/resources/defaults.css
+++ b/frameworks/projects/Basic/src/main/resources/defaults.css
@@ -733,6 +733,11 @@ CascadingMenuItemRenderer
 	flex-grow: 1;
 }
 
+Router
+{
+	IPathRouteBead: ClassReference("org.apache.royale.routing.PathRouteBead");
+}
+
 TextInput
 {
 	border: 1px solid #808080;
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/routing/IPathRouteBead.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/routing/IPathRouteBead.as
new file mode 100644
index 0000000..07ea0fa
--- /dev/null
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/routing/IPathRouteBead.as
@@ -0,0 +1,28 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.royale.routing
+{
+  /**
+   * Marker interface for a bead which parses the path part of path part of a route
+   */
+  public interface IPathRouteBead
+  {
+    
+  }
+}
\ No newline at end of file
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/routing/RouteToComponent.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/routing/PathRouteBead.as
similarity index 59%
copy from frameworks/projects/Basic/src/main/royale/org/apache/royale/routing/RouteToComponent.as
copy to frameworks/projects/Basic/src/main/royale/org/apache/royale/routing/PathRouteBead.as
index 0c1c8ba..0eb84ec 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/routing/RouteToComponent.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/routing/PathRouteBead.as
@@ -19,28 +19,20 @@
 package org.apache.royale.routing
 {
   import org.apache.royale.core.Bead;
-  import org.apache.royale.core.IStrand;
   import org.apache.royale.events.ValueEvent;
-  import org.apache.royale.core.IParent;
-  import org.apache.royale.core.IChild;
-  [DefaultProperty("routes")]
-  /**
-   * RouteToComponent is a bead designed for Router
-   * One or more routes should be assigned to the bead
-   */
-  public class RouteToComponent extends Bead
+  import org.apache.royale.core.IStrand;
+
+  public class PathRouteBead extends Bead implements IPathRouteBead
   {
-    public function RouteToComponent()
+    public function PathRouteBead()
     {
       
     }
 
-    public var routes:Array;
-
     /**
      * @royaleignorecoercion org.apache.royale.routing.Router
      */
-    private function get host():Router{
+    protected function get host():Router{
       return _strand as Router
     }
     override public function set strand(value:IStrand):void
@@ -48,9 +40,24 @@ package org.apache.royale.routing
       _strand = value;
       listenOnStrand("hashNeeded",hashNeeded);
       listenOnStrand("hashReceived",hashReceived);
-      listenOnStrand("stateChange",stateChanged)
     }
-    private function hashNeeded(ev:ValueEvent):void
+
+    protected function hashReceived(ev:ValueEvent):void
+    {
+      var hash:String = ev.value;
+      // if we have parameters, we don't care if we also have an anchor
+      var delim:String = ""
+      var index:int = hash.indexOf("?")
+      if(index == -1)
+        index = hash.indexOf("#");
+      
+      if(index != -1)
+        hash = hash.slice(0,index);
+      
+      host.routeState.path = hash;
+    }
+
+    protected function hashNeeded(ev:ValueEvent):void
     {
       var hash:String = ev.value;
       var trailing:String = "";
@@ -75,59 +82,5 @@ package org.apache.royale.routing
 
     }
 
-    private function hashReceived(ev:ValueEvent):void
-    {
-      var hash:String = ev.value;
-      var trailing:String = "";
-      // if we have parameters, we don't care if we also have an anchor
-      var delim:String = ""
-      var index:int = hash.indexOf("?")
-      if(index == -1)
-        index = hash.indexOf("#");
-      
-      if(index != -1)
-        hash = hash.slice(0,index);
-      
-      host.routeState.path = hash;
-    }
-
-    /**
-     * @royaleignorecoercion org.apache.royale.core.IParent
-     */
-    private function stateChanged():void
-    {
-      var default:ComponentRoute;
-      // apply routes
-      if(routes)
-      {
-        var baseName:String = host.routeState.getBaseName();
-
-        for(var i:int=0;i<routes.length;i++){
-          var route:ComponentRoute = routes[i];
-          if(route.defaultRoute)
-            default = route;
-          if(route.baseName == baseName)
-          {
-            addComponent(route);
-            return;
-          }
-        }
-        if(default)
-        {
-          addComponent(default);
-        }
-      }      
-    }
-    private function addComponent(route:ComponentRoute):void{
-      var parent:IParent = route.parent || host.host as IParent;
-      while(parent.numElements > 0)
-        parent.removeElement(parent.getElementAt(0));
-      
-      var comp:IChild = new route.component();
-      parent.addElement(comp);
-      if(route.title)
-        host.routeState.title = route.title;
-
-    }
   }
 }
\ No newline at end of file
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/routing/RouteToComponent.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/routing/RouteToComponent.as
index 0c1c8ba..2c52c13 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/routing/RouteToComponent.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/routing/RouteToComponent.as
@@ -18,17 +18,15 @@
 ////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.routing
 {
-  import org.apache.royale.core.Bead;
-  import org.apache.royale.core.IStrand;
-  import org.apache.royale.events.ValueEvent;
-  import org.apache.royale.core.IParent;
   import org.apache.royale.core.IChild;
+  import org.apache.royale.core.IParent;
+  import org.apache.royale.core.IStrand;
   [DefaultProperty("routes")]
   /**
    * RouteToComponent is a bead designed for Router
    * One or more routes should be assigned to the bead
    */
-  public class RouteToComponent extends Bead
+  public class RouteToComponent extends PathRouteBead
   {
     public function RouteToComponent()
     {
@@ -37,59 +35,11 @@ package org.apache.royale.routing
 
     public var routes:Array;
 
-    /**
-     * @royaleignorecoercion org.apache.royale.routing.Router
-     */
-    private function get host():Router{
-      return _strand as Router
-    }
     override public function set strand(value:IStrand):void
     {
-      _strand = value;
-      listenOnStrand("hashNeeded",hashNeeded);
-      listenOnStrand("hashReceived",hashReceived);
+      super.strand = value;
       listenOnStrand("stateChange",stateChanged)
     }
-    private function hashNeeded(ev:ValueEvent):void
-    {
-      var hash:String = ev.value;
-      var trailing:String = "";
-      var delim:String = ""
-      if(hash.indexOf("?") != -1)
-        delim = "?"
-
-      else if(hash.indexOf("#") != -1)
-        delim = "#"
-      if(delim)
-      {
-        trailing = hash.slice(hash.indexOf(delim));
-        hash = hash.slice(0,hash.indexOf(delim));
-      }
-      // no bead added the path yet
-      if(!hash)
-      {
-        hash = host.routeState.path;
-      }
-      
-      ev.value = hash + trailing;
-
-    }
-
-    private function hashReceived(ev:ValueEvent):void
-    {
-      var hash:String = ev.value;
-      var trailing:String = "";
-      // if we have parameters, we don't care if we also have an anchor
-      var delim:String = ""
-      var index:int = hash.indexOf("?")
-      if(index == -1)
-        index = hash.indexOf("#");
-      
-      if(index != -1)
-        hash = hash.slice(0,index);
-      
-      host.routeState.path = hash;
-    }
 
     /**
      * @royaleignorecoercion org.apache.royale.core.IParent
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/routing/RouteToState.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/routing/RouteToState.as
index 6a6fcd3..334da2f 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/routing/RouteToState.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/routing/RouteToState.as
@@ -18,31 +18,22 @@
 ////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.routing
 {
-  import org.apache.royale.core.Bead;
+  import org.apache.royale.core.IStatesObject;
   import org.apache.royale.core.IStrand;
+  import org.apache.royale.debugging.assert;
   import org.apache.royale.events.ValueEvent;
-  import org.apache.royale.core.IStatesObject;
   import org.apache.royale.utils.callLater;
-  import org.apache.royale.debugging.assert;
 
-  public class RouteToState extends Bead
+  public class RouteToState extends PathRouteBead
   {
     public function RouteToState()
     {
       
     }
-    /**
-     * @royaleignorecoercion org.apache.royale.routing.Router
-     */
-    private function get host():Router{
-      return _strand as Router
-    }
 
     override public function set strand(value:IStrand):void
     {
-      _strand = value;
-      listenOnStrand("hashNeeded",hashNeeded);
-      listenOnStrand("hashReceived",hashReceived);
+      super.strand = value;
       listenOnStrand("stateChange",stateChanged)
       // attach state change event async to allow adding the parent strand after this is added.
       callLater(attachStateEvent);
@@ -63,7 +54,7 @@ package org.apache.royale.routing
       host.routeState.path = getStateComponent().currentState;
       host.setState();
     }
-    private function hashNeeded(ev:ValueEvent):void
+    override protected function hashNeeded(ev:ValueEvent):void
     {
       var hash:String = ev.value;
       // don't overwrite path, parameters and anchor
@@ -85,21 +76,6 @@ package org.apache.royale.routing
       
       ev.value = parentPath + getStateComponent().currentState + trailing;
     }
-    private function hashReceived(ev:ValueEvent):void
-    {
-      var hash:String = ev.value;
-      var trailing:String = "";
-      // if we have parameters, we don't care if we also have an anchor
-      var delim:String = ""
-      var index:int = hash.indexOf("?")
-      if(index == -1)
-        index = hash.indexOf("#");
-      
-      if(index != -1)
-        hash = hash.slice(0,index);
-      
-      host.routeState.path = hash;
-    }
     private var settingState:Boolean;
     /**
      * @royaleignorecoercion org.apache.royale.core.IStatesObject
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/routing/Router.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/routing/Router.as
index 05ad347..e6f713d 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/routing/Router.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/routing/Router.as
@@ -28,6 +28,7 @@ package org.apache.royale.routing
   import org.apache.royale.core.IMXMLDocument;
   import org.apache.royale.utils.MXMLDataInterpreter;
   import org.apache.royale.utils.sendStrandEvent;
+  import org.apache.royale.utils.loadBeadFromValuesManager;
   [DefaultProperty("beads")]
     /**
      *  Dispatched when the state is changed.
@@ -63,6 +64,7 @@ package org.apache.royale.routing
 		public function set strand(value:IStrand):void
 		{	
 			_strand = value;
+      loadBeadFromValuesManager(IPathRouteBead, "iPathRouteBead", this);
 			COMPILE::JS
 			{
 				window.addEventListener("hashchange", hashChangeHandler);