You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ah...@apache.org on 2015/12/17 08:54:26 UTC

[16/55] [abbrv] git commit: [flex-asjs] [refs/heads/develop] - Flat backport

Flat backport


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

Branch: refs/heads/develop
Commit: 9634f9af6b8888db1b9bcb6c212162f3c0857988
Parents: 4b7f2c0
Author: Alex Harui <ah...@apache.org>
Authored: Mon Dec 7 21:56:21 2015 -0800
Committer: Alex Harui <ah...@apache.org>
Committed: Mon Dec 7 21:56:35 2015 -0800

----------------------------------------------------------------------
 frameworks/projects/Flat/as/src/FlatClasses.as  |  15 +-
 .../as/src/org/apache/flex/flat/CheckBox.as     | 116 ++++++-
 .../as/src/org/apache/flex/flat/DropDownList.as | 324 ++++++++++++++++++-
 .../as/src/org/apache/flex/flat/RadioButton.as  | 200 +++++++++++-
 frameworks/projects/Flat/build.xml              |  84 ++---
 .../projects/Flat/compile-asjs-config.xml       |  80 +++++
 frameworks/projects/Flat/compile-config.xml     |   8 +-
 frameworks/projects/Flat/flat-as-manifest.xml   |  26 ++
 frameworks/projects/Flat/flat-manifest.xml      |   6 -
 .../html/supportClasses/DataItemRenderer.as     |   2 +-
 10 files changed, 807 insertions(+), 54 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9634f9af/frameworks/projects/Flat/as/src/FlatClasses.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Flat/as/src/FlatClasses.as b/frameworks/projects/Flat/as/src/FlatClasses.as
