Ideally, there wouldn't be an HTMLElementWrapper at all on the SWF side since 
there is no HTMLElement to wrap.

I would rather we find a way to get rid of HTMLElementWrapper on the SWF side 
in order to prove that we don't need the same set of base classes on each 
platform.  In fact, there might be a way to put the "override" in a 
"COMPILE::JS" block in UIBase.

My 2 cents,
-Alex

On 5/23/19, 12:05 AM, "[email protected]" <[email protected]> wrote:

    This is an automated email from the ASF dual-hosted git repository.
    
    gregdove pushed a commit to branch improvements/Language
    in repository 
https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgitbox.apache.org%2Frepos%2Fasf%2Froyale-asjs.git&amp;data=02%7C01%7Caharui%40adobe.com%7Cfab4455dfe08412f9edd08d6df4d0f98%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636941919434601918&amp;sdata=Vn82YDCwic7rTP%2BXXAq8IxK9%2Fi%2FGAmEuldRkVLr0gXs%3D&amp;reserved=0
    
    commit bce6ba5a778372f10f60ba4f7af872da56740a39
    Author: greg-dove <[email protected]>
    AuthorDate: Thu May 23 18:30:06 2019 +1200
    
        refactor private beads to correspond to different requirements between 
targets
    ---
     .../main/royale/org/apache/royale/core/UIBase.as   |  99 ++----------------
     .../org/apache/royale/core/HTMLElementWrapper.as   | 112 
