You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by pe...@apache.org on 2017/04/11 16:00:27 UTC

[02/44] git commit: [flex-asjs] [refs/heads/develop] - Checkpoint before experimentation.

Checkpoint before experimentation.


Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/822c1520
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/822c1520
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/822c1520

Branch: refs/heads/develop
Commit: 822c15202b4f36a81607ec0689f76bac65d31dca
Parents: 0edc16c
Author: Peter Ent <pe...@apache.org>
Authored: Wed Mar 29 07:46:21 2017 -0400
Committer: Peter Ent <pe...@apache.org>
Committed: Wed Mar 29 07:46:21 2017 -0400

----------------------------------------------------------------------
 .../flex/org/apache/flex/core/ContainerBase.as  | 371 ++++--------------
 .../org/apache/flex/core/DataContainerBase.as   | 388 +++++++++++++++++++
 .../main/flex/org/apache/flex/core/GroupBase.as |  18 +-
 .../main/flex/org/apache/flex/core/ListBase.as  | 130 +------
 .../main/flex/org/apache/flex/core/ViewBase.as  |   8 -
 .../main/flex/org/apache/flex/html/Container.as |  87 +----
 .../flex/org/apache/flex/html/DataContainer.as  | 134 +------
 .../src/main/flex/org/apache/flex/html/Group.as |  28 +-
 .../src/main/flex/org/apache/flex/html/List.as  |  33 +-
 .../org/apache/flex/html/beads/ContainerView.as |  14 +
 .../apache/flex/html/beads/DataContainerView.as |   3 +
 .../org/apache/flex/html/beads/GroupView.as     |  20 +-
 .../html/supportClasses/ScrollingViewport.as    |   6 +-
 .../apache/flex/html/supportClasses/Viewport.as |  18 +-
 14 files changed, 545 insertions(+), 713 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/822c1520/frameworks/projects/HTML/src/main/flex/org/apache/flex/core/ContainerBase.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/core/ContainerBase.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/core/ContainerBase.as
index 67c83ec..f95ec8e 100644
--- a/frameworks/projects/HTML/src/main/flex/org/apache/flex/core/ContainerBase.as
+++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/core/ContainerBase.as
@@ -72,7 +72,7 @@ package org.apache.flex.core
      *  @playerversion AIR 2.6
      *  @productversion FlexJS 0.0
      */