index 161c114..29173ef 100644
--- a/frameworks/projects/Flat/as/src/FlatClasses.as
+++ b/frameworks/projects/Flat/as/src/FlatClasses.as
@@ -27,10 +27,17 @@ package
  */
 internal class FlatClasses
 {	
-	
-    import org.apache.flex.flat.beads.CSSScrollBarView; CSSScrollBarView;
-    import org.apache.flex.flat.beads.CSSScrollBarButtonView; CSSScrollBarButtonView;
-    import org.apache.flex.flat.supportClasses.DropDownListStringItemRenderer; DropDownListStringItemRenderer;
+	COMPILE::AS3
+	{
+		import org.apache.flex.flat.beads.CSSScrollBarView; CSSScrollBarView;
+		import org.apache.flex.flat.beads.CSSScrollBarButtonView; CSSScrollBarButtonView;
+		import org.apache.flex.flat.supportClasses.DropDownListStringItemRenderer; DropDownListStringItemRenderer;
+    	import org.apache.flex.flat.supportClasses.DropDownListList; DropDownListList;
+		import org.apache.flex.flat.beads.DropDownListView; DropDownListView;
+    	import org.apache.flex.flat.beads.CheckboxCSSContentAndTextToggleButtonView; CheckboxCSSContentAndTextToggleButtonView;
+    	import org.apache.flex.flat.beads.RadioCSSContentAndTextToggleButtonView; RadioCSSContentAndTextToggleButtonView;
+
+	}
 }
 
 }

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9634f9af/frameworks/projects/Flat/as/src/org/apache/flex/flat/CheckBox.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Flat/as/src/org/apache/flex/flat/CheckBox.as b/frameworks/projects/Flat/as/src/org/apache/flex/flat/CheckBox.as
index b91a2c9..466e9b2 100644
--- a/frameworks/projects/Flat/as/src/org/apache/flex/flat/CheckBox.as
+++ b/frameworks/projects/Flat/as/src/org/apache/flex/flat/CheckBox.as
@@ -18,7 +18,16 @@
 ////////////////////////////////////////////////////////////////////////////////
 package org.apache.flex.flat
 {
-    import org.apache.flex.html.CheckBox;
+    COMPILE::AS3
+    {
+        import org.apache.flex.html.CheckBox;            
+    }
+    COMPILE::JS
+    {
+        import org.apache.flex.core.UIBase;
+        import org.apache.flex.core.WrappedHTMLElement;
+        import org.apache.flex.events.Event;
+    }
 
     /**
      *  The CheckBox class provides a FlatUI-like appearance for
@@ -29,6 +38,7 @@ package org.apache.flex.flat
      *  @playerversion AIR 2.6
      *  @productversion FlexJS 0.0
      */
+    COMPILE::AS3
 	public class CheckBox extends org.apache.flex.html.CheckBox
 	{
         /**
@@ -44,4 +54,108 @@ package org.apache.flex.flat
 			super();
 		}
 	}
+    
+    COMPILE::JS
+    public class CheckBox extends UIBase
+    {
+        
+        private var input:HTMLInputElement;
+        private var checkbox:HTMLSpanElement;
+        private var label:HTMLLabelElement;
+        private var textNode:Text;
+        
+        /**
+         * @flexjsignorecoercion org.apache.flex.core.WrappedHTMLElement
+         * @flexjsignorecoercion HTMLLabelElement
+         * @flexjsignorecoercion HTMLInputElement
+         * @flexjsignorecoercion HTMLSpanElement
+         * @flexjsignorecoercion Text
+         */
+        override protected function createElement():WrappedHTMLElement
+        {
+                label = document.createElement('label') as HTMLLabelElement;
+                element = label as WrappedHTMLElement;
+                
+                input = document.createElement('input') as HTMLInputElement;
+                input.type = 'checkbox';
+                input.className = 'checkbox-input';
+                input.addEventListener('change', selectionChangeHandler, false);
+                label.appendChild(input);
+                
+                checkbox = document.createElement('span') as HTMLSpanElement;
+                checkbox.className = 'checkbox-icon';
+                checkbox.addEventListener('mouseover', mouseOverHandler, false);
+                checkbox.addEventListener('mouseout', mouseOutHandler, false);
+                label.appendChild(checkbox);
+                
+                textNode = document.createTextNode('') as Text;
+                label.appendChild(textNode);
+                label.className = 'CheckBox';
+                typeNames = 'CheckBox';
+                
+                positioner = element;
+                positioner.style.position = 'relative';
+                (input as WrappedHTMLElement).flexjs_wrapper = this;
+                (checkbox as WrappedHTMLElement).flexjs_wrapper = this;
+                element.flexjs_wrapper = this;
+                
+                return element;
+            };
+        
+        
+        /**
+         */
+        private function mouseOverHandler(event:Event):void
+        {
+            checkbox.className = 'checkbox-icon-hover';
+        }
+        
+        /**
+         */
+        private function mouseOutHandler(event:Event):void
+        {
+            if (input.checked)
+                checkbox.className = 'checkbox-icon-checked';
+            else
+                checkbox.className = 'checkbox-icon';
+        }
+        
+        
+        /**
+         */
+        private function selectionChangeHandler(event:Event):void
+        {
+            if (input.checked)
+                checkbox.className = 'checkbox-icon-checked';
+            else
+                checkbox.className = 'checkbox-icon';
+        }
+        
+        
+        public function get text():String
+        {
+            return textNode.nodeValue;
+        }
+        
+        public function set text(value:String):void
+        {
+            textNode.nodeValue = value;
+        }
+        
+        public function get selected():Boolean
+        {
+            return input.checked;
+        }
+        
+        public function set selected(value:Boolean):void
+        {
+            input.checked = value;
+            if (value)
+                checkbox.className = 'checkbox-icon-checked';
+            else
+                checkbox.className = 'checkbox-icon';
+        }
+
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9634f9af/frameworks/projects/Flat/as/src/org/apache/flex/flat/DropDownList.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Flat/as/src/org/apache/flex/flat/DropDownList.as b/frameworks/projects/Flat/as/src/org/apache/flex/flat/DropDownList.as
index 30a22a5..265f2c7 100644
--- a/frameworks/projects/Flat/as/src/org/apache/flex/flat/DropDownList.as
+++ b/frameworks/projects/Flat/as/src/org/apache/flex/flat/DropDownList.as
@@ -18,7 +18,23 @@
 ////////////////////////////////////////////////////////////////////////////////
 package org.apache.flex.flat
 {
-    import org.apache.flex.html.DropDownList;
+    import org.apache.flex.core.UIBase;
+
+    COMPILE::AS3
+    {
+        import org.apache.flex.html.DropDownList;            
+    }
+    COMPILE::JS
+    {
+        import goog.events;
+        import org.apache.flex.core.ListBase;
+        import org.apache.flex.core.WrappedHTMLElement;
+        import org.apache.flex.core.ISelectionModel;
+        import org.apache.flex.events.Event;
+        import org.apache.flex.html.beads.models.ArraySelectionModel;
+        import org.apache.flex.utils.CSSUtils;
+    }
+    
     /**
      *  The DropDownList class provides a FlatUI-like appearance for
      *  a DropDownList.
@@ -28,6 +44,7 @@ package org.apache.flex.flat
      *  @playerversion AIR 2.6
      *  @productversion FlexJS 0.0
      */
+    COMPILE::AS3
 	public class DropDownList extends org.apache.flex.html.DropDownList
 	{
         /**
@@ -43,4 +60,309 @@ package org.apache.flex.flat
 			super();
 		}
 	}
+    
+    COMPILE::JS
+    public class DropDownList extends ListBase
+    {
+        /**
+         *  Constructor.
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+         */
+        public function DropDownList()
+        {
+            super();
+            model = new ArraySelectionModel();
+        }
+
+        private var label:HTMLSpanElement;
+        private var button:HTMLButtonElement;
+        private var caret:HTMLSpanElement;
+        private var menu:HTMLUListElement;
+        
+        /**
+         * @flexjsignorecoercion org.apache.flex.core.WrappedHTMLElement
+         * @flexjsignorecoercion HTMLButtonElement
+         * @flexjsignorecoercion HTMLDivElement
+         * @flexjsignorecoercion HTMLSpanElement
+         */
+        override protected function createElement():WrappedHTMLElement
+        {
+            var button:HTMLButtonElement;
+            var outer:HTMLDivElement;
+            var caret:HTMLSpanElement;
+            
+            this.element = document.createElement('div') as WrappedHTMLElement;
+            outer = this.element as HTMLDivElement;
+            
+            this.button = button = document.createElement('button') as HTMLButtonElement;
+            button.className = 'dropdown-toggle-open-btn';
+            if (this.className)
+                button.className += ' ' + this.className;
+            goog.events.listen(button, 'click', buttonClicked);
+            outer.appendChild(button);
+            
+            this.label = document.createElement('span') as HTMLSpanElement;
+            this.label.className = 'dropdown-label';
+            button.appendChild(this.label);
+            this.caret = caret = document.createElement('span') as HTMLSpanElement;
+            button.appendChild(caret);
+            caret.className = 'dropdown-caret';
+            
+            this.positioner = this.element;
+            this.positioner.style.position = 'relative';
+            
+            // add a click handler so that a click outside of the combo box can
+            // dismiss the pop-up should it be visible.
+            goog.events.listen(document, 'click', dismissPopup);
+            
+            (button as WrappedHTMLElement).flexjs_wrapper = this;
+            this.element.flexjs_wrapper = this;
+            (this.label as WrappedHTMLElement).flexjs_wrapper = this;
+            (caret as WrappedHTMLElement).flexjs_wrapper = this;
+            
+            return this.element;
+        }
+        
+        
+        /**
+         * @param event The event.
+         * @flexjsignorecoercion org.apache.flex.core.UIBase 
+         */
+        private function selectChanged(event:Event):void
+        {
+            var select:UIBase;
+            
+            select = event.target as UIBase;
+            
+            this.selectedIndex = parseInt(select.id, 10);
+            
+            this.menu.parentNode.removeChild(this.menu);
+            this.menu = null;
+            
+            this.dispatchEvent('change');
+        }
+        
+        
+        /**
+         * @param event The event.
+         */
+        private function dismissPopup(event:Event = null):void
+        {
+            // remove the popup if it already exists
+            if (this.menu) 
+            {
+                this.menu.parentNode.removeChild(this.menu);
+                this.menu = null;
+            }
+        }
+        
+        
+        /**
+         * @param event The event.
+         * @flexjsignorecoercion Array
+         * @flexjsignorecoercion HTMLButtonElement
+         * @flexjsignorecoercion HTMLUListElement
+         * @flexjsignorecoercion HTMLLIElement
+         * @flexjsignorecoercion HTMLAnchorElement
+         */
+        private function buttonClicked(event:Event):void
+        {
+            var dp:Array;
+            var i:int;
+            var button:HTMLButtonElement;
+            var left:Number;
+            var n:int;
+            var opt:HTMLLIElement;
+            var opts:Array;
+            var pn:HTMLDivElement;
+            var select:HTMLUListElement;
+            var top:Number;
+            var width:Number;
+            
+            event.stopPropagation();
+            
+            if (this.menu) 
+            {
+                this.dismissPopup();    
+                return;
+            }
+            
+            button = this.element.childNodes.item(0) as HTMLButtonElement;
+            
+            pn = this.element as HTMLDivElement;
+            top = pn.offsetTop + button.offsetHeight;
+            left = pn.offsetLeft;
+            width = pn.offsetWidth;
+                        
+            this.menu = select = document.createElement('ul') as HTMLUListElement;
+            var el:Element =  element as Element;
+            var cv:Object = getComputedStyle(el);
+            select.style.width = cv.width;
+            goog.events.listen(select, 'click', selectChanged);
+            select.className = 'dropdown-menu';
+            
+            var lf:String = this.labelField;
+            dp = dataProvider as Array;
+            n = dp.length;
+            for (i = 0; i < n; i++) {
+                opt = document.createElement('li') as HTMLLIElement;
+                opt.style.backgroundColor = 'transparent';
+                var ir:HTMLAnchorElement = document.createElement('a') as HTMLAnchorElement;
+                if (lf)
+                    ir.innerHTML = dp[i][lf];
+                else
+                    ir.innerHTML = dp[i];
+                ir.id = i.toString();
+                if (i == this.selectedIndex)
+                    ir.className = 'dropdown-menu-item-renderer-selected';
+                else
+                    ir.className = 'dropdown-menu-item-renderer';
+                opt.appendChild(ir);
+                select.appendChild(opt);
+            }
+            
+            this.element.appendChild(select);
+        };
+        
+        
+        /**
+         */
+        override public function addedToParent():void
+        {
+            super.addedToParent();
+            var el:Element = button as Element;
+            var cv:Object = getComputedStyle(el);
+            var s:String = cv.paddingLeft;
+            var pl:Number = CSSUtils.toNumber(s);
+            s = cv.paddingRight;
+            var pr:Number = CSSUtils.toNumber(s);
+            s = cv.borderLeftWidth;
+            var bl:Number = CSSUtils.toNumber(s);
+            s = cv.borderRightWidth;
+            var br:Number = CSSUtils.toNumber(s);
+            var caretWidth:Number = this.caret.offsetWidth;
+            // 10 seems to factor spacing between span and extra FF padding?
+            var fluff:Number = pl + pr + bl + br + caretWidth + 1 + 10;
+            var labelWidth:Number = this.width - fluff;
+            var strWidth:String = labelWidth.toString();
+            strWidth += 'px';
+            this.label.style.width = strWidth;
+        }       
+        
+        override public function set className(value:String):void
+        {
+            super.className = value;
+            if (this.button) {
+                this.button.className = this.typeNames ?
+                value + ' ' + 'dropdown-toggle-open-btn' + ' ' + this.typeNames :
+                value + ' ' + 'dropdown-toggle-open-btn';
+            }
+        }
+        
+        /**
+         *  The data set to be displayed.  Usually a simple
+         *  array of strings.  A more complex component
+         *  would allow more complex data and data sets.
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+         */
+        public function get dataProvider():Object
+        {
+            return ISelectionModel(model).dataProvider;
+        }
+        
+        /**
+         *  @private
+         *  @flexjsignorecoercion HTMLOptionElement
+         *  @flexjsignorecoercion HTMLSelectElement
+         */
+        public function set dataProvider(value:Object):void
+        {
+            ISelectionModel(model).dataProvider = value;
+        }
+        
+        /**
+         *  The name of field within the data used for display. Each item of the
+         *  data should have a property with this name.
+         *
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+         */
+        public function get labelField():String
+        {
+            return ISelectionModel(model).labelField;
+        }
+        public function set labelField(value:String):void
+        {
+            ISelectionModel(model).labelField = value;
+        }
+
+        [Bindable("change")]
+        /**
+         *  @copy org.apache.flex.core.ISelectionModel#selectedIndex
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+         */
+        public function get selectedIndex():int
+        {
+            return ISelectionModel(model).selectedIndex;
+        }
+        
+        /**
+         *  @private
+         *  @flexjsignorecoercion HTMLSelectElement
+         *  @flexjsignorecoercion String
+         */
+        public function set selectedIndex(value:int):void
+        {
+            ISelectionModel(model).selectedIndex = value;
+            var lf:String = this.labelField;
+            if (lf)
+                this.label.innerHTML = this.selectedItem[lf] as String;
+            else
+                this.label.innerHTML = this.selectedItem as String;
+        }
+        
+        
+        [Bindable("change")]
+        /**
+         *  @copy org.apache.flex.core.ISelectionModel#selectedItem
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+         */
+        public function get selectedItem():Object
+        {
+            return ISelectionModel(model).selectedItem;
+        }
+        
+        /**
+         *  @private
+         *  @flexjsignorecoercion HTMLSelectElement
+         *  @flexjsignorecoercion String
+         */
+        public function set selectedItem(value:Object):void
+        {
+            ISelectionModel(model).selectedItem = value;
+            var lf:String = this.labelField;
+            if (lf)
+                this.label.innerHTML = this.selectedItem[lf] as String;
+            else
+                this.label.innerHTML = this.selectedItem as String;
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9634f9af/frameworks/projects/Flat/as/src/org/apache/flex/flat/RadioButton.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Flat/as/src/org/apache/flex/flat/RadioButton.as b/frameworks/projects/Flat/as/src/org/apache/flex/flat/RadioButton.as
index ca02613..1294a25 100644
--- a/frameworks/projects/Flat/as/src/org/apache/flex/flat/RadioButton.as
+++ b/frameworks/projects/Flat/as/src/org/apache/flex/flat/RadioButton.as
@@ -18,7 +18,15 @@
 ////////////////////////////////////////////////////////////////////////////////
 package org.apache.flex.flat
 {
-    import org.apache.flex.html.RadioButton;
+    COMPILE::AS3
+    {
+        import org.apache.flex.html.RadioButton;            
+    }
+    COMPILE::JS
+    {
+        import org.apache.flex.core.UIBase;
+        import org.apache.flex.core.WrappedHTMLElement;
+    }
     
     /**
      *  The RadioButton class provides a FlatUI-like appearance for
@@ -29,6 +37,7 @@ package org.apache.flex.flat
      *  @playerversion AIR 2.6
      *  @productversion FlexJS 0.0
      */
+    COMPILE::AS3
 	public class RadioButton extends org.apache.flex.html.RadioButton
 	{
         /**
@@ -44,4 +53,193 @@ package org.apache.flex.flat
 			super();
 		}
 	}
+    
+    COMPILE::JS
+    public class RadioButton extends UIBase
+    {
+        /**
+         * Provides unique name
+         */
+        public static var radioCounter:int = 0;
+        
+        private var input:HTMLInputElement;
+        private var radio:HTMLSpanElement;
+        private var textNode:Text;
+        private var labelFor:HTMLLabelElement;
+        
+        /**
+         * @flexjsignorecoercion org.apache.flex.core.WrappedHTMLElement
+         * @flexjsignorecoercion HTMLInputElement
+         * @flexjsignorecoercion HTMLSpanElement
+         * @flexjsignorecoercion HTMLLabelElement
+         */
+        override protected function createElement():WrappedHTMLElement
+        {
+            // hide this eleement
+            input = document.createElement('input') as HTMLInputElement;
+            input.type = 'radio';
+            input.className = 'radio-input';
+            input.id = '_radio_' + radioCounter++;
+            input.addEventListener('change', selectionChangeHandler, false);
+            
+            radio = document.createElement('span') as HTMLSpanElement;
+            radio.className = 'radio-icon';
+            radio.addEventListener('mouseover', mouseOverHandler, false);
+            radio.addEventListener('mouseout', mouseOutHandler, false);
+            
+            textNode = document.createTextNode('radio button') as Text;
+            
+            labelFor = document.createElement('label') as HTMLLabelElement;
+            labelFor.appendChild(input);
+            labelFor.appendChild(radio);
+            labelFor.appendChild(textNode);
+            labelFor.style.position = 'relative';
+            
+            element = labelFor as WrappedHTMLElement;
+            element.className = 'RadioButton';
+            typeNames = 'RadioButton';
+            
+            positioner = element;
+            positioner.style.position = 'relative';
+            (input as WrappedHTMLElement).flexjs_wrapper = this;
+            (radio as WrappedHTMLElement).flexjs_wrapper = this;
+            element.flexjs_wrapper = this;
+            (textNode as WrappedHTMLElement).flexjs_wrapper = this;
+            
+            return element;
+        }
+        
+        
+        /**
+         * @param e The event object.
+         */
+        private function mouseOverHandler(e:Event):void
+        {
+            radio.className = 'radio-icon-hover';
+        }
+        
+        
+        /**
+         * @param e The event object.
+         */
+        private function mouseOutHandler(e:Event):void
+        {
+            if (input.checked)
+                radio.className = 'radio-icon-checked';
+            else
+                radio.className = 'radio-icon';
+        }
+        
+        
+        /**
+         * @param e The event object.
+         */
+        private function selectionChangeHandler(e:Event):void 
+        {
+            // this should reset the icons in the non-selected radio
+            selectedValue = value;
+        }
+        
+        
+        override public function set id(value:String):void
+        {
+            super.id = value;
+            labelFor.id = value;
+            input.id = value;
+        }
+        
+        /**
+         * @flexjsignorecoercion String
+         */
+        public function get groupName():String
+        {
+            return input.name as String;
+        }
+        
+        public function set groupName(value:String):void
+        {
+            input.name = value;
+        }
+        
+        public function get text():String
+        {
+            return textNode.nodeValue;
+        }
+        
+        public function set text(value:String):void
+        {
+            textNode.nodeValue = value;
+        }
+        
+        public function get selected():Boolean
+        {
+            return input.checked;
+        }
+        
+        public function set selected(value:Boolean):void
+        {
+            input.checked = value;
+            if (input.checked)
+                radio.className = 'radio-icon-checked';
+            else
+                radio.className = 'radio-icon';
+        }
+        
+        public function get value():String
+        {
+            return input.value;
+        }
+        
+        public function set value(value:String):void
+        {
+            input.value = value;
+        }
+        
+        /**
+         * @flexjsignorecoercion Array 
+         * @flexjsignorecoercion String
+         */
+        public function get selectedValue():Object
+        {
+            var buttons:Array;
+            var groupName:String;
+            var i:int;
+            var n:int;
+            
+            groupName = input.name as String;
+            buttons = document.getElementsByName(groupName) as Array;
+            n = buttons.length;
+            
+            for (i = 0; i < n; i++) {
+                if (buttons[i].checked) {
+                    return buttons[i].value;
+                }
+            }
+            return null;            
+        }
+        
+        /**
+         * @flexjsignorecoercion Array
+         * @flexjsignorecoercion String
+         */
+        public function set selectedValue(value:Object):void
+        {
+            var buttons:Array;
+            var groupName:String;
+            var i:int;
+            var n:int;
+            
+            groupName = input.name as String;
+            buttons = document.getElementsByName(groupName) as Array;
+            n = buttons.length;
+            for (i = 0; i < n; i++) {
+                if (buttons[i].value === value) {
+                    buttons[i].checked = true;
+                    buttons[i].flexjs_wrapper.selected = true;
+                }
+                else
+                    buttons[i].flexjs_wrapper.selected = false;
+            }
+        }
+    }    
 }

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9634f9af/frameworks/projects/Flat/build.xml
----------------------------------------------------------------------
diff --git a/frameworks/projects/Flat/build.xml b/frameworks/projects/Flat/build.xml
index 54ceacd..04ad536 100644
--- a/frameworks/projects/Flat/build.xml
+++ b/frameworks/projects/Flat/build.xml
@@ -37,7 +37,7 @@
     <target name="main" depends="clean,compile,test" description="Clean build of Flat.swc">
     </target>
     
-    <target name="all" depends="main,compile-asjs,lint-js,test-js" description="Full build of Flat.swc">
+    <target name="all" depends="clean,compile-asjs,compile-extern-swc,compile,copy-js,test" description="Full build of Flat.swc">
     </target>
     
     <target name="test" unless="is.jenkins">
@@ -98,11 +98,13 @@
             <load-config filename="compile-config.xml" />
             <arg value="+playerglobal.version=${playerglobal.version}" />
             <arg value="+env.AIR_HOME=${env.AIR_HOME}" />
+            <arg value="-define=COMPILE::AS3,true" />
+            <arg value="-define=COMPILE::JS,false" />
         </compc>
     </target>
-
-    <target name="compile-asjs" >
-        <echo message="Cross-compiling Flat/asjs"/>
+    
+    <target name="compile-asjs">
+        <echo message="Cross-compiling Flat"/>
         <echo message="FALCONJX_HOME: ${FALCONJX_HOME}"/>
         <java jar="${FALCONJX_HOME}/lib/compc.jar" fork="true" >
             <jvmarg value="-Xmx384m" />
@@ -117,45 +119,55 @@
             <arg value="+playerglobal.version=${playerglobal.version}" />
             <arg value="+env.PLAYERGLOBAL_HOME=${env.PLAYERGLOBAL_HOME}" />
             <arg value="+env.AIR_HOME=${env.AIR_HOME}" />
+            <arg value="-external-library-path+=${FALCONJX_HOME}/../externs/js/out/bin/js.swc" />
+            <!-- this is not on external-library path otherwise goog.requires are not generated -->
+            <arg value="-library-path+=${FALCONJX_HOME}/../externs/GCL/out/bin/GCL.swc" />
+            <arg value="-define=COMPILE::AS3,false" />
+            <arg value="-define=COMPILE::JS,true" />
         </java>
     </target>
-
-    <target name="lint-js" depends="gjslint, jshint, copy-js" />
+    
+    <target name="compile-extern-swc" description="Compiles .as files into .swc used for cross-compiling other projects">
+        <echo message="Compiling externs/Flat.swc"/>
+        <echo message="FLEX_HOME: ${FLEX_HOME}"/>
+        <echo message="FALCON_HOME: ${FALCON_HOME}"/>
+        <!-- make JS output folder now so include-file doesn't error -->
+        <mkdir dir="${FLEXJS_HOME}/frameworks/externs"/>
+        
+        <!-- Load the <compc> task. We can't do this at the <project> level -->
+        <!-- because targets that run before flexTasks.jar gets built would fail. -->
+        <taskdef resource="flexTasks.tasks" classpathref="lib.path"/>
+        <!--
+         Link in the classes (and their dependencies) for the MXML tags
+         listed in this project's manifest.xml.
+         Also link the additional classes (and their dependencies)
+         listed in FlatClasses.as,
+         because these aren't referenced by the manifest classes.
+         Keep the standard metadata when compiling.
+         Include the appropriate CSS files and assets in the SWC.
+         Don't include any resources in the SWC.
+         Write a bundle list of referenced resource bundles
+         into the file bundles.properties in this directory.
+         -->
+        <compc fork="true"
+            output="${FLEXJS_HOME}/frameworks/externs/Flat.swc">
+            <jvmarg line="${compc.jvm.args}"/>
+            <load-config filename="compile-asjs-config.xml" />
+            <arg value="+playerglobal.version=${playerglobal.version}" />
+            <arg value="+env.AIR_HOME=${env.AIR_HOME}" />
+            <arg value="-external-library-path+=${FALCONJX_HOME}/../externs/js/out/bin/js.swc" />
+            <!-- this is not on external-library path otherwise goog.requires are not generated -->
+            <arg value="-library-path+=${FALCONJX_HOME}/../externs/GCL/out/bin/GCL.swc" />
+            <arg value="-define=COMPILE::AS3,false" />
+            <arg value="-define=COMPILE::JS,true" />
+        </compc>
+    </target>
+    
     <target name="copy-js" >
         <copy todir="${FLEXJS_HOME}/frameworks/js/FlexJS/libs">
-            <fileset dir="${basedir}/js/src">
-                <include name="**/**" />
-            </fileset>
             <fileset dir="${basedir}/js/out">
                 <include name="**/**" />
             </fileset>
         </copy>
     </target>
-
-    <target name="gjslint" unless="no.lint">
-        <echo>running gjslint</echo>
-        <exec executable="${gjslint}" dir="${basedir}" failonerror="true">
-            <arg value="--strict" />
-            <arg value="--disable" />
-            <arg value="006,100,214,300" />
-            <!-- 006: wrong indentation -->
-            <!-- 100: cannot have non-primitive value -->
-            <!-- 214: @fileoverview tag missing description -->
-            <!-- 300: missing newline at end of file -->
-            <arg value="--max_line_length" />
-            <arg value="120" />
-            <arg value="-r" />
-            <arg value="${basedir}/js/src" />
-        </exec>
-    </target>
-
-    <target name="jshint" unless="no.lint">
-        <echo>running jshint</echo>
-        <exec executable="${jshint}" dir="${basedir}" failonerror="true">
-            <arg value="--config" />
-            <arg value="${FLEX_HOME}/frameworks/js/jshint.properties" />
-            <arg value="${basedir}/js/src" />
-        </exec>
-    </target>
-
 </project>

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9634f9af/frameworks/projects/Flat/compile-asjs-config.xml
----------------------------------------------------------------------
diff --git a/frameworks/projects/Flat/compile-asjs-config.xml b/frameworks/projects/Flat/compile-asjs-config.xml
new file mode 100644
index 0000000..a755d5c
--- /dev/null
+++ b/frameworks/projects/Flat/compile-asjs-config.xml
@@ -0,0 +1,80 @@
+<!--
+
+  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.
+
+-->
+<flex-config>
+
+    <compiler>
+        <accessible>false</accessible>
+        
+        <external-library-path>
+        </external-library-path>
+        
+		<mxml>
+			<children-as-data>true</children-as-data>
+		</mxml>
+		<binding-value-change-event>org.apache.flex.events.ValueChangeEvent</binding-value-change-event>
+		<binding-value-change-event-kind>org.apache.flex.events.ValueChangeEvent</binding-value-change-event-kind>
+		<binding-value-change-event-type>valueChange</binding-value-change-event-type>
+
+        <keep-as3-metadata>
+          <name>Bindable</name>
+          <name>Managed</name>
+          <name>ChangeEvent</name>
+          <name>NonCommittingChangeEvent</name>
+          <name>Transient</name>
+        </keep-as3-metadata>
+	  
+        <locale/>
+        
+        <library-path>
+            <!-- asjscompc won't 'link' these classes in, but will list their requires
+             if these swcs are on the external-library-path then their requires
+             will not be listed -->
+            <path-element>../../externs/Core.swc</path-element>
+            <path-element>../../externs/HTML.swc</path-element>
+        </library-path>
+        
+        <namespaces>
+            <namespace>
+                <uri>library://ns.apache.org/flexjs/flat</uri>
+                <manifest>flat-manifest.xml</manifest>
+            </namespace>
+        </namespaces>
+        
+        <source-path>
+            <path-element>as/src</path-element>
+        </source-path>
+        
+        <warn-no-constructor>false</warn-no-constructor>
+    </compiler>
+    
+    <include-file>
+    </include-file>
+
+    <include-classes>
+        <class>FlatClasses</class>
+    </include-classes>
+    
+    <include-namespaces>
+        <uri>library://ns.apache.org/flexjs/flat</uri>
+    </include-namespaces>
+        
+    <target-player>${playerglobal.version}</target-player>
+	
+
+</flex-config>

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9634f9af/frameworks/projects/Flat/compile-config.xml
----------------------------------------------------------------------
diff --git a/frameworks/projects/Flat/compile-config.xml b/frameworks/projects/Flat/compile-config.xml
index b8a2f60..44c7c9f 100644
--- a/frameworks/projects/Flat/compile-config.xml
+++ b/frameworks/projects/Flat/compile-config.xml
@@ -53,6 +53,10 @@
                 <uri>library://ns.apache.org/flexjs/flat</uri>
                 <manifest>flat-manifest.xml</manifest>
             </namespace>
+            <namespace>
+                <uri>library://ns.apache.org/flexjs/flat</uri>
+                <manifest>flat-as-manifest.xml</manifest>
+            </namespace>
         </namespaces>
         
         <source-path>
@@ -71,10 +75,6 @@
         <name>js/out/*</name>
         <path>js/out/*</path>
     </include-file>
-    <include-file>
-        <name>js/src/*</name>
-        <path>js/src/*</path>
-    </include-file>
 
     <include-classes>
         <class>FlatClasses</class>

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9634f9af/frameworks/projects/Flat/flat-as-manifest.xml
----------------------------------------------------------------------
diff --git a/frameworks/projects/Flat/flat-as-manifest.xml b/frameworks/projects/Flat/flat-as-manifest.xml
new file mode 100644
index 0000000..6f12083
--- /dev/null
+++ b/frameworks/projects/Flat/flat-as-manifest.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0"?>
+<!--
+
+  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.
+
+-->
+
+
+<componentPackage>
+
+    <component id="DropDownListList" class="org.apache.flex.flat.supportClasses.DropDownListList" />
+
+</componentPackage>

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9634f9af/frameworks/projects/Flat/flat-manifest.xml
----------------------------------------------------------------------
diff --git a/frameworks/projects/Flat/flat-manifest.xml b/frameworks/projects/Flat/flat-manifest.xml
index ac05bf7..77f5ffc 100644
--- a/frameworks/projects/Flat/flat-manifest.xml
+++ b/frameworks/projects/Flat/flat-manifest.xml
@@ -25,7 +25,6 @@
     <component id="ButtonBar" class="org.apache.flex.html.ButtonBar"  lookupOnly="true" />
     <component id="CloseButton" class="org.apache.flex.html.CloseButton"  lookupOnly="true" />
     <component id="DropDownList" class="org.apache.flex.flat.DropDownList" />
-    <component id="DropDownListList" class="org.apache.flex.flat.supportClasses.DropDownListList" />
     <component id="Image" class="org.apache.flex.html.Image"  lookupOnly="true" />
     <component id="Label" class="org.apache.flex.html.Label"  lookupOnly="true" />
     <component id="MultilineLabel" class="org.apache.flex.html.MultilineLabel"  lookupOnly="true" />
@@ -64,20 +63,15 @@
     <component id="NumericStepper" class="org.apache.flex.html.NumericStepper"  lookupOnly="true" />
     <component id="TextFieldItemRenderer" class="org.apache.flex.html.supportClasses.TextFieldItemRenderer" lookupOnly="true" />
     <component id="StringItemRenderer" class="org.apache.flex.html.supportClasses.StringItemRenderer" lookupOnly="true" />
-    <component id="DropDownListView" class="org.apache.flex.flat.beads.DropDownListView" />
-    <component id="DropDownListStringItemRenderer" class="org.apache.flex.flat.supportClasses.DropDownListStringItemRenderer" />
     <component id="DataItemRenderer" class="org.apache.flex.html.supportClasses.DataItemRenderer" lookupOnly="true" />
     <component id="ButtonBarButtonItemRenderer" class="org.apache.flex.html.supportClasses.ButtonBarButtonItemRenderer" lookupOnly="true" />
     <component id="VScrollBar" class="org.apache.flex.html.supportClasses.VScrollBar" lookupOnly="true" />
-    <component id="CSSScrollBarView" class="org.apache.flex.flat.beads.CSSScrollBarView" />
     <component id="NumericOnlyTextInputBead" class="org.apache.flex.html.accessories.NumericOnlyTextInputBead"  lookupOnly="true" />
     <component id="PasswordInputBead" class="org.apache.flex.html.accessories.PasswordInputBead"  lookupOnly="true" />
     <component id="TextPromptBead" class="org.apache.flex.html.accessories.TextPromptBead"  lookupOnly="true" />
     <component id="HRule" class="org.apache.flex.html.HRule"  lookupOnly="true" />
     <component id="Spacer" class="org.apache.flex.html.Spacer"  lookupOnly="true" />
     <component id="ImageAndTextButtonView" class="org.apache.flex.html.beads.ImageAndTextButtonView"  lookupOnly="true" />
-    <component id="CheckboxCSSContentAndTextToggleButtonView" class="org.apache.flex.flat.beads.CheckboxCSSContentAndTextToggleButtonView" />
-    <component id="RadioCSSContentAndTextToggleButtonView" class="org.apache.flex.flat.beads.RadioCSSContentAndTextToggleButtonView" />
     <component id="ScrollingViewport" class="org.apache.flex.html.supportClasses.ScrollingViewport"  lookupOnly="true" />
 
     <component id="DataGrid" class="org.apache.flex.html.DataGrid" lookupOnly="true" />

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/9634f9af/frameworks/projects/HTML/as/src/org/apache/flex/html/supportClasses/DataItemRenderer.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/HTML/as/src/org/apache/flex/html/supportClasses/DataItemRenderer.as b/frameworks/projects/HTML/as/src/org/apache/flex/html/supportClasses/DataItemRenderer.as
index ae2612c..ac15dcf 100644
--- a/frameworks/projects/HTML/as/src/org/apache/flex/html/supportClasses/DataItemRenderer.as
+++ b/frameworks/projects/HTML/as/src/org/apache/flex/html/supportClasses/DataItemRenderer.as
@@ -138,7 +138,7 @@ package org.apache.flex.html.supportClasses
 				super.updateRenderer();
 
 				background.graphics.clear();
-				background.graphics.beginFill(backgroundColor, (down||selected||hovered)?1:0);
+				background.graphics.beginFill(useColor, (down||selected||hovered)?1:0);
 				background.graphics.drawRect(0, 0, width, height);
 				background.graphics.endFill();
 			}