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&data=02%7C01%7Caharui%40adobe.com%7Cfab4455dfe08412f9edd08d6df4d0f98%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636941919434601918&sdata=Vn82YDCwic7rTP%2BXXAq8IxK9%2Fi%2FGAmEuldRkVLr0gXs%3D&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)