-	public class ContainerBase extends UIBase implements IMXMLDocument, IStatesObject, IContainer, IContentViewHost
+	public class ContainerBase extends GroupBase implements IContainer
 	{
         /**
          *  Constructor.
@@ -92,154 +92,92 @@ package org.apache.flex.core
 		/**
 		 * @private
 		 */
-		public function get strandChildren():IParent
+		override public function get strandChildren():IParent
 		{
 			if (_strandChildren == null) {
 				_strandChildren = new ContainerBaseStrandChildren(this);
 			}
 			return _strandChildren;
 		}
-        
-        /**
-         *  @copy org.apache.flex.core.IParent#getElementAt()
-         * 
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion FlexJS 0.0
-         */
-        override public function getElementAt(index:int):IChild
-        {
-            var contentView:IParent = view as IParent;
-            if (contentView != null) {
-                return contentView.getElementAt(index);
-            } else {
-                return super.getElementAt(index);
-            }
-        }        
-        
-        /**
-         *  @private
-         */
-        override public function getElementIndex(c:IChild):int
-        {
-			var contentView:IParent = view as IParent;
-			if (contentView != null) {
-				return contentView.getElementIndex(c);
-			} else {
-				return super.getElementIndex(c);
-			}
-        }
-        
-        /**
-         *  @private
-         */
-        override public function addElement(c:IChild, dispatchEvent:Boolean = true):void
-        {
-			if (c is IChrome) {
-				super.addElement(c, dispatchEvent);
-				return;
-			}
-			
-			var contentView:IParent = view as IParent;
-			if (contentView != null) {
-				contentView.addElement(c, dispatchEvent);
-                if (dispatchEvent)
-                    this.dispatchEvent(new Event("childrenAdded"));
-			}
-			else {
-				super.addElement(c);
-			}
-        }
-        
-        /**
-         *  @private
-         */
-        override public function addElementAt(c:IChild, index:int, dispatchEvent:Boolean = true):void
-        {
-			if (c is IChrome) {
-				super.addElementAt(c, index, dispatchEvent);
-				return;
-			}
-			
-			var contentView:IParent = view as IParent;
-			if (contentView != null) {
-				contentView.addElementAt(c, index, dispatchEvent);
-                if (dispatchEvent)
-                    this.dispatchEvent(new Event("childrenAdded"));
-			}
-			else {
-				super.addElementAt(c, index);
-			}
-        }
-        
-        /**
-         *  @private
-         */
-        override public function removeElement(c:IChild, dispatchEvent:Boolean = true):void
-        {
-			if (c is IChrome) {
-				super.removeElement(c, dispatchEvent);
-				return;
-			}
-			
-			var contentView:IParent = view as IParent;
-			if (contentView != null) {
-				contentView.removeElement(c, dispatchEvent);
-                if (dispatchEvent)
-                    this.dispatchEvent(new Event("childrenRemoved"));
-			}
-			else {
-				super.removeElement(c);
-			}
-        }
-        
-        /**
-         *  @private
-         */
-        public function childrenAdded():void
-        {
-            dispatchEvent(new Event("childrenAdded"));
-        }
-        
-        /**
-         *  A ContainerBase doesn't create its children until it is added to
-         *  a parent.
-         *  
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion FlexJS 0.0
-         */
-		override public function addedToParent():void
+		
+		/*
+		 * The following functions are for the SWF-side only and re-direct element functions
+		 * to the content area, enabling scrolling and clipping which are provided automatically
+		 * in the JS-side.
+		 */
+		
+		/**
+		 * @private
+		 */
+		COMPILE::SWF
+		override public function addElement(c:IChild, dispatchEvent:Boolean = true):void
 		{
-            if (!_initialized)
-            {
-    			// each MXML file can also have styles in fx:Style block
-    			ValuesManager.valuesImpl.init(this);
-            }
-            
-			super.addedToParent();
-			
-            if (!_initialized)
-            {
-    			MXMLDataInterpreter.generateMXMLInstances(_mxmlDocument, this, MXMLDescriptor);
-			
-                dispatchEvent(new Event("initBindings"));
-    			dispatchEvent(new Event("initComplete"));
-                _initialized = true;
-            }
+			var layoutHost:ILayoutHost = view as ILayoutHost;
+			var contentView:IParent = layoutHost.contentView as IParent;
+			contentView.addElement(c, dispatchEvent);
 		}
 		
 		/**
-		 *  @private
+		 * @private
 		 */
+		COMPILE::SWF
+		override public function addElementAt(c:IChild, index:int, dispatchEvent:Boolean = true):void
+		{
+			var layoutHost:ILayoutHost = view as ILayoutHost;
+			var contentView:IParent = layoutHost.contentView as IParent;
+			contentView.addElementAt(c, index, dispatchEvent);
+		}
+		
+		/**
+		 * @private
+		 */
+		COMPILE::SWF
+		override public function getElementIndex(c:IChild):int
+		{
+			var layoutHost:ILayoutHost = view as ILayoutHost;
+			var contentView:IParent = layoutHost.contentView as IParent;
+			return contentView.getElementIndex(c);
+		}
+		
+		/**
+		 * @private
+		 */
+		COMPILE::SWF
+		override public function removeElement(c:IChild, dispatchEvent:Boolean = true):void
+		{
+			var layoutHost:ILayoutHost = view as ILayoutHost;
+			var contentView:IParent = layoutHost.contentView as IParent;
+			contentView.removeElement(c, dispatchEvent);
+		}
+		
+		/**
+		 * @private
+		 */
+		COMPILE::SWF
 		override public function get numElements():int
 		{
-			var contentView:IParent = view as IParent;
-			return contentView != null ? contentView.numElements : super.numElements;
+			var layoutHost:ILayoutHost = view as ILayoutHost;
+			var contentView:IParent = layoutHost.contentView as IParent;
+			return contentView.numElements;
+		}
+		
+		/**
+		 * @private
+		 */
+		COMPILE::SWF
+		override public function getElementAt(index:int):IChild
+		{
+			var layoutHost:ILayoutHost = view as ILayoutHost;
+			var contentView:IParent = layoutHost.contentView as IParent;
+			return contentView.getElementAt(index);
 		}
 
+		/*
+		 * These "internal" function provide a backdoor way for proxy classes to
+		 * operate directly at strand level. While these function are available on
+		 * both SWF and JS platforms, they really only have meaning on the SWF-side. 
+		 * Other subclasses may provide use on the JS-side.
+		 */
 		
 		/**
 		 * @private
@@ -301,170 +239,5 @@ package org.apache.flex.core
 			return super.getElementAt(index);
 		}
 
-        private var _mxmlDescriptor:Array;
-        private var _mxmlDocument:Object = this;
-        private var _initialized:Boolean;
-        
-        /**
-         *  @copy org.apache.flex.core.Application#MXMLDescriptor
-         *  
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion FlexJS 0.0
-         */
-		public function get MXMLDescriptor():Array
-		{
-			return _mxmlDescriptor;
-		}
-
-        /**
-         *  @private
-         */
-        public function setMXMLDescriptor(document:Object, value:Array):void
-        {
-            _mxmlDocument = document;
-            _mxmlDescriptor = value;
-        }
-
-        /**
-         *  @copy org.apache.flex.core.Application#generateMXMLAttributes()
-         *  
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion FlexJS 0.0
-         */
-		public function generateMXMLAttributes(data:Array):void
-		{
-            MXMLDataInterpreter.generateMXMLProperties(this, data);
-		}
-		
-        /**
-         *  @copy org.apache.flex.core.ItemRendererClassFactory#mxmlContent
-         *  
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion FlexJS 0.0
-         */
-		public var mxmlContent:Array;
-		
-        private var _states:Array;
-        
-        /**
-         *  The array of view states. These should
-         *  be instances of org.apache.flex.states.State.
-         *  
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion FlexJS 0.0
-         */
-        public function get states():Array
-        {
-            return _states;
-        }
-
-        /**
-         *  @private
-         *  @flexjsignorecoercion Class
-         *  @flexjsignorecoercion org.apache.flex.core.IBead
-         */
-        public function set states(value:Array):void
-        {
-            _states = value;
-            _currentState = _states[0].name;
-            
-			try{
-				if (getBeadByType(IStatesImpl) == null)
-                {
-                    var c:Class = ValuesManager.valuesImpl.getValue(this, "iStatesImpl") as Class;
-                    var b:Object = new c();
-					addBead(b as IBead);
-                }
-			}
-			//TODO:  Need to handle this case more gracefully
-			catch(e:Error)
-			{
-                COMPILE::SWF
-                {
-                    trace(e.message);                        
-                }
-			}
-            
-        }
-        
-        /**
-         *  <code>true</code> if the array of states
-         *  contains a state with this name.
-         * 
-         *  @param state The state namem.
-         *  @return True if state in state array
-         *  
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion FlexJS 0.0
-         */
-        public function hasState(state:String):Boolean
-        {
-            for each (var s:State in _states)
-            {
-                if (s.name == state)
-                    return true;
-            }
-            return false;
-        }
-        
-        private var _currentState:String;
-        
-        [Bindable("currentStateChange")]
-        /**
-         *  The name of the current state.
-         * 
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion FlexJS 0.0
-         */
-        public function get currentState():String
-        {
-            return _currentState;   
-        }
-
-        /**
-         *  @private
-         */
-        public function set currentState(value:String):void
-        {
-            var event:ValueChangeEvent = new ValueChangeEvent("currentStateChange", false, false, _currentState, value)
-            _currentState = value;
-            dispatchEvent(event);
-        }
-        
-        private var _transitions:Array;
-        
-        /**
-         *  The array of transitions.
-         *  
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion FlexJS 0.0
-         */
-        public function get transitions():Array
-        {
-            return _transitions;   
-        }
-        
-        /**
-         *  @private
-         */
-        public function set transitions(value:Array):void
-        {
-            _transitions = value;   
-        }
-
     }
 }

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/822c1520/frameworks/projects/HTML/src/main/flex/org/apache/flex/core/DataContainerBase.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/core/DataContainerBase.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/core/DataContainerBase.as
new file mode 100644
index 0000000..3d9e555
--- /dev/null
+++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/core/DataContainerBase.as
@@ -0,0 +1,388 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.flex.core
+{
+	import org.apache.flex.core.IMXMLDocument;
+	import org.apache.flex.core.IContainer;
+	import org.apache.flex.core.ValuesManager;
+	import org.apache.flex.events.Event;
+	import org.apache.flex.events.ItemAddedEvent;
+	import org.apache.flex.events.ItemClickedEvent;
+	import org.apache.flex.events.ItemRemovedEvent;
+	import org.apache.flex.events.ValueChangeEvent;
+	import org.apache.flex.states.State;
+	import org.apache.flex.utils.MXMLDataInterpreter;
+	import org.apache.flex.html.supportClasses.DataItemRenderer;
+	
+	/**
+	 *  Indicates that the initialization of the list is complete.
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 10.2
+	 *  @playerversion AIR 2.6
+	 *  @productversion FlexJS 0.0
+	 */
+	[Event(name="initComplete", type="org.apache.flex.events.Event")]
+    
+    /**
+     *  The DataContainerBase class is the base class for components that
+	 *  that have generated content, like lists.
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2
+     *  @playerversion AIR 2.6
+     *  @productversion FlexJS 0.0
+     */
+	public class DataContainerBase extends UIBase implements ILayoutParent, ILayoutView, IItemRendererParent, IContentViewHost, IContainer
+	{
+        /**
+         *  Constructor.
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+         */
+		public function DataContainerBase()
+		{
+			super();        
+			
+			addEventListener("beadsAdded", beadsAddedHandler);
+		}
+		
+		/**
+		 * @flexjsignorecoercion org.apache.flex.core.WrappedHTMLElement
+		 */
+		COMPILE::JS
+		override protected function createElement():WrappedHTMLElement
+		{
+			element = document.createElement('div') as WrappedHTMLElement;
+			element.flexjs_wrapper = this;
+			
+			positioner = element;
+			
+			return element;
+		}
+		
+		private var _strandChildren:ContainerBaseStrandChildren;
+		
+		/**
+		 * @private
+		 */
+		public function get strandChildren():IParent
+		{
+			if (_strandChildren == null) {
+				_strandChildren = new ContainerBaseStrandChildren(this);
+			}
+			return _strandChildren;
+		}
+		
+		/**
+		 *  @private
+		 */
+		public function childrenAdded():void
+		{
+			dispatchEvent(new Event("childrenAdded"));
+		}
+		
+		private var _initialized:Boolean;
+		
+		/**
+		 * @private
+		 */
+		override public function addedToParent():void
+		{
+			if (!_initialized)
+			{
+				// each MXML file can also have styles in fx:Style block
+				ValuesManager.valuesImpl.init(this);
+			}
+			
+			super.addedToParent();
+			
+			dispatchEvent(new Event("initComplete"));
+		}
+		
+		/**
+		 * @private
+		 */
+		private function beadsAddedHandler(e:Event):void
+		{
+			if (getBeadByType(IDataProviderItemRendererMapper) == null)
+			{
+				var mapper:IDataProviderItemRendererMapper = new (ValuesManager.valuesImpl.getValue(this, "iDataProviderItemRendererMapper")) as IDataProviderItemRendererMapper;
+				addBead(mapper);
+			}
+			var itemRendererFactory:IItemRendererClassFactory = getBeadByType(IItemRendererClassFactory) as IItemRendererClassFactory;
+			if (!itemRendererFactory)
+			{
+				itemRendererFactory = new (ValuesManager.valuesImpl.getValue(this, "iItemRendererClassFactory")) as IItemRendererClassFactory;
+				addBead(itemRendererFactory);
+			}
+		}
+		
+		/**
+		 * Returns the ILayoutHost which is its view. From ILayoutParent.
+		 *  
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion FlexJS 0.8
+		 */
+		public function getLayoutHost():ILayoutHost
+		{
+			return view as ILayoutHost; 
+		}
+		
+		/*
+		* The following functions are for the SWF-side only and re-direct element functions
+		* to the content area, enabling scrolling and clipping which are provided automatically
+		* in the JS-side.
+		*/
+		
+		/**
+		 * @private
+		 */
+		COMPILE::SWF
+		override public function addElement(c:IChild, dispatchEvent:Boolean = true):void
+		{
+			var layoutHost:ILayoutHost = view as ILayoutHost;
+			var contentView:IParent = layoutHost.contentView as IParent;
+			contentView.addElement(c, dispatchEvent);
+		}
+		
+		/**
+		 * @private
+		 */
+		COMPILE::SWF
+		override public function addElementAt(c:IChild, index:int, dispatchEvent:Boolean = true):void
+		{
+			var layoutHost:ILayoutHost = view as ILayoutHost;
+			var contentView:IParent = layoutHost.contentView as IParent;
+			contentView.addElementAt(c, index, dispatchEvent);
+		}
+		
+		/**
+		 * @private
+		 */
+		COMPILE::SWF
+		override public function getElementIndex(c:IChild):int
+		{
+			var layoutHost:ILayoutHost = view as ILayoutHost;
+			var contentView:IParent = layoutHost.contentView as IParent;
+			return contentView.getElementIndex(c);
+		}
+		
+		/**
+		 * @private
+		 */
+		COMPILE::SWF
+		override public function removeElement(c:IChild, dispatchEvent:Boolean = true):void
+		{
+			var layoutHost:ILayoutHost = view as ILayoutHost;
+			var contentView:IParent = layoutHost.contentView as IParent;
+			contentView.removeElement(c, dispatchEvent);
+		}
+		
+		/**
+		 * @private
+		 */
+		COMPILE::SWF
+		override public function get numElements():int
+		{
+			var layoutHost:ILayoutHost = view as ILayoutHost;
+			var contentView:IParent = layoutHost.contentView as IParent;
+			return contentView.numElements;
+		}
+		
+		/**
+		 * @private
+		 */
+		COMPILE::SWF
+		override public function getElementAt(index:int):IChild
+		{
+			var layoutHost:ILayoutHost = view as ILayoutHost;
+			var contentView:IParent = layoutHost.contentView as IParent;
+			return contentView.getElementAt(index);
+		}
+		
+		/*
+		* IItemRendererParent
+		*/
+		
+		/**
+		 * @copy org.apache.flex.core.IItemRendererParent#addItemRenderer()
+		 * @private
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion FlexJS 0.8
+		 */
+		public function addItemRenderer(renderer:IItemRenderer):void
+		{
+			addElement(renderer, true);
+			
+			var newEvent:ItemAddedEvent = new ItemAddedEvent("itemAdded");
+			newEvent.item = renderer;
+			
+			dispatchEvent(newEvent);
+		}
+		
+		/**
+		 * @copy org.apache.flex.core.IItemRendererParent#removeItemRenderer()
+		 * @private
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion FlexJS 0.8
+		 */
+		public function removeItemRenderer(renderer:IItemRenderer):void
+		{
+			removeElement(renderer, true);
+			
+			var newEvent:ItemRemovedEvent = new ItemRemovedEvent("itemRemoved");
+			newEvent.item = renderer;
+			
+			dispatchEvent(newEvent);
+		}
+		
+		/**
+		 * @copy org.apache.flex.core.IItemRendererParent#removeAllItemRenderers()
+		 * @private
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion FlexJS 0.8
+		 */
+		public function removeAllItemRenderers():void
+		{
+			while (numElements > 0) {
+				var child:IChild = getElementAt(0);
+				removeElement(child);
+			}
+		}
+		
+		/**
+		 *  @copy org.apache.flex.core.IItemRendererParent#getItemRendererForIndex()
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion FlexJS 0.8
+		 */
+		public function getItemRendererForIndex(index:int):IItemRenderer
+		{
+			if (index < 0 || index >= numElements) return null;
+			return getElementAt(index) as IItemRenderer;
+		}
+		
+		/**
+		 *  Refreshes the itemRenderers. Useful after a size change by the data group.
+		 *
+		 *  @copy org.apache.flex.core.IItemRendererParent#updateAllItemRenderers()
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion FlexJS 0.8
+		 */
+		public function updateAllItemRenderers():void
+		{
+			var n:Number = numElements;
+			for (var i:Number = 0; i < n; i++)
+			{
+				var renderer:DataItemRenderer = getItemRendererForIndex(i) as DataItemRenderer;
+				if (renderer) {
+					renderer.setWidth(this.width,true);
+					renderer.adjustSize();
+				}
+			}
+		}
+		
+		/*
+		* These "internal" function provide a backdoor way for proxy classes to
+		* operate directly at strand level. While these function are available on
+		* both SWF and JS platforms, they really only have meaning on the SWF-side. 
+		* Other subclasses may provide use on the JS-side.
+		*/
+		
+		/**
+		 * @private
+		 * @suppress {undefinedNames}
+		 * Support strandChildren.
+		 */
+		public function $numElements():int
+		{
+			return super.numElements;
+		}
+		
+		/**
+		 * @private
+		 * @suppress {undefinedNames}
+		 * Support strandChildren.
+		 */
+		public function $addElement(c:IChild, dispatchEvent:Boolean = true):void
+		{
+			super.addElement(c, dispatchEvent);
+		}
+		
+		/**
+		 * @private
+		 * @suppress {undefinedNames}
+		 * Support strandChildren.
+		 */
+		public function $addElementAt(c:IChild, index:int, dispatchEvent:Boolean = true):void
+		{
+			super.addElementAt(c, index, dispatchEvent);
+		}
+		
+		/**
+		 * @private
+		 * @suppress {undefinedNames}
+		 * Support strandChildren.
+		 */
+		public function $removeElement(c:IChild, dispatchEvent:Boolean = true):void
+		{
+			super.removeElement(c, dispatchEvent);
+		}
+		
+		/**
+		 * @private
+		 * @suppress {undefinedNames}
+		 * Support strandChildren.
+		 */
+		public function $getElementIndex(c:IChild):int
+		{
+			return super.getElementIndex(c);
+		}
+		
+		/**
+		 * @private
+		 * @suppress {undefinedNames}
+		 * Support strandChildren.
+		 */
+		public function $getElementAt(index:int):IChild
+		{
+			return super.getElementAt(index);
+		}
+
+    }
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/822c1520/frameworks/projects/HTML/src/main/flex/org/apache/flex/core/GroupBase.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/core/GroupBase.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/core/GroupBase.as
index 18662ec..4498aa4 100644
--- a/frameworks/projects/HTML/src/main/flex/org/apache/flex/core/GroupBase.as
+++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/core/GroupBase.as
@@ -20,6 +20,9 @@ package org.apache.flex.core
 {
 	import org.apache.flex.core.IMXMLDocument;
 	import org.apache.flex.core.IContentViewHost;
+	import org.apache.flex.core.ILayoutParent;
+	import org.apache.flex.core.ILayoutHost;
+	import org.apache.flex.core.ILayoutView;
 	import org.apache.flex.core.ValuesManager;
 	import org.apache.flex.events.Event;
 	import org.apache.flex.events.ValueChangeEvent;
@@ -76,7 +79,7 @@ package org.apache.flex.core
      *  @playerversion AIR 2.6
      *  @productversion FlexJS 0.8
      */
-	public class GroupBase extends UIBase implements IMXMLDocument, IStatesObject, IContentViewHost
+	public class GroupBase extends UIBase implements IMXMLDocument, IStatesObject, ILayoutParent, ILayoutView, IContentViewHost
 	{
         /**
          *  Constructor.
@@ -139,6 +142,19 @@ package org.apache.flex.core
 		}
 		
 		/**
+		 * Returns the ILayoutHost which is its view. From ILayoutParent.
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion FlexJS 0.8
+		 */
+		public function getLayoutHost():ILayoutHost
+		{
+			return view as ILayoutHost;
+		}
+		
+		/**
 		 * @copy org.apache.flex.core.IContentViewHost#strandChildren
          *  
          *  @langversion 3.0

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/822c1520/frameworks/projects/HTML/src/main/flex/org/apache/flex/core/ListBase.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/core/ListBase.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/core/ListBase.as
index 2c8ccc3..3ec846a 100644
--- a/frameworks/projects/HTML/src/main/flex/org/apache/flex/core/ListBase.as
+++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/core/ListBase.as
@@ -17,15 +17,12 @@
 //
 ////////////////////////////////////////////////////////////////////////////////
 package org.apache.flex.core
-{
-	import org.apache.flex.core.IMXMLDocument;
-	import org.apache.flex.core.IContainer;
-	import org.apache.flex.core.ValuesManager;
-	import org.apache.flex.events.Event;
-	import org.apache.flex.events.ValueChangeEvent;
-	import org.apache.flex.states.State;
-	import org.apache.flex.utils.MXMLDataInterpreter;
-    
+{    
+	/*
+	 *************
+	 * THIS CLASS IS NO LONGER NEEDED. INHERIT FROM DataContainerBase
+	 */
+	
     /**
      *  The ListBase class is the base class for most lists
      *  in FlexJS.
@@ -35,7 +32,7 @@ package org.apache.flex.core
      *  @playerversion AIR 2.6
      *  @productversion FlexJS 0.0
      */
-	public class ListBase extends UIBase implements ILayoutParent, IParentIUIBase, IContainer
+	public class ListBase extends DataContainerBase
 	{
         /**
          *  Constructor.
@@ -49,118 +46,5 @@ package org.apache.flex.core
 		{
 			super();            
 		}
-		
-		/**
-		 * @flexjsignorecoercion org.apache.flex.core.WrappedHTMLElement
-		 */
-		COMPILE::JS
-		override protected function createElement():WrappedHTMLElement
-		{
-			element = document.createElement('div') as WrappedHTMLElement;
-			element.flexjs_wrapper = this;
-			
-			positioner = element;
-			
-			return element;
-		}
-		
-		/**
-		 * Returns the ILayoutHost which is its view. From ILayoutParent.
-		 *  
-		 *  @langversion 3.0
-		 *  @playerversion Flash 10.2
-		 *  @playerversion AIR 2.6
-		 *  @productversion FlexJS 0.8
-		 */
-		public function getLayoutHost():ILayoutHost
-		{
-			return view as ILayoutHost; 
-		} 
-		
-		/**
-		 * @private
-		 */
-		public function childrenAdded():void
-		{
-			dispatchEvent(new Event("childrenAdded"));
-		}
-		
-		/**
-		 * @private
-		 * This is a hidden function used by ContainerView to insert the nested contentView
-		 * into this outer shell.
-		 */
-		COMPILE::SWF
-		public function $addElement(c:IChild, dispatchEvent:Boolean = true):void
-		{
-			super.addElement(c, dispatchEvent);
-		}
-		
-		/**
-		 * @private
-		 */
-		COMPILE::SWF
-		override public function addElement(c:IChild, dispatchEvent:Boolean = true):void
-		{
-			var layoutHost:ILayoutHost = view as ILayoutHost;
-			var contentView:IParent = layoutHost.contentView as IParent;
-			contentView.addElement(c, dispatchEvent);
-		}
-		
-		/**
-		 * @private
-		 */
-		COMPILE::SWF
-		override public function addElementAt(c:IChild, index:int, dispatchEvent:Boolean = true):void
-		{
-			var layoutHost:ILayoutHost = view as ILayoutHost;
-			var contentView:IParent = layoutHost.contentView as IParent;
-			contentView.addElementAt(c, index, dispatchEvent);
-		}
-		
-		/**
-		 * @private
-		 */
-		COMPILE::SWF
-		override public function getElementIndex(c:IChild):int
-		{
-			var layoutHost:ILayoutHost = view as ILayoutHost;
-			var contentView:IParent = layoutHost.contentView as IParent;
-			return contentView.getElementIndex(c);
-		}
-		
-		/**
-		 * @private
-		 */
-		COMPILE::SWF
-		override public function removeElement(c:IChild, dispatchEvent:Boolean = true):void
-		{
-			var layoutHost:ILayoutHost = view as ILayoutHost;
-			var contentView:IParent = layoutHost.contentView as IParent;
-			contentView.removeElement(c, dispatchEvent);
-		}
-		
-		/**
-		 * @private
-		 */
-		COMPILE::SWF
-		override public function get numElements():int
-		{
-			var layoutHost:ILayoutHost = view as ILayoutHost;
-			var contentView:IParent = layoutHost.contentView as IParent;
-			return contentView.numElements;
-		}
-		
-		/**
-		 * @private
-		 */
-		COMPILE::SWF
-		override public function getElementAt(index:int):IChild
-		{
-			var layoutHost:ILayoutHost = view as ILayoutHost;
-			var contentView:IParent = layoutHost.contentView as IParent;
-			return contentView.getElementAt(index);
-		}
-
     }
 }

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/822c1520/frameworks/projects/HTML/src/main/flex/org/apache/flex/core/ViewBase.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/core/ViewBase.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/core/ViewBase.as
index 3f862b4..8eca37e 100644
--- a/frameworks/projects/HTML/src/main/flex/org/apache/flex/core/ViewBase.as
+++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/core/ViewBase.as
@@ -93,13 +93,5 @@ package org.apache.flex.core
             dispatchEvent(new Event("modelChanged"));
         }
 
-		/**
-		 * @private
-		 */
-		public function getLayoutHost():ILayoutHost
-		{
-			return view as ILayoutHost;
-		}
-
     }
 }

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/822c1520/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/Container.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/Container.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/Container.as
index 73c6fd7..512c3c7 100644
--- a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/Container.as
+++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/Container.as
@@ -19,12 +19,8 @@
 package org.apache.flex.html
 {
 	import org.apache.flex.core.IContainer;
-	
-	COMPILE::SWF {
-		import org.apache.flex.core.IChild;
-		import org.apache.flex.core.ILayoutHost;
-		import org.apache.flex.core.IParent;
-	}
+	import org.apache.flex.core.ContainerBase;
+
 	
     /**
      *  The Container class implements a basic container for
@@ -62,7 +58,7 @@ package org.apache.flex.html
      *  @playerversion AIR 2.6
      *  @productversion FlexJS 0.0
      */    
-	public class Container extends Group implements IContainer
+	public class Container extends ContainerBase implements IContainer
 	{
         /**
          *  Constructor.
@@ -75,83 +71,6 @@ package org.apache.flex.html
 		public function Container()
 		{
 			super();
-		} 
-		
-		/**
-		 * @private
-		 * This is a hidden function used by ContainerView to insert the nested contentView
-		 * into this outer shell.
-		 */
-		COMPILE::SWF
-		public function $addElement(c:IChild, dispatchEvent:Boolean = true):void
-		{
-			super.addElement(c, dispatchEvent);
-		}
-		
-		/**
-		 * @private
-		 */
-		COMPILE::SWF
-		override public function addElement(c:IChild, dispatchEvent:Boolean = true):void
-		{
-			var layoutHost:ILayoutHost = view as ILayoutHost;
-			var contentView:IParent = layoutHost.contentView as IParent;
-			contentView.addElement(c, dispatchEvent);
-		}
-		
-		/**
-		 * @private
-		 */
-		COMPILE::SWF
-		override public function addElementAt(c:IChild, index:int, dispatchEvent:Boolean = true):void
-		{
-			var layoutHost:ILayoutHost = view as ILayoutHost;
-			var contentView:IParent = layoutHost.contentView as IParent;
-			contentView.addElementAt(c, index, dispatchEvent);
-		}
-		
-		/**
-		 * @private
-		 */
-		COMPILE::SWF
-		override public function getElementIndex(c:IChild):int
-		{
-			var layoutHost:ILayoutHost = view as ILayoutHost;
-			var contentView:IParent = layoutHost.contentView as IParent;
-			return contentView.getElementIndex(c);
-		}
-		
-		/**
-		 * @private
-		 */
-		COMPILE::SWF
-		override public function removeElement(c:IChild, dispatchEvent:Boolean = true):void
-		{
-			var layoutHost:ILayoutHost = view as ILayoutHost;
-			var contentView:IParent = layoutHost.contentView as IParent;
-			contentView.removeElement(c, dispatchEvent);
-		}
-		
-		/**
-		 * @private
-		 */
-		COMPILE::SWF
-		override public function get numElements():int
-		{
-			var layoutHost:ILayoutHost = view as ILayoutHost;
-			var contentView:IParent = layoutHost.contentView as IParent;
-			return contentView.numElements;
-		}
-		
-		/**
-		 * @private
-		 */
-		COMPILE::SWF
-		override public function getElementAt(index:int):IChild
-		{
-			var layoutHost:ILayoutHost = view as ILayoutHost;
-			var contentView:IParent = layoutHost.contentView as IParent;
-			return contentView.getElementAt(index);
 		}
 	}
 }

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/822c1520/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/DataContainer.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/DataContainer.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/DataContainer.as
index fba71a3..3ae7983 100644
--- a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/DataContainer.as
+++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/DataContainer.as
@@ -18,6 +18,8 @@
 ////////////////////////////////////////////////////////////////////////////////
 package org.apache.flex.html
 {
+	import org.apache.flex.core.DataContainerBase;
+	
 	import org.apache.flex.core.ContainerBaseStrandChildren;
 	import org.apache.flex.core.IContentViewHost;
 	import org.apache.flex.core.IChild;
@@ -42,12 +44,8 @@ package org.apache.flex.html
     }
 	import org.apache.flex.events.Event;
 	import org.apache.flex.events.IEventDispatcher;
