This is an automated email from the ASF dual-hosted git repository. gregdove pushed a commit to branch improvements/Language in repository https://gitbox.apache.org/repos/asf/royale-asjs.git
commit bce6ba5a778372f10f60ba4f7af872da56740a39 Author: greg-dove <greg.d...@gmail.com> 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)