+++++++++++++++++++--
     2 files changed, 109 insertions(+), 102 deletions(-)
    
    diff --git 
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/UIBase.as 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/UIBase.as
    index 613c940..a9f9f52 100644
    --- 
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/UIBase.as
    +++ 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/core/UIBase.as
    @@ -904,43 +904,6 @@ package org.apache.royale.core
             {
                 return element.childNodes as Array;
             }
    -        
    -        COMPILE::SWF
    -           private var _model:IBeadModel;
    -
    -        /**
    -         *  An IBeadModel that serves as the data model for the component.
    -         *  
    -         *  @langversion 3.0
    -         *  @playerversion Flash 10.2
    -         *  @playerversion AIR 2.6
    -         *  @productversion Royale 0.0
    -         */
    -        COMPILE::SWF
    -        public function get model():Object
    -           {
    -            if (_model == null)
    -            {
    -                // addbead will set _model
    -                addBead(new (ValuesManager.valuesImpl.getValue(this, 
"iBeadModel")) as IBead);
    -            }
    -                   return _model;
    -           }
    -
    -        COMPILE::SWF
    -        /**
    -         * @private
    -         * @royaleignorecoercion org.apache.royale.core.IBead
    -         */
    -        [Bindable("modelChanged")]
    -           public function set model(value:Object):void
    -           {
    -                   if (_model != value)
    -                   {
    -                           addBead(value as IBead);
    -                           dispatchEvent(new Event("modelChanged"));
    -                   }
    -           }
                
             private var _view:IBeadView;
             
    @@ -1157,8 +1120,6 @@ package org.apache.royale.core
              */
                public var beads:Array;
                
    -        COMPILE::SWF
    -           private var _beads:Vector.<IBead>;
             
             /**
              *  @copy org.apache.royale.core.IStrand#addBead()
    @@ -1173,17 +1134,12 @@ package org.apache.royale.core
                override public function addBead(bead:IBead):void
                {
                 var isView:Boolean;
    -                   if (!_beads)
    -                           _beads = new Vector.<IBead>;
    -                   _beads.push(bead);
    -                   if (bead is IBeadModel)
    -                           _model = bead as IBeadModel;
    -            else if (bead is IBeadView)
    -            {
    -                _view = bead as IBeadView;
    -                isView = true
    -            }
    -                   bead.strand = this;
    +                   
    +                   super.addBead(bead);
    +                   if (this._model !== bead && bead is IBeadView) {
    +                           _view = bead as IBeadView;
    +                           isView = true
    +                   }
                        
                        if (isView) {
                                dispatchEvent(new Event("viewChanged"));
    @@ -1191,49 +1147,6 @@ package org.apache.royale.core
                }
                
             /**
    -         *  @copy org.apache.royale.core.IStrand#getBeadByType()
    -         *  
    -         *  @langversion 3.0
    -         *  @playerversion Flash 10.2
    -         *  @playerversion AIR 2.6
    -         *  @productversion Royale 0.0
    -         */
    -        COMPILE::SWF
    -           public function getBeadByType(classOrInterface:Class):IBead
    -           {
    -                   for each (var bead:IBead in _beads)
    -                   {
    -                           if (bead is classOrInterface)
    -                                   return bead;
    -                   }
    -                   return null;
    -           }
    -           
    -        /**
    -         *  @copy org.apache.royale.core.IStrand#removeBead()
    -         *  
    -         *  @langversion 3.0
    -         *  @playerversion Flash 10.2
    -         *  @playerversion AIR 2.6
    -         *  @productversion Royale 0.0
    -         */
    -        COMPILE::SWF
    -           public function removeBead(value:IBead):IBead   
    -           {
    -                   var n:int = _beads.length;
    -                   for (var i:int = 0; i < n; i++)
    -                   {
    -                           var bead:IBead = _beads[i];
    -                           if (bead == value)
    -                           {
    -                                   _beads.splice(i, 1);
    -                                   return bead;
    -                           }
    -                   }
    -                   return null;
    -           }
    -           
    -        /**
              *  @copy org.apache.royale.core.IParent#addElement()
              * 
              *  @langversion 3.0
    diff --git 
a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/HTMLElementWrapper.as
 
b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/HTMLElementWrapper.as
    index 4ebff5a..85e5597 100644
    --- 
a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/HTMLElementWrapper.as
    +++ 
b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/HTMLElementWrapper.as
    @@ -23,6 +23,7 @@ package org.apache.royale.core
         COMPILE::SWF
         {
             import flash.display.Sprite;
    +        import org.apache.royale.events.Event;
         }
             
         COMPILE::JS
    @@ -35,18 +36,110 @@ package org.apache.royale.core
             import goog.events;
             import goog.events.BrowserEvent;
             import goog.events.EventTarget;
    +        import goog.DEBUG;
             import org.apache.royale.events.utils.EventUtils;
         }
     
         COMPILE::SWF
    -    public class HTMLElementWrapper extends Sprite
    +    public class HTMLElementWrapper extends Sprite implements IStrand, 
IEventDispatcher
         {
    +        
    +        private var _beads:Vector.<IBead>;
    +    
             /**
    -         * "abstract" method so we can override in JS
              * @param bead The new bead.
              */
             public function addBead(bead:IBead):void
    -        {            
    +        {
    +            if (!_beads)
    +            {
    +                _beads = new Vector.<IBead>();
    +            }
    +            _beads.push(bead);
    +        
    +            if (bead is IBeadModel)
    +            {
    +                _model = bead as IBeadModel;
    +            }
    +        
    +            bead.strand = this;
    +        }
    +    
    +        /**
    +         *  @copy org.apache.royale.core.IStrand#getBeadByType()
    +         *
    +         *  @langversion 3.0
    +         *  @playerversion Flash 10.2
    +         *  @playerversion AIR 2.6
    +         *  @productversion Royale 0.0
    +         */
    +        public function getBeadByType(classOrInterface:Class):IBead
    +        {
    +            for each (var bead:IBead in _beads)
    +            {
    +                if (bead is classOrInterface)
    +                    return bead;
    +            }
    +            return null;
    +        }
    +    
    +    
    +        /**
    +         *  @copy org.apache.royale.core.IStrand#removeBead()
    +         *
    +         *  @langversion 3.0
    +         *  @playerversion Flash 10.2
    +         *  @playerversion AIR 2.6
    +         *  @productversion Royale 0.0
    +         */
    +        public function removeBead(value:IBead):IBead
    +        {
    +            var n:int = _beads.length;
    +            for (var i:int = 0; i < n; i++)
    +            {
    +                var bead:IBead = _beads[i];
    +                if (bead == value)
    +                {
    +                    _beads.splice(i, 1);
    +                    return bead;
    +                }
    +            }
    +            return null;
    +        }
    +    
    +    
    +    
    +        /**
    +         * allow access from overrides
    +         */
    +        protected var _model:IBeadModel;
    +    
    +        /**
    +         * @royaleignorecoercion Class
    +         * @royaleignorecoercion org.apache.royale.core.IBeadModel
    +         */
    +        public function get model():Object
    +        {
    +            if (_model == null)
    +            {
    +                // addbead will set _model
    +                addBead(new (ValuesManager.valuesImpl.getValue(this, 
"iBeadModel")) as IBead);
    +            }
    +            return _model;
    +        }
    +    
    +        /**
    +         * @private
    +         * @royaleignorecoercion org.apache.royale.core.IBead
    +         */
    +        [Bindable("modelChanged")]
    +        public function set model(value:Object):void
    +        {
    +            if (_model != value)
    +            {
    +                addBead(value as IBead);
    +                dispatchEvent(new Event("modelChanged"));
    +            }
             }
         }
         
    @@ -132,7 +225,7 @@ package org.apache.royale.core
             /**
              * allow access from overrides
              */
    -           protected var _model:Object;
    +           protected var _model:IBeadModel;
             
             /**
              * @royaleignorecoercion Class 
    @@ -153,6 +246,7 @@ package org.apache.royale.core
             
             /**
              * @royaleignorecoercion org.apache.royale.core.IBead
    +         * @royaleignorecoercion org.apache.royale.core.IBeadModel
              */
             [Bindable("modelChanged")]
             public function set model(value:Object):void
    @@ -162,12 +256,12 @@ package org.apache.royale.core
                     if (value is IBead)
                         addBead(value as IBead);
                     else
    -                    _model = value;
    +                    _model = IBeadModel(value);
                     dispatchEvent(new 
org.apache.royale.events.Event("modelChanged"));
                 }
             }
    -
    -           protected var _beads:Vector.<IBead>;
    +        
    +           private var _beads:Array;
             
                //--------------------------------------
                //   Function
    @@ -181,9 +275,9 @@ package org.apache.royale.core
                {
                        if (!_beads)
                        {
    -                           _beads = new Vector.<IBead>();
    +                           _beads = [];
                        }
    -
    +            if (goog.DEBUG && !(bead is IBead)) throw new 
TypeError('Cannot convert '+bead+' to IBead')
                        _beads.push(bead);
     
                        if (bead is IBeadModel)
    
    

Reply via email to