-	import org.apache.flex.events.ItemAddedEvent;
-	import org.apache.flex.events.ItemClickedEvent;
-	import org.apache.flex.events.ItemRemovedEvent;
 	import org.apache.flex.html.beads.models.ListPresentationModel;
 	import org.apache.flex.html.beads.IListView;
-	import org.apache.flex.html.supportClasses.DataItemRenderer;
 
 	/**
 	 *  Indicates that the initialization of the list is complete.
@@ -75,7 +73,7 @@ package org.apache.flex.html
 	 *  @playerversion AIR 2.6
 	 *  @productversion FlexJS 0.0
 	 */
-	public class DataContainer extends ListBase implements IList, IItemRendererParent, ILayoutView
+	public class DataContainer extends DataContainerBase implements IList
 	{
 		/**
 		 *  constructor.
@@ -88,7 +86,6 @@ package org.apache.flex.html
 		public function DataContainer()
 		{
 			super();
-			addEventListener("beadsAdded", beadsAddedHandler);
 		}
 
 		/**
@@ -146,7 +143,7 @@ package org.apache.flex.html
 		}
 
 		/*
-		 * IList and IItemRendererParent
+		 * IList and IItemRendererProvider
 		 */
 
 		/**
@@ -209,132 +206,9 @@ package org.apache.flex.html
 		}
 
 		/*
-		 * IItemRendererParent
-		 */
-
-		/**
-		 * @copy org.apache.flex.core.IItemRendererParent#addItemRenderer()
-		 * @private
-		 *
-		 *  @langversion 3.0
-		 *  @playerversion Flash 10.2
-		 *  @playerversion AIR 2.6
-		 *  @productversion FlexJS 0.8
-		 */
-		public function addItemRenderer(renderer:IItemRenderer):void
-		{
-			addElement(renderer, true);
-
-			var newEvent:ItemAddedEvent = new ItemAddedEvent("itemAdded");
-			newEvent.item = renderer;
-
-			dispatchEvent(newEvent);
-		}
-
-		/**
-		 * @copy org.apache.flex.core.IItemRendererParent#removeItemRenderer()
-		 * @private
-		 *
-		 *  @langversion 3.0
-		 *  @playerversion Flash 10.2
-		 *  @playerversion AIR 2.6
-		 *  @productversion FlexJS 0.8
-		 */
-		public function removeItemRenderer(renderer:IItemRenderer):void
-		{
-			removeElement(renderer, true);
-
-			var newEvent:ItemRemovedEvent = new ItemRemovedEvent("itemRemoved");
-			newEvent.item = renderer;
-
-			dispatchEvent(newEvent);
-		}
-
-		/**
-		 * @copy org.apache.flex.core.IItemRendererParent#removeAllItemRenderers()
-		 * @private
-		 *
-		 *  @langversion 3.0
-		 *  @playerversion Flash 10.2
-		 *  @playerversion AIR 2.6
-		 *  @productversion FlexJS 0.8
-		 */
-		public function removeAllItemRenderers():void
-		{
-			while (numElements > 0) {
-				var child:IChild = getElementAt(0);
-				removeElement(child);
-			}
-		}
-
-		/**
-		 *  @copy org.apache.flex.core.IItemRendererParent#getItemRendererForIndex()
-		 *
-		 *  @langversion 3.0
-		 *  @playerversion Flash 10.2
-		 *  @playerversion AIR 2.6
-		 *  @productversion FlexJS 0.8
-		 */
-		public function getItemRendererForIndex(index:int):IItemRenderer
-		{
-			if (index < 0 || index >= numElements) return null;
-			return getElementAt(index) as IItemRenderer;
-		}
-
-		/**
-		 *  Refreshes the itemRenderers. Useful after a size change by the data group.
-		 *
-		 *  @copy org.apache.flex.core.IItemRendererParent#updateAllItemRenderers()
-		 *  @langversion 3.0
-		 *  @playerversion Flash 10.2
-		 *  @playerversion AIR 2.6
-		 *  @productversion FlexJS 0.8
-		 */
-		public function updateAllItemRenderers():void
-		{
-			var n:Number = numElements;
-			for (var i:Number = 0; i < n; i++)
-			{
-				var renderer:DataItemRenderer = getItemRendererForIndex(i) as DataItemRenderer;
-				if (renderer) {
-					renderer.setWidth(this.width,true);
-					renderer.adjustSize();
-				}
-			}
-		}
-
-		/*
 		 * UIBase
 		 */
 
-		/**
-		 * @private
-		 */
-		override public function addedToParent():void
-		{
-            super.addedToParent();
-
-			dispatchEvent(new Event("initComplete"));
-		}
-
-		/**
-		 * @private
-		 */
-	    private function beadsAddedHandler(e:Event):void
-		{
-            if (getBeadByType(IDataProviderItemRendererMapper) == null)
-            {
-                var mapper:IDataProviderItemRendererMapper = new (ValuesManager.valuesImpl.getValue(this, "iDataProviderItemRendererMapper")) as IDataProviderItemRendererMapper;
-                addBead(mapper);
-            }
-			var itemRendererFactory:IItemRendererClassFactory = getBeadByType(IItemRendererClassFactory) as IItemRendererClassFactory;
-			if (!itemRendererFactory)
-			{
-				itemRendererFactory = new (ValuesManager.valuesImpl.getValue(this, "iItemRendererClassFactory")) as IItemRendererClassFactory;
-				addBead(itemRendererFactory);
-			}
-		}
-
         /**
          * @flexjsignorecoercion org.apache.flex.core.WrappedHTMLElement
          */

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/822c1520/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/Group.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/Group.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/Group.as
index 72db2e0..447a185 100644
--- a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/Group.as
+++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/Group.as
@@ -19,19 +19,6 @@
 package org.apache.flex.html
 {
 	import org.apache.flex.core.GroupBase;
-	import org.apache.flex.core.IContainer;
-	import org.apache.flex.core.ILayoutHost;
-	import org.apache.flex.core.ILayoutParent;
-	import org.apache.flex.core.ILayoutView;
-	import org.apache.flex.core.IMXMLDocument;
-	import org.apache.flex.core.IStrand;
-	import org.apache.flex.core.IBead;
-	import org.apache.flex.core.IBeadLayout;
-	import org.apache.flex.core.IUIBase;
-	import org.apache.flex.core.UIBase;
-	import org.apache.flex.core.ValuesManager;
-	import org.apache.flex.events.Event;
-	import org.apache.flex.utils.MXMLDataInterpreter;
 
 	/**
 	 *  Indicates that the children of the container is have been added.
@@ -61,7 +48,7 @@ package org.apache.flex.html
      *  @playerversion AIR 2.6
      *  @productversion FlexJS 0.8
      */
-	public class Group extends GroupBase implements ILayoutParent, ILayoutView
+	public class Group extends GroupBase
 	{
         /**
          *  Constructor.
@@ -75,18 +62,5 @@ package org.apache.flex.html
 		{
 			super();
 		}
-
-		/**
-		 * Returns the ILayoutHost which is its view. From ILayoutParent.
-		 *
-		 *  @langversion 3.0
-		 *  @playerversion Flash 10.2
-		 *  @playerversion AIR 2.6
-		 *  @productversion FlexJS 0.8
-		 */
-		public function getLayoutHost():ILayoutHost
-		{
-			return view as ILayoutHost;
-		}
 	}
 }

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/822c1520/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/List.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/List.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/List.as
index b2cbce7..fb2481f 100644
--- a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/List.as
+++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/List.as
@@ -18,38 +18,13 @@
 ////////////////////////////////////////////////////////////////////////////////
 package org.apache.flex.html
 {
-	import org.apache.flex.core.ContainerBaseStrandChildren;
-	import org.apache.flex.core.IContentViewHost;
-	import org.apache.flex.core.IChild;
-	import org.apache.flex.core.ILayoutView;
-	import org.apache.flex.core.IDataProviderItemRendererMapper;
-	import org.apache.flex.core.IFactory;
-	import org.apache.flex.core.IItemRendererClassFactory;
-	import org.apache.flex.core.IItemRenderer;
-	import org.apache.flex.core.IListPresentationModel;
 	import org.apache.flex.core.IRollOverModel;
 	import org.apache.flex.core.ISelectionModel;
-	import org.apache.flex.core.ListBase;
-	import org.apache.flex.core.UIBase;
-	import org.apache.flex.core.ValuesManager;
-    COMPILE::JS
-    {
-        import org.apache.flex.core.WrappedHTMLElement;
-        import org.apache.flex.html.beads.ListView;
-        import org.apache.flex.html.supportClasses.DataGroup;
-    }
-	import org.apache.flex.events.Event;
-	import org.apache.flex.events.IEventDispatcher;
-	import org.apache.flex.html.beads.models.ListPresentationModel;
-	import org.apache.flex.html.supportClasses.DataItemRenderer;
-	import org.apache.flex.events.ItemAddedEvent;
-	import org.apache.flex.events.ItemClickedEvent;
-	import org.apache.flex.events.ItemRemovedEvent;
 
-	import org.apache.flex.core.IList;
-	import org.apache.flex.core.IItemRendererParent;
-	import org.apache.flex.core.IItemRendererProvider;
-	import org.apache.flex.core.ListBase;
+	COMPILE::JS
+	{
+		import org.apache.flex.core.WrappedHTMLElement;
+	}
 
 	/**
 	 *  Indicates that the initialization of the list is complete.

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/822c1520/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/ContainerView.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/ContainerView.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/ContainerView.as
index 8d786a4..140c4eb 100644
--- a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/ContainerView.as
+++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/ContainerView.as
@@ -353,6 +353,20 @@ package org.apache.flex.html.beads
 		{
 			return _viewport;
 		}
+		
+		/**
+		 * The sub-element used as the parent of the container's elements. This does not
+		 * include the chrome elements.
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion FlexJS 0.0
+		 */
+		override public function get contentView():ILayoutView
+		{
+			return viewport.contentView as ILayoutView;
+		}
 
 		/**
 		 * Strand setter.

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/822c1520/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataContainerView.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataContainerView.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataContainerView.as
index 85cfab0..0dfdb0c 100644
--- a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataContainerView.as
+++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/DataContainerView.as
@@ -64,6 +64,9 @@ package org.apache.flex.html.beads
 		
 		protected var dataModel:IDataProviderModel;
 		
+		/**
+		 * @flexjsignorecoercion org.apache.flex.core.IItemRendererParent
+		 */
 		public function get dataGroup():IItemRendererParent
 		{
 			return super.contentView as IItemRendererParent;

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/822c1520/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/GroupView.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/GroupView.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/GroupView.as
index bd02408..d286b01 100644
--- a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/GroupView.as
+++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/beads/GroupView.as
@@ -239,7 +239,6 @@ package org.apache.flex.html.beads
 		 *  @playerversion AIR 2.6
 		 *  @productversion FlexJS 0.8
 		 */
-		COMPILE::SWF
 		protected function layoutViewBeforeContentLayout():void
 		{
 			// This has no use for Group but is here so a subclass can override it.
@@ -261,10 +260,8 @@ package org.apache.flex.html.beads
 
 			layoutRunning = true;
 			
-			COMPILE::SWF {
-				// the HTML/JS side do not need any preparations
-				layoutViewBeforeContentLayout();
-			}
+			// pre-process before layout
+			layoutViewBeforeContentLayout();
 
 			var host:UIBase = _strand as UIBase;
 
@@ -281,11 +278,8 @@ package org.apache.flex.html.beads
 				layout.layout();
 			}
 
-			COMPILE::SWF {
-				// the HTML/JS side automatically handles changes in child sizes and
-				// will adjust the div if needed.
-				layoutViewAfterContentLayout();
-			}
+			// cleanup or adjust after layout
+			layoutViewAfterContentLayout();
 
 			layoutRunning = false;
 			
@@ -362,6 +356,12 @@ package org.apache.flex.html.beads
 
 			adjusting = false;
 		}
+		
+		COMPILE::JS
+		protected function layoutViewAfterContentLayout():void
+		{
+			// maybe useful in a subclass on the JS side.
+		}
 
 		/**
 		 * @private

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/822c1520/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/supportClasses/ScrollingViewport.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/supportClasses/ScrollingViewport.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/supportClasses/ScrollingViewport.as
index c199d23..795e676 100644
--- a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/supportClasses/ScrollingViewport.as
+++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/supportClasses/ScrollingViewport.as
@@ -90,7 +90,11 @@ package org.apache.flex.html.supportClasses
 		override public function set strand(value:IStrand):void
 		{
 			super.strand = value;
-			(value as UIBase).element.style.overflow = "auto";
+			if (contentView == null) {
+				(value as UIBase).element.style.overflow = "auto";
+			} else {
+				(contentView as UIBase).element.style.overflow = "auto";
+			}
 		}
 		
 		/**

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/822c1520/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/supportClasses/Viewport.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/supportClasses/Viewport.as b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/supportClasses/Viewport.as
index b155e44..f671683 100644
--- a/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/supportClasses/Viewport.as
+++ b/frameworks/projects/HTML/src/main/flex/org/apache/flex/html/supportClasses/Viewport.as
@@ -100,7 +100,23 @@ package org.apache.flex.html.supportClasses
 		public function set strand(value:IStrand):void
 		{
 			_strand = value;
-			contentArea = value as UIBase;
+			
+			contentArea = _strand.getBeadByType(IContentView) as UIBase;
+			if (!contentArea)
+			{
+				var c:Class = ValuesManager.valuesImpl.getValue(_strand, 'iContentView') as Class;
+				if (c != null) {
+					var result:Object = new c();
+					if (result != null) {
+						contentArea = result as UIBase;
+					}
+				}
+			}
+			
+			if (contentArea == null) {
+				contentArea = value as UIBase;
+			}
+			
 			contentArea.element.style.overflow = "hidden";
 		}