Harbs,

I though I did it. I give links to peformance links that for me proved that
people is going through classList. If you read that Alex, replied that for
him that kind of tests was not reflecting our use case, but, for me we
should separate the performance of classList, from how we use classList.
For that reason Alex ask me to make a series of changes, that mostly I put
on that change. Don't know if those are all the changes or not. That's why
I'm asking Alex. I was assuming that since you didn't comment about that
you were ok with the perf test I put.

In the other hand, today I put the following link [1] about MDL browser
support, if you read carefully that section, they stands for

"For components, at minimum we require support for querySelector
<https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelector>,
classList
<https://developer.mozilla.org/en-US/docs/Web/API/Element/classList> and
addEventListener
<https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener>,
which can be polyfilled
<https://github.com/Modernizr/Modernizr/wiki/HTML5-Cross-Browser-Polyfills> as
needed. "

So, even MDL, that is designed with performance in mind uses classList at
his core. So what can I say more about this issue? I think instead you
didn't put real numbers about why should not use classList and only a fear
that it could be worse in performance when I demonstrated classList is not
a problem, maybe the way I put it on place, that is what Alex should check.


[1] https://getmdl.io/faq/index.html#browser-support




2018-04-09 21:09 GMT+02:00 Harbs <harbs.li...@gmail.com>:

> This is a huge functional change. I don’t know that I really agree with
> this.
>
> You really haven’t answered my comments about the performance
> implications. I previously linked to jsperf tests. According to recent
> tests, addStyle seems to perform much more poorly that changing the
> className.
>
> > On Apr 9, 2018, at 9:49 PM, Carlos Rovira <carlosrov...@apache.org>
> wrote:
> >
> > Hi,
> >
> > this branch has the UIBase modifications that I made in Jewel. I think is
> > time to complete the change so:
> >
> > @Alex: Can you take a look at the diff and see if you are ok with it? I
> > think I do this with the considerations we discussed some weeks ago, but
> I
> > think you never saw if that was finaly what you suggested.
> >
> > @Piotr: I think MDL is the project that needs to see how this changes
> > affect it. Since you're the one who are maintaining it, can you check it
> > and make the modifications in this branch needed? As we have no more
> > MDLExamples it would be a problem for me to bring that code and see it.
> >
> > I see some other examples (like the other day fixing databinding flat)
> and
> > seems to work ok since the rest are mainly royale components,
> >
> > I'd like to make this for 0.9.3 if possible to make Jewel as stable as
> > possible
> >
> > Thanks
> >
> > Carlos
> >
> >
> > 2018-04-09 20:41 GMT+02:00 <carlosrov...@apache.org>:
> >
> >> This is an automated email from the ASF dual-hosted git repository.
> >>
> >> carlosrovira pushed a commit to branch feature/uibase-classname
> >> in repository https://gitbox.apache.org/repos/asf/royale-asjs.git
> >>
> >> commit cf06ede63e3e794198fd68e8647e9c6eceae383d
> >> Author: Carlos Rovira <carlosrov...@apache.org>
> >> AuthorDate: Mon Apr 9 20:41:48 2018 +0200
> >>
> >>    UIBase className changes to support new cssclassList class methods
> >> like addStyles
> >> ---
> >> .../main/royale/org/apache/royale/core/UIBase.as   |   18 +-
> >> .../main/royale/org/apache/royale/core/UIBase.as   | 1628
> >> --------------------
> >> 2 files changed, 9 insertions(+), 1637 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 b5f4dd1..f59d7f0 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
> >> @@ -37,6 +37,7 @@ package org.apache.royale.core
> >>     {
> >>         import org.apache.royale.html.util.addElementToWrapper;
> >>         import org.apache.royale.utils.CSSUtils;
> >> +        import org.apache.royale.utils.cssclasslist.addStyles;
> >>     }
> >>
> >>        /**
> >> @@ -1085,11 +1086,13 @@ package org.apache.royale.core
> >>         {
> >>             if (_className !== value)
> >>             {
> >> +                _className = value;
> >> +
> >>                 COMPILE::JS
> >>                 {
> >> -                    setClassName(typeNames ? StringUtil.trim(value + '
> '
> >> + typeNames) : value);
> >> +                    setClassName(computeFinalClassNames());
> >>                 }
> >> -                _className = value;
> >> +
> >>                 dispatchEvent(new Event("classNameChanged"));
> >>             }
> >>         }
> >> @@ -1097,13 +1100,13 @@ package org.apache.royale.core
> >>                COMPILE::JS
> >>         protected function computeFinalClassNames():String
> >>                {
> >> -            return (_className ? _className + " " : "") + (typeNames ?
> >> typeNames : "");
> >> +            return  StringUtil.trim((_className ? _className : "") + "
> "
> >> + (typeNames ? typeNames : ""));
> >>                }
> >>
> >>         COMPILE::JS
> >>         protected function setClassName(value:String):void
> >>         {
> >> -            element.className = value;
> >> +            addStyles(element, value);
> >>         }
> >>
> >>         /**
> >> @@ -1394,11 +1397,8 @@ package org.apache.royale.core
> >>
> >>             COMPILE::JS
> >>             {
> >> -                               if (typeNames)
> >> -                {
> >> -                    setClassName(computeFinalClassNames());
> >> -                }
> >> -
> >> +                           setClassName(computeFinalClassNames());
> >> +
> >>                 if (style)
> >>                     ValuesManager.valuesImpl.applyStyles(this, style);
> >>             }
> >> diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/
> royale/core/UIBase.as
> >> b/frameworks/projects/Jewel/src/main/royale/org/apache/
> >> royale/core/UIBase.as
> >> deleted file mode 100644
> >> index f59d7f0..0000000
> >> --- a/frameworks/projects/Jewel/src/main/royale/org/apache/
> >> royale/core/UIBase.as
> >> +++ /dev/null
> >> @@ -1,1628 +0,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.
> >> -//
> >> -///////////////////////////////////////////////////////////
> >> /////////////////////
> >> -package org.apache.royale.core
> >> -{
> >> -    COMPILE::SWF
> >> -    {
> >> -        import flash.display.DisplayObject;
> >> -        import flash.display.Sprite;
> >> -        import flash.display.Stage;
> >> -        import org.apache.royale.events.utils.MouseEventConverter;
> >> -    }
> >> -
> >> -       import org.apache.royale.events.Event;
> >> -       import org.apache.royale.events.IEventDispatcher;
> >> -       import org.apache.royale.events.MouseEvent;
> >> -       import org.apache.royale.events.ValueChangeEvent;
> >> -       import org.apache.royale.utils.loadBeadFromValuesManager;
> >> -    import org.apache.royale.utils.StringUtil;
> >> -
> >> -    COMPILE::JS
> >> -    {
> >> -        import org.apache.royale.html.util.addElementToWrapper;
> >> -        import org.apache.royale.utils.CSSUtils;
> >> -        import org.apache.royale.utils.cssclasslist.addStyles;
> >> -    }
> >> -
> >> -       /**
> >> -        *  Set a different class for click events so that
> >> -        *  there aren't dependencies on the flash classes
> >> -        *  on the JS side.
> >> -        *
> >> -        *  @langversion 3.0
> >> -        *  @playerversion Flash 10.2
> >> -        *  @playerversion AIR 2.6
> >> -        *  @productversion Royale 0.0
> >> -        */
> >> -       [Event(name="click", type="org.apache.royale.
> events.MouseEvent")]
> >> -
> >> -    /**
> >> -     *  Set a different class for rollOver events so that
> >> -     *  there aren't dependencies on the flash classes
> >> -     *  on the JS side.
> >> -     *
> >> -     *  @langversion 3.0
> >> -     *  @playerversion Flash 10.2
> >> -     *  @playerversion AIR 2.6
> >> -     *  @productversion Royale 0.0
> >> -     */
> >> -    [Event(name="rollOver", type="org.apache.royale.
> events.MouseEvent")]
> >> -
> >> -    /**
> >> -     *  Set a different class for rollOut events so that
> >> -     *  there aren't dependencies on the flash classes
> >> -     *  on the JS side.
> >> -     *
> >> -     *  @langversion 3.0
> >> -     *  @playerversion Flash 10.2
> >> -     *  @playerversion AIR 2.6
> >> -     *  @productversion Royale 0.0
> >> -     */
> >> -    [Event(name="rollOut", type="org.apache.royale.
> events.MouseEvent")]
> >> -
> >> -    /**
> >> -     *  Set a different class for mouseDown events so that
> >> -     *  there aren't dependencies on the flash classes
> >> -     *  on the JS side.
> >> -     *
> >> -     *  @langversion 3.0
> >> -     *  @playerversion Flash 10.2
> >> -     *  @playerversion AIR 2.6
> >> -     *  @productversion Royale 0.0
> >> -     */
> >> -    [Event(name="mouseDown", type="org.apache.royale.
> events.MouseEvent")]
> >> -
> >> -    /**
> >> -     *  Set a different class for mouseUp events so that
> >> -     *  there aren't dependencies on the flash classes
> >> -     *  on the JS side.
> >> -     *
> >> -     *  @langversion 3.0
> >> -     *  @playerversion Flash 10.2
> >> -     *  @playerversion AIR 2.6
> >> -     *  @productversion Royale 0.0
> >> -     */
> >> -    [Event(name="mouseUp", type="org.apache.royale.
> events.MouseEvent")]
> >> -
> >> -    /**
> >> -     *  Set a different class for mouseMove events so that
> >> -     *  there aren't dependencies on the flash classes
> >> -     *  on the JS side.
> >> -     *
> >> -     *  @langversion 3.0
> >> -     *  @playerversion Flash 10.2
> >> -     *  @playerversion AIR 2.6
> >> -     *  @productversion Royale 0.0
> >> -     */
> >> -    [Event(name="mouseMove", type="org.apache.royale.
> events.MouseEvent")]
> >> -
> >> -    /**
> >> -     *  Set a different class for mouseOut events so that
> >> -     *  there aren't dependencies on the flash classes
> >> -     *  on the JS side.
> >> -     *
> >> -     *  @langversion 3.0
> >> -     *  @playerversion Flash 10.2
> >> -     *  @playerversion AIR 2.6
> >> -     *  @productversion Royale 0.0
> >> -     */
> >> -    [Event(name="mouseOut", type="org.apache.royale.
> events.MouseEvent")]
> >> -
> >> -       /**
> >> -        *  Set a different class for mouseOver events so that
> >> -        *  there aren't dependencies on the flash classes
> >> -        *  on the JS side.
> >> -        *
> >> -        *  @langversion 3.0
> >> -        *  @playerversion Flash 10.2
> >> -        *  @playerversion AIR 2.6
> >> -        *  @productversion Royale 0.0
> >> -        */
> >> -       [Event(name="mouseOver", type="org.apache.royale.
> >> events.MouseEvent")]
> >> -       /**
> >> -        *  Set a different class for mouseWheel events so that
> >> -        *  there aren't dependencies on the flash classes
> >> -        *  on the JS side.
> >> -        *
> >> -        *  @langversion 3.0
> >> -        *  @playerversion Flash 10.2
> >> -        *  @playerversion AIR 2.6
> >> -        *  @productversion Royale 0.0
> >> -        */
> >> -       [Event(name="mouseWheel", type="org.apache.royale.
> >> events.MouseEvent")]
> >> -
> >> -       /**
> >> -        *  Set a different class for doubleClick events so that
> >> -        *  there aren't dependencies on the flash classes
> >> -        *  on the JS side.
> >> -        *
> >> -        *  @langversion 3.0
> >> -        *  @playerversion Flash 10.2
> >> -        *  @playerversion AIR 2.6
> >> -        *  @productversion Royale 0.0
> >> -        */
> >> -       [Event(name="doubleClick", type="org.apache.royale.
> >> events.MouseEvent")]
> >> -
> >> -    /**
> >> -     *  The UIBase class is the base class for most composite user
> >> interface
> >> -     *  components.  For the Flash Player, Buttons and Text controls
> may
> >> -     *  have a different base class and therefore may not extend
> UIBase.
> >> -     *  However all user interface components should implement IUIBase.
> >> -     *
> >> -     *  @langversion 3.0
> >> -     *  @playerversion Flash 10.2
> >> -     *  @playerversion AIR 2.6
> >> -     *  @productversion Royale 0.0
> >> -     */
> >> -       public class UIBase extends HTMLElementWrapper implements
> >> IStrandWithModel, IEventDispatcher, IParentIUIBase, IStyleableObject,
> >> ILayoutChild, IRoyaleElement
> >> -       {
> >> -        /**
> >> -         *  Constructor.
> >> -         *
> >> -         *  @langversion 3.0
> >> -         *  @playerversion Flash 10.2
> >> -         *  @playerversion AIR 2.6
> >> -         *  @productversion Royale 0.0
> >> -         */
> >> -               public function UIBase()
> >> -               {
> >> -                       super();
> >> -
> >> -            COMPILE::SWF
> >> -            {
> >> -                MouseEventConverter.setupInstanceConverters(this);
> >> -                doubleClickEnabled = true; // make JS and flash
> consistent
> >> -            }
> >> -
> >> -            COMPILE::JS
> >> -            {
> >> -                createElement();
> >> -            }
> >> -        }
> >> -
> >> -        COMPILE::SWF
> >> -        public function get $displayObject():DisplayObject
> >> -        {
> >> -            return this;
> >> -        }
> >> -
> >> -        public function get royale_wrapper():Object
> >> -        {
> >> -            return this;
> >> -        }
> >> -        public function set royale_wrapper(value:Object):void
> >> -        {
> >> -        }
> >> -
> >> -               private var _explicitWidth:Number;
> >> -
> >> -        /**
> >> -         *  The explicitly set width (as opposed to measured width
> >> -         *  or percentage width).
> >> -         *
> >> -         *  @langversion 3.0
> >> -         *  @playerversion Flash 10.2
> >> -         *  @playerversion AIR 2.6
> >> -         *  @productversion Royale 0.0
> >> -         */
> >> -               public function get explicitWidth():Number
> >> -               {
> >> -                       return _explicitWidth;
> >> -               }
> >> -
> >> -        /**
> >> -         *  @private
> >> -         */
> >> -        public function set explicitWidth(value:Number):void
> >> -               {
> >> -                       if (_explicitWidth == value)
> >> -                               return;
> >> -
> >> -                       // width can be pixel or percent not both
> >> -                       if (!isNaN(value))
> >> -                               _percentWidth = NaN;
> >> -
> >> -                       _explicitWidth = value;
> >> -
> >> -                       dispatchEvent(new Event("explicitWidthChanged"))
> ;
> >> -               }
> >> -
> >> -               private var _explicitHeight:Number;
> >> -
> >> -        /**
> >> -         *  The explicitly set width (as opposed to measured width
> >> -         *  or percentage width).
> >> -         *
> >> -         *  @langversion 3.0
> >> -         *  @playerversion Flash 10.2
> >> -         *  @playerversion AIR 2.6
> >> -         *  @productversion Royale 0.0
> >> -         */
> >> -        public function get explicitHeight():Number
> >> -               {
> >> -                       return _explicitHeight;
> >> -               }
> >> -
> >> -        /**
> >> -         *  @private
> >> -         */
> >> -               public function set explicitHeight(value:Number):void
> >> -               {
> >> -                       if (_explicitHeight == value)
> >> -                               return;
> >> -
> >> -                       // height can be pixel or percent not both
> >> -                       if (!isNaN(value))
> >> -                               _percentHeight = NaN;
> >> -
> >> -                       _explicitHeight = value;
> >> -
> >> -                       dispatchEvent(new Event("explicitHeightChanged")
> );
> >> -               }
> >> -
> >> -               private var _percentWidth:Number;
> >> -
> >> -        /**
> >> -         *  The requested percentage width this component
> >> -         *  should have in the parent container.  Note that
> >> -         *  the actual percentage may be different if the
> >> -         *  total is more than 100% or if there are other
> >> -         *  components with explicitly set widths.
> >> -         *
> >> -         *  @langversion 3.0
> >> -         *  @playerversion Flash 10.2
> >> -         *  @playerversion AIR 2.6
> >> -         *  @productversion Royale 0.0
> >> -         */
> >> -        public function get percentWidth():Number
> >> -               {
> >> -                       return _percentWidth;
> >> -               }
> >> -
> >> -        /**
> >> -         *  @private
> >> -         */
> >> -               public function set percentWidth(value:Number):void
> >> -               {
> >> -                       COMPILE::SWF {
> >> -                               if (_percentWidth == value)
> >> -                                       return;
> >> -
> >> -                               if (!isNaN(value))
> >> -                                       _explicitWidth = NaN;
> >> -
> >> -                               _percentWidth = value;
> >> -                       }
> >> -                       COMPILE::JS {
> >> -                               this._percentWidth = value;
> >> -                               this.positioner.style.width =
> >> value.toString() + '%';
> >> -                               if (!isNaN(value))
> >> -                                       this._explicitWidth = NaN;
> >> -                       }
> >> -
> >> -                       dispatchEvent(new Event("percentWidthChanged"));
> >> -               }
> >> -
> >> -        private var _percentHeight:Number;
> >> -
> >> -        /**
> >> -         *  The requested percentage height this component
> >> -         *  should have in the parent container.  Note that
> >> -         *  the actual percentage may be different if the
> >> -         *  total is more than 100% or if there are other
> >> -         *  components with explicitly set heights.
> >> -         *
> >> -         *  @langversion 3.0
> >> -         *  @playerversion Flash 10.2
> >> -         *  @playerversion AIR 2.6
> >> -         *  @productversion Royale 0.0
> >> -         */
> >> -               public function get percentHeight():Number
> >> -               {
> >> -                       return _percentHeight;
> >> -               }
> >> -
> >> -        /**
> >> -         *  @private
> >> -         */
> >> -               public function set percentHeight(value:Number):void
> >> -               {
> >> -                       COMPILE::SWF {
> >> -                               if (_percentHeight == value)
> >> -                                       return;
> >> -
> >> -                               if (!isNaN(value))
> >> -                                       _explicitHeight = NaN;
> >> -
> >> -                               _percentHeight = value;
> >> -                       }
> >> -
> >> -                       COMPILE::JS {
> >> -                               this._percentHeight = value;
> >> -                               this.positioner.style.height =
> >> value.toString() + '%';
> >> -                               if (!isNaN(value))
> >> -                                       this._explicitHeight = NaN;
> >> -                       }
> >> -
> >> -                       dispatchEvent(new Event("percentHeightChanged"))
> ;
> >> -               }
> >> -
> >> -               private var _width:Number;
> >> -
> >> -        [Bindable("widthChanged")]
> >> -        [PercentProxy("percentWidth")]
> >> -        /**
> >> -         *  The width of the component.  If no width has been
> previously
> >> -         *  set the default width may be specified in the IValuesImpl
> >> -         *  or determined as the bounding box around all child
> >> -         *  components and graphics.
> >> -         *
> >> -         *  @langversion 3.0
> >> -         *  @playerversion Flash 10.2
> >> -         *  @playerversion AIR 2.6
> >> -         *  @productversion Royale 0.0
> >> -         */
> >> -        COMPILE::SWF
> >> -        override public function get width():Number
> >> -               {
> >> -                       var w:Number = _width;
> >> -                       if (isNaN(w)) {
> >> -                               w = $width;
> >> -                       }
> >> -                       return w;
> >> -               }
> >> -
> >> -        [Bindable("widthChanged")]
> >> -        [PercentProxy("percentWidth")]
> >> -        /**
> >> -         * @royaleignorecoercion String
> >> -         */
> >> -        COMPILE::JS
> >> -        public function get width():Number
> >> -        {
> >> -            if(!isNaN(_explicitWidth))
> >> -                return _explicitWidth;
> >> -            var pixels:Number;
> >> -            var strpixels:String = element.style.width as String;
> >> -            if(strpixels == null)
> >> -                pixels = NaN;
> >> -            else
> >> -                pixels = CSSUtils.toNumber(strpixels,NaN);
> >> -            if (isNaN(pixels)) {
> >> -                pixels = positioner.offsetWidth;
> >> -                if (pixels == 0 && positioner.scrollWidth != 0) {
> >> -                    // invisible child elements cause offsetWidth to
> be 0.
> >> -                    pixels = positioner.scrollWidth;
> >> -                }
> >> -            }
> >> -            return pixels;
> >> -        }
> >> -
> >> -        /**
> >> -         *  @private
> >> -         */
> >> -        COMPILE::SWF
> >> -               override public function set width(value:Number):void
> >> -               {
> >> -                       if (explicitWidth !== value)
> >> -                       {
> >> -                               explicitWidth = value;
> >> -                       }
> >> -
> >> -            setWidth(value);
> >> -               }
> >> -
> >> -        /**
> >> -         *  @private
> >> -         */
> >> -        COMPILE::JS
> >> -        public function set width(value:Number):void
> >> -        {
> >> -            if (explicitWidth !== value)
> >> -            {
> >> -                explicitWidth = value;
> >> -            }
> >> -
> >> -            setWidth(value);
> >> -        }
> >> -
> >> -        /**
> >> -         *  Retrieve the low-level bounding box width.
> >> -         *  Not implemented in JS.
> >> -         *
> >> -         *  @langversion 3.0
> >> -         *  @playerversion Flash 10.2
> >> -         *  @playerversion AIR 2.6
> >> -         *  @productversion Royale 0.0
> >> -         */
> >> -        COMPILE::SWF
> >> -               public function get $width():Number
> >> -               {
> >> -                       return super.width;
> >> -               }
> >> -
> >> -               private var _height:Number;
> >> -
> >> -        [Bindable("heightChanged")]
> >> -        [PercentProxy("percentHeight")]
> >> -        /**
> >> -         *  The height of the component.  If no height has been
> previously
> >> -         *  set the default height may be specified in the IValuesImpl
> >> -         *  or determined as the bounding box around all child
> >> -         *  components and graphics.
> >> -         *
> >> -         *  @langversion 3.0
> >> -         *  @playerversion Flash 10.2
> >> -         *  @playerversion AIR 2.6
> >> -         *  @productversion Royale 0.0
> >> -         */
> >> -        COMPILE::SWF
> >> -               override public function get height():Number
> >> -               {
> >> -                       var h:Number = _height;
> >> -                       if (isNaN(h)) {
> >> -                               h = $height;
> >> -                       }
> >> -                       return h;
> >> -               }
> >> -
> >> -        [Bindable("heightChanged")]
> >> -        [PercentProxy("percentHeight")]
> >> -        /**
> >> -         * @royaleignorecoercion String
> >> -         */
> >> -        COMPILE::JS
> >> -        public function get height():Number
> >> -        {
> >> -            if(!isNaN(_explicitHeight))
> >> -                return _explicitHeight;
> >> -            var pixels:Number;
> >> -            var strpixels:String = element.style.height as String;
> >> -            if(strpixels == null)
> >> -                pixels = NaN;
> >> -            else
> >> -                pixels = CSSUtils.toNumber(strpixels,NaN);
> >> -            if (isNaN(pixels)) {
> >> -                pixels = positioner.offsetHeight;
> >> -                if (pixels == 0 && positioner.scrollHeight != 0) {
> >> -                    // invisible child elements cause offsetHeight to
> be
> >> 0.
> >> -                    pixels = positioner.scrollHeight;
> >> -                }
> >> -            }
> >> -            return pixels;
> >> -        }
> >> -
> >> -        /**
> >> -         *  @private
> >> -         */
> >> -        COMPILE::SWF
> >> -               override public function set height(value:Number):void
> >> -               {
> >> -                       if (explicitHeight !== value)
> >> -                       {
> >> -                               explicitHeight = value;
> >> -                       }
> >> -
> >> -            setHeight(value);
> >> -               }
> >> -
> >> -        /**
> >> -         *  @private
> >> -         */
> >> -        COMPILE::JS
> >> -        public function set height(value:Number):void
> >> -        {
> >> -            if (explicitHeight !== value)
> >> -            {
> >> -                explicitHeight = value;
> >> -            }
> >> -
> >> -            setHeight(value);
> >> -        }
> >> -
> >> -        /**
> >> -         *  Retrieve the low-level bounding box height.
> >> -         *  Not implemented in JS.
> >> -         *
> >> -         *  @langversion 3.0
> >> -         *  @playerversion Flash 10.2
> >> -         *  @playerversion AIR 2.6
> >> -         *  @productversion Royale 0.0
> >> -         */
> >> -        COMPILE::SWF
> >> -               public function get $height():Number
> >> -               {
> >> -                       return super.height;
> >> -               }
> >> -
> >> -        /**
> >> -         *  @copy org.apache.royale.core.ILayoutChild#setHeight
> >> -         *
> >> -         *  @langversion 3.0
> >> -         *  @playerversion Flash 10.2
> >> -         *  @playerversion AIR 2.6
> >> -         *  @productversion Royale 0.0
> >> -         */
> >> -        public function setHeight(value:Number, noEvent:Boolean =
> >> false):void
> >> -        {
> >> -            if (_height !== value)
> >> -            {
> >> -                _height = value;
> >> -                COMPILE::JS
> >> -                {
> >> -                    this.positioner.style.height = value.toString() +
> >> 'px';
> >> -                }
> >> -                if (!noEvent)
> >> -                    dispatchEvent(new Event("heightChanged"));
> >> -            }
> >> -        }
> >> -
> >> -        /**
> >> -         *  @copy org.apache.royale.core.ILayoutChild#setWidth
> >> -         *
> >> -         *  @langversion 3.0
> >> -         *  @playerversion Flash 10.2
> >> -         *  @playerversion AIR 2.6
> >> -         *  @productversion Royale 0.0
> >> -         */
> >> -        public function setWidth(value:Number, noEvent:Boolean =
> >> false):void
> >> -        {
> >> -            if (_width !== value)
> >> -            {
> >> -                _width = value;
> >> -                COMPILE::JS
> >> -                {
> >> -                    this.positioner.style.width = value.toString() +
> 'px';
> >> -                }
> >> -                if (!noEvent)
> >> -                    dispatchEvent(new Event("widthChanged"));
> >> -            }
> >> -        }
> >> -
> >> -        /**
> >> -         * @private
> >> -         * Used by layout to prevent causing unnecessary reflows when
> >> measuring.
> >> -         */
> >> -        private var _measuredWidth:Number;
> >> -
> >> -               public function get measuredWidth():Number
> >> -               {
> >> -                       return _measuredWidth;
> >> -               }
> >> -
> >> -               public function set measuredWidth(value:Number):void
> >> -               {
> >> -                       _measuredWidth = value;
> >> -               }
> >> -        /**
> >> -         * @private
> >> -         * Used by layout to prevent causing unnecessary reflows when
> >> measuring.
> >> -         */
> >> -        private var _measuredHeight:Number;
> >> -
> >> -               public function get measuredHeight():Number
> >> -               {
> >> -                       return _measuredHeight;
> >> -               }
> >> -
> >> -               public function set measuredHeight(value:Number):void
> >> -               {
> >> -                       _measuredHeight = value;
> >> -               }
> >> -
> >> -        /**
> >> -         *  @copy org.apache.royale.core.
> ILayoutChild#setWidthAndHeight
> >> -         *
> >> -         *  @langversion 3.0
> >> -         *  @playerversion Flash 10.2
> >> -         *  @playerversion AIR 2.6
> >> -         *  @productversion Royale 0.0
> >> -         */
> >> -        public function setWidthAndHeight(newWidth:Number,
> >> newHeight:Number, noEvent:Boolean = false):void
> >> -        {
> >> -            if (_width !== newWidth)
> >> -            {
> >> -                _width = newWidth;
> >> -                COMPILE::JS
> >> -                {
> >> -                    this.positioner.style.width = newWidth.toString() +
> >> 'px';
> >> -                }
> >> -                if (!noEvent)
> >> -                    dispatchEvent(new Event("widthChanged"));
> >> -            }
> >> -            if (_height !== newHeight)
> >> -            {
> >> -                _height = newHeight;
> >> -                COMPILE::JS
> >> -                {
> >> -                    this.positioner.style.height =
> newHeight.toString() +
> >> 'px';
> >> -                }
> >> -                if (!noEvent)
> >> -                    dispatchEvent(new Event("heightChanged"));
> >> -            }
> >> -            dispatchEvent(new Event("sizeChanged"));
> >> -        }
> >> -
> >> -        /**
> >> -         *  @copy org.apache.royale.core.ILayoutChild#
> >> isWidthSizedToContent
> >> -         *
> >> -         *  @langversion 3.0
> >> -         *  @playerversion Flash 10.2
> >> -         *  @playerversion AIR 2.6
> >> -         *  @productversion Royale 0.0
> >> -         */
> >> -        public function isWidthSizedToContent():Boolean
> >> -        {
> >> -            if (!isNaN(_explicitWidth))
> >> -                return false;
> >> -            if (!isNaN(_percentWidth))
> >> -                return false;
> >> -            var left:* = ValuesManager.valuesImpl.getValue(this,
> "left");
> >> -            var right:* = ValuesManager.valuesImpl.getValue(this,
> >> "right");
> >> -            return (left === undefined || right === undefined);
> >> -
> >> -        }
> >> -
> >> -        /**
> >> -         *  @copy org.apache.royale.core.ILayoutChild#
> >> isHeightSizedToContent
> >> -         *
> >> -         *  @langversion 3.0
> >> -         *  @playerversion Flash 10.2
> >> -         *  @playerversion AIR 2.6
> >> -         *  @productversion Royale 0.0
> >> -         */
> >> -        public function isHeightSizedToContent():Boolean
> >> -        {
> >> -            if (!isNaN(_explicitHeight))
> >> -                return false;
> >> -            if (!isNaN(_percentHeight))
> >> -                return false;
> >> -            var top:* = ValuesManager.valuesImpl.getValue(this,
> "top");
> >> -            var bottom:* = ValuesManager.valuesImpl.getValue(this,
> >> "bottom");
> >> -            return (top === undefined || bottom === undefined);
> >> -        }
> >> -
> >> -        private var _x:Number;
> >> -
> >> -        /**
> >> -         *  @private
> >> -         */
> >> -        COMPILE::SWF
> >> -        override public function set x(value:Number):void
> >> -        {
> >> -            super.x = _x = value;
> >> -            if (!style)
> >> -                style = { left: value };
> >> -            else
> >> -                style.left = value;
> >> -        }
> >> -        /**
> >> -         * @royaleignorecoercion HTMLElement
> >> -         */
> >> -        COMPILE::JS
> >> -        public function set x(value:Number):void
> >> -        {
> >> -            _x = value;
> >> -            setX(value);
> >> -        }
> >> -
> >> -        /**
> >> -         * @royaleignorecoercion String
> >> -         * @royaleignorecoercion HTMLElement
> >> -         */
> >> -        COMPILE::JS
> >> -        public function get x():Number
> >> -        {
> >> -            if(!isNaN(_x))
> >> -                return _x
> >> -            var strpixels:String = positioner.style.left as String;
> >> -            var pixels:Number = parseFloat(strpixels);
> >> -            if (isNaN(pixels))
> >> -            {
> >> -                pixels = positioner.offsetLeft;
> >> -                if (positioner.parentNode != positioner.offsetParent)
> >> -                    pixels -= (positioner.parentNode as
> >> HTMLElement).offsetLeft;
> >> -            }
> >> -            return pixels;
> >> -        }
> >> -
> >> -        /**
> >> -         *  @copy org.apache.royale.core.ILayoutChild#setX
> >> -         *
> >> -         *  @langversion 3.0
> >> -         *  @playerversion Flash 10.2
> >> -         *  @playerversion AIR 2.6
> >> -         *  @productversion Royale 0.0
> >> -         *  @royaleignorecoercion HTMLElement
> >> -         */
> >> -        public function setX(value:Number):void
> >> -        {
> >> -                       COMPILE::SWF
> >> -                       {
> >> -                               super.x = value;
> >> -                       }
> >> -                       COMPILE::JS
> >> -                       {
> >> -                               //positioner.style.position =
> 'absolute';
> >> -                if (positioner.parentNode != positioner.offsetParent)
> >> -                    value += (positioner.parentNode as
> >> HTMLElement).offsetLeft;
> >> -                               positioner.style.left =
> value.toString() +
> >> 'px';
> >> -                       }
> >> -        }
> >> -
> >> -        private var _y:Number;
> >> -
> >> -        /**
> >> -         *  @private
> >> -         */
> >> -        COMPILE::SWF
> >> -        override public function set y(value:Number):void
> >> -        {
> >> -            super.y = _y = value;
> >> -            if (!style)
> >> -                style = { top: value };
> >> -            else
> >> -                style.top = value;
> >> -        }
> >> -
> >> -        /**
> >> -         * @royaleignorecoercion HTMLElement
> >> -         */
> >> -        COMPILE::JS
> >> -        public function set y(value:Number):void
> >> -        {
> >> -            _y = value;
> >> -            setY(value);
> >> -        }
> >> -
> >> -        /**
> >> -         * @royaleignorecoercion String
> >> -         * @royaleignorecoercion HTMLElement
> >> -         */
> >> -        COMPILE::JS
> >> -        public function get y():Number
> >> -        {
> >> -            if(!isNaN(_y))
> >> -                return _y
> >> -            var strpixels:String = positioner.style.top as String;
> >> -            var pixels:Number = parseFloat(strpixels);
> >> -            if (isNaN(pixels))
> >> -            {
> >> -                pixels = positioner.offsetTop;
> >> -                if (positioner.parentNode != positioner.offsetParent)
> >> -                    pixels -= (positioner.parentNode as
> >> HTMLElement).offsetTop;
> >> -            }
> >> -            return pixels;
> >> -        }
> >> -
> >> -        /**
> >> -         *  @copy org.apache.royale.core.ILayoutChild#setY
> >> -         *
> >> -         *  @langversion 3.0
> >> -         *  @playerversion Flash 10.2
> >> -         *  @playerversion AIR 2.6
> >> -         *  @productversion Royale 0.0
> >> -         *  @royaleignorecoercion HTMLElement
> >> -         */
> >> -        public function setY(value:Number):void
> >> -        {
> >> -                       COMPILE::SWF
> >> -                       {
> >> -                               super.y = value;
> >> -                       }
> >> -                       COMPILE::JS
> >> -                       {
> >> -                               //positioner.style.position =
> 'absolute';
> >> -                if (positioner.parentNode != positioner.offsetParent)
> >> -                    value += (positioner.parentNode as
> >> HTMLElement).offsetTop;
> >> -                               positioner.style.top = value.toString()
> +
> >> 'px';
> >> -                       }
> >> -        }
> >> -
> >> -               /**
> >> -                * @private
> >> -                */
> >> -        [Bindable("visibleChanged")]
> >> -        COMPILE::SWF
> >> -               override public function set visible(value:Boolean):void
> >> -               {
> >> -                       super.visible = value;
> >> -                       dispatchEvent(new Event(value?"show":"hide"));
> >> -                       dispatchEvent(new Event("visibleChanged"));
> >> -        }
> >> -
> >> -        COMPILE::JS
> >> -        private var displayStyleForLayout:String;
> >> -
> >> -               /**
> >> -                *  The display style is used for both visible
> >> -                *  and layout so is managed as a special case.
> >> -                *
> >> -                *  @langversion 3.0
> >> -                *  @playerversion Flash 10.2
> >> -                *  @playerversion AIR 2.6
> >> -                *  @productversion Royale 0.0
> >> -                */
> >> -               COMPILE::JS
> >> -               public function setDisplayStyleForLayout(
> >> value:String):void
> >> -               {
> >> -                       if (positioner.style.display !== 'none')
> >> -                               positioner.style.display = value;
> >> -                       else
> >> -                               displayStyleForLayout = value;
> >> -               }
> >> -
> >> -        [Bindable("visibleChanged")]
> >> -        COMPILE::JS
> >> -        public function get visible():Boolean
> >> -        {
> >> -            return positioner.style.display !== 'none';
> >> -        }
> >> -
> >> -        COMPILE::JS
> >> -        public function set visible(value:Boolean):void
> >> -        {
> >> -            var oldValue:Boolean = positioner.style.display !== 'none';
> >> -            if (value !== oldValue)
> >> -            {
> >> -                if (!value)
> >> -                {
> >> -                                       displayStyleForLayout =
> >> positioner.style.display;
> >> -                    positioner.style.display = 'none';
> >> -                    dispatchEvent(new Event('hide'));
> >> -                }
> >> -                else
> >> -                {
> >> -                    if (displayStyleForLayout != null)
> >> -                        positioner.style.display =
> displayStyleForLayout;
> >> -                    dispatchEvent(new Event('show'));
> >> -                }
> >> -                dispatchEvent(new Event('visibleChanged'));
> >> -            }
> >> -        }
> >> -
> >> -        /**
> >> -         * @return The array of children.
> >> -         * @royaleignorecoercion Array
> >> -         */
> >> -        COMPILE::JS
> >> -        public function internalChildren():Array
> >> -        {
> >> -            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;
> >> -               }
> >> -
> >> -        /**
> >> -         *  @private
> >> -         */
> >> -        COMPILE::SWF
> >> -               public function set model(value:Object):void
> >> -               {
> >> -                       if (_model != value)
> >> -                       {
> >> -                               addBead(value as IBead);
> >> -                               dispatchEvent(new
> Event("modelChanged"));
> >> -                       }
> >> -               }
> >> -
> >> -        private var _view:IBeadView;
> >> -
> >> -        /**
> >> -         *  An IBeadView that serves as the view for the component.
> >> -         *
> >> -         *  @langversion 3.0
> >> -         *  @playerversion Flash 10.2
> >> -         *  @playerversion AIR 2.6
> >> -         *  @productversion Royale 0.0
> >> -         *  @royaleignorecoercion Class
> >> -         *  @royaleignorecoercion org.apache.royale.core.IBeadView
> >> -         */
> >> -        public function get view():IBeadView
> >> -        {
> >> -            if(!_view)
> >> -                _view = loadBeadFromValuesManager(IBeadView,
> >> "iBeadView", this) as IBeadView;
> >> -            return _view;
> >> -        }
> >> -
> >> -        /**
> >> -         *  @private
> >> -         */
> >> -        public function set view(value:IBeadView):void
> >> -        {
> >> -            if (_view != value)
> >> -            {
> >> -                addBead(value);
> >> -                dispatchEvent(new Event("viewChanged"));
> >> -            }
> >> -        }
> >> -
> >> -        private var _id:String;
> >> -
> >> -        /**
> >> -         *  An id property for MXML documents.
> >> -         *
> >> -         *  @langversion 3.0
> >> -         *  @playerversion Flash 10.2
> >> -         *  @playerversion AIR 2.6
> >> -         *  @productversion Royale 0.0
> >> -         */
> >> -               public function get id():String
> >> -               {
> >> -                       return _id;
> >> -               }
> >> -
> >> -        /**
> >> -         *  @private
> >> -         */
> >> -               public function set id(value:String):void
> >> -               {
> >> -                       if (_id !== value)
> >> -                       {
> >> -                               _id = value;
> >> -                               dispatchEvent(new Event("idChanged"));
> >> -                       }
> >> -            COMPILE::JS
> >> -            {
> >> -                element.id = _id;
> >> -            }
> >> -               }
> >> -
> >> -        private var _style:Object;
> >> -
> >> -        /**
> >> -         *  The object that contains
> >> -         *  "styles" and other associated
> >> -         *  name-value pairs.  You can
> >> -         *  also specify a string in
> >> -         *  HTML style attribute format.
> >> -         *
> >> -         *  @langversion 3.0
> >> -         *  @playerversion Flash 10.2
> >> -         *  @playerversion AIR 2.6
> >> -         *  @productversion Royale 0.0
> >> -         */
> >> -        public function get style():Object
> >> -        {
> >> -            return _style;
> >> -        }
> >> -
> >> -        /**
> >> -         *  @private
> >> -         *  @royaleignorecoercion String
> >> -         */
> >> -        public function set style(value:Object):void
> >> -        {
> >> -            if (_style !== value)
> >> -            {
> >> -                if (value is String)
> >> -                {
> >> -                    _style = ValuesManager.valuesImpl.
> parseStyles(value
> >> as String);
> >> -                }
> >> -                else
> >> -                    _style = value;
> >> -                if (!isNaN(_y))
> >> -                    _style.top = _y;
> >> -                if (!isNaN(_x))
> >> -                    _style.left = _x;
> >> -                               COMPILE::JS
> >> -                               {
> >> -                                       if (parent)
> >> -
>  ValuesManager.valuesImpl.applyStyles(this,
> >> _style);
> >> -                               }
> >> -                dispatchEvent(new Event("stylesChanged"));
> >> -            }
> >> -        }
> >> -
> >> -        /**
> >> -         *  A list of type names.  Often used for CSS
> >> -         *  type selector lookups.
> >> -         *
> >> -         *  @langversion 3.0
> >> -         *  @playerversion Flash 10.2
> >> -         *  @playerversion AIR 2.6
> >> -         *  @productversion Royale 0.0
> >> -         *
> >> -         *  @royalesuppresspublicvarwarning
> >> -         */
> >> -        public var typeNames:String;
> >> -
> >> -        private var _className:String;
> >> -
> >> -        /**
> >> -         *  The classname.  Often used for CSS
> >> -         *  class selector lookups.
> >> -         *
> >> -         *  @langversion 3.0
> >> -         *  @playerversion Flash 10.2
> >> -         *  @playerversion AIR 2.6
> >> -         *  @productversion Royale 0.0
> >> -         */
> >> -        public function get className():String
> >> -               {
> >> -                       return _className;
> >> -               }
> >> -
> >> -        /**
> >> -         *  @private
> >> -         */
> >> -        public function set className(value:String):void
> >> -        {
> >> -            if (_className !== value)
> >> -            {
> >> -                _className = value;
> >> -
> >> -                COMPILE::JS
> >> -                {
> >> -                    setClassName(computeFinalClassNames());
> >> -                }
> >> -
> >> -                dispatchEvent(new Event("classNameChanged"));
> >> -            }
> >> -        }
> >> -
> >> -               COMPILE::JS
> >> -        protected function computeFinalClassNames():String
> >> -               {
> >> -            return  StringUtil.trim((_className ? _className : "") + "
> "
> >> + (typeNames ? typeNames : ""));
> >> -               }
> >> -
> >> -        COMPILE::JS
> >> -        protected function setClassName(value:String):void
> >> -        {
> >> -            addStyles(element, value);
> >> -        }
> >> -
> >> -        /**
> >> -         *  @copy org.apache.royale.core.IUIBase#element
> >> -         *
> >> -         *  @langversion 3.0
> >> -         *  @playerversion Flash 10.2
> >> -         *  @playerversion AIR 2.6
> >> -         *  @productversion Royale 0.0
> >> -         */
> >> -        COMPILE::SWF
> >> -        public function get element():IRoyaleElement
> >> -        {
> >> -            return this;
> >> -        }
> >> -
> >> -        /**
> >> -         *  @copy org.apache.royale.core.Application#beads
> >> -         *
> >> -         *  @langversion 3.0
> >> -         *  @playerversion Flash 10.2
> >> -         *  @playerversion AIR 2.6
> >> -         *  @productversion Royale 0.0
> >> -         *
> >> -         *  @royalesuppresspublicvarwarning
> >> -         */
> >> -               public var beads:Array;
> >> -
> >> -        COMPILE::SWF
> >> -               private var _beads:Vector.<IBead>;
> >> -
> >> -        /**
> >> -         *  @copy org.apache.royale.core.IStrand#addBead()
> >> -         *
> >> -         *  @langversion 3.0
> >> -         *  @playerversion Flash 10.2
> >> -         *  @playerversion AIR 2.6
> >> -         *  @productversion Royale 0.9
> >> -         *  @royaleignorecoercion org.apache.royale.core.IBeadModel
> >> -         *  @royaleignorecoercion org.apache.royale.core.IBeadView
> >> -         */
> >> -               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;
> >> -
> >> -                       if (isView) {
> >> -                               dispatchEvent(new Event("viewChanged"));
> >> -                       }
> >> -               }
> >> -
> >> -        /**
> >> -         *  @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
> >> -         *  @playerversion Flash 10.2
> >> -         *  @playerversion AIR 2.6
> >> -         *  @productversion Royale 0.0
> >> -                *  @royaleignorecoercion org.apache.royale.core.IUIBase
> >> -         */
> >> -               public function addElement(c:IChild,
> dispatchEvent:Boolean
> >> = true):void
> >> -               {
> >> -            COMPILE::SWF
> >> -            {
> >> -                if (c is IUIBase)
> >> -                {
> >> -                    if (c is IRenderedObject)
> >> -                        addChild(IRenderedObject(c).$displayObject);
> >> -                    else
> >> -                        addChild(c as DisplayObject);
> >> -                    IUIBase(c).addedToParent();
> >> -                }
> >> -                else
> >> -                    addChild(c as DisplayObject);
> >> -            }
> >> -            COMPILE::JS
> >> -            {
> >> -                element.appendChild(c.positioner);
> >> -                (c as IUIBase).addedToParent();
> >> -            }
> >> -               }
> >> -
> >> -        /**
> >> -         *  @copy org.apache.royale.core.IParent#addElementAt()
> >> -         *
> >> -         *  @langversion 3.0
> >> -         *  @playerversion Flash 10.2
> >> -         *  @playerversion AIR 2.6
> >> -         *  @productversion Royale 0.0
> >> -                *  @royaleignorecoercion org.apache.royale.core.IUIBase
> >> -         */
> >> -        public function addElementAt(c:IChild, index:int,
> >> dispatchEvent:Boolean = true):void
> >> -        {
> >> -            COMPILE::SWF
> >> -            {
> >> -                if (c is IUIBase)
> >> -                {
> >> -                    if (c is IRenderedObject)
> >> -                        addChildAt(IUIBase(c).$displayObject, index);
> >> -                    else
> >> -                        addChildAt(c as DisplayObject, index);
> >> -                    IUIBase(c).addedToParent();
> >> -                }
> >> -                else
> >> -                    addChildAt(c as DisplayObject, index);
> >> -            }
> >> -            COMPILE::JS
> >> -            {
> >> -                var children:Array = internalChildren();
> >> -                if (index >= children.length)
> >> -                    addElement(c);
> >> -                else
> >> -                {
> >> -                    element.insertBefore(c.positioner,
> >> -                        children[index]);
> >> -                    (c as IUIBase).addedToParent();
> >> -                }
> >> -            }
> >> -        }
> >> -
> >> -        /**
> >> -         *  @copy org.apache.royale.core.IParent#getElementAt()
> >> -         *
> >> -         *  @langversion 3.0
> >> -         *  @playerversion Flash 10.2
> >> -         *  @playerversion AIR 2.6
> >> -         *  @productversion Royale 0.0
> >> -         */
> >> -        public function getElementAt(index:int):IChild
> >> -        {
> >> -            COMPILE::SWF
> >> -            {
> >> -                return getChildAt(index) as IChild;
> >> -            }
> >> -            COMPILE::JS
> >> -            {
> >> -                var children:Array = internalChildren();
> >> -                if (children.length == 0)
> >> -                {
> >> -                    return null;
> >> -                }
> >> -                return children[index].royale_wrapper;
> >> -            }
> >> -        }
> >> -
> >> -        /**
> >> -         *  @copy org.apache.royale.core.IParent#getElementIndex()
> >> -         *
> >> -         *  @langversion 3.0
> >> -         *  @playerversion Flash 10.2
> >> -         *  @playerversion AIR 2.6
> >> -         *  @productversion Royale 0.0
> >> -         */
> >> -        public function getElementIndex(c:IChild):int
> >> -        {
> >> -            COMPILE::SWF
> >> -            {
> >> -                if (c is IRenderedObject)
> >> -                    return getChildIndex(IRenderedObject(
> >> c).$displayObject);
> >> -                else
> >> -                    return getChildIndex(c as DisplayObject);
> >> -            }
> >> -            COMPILE::JS
> >> -            {
> >> -                var children:Array = internalChildren();
> >> -                var n:int = children.length;
> >> -                for (var i:int = 0; i < n; i++)
> >> -                {
> >> -                    if (children[i] === c.element)
> >> -                        return i;
> >> -                }
> >> -                return -1;
> >> -            }
> >> -        }
> >> -
> >> -        /**
> >> -         *  @copy org.apache.royale.core.IParent#removeElement()
> >> -         *
> >> -         *  @langversion 3.0
> >> -         *  @playerversion Flash 10.2
> >> -         *  @playerversion AIR 2.6
> >> -         *  @productversion Royale 0.0
> >> -                *  @royaleignorecoercion HTMLElement
> >> -         */
> >> -        public function removeElement(c:IChild, dispatchEvent:Boolean =
> >> true):void
> >> -        {
> >> -            COMPILE::SWF
> >> -            {
> >> -                if (c is IRenderedObject)
> >> -                    removeChild(IRenderedObject(c).$displayObject);
> >> -                else
> >> -                    removeChild(c as DisplayObject);
> >> -            }
> >> -            COMPILE::JS
> >> -            {
> >> -                element.removeChild(c.element as HTMLElement);
> >> -            }
> >> -        }
> >> -
> >> -        /**
> >> -         *  @copy org.apache.royale.core.IParent#numElements
> >> -         *
> >> -         *  @langversion 3.0
> >> -         *  @playerversion Flash 10.2
> >> -         *  @playerversion AIR 2.6
> >> -         *  @productversion Royale 0.0
> >> -         */
> >> -        public function get numElements():int
> >> -        {
> >> -            COMPILE::SWF
> >> -            {
> >> -                return numChildren;
> >> -            }
> >> -            COMPILE::JS
> >> -            {
> >> -                var children:Array = internalChildren();
> >> -                return children.length;
> >> -            }
> >> -        }
> >> -
> >> -        /**
> >> -         *  The method called when added to a parent.  This is a good
> >> -         *  time to set up beads.
> >> -         *
> >> -         *  @langversion 3.0
> >> -         *  @playerversion Flash 10.2
> >> -         *  @playerversion AIR 2.6
> >> -         *  @productversion Royale 0.0
> >> -         *  @royaleignorecoercion Class
> >> -         *  @royaleignorecoercion Number
> >> -         */
> >> -        public function addedToParent():void
> >> -        {
> >> -            var c:Class;
> >> -
> >> -            COMPILE::JS
> >> -            {
> >> -                           setClassName(computeFinalClassNames());
> >> -
> >> -                if (style)
> >> -                    ValuesManager.valuesImpl.applyStyles(this, style);
> >> -            }
> >> -
> >> -                       if (isNaN(_explicitWidth) &&
> isNaN(_percentWidth))
> >> -            {
> >> -                               var value:* = ValuesManager.valuesImpl.
> >> getValue(this,"width");
> >> -                               if (value !== undefined)
> >> -                {
> >> -                                       if (value is String)
> >> -                    {
> >> -                        var s:String = String(value);
> >> -                        if (s.indexOf("%") > -1)
> >> -                                               _percentWidth =
> >> Number(s.substring(0, s.length - 1));
> >> -                        else
> >> -                        {
> >> -                            if (s.indexOf("px") !== -1)
> >> -                                s = s.substring(0, s.length - 2);
> >> -                            _width = _explicitWidth = Number(s);
> >> -                        }
> >> -                    }
> >> -                                       else
> >> -                                               _width = _explicitWidth
> =
> >> value as Number;
> >> -                               }
> >> -                       }
> >> -
> >> -                       if (isNaN(_explicitHeight) &&
> >> isNaN(_percentHeight))
> >> -            {
> >> -                               value = ValuesManager.valuesImpl.
> >> getValue(this,"height");
> >> -                               if (value !== undefined)
> >> -                {
> >> -                    if (value is String)
> >> -                    {
> >> -                                       s = String(value);
> >> -                        if (s.indexOf("%") !== -1)
> >> -                                               _percentHeight =
> >> Number(s.substring(0, s.length - 1));
> >> -                        else
> >> -                        {
> >> -                            if (s.indexOf("px") !== -1)
> >> -                                s = s.substring(0, s.length - 2);
> >> -                            _height = _explicitHeight = Number(s);
> >> -                        }
> >> -                                       }
> >> -                    else
> >> -                                               _height =
> _explicitHeight
> >> = value as Number;
> >> -                               }
> >> -                       }
> >> -
> >> -            for each (var bead:IBead in beads)
> >> -                addBead(bead);
> >> -
> >> -                       loadBeadFromValuesManager(IBeadModel,
> >> "iBeadModel", this);
> >> -            loadBeadFromValuesManager(IBeadView, "iBeadView", this);
> >> -                       loadBeadFromValuesManager(IBeadController,
> >> "iBeadController", this);
> >> -            dispatchEvent(new Event("beadsAdded"));
> >> -        }
> >> -
> >> -        private var _measurementBead:IMeasurementBead;
> >> -        /**
> >> -         *  A measurement bead, if one exists.
> >> -         *
> >> -         *  @langversion 3.0
> >> -         *  @playerversion Flash 10.2
> >> -         *  @playerversion AIR 2.6
> >> -         *  @productversion Royale 0.9
> >> -         *  @royaleignorecoercion org.apache.royale.core.
> IMeasurementBead
> >> -         */
> >> -               public function get measurementBead() : IMeasurementBead
> >> -               {
> >> -            if(!_measurementBead)
> >> -            {
> >> -                           _measurementBead =
> loadBeadFromValuesManager(IMeasurementBead,
> >> "iMeasurementBead", this) as IMeasurementBead;
> >> -            }
> >> -            return _measurementBead;
> >> -               }
> >> -
> >> -        COMPILE::SWF
> >> -        private var _stageProxy:StageProxy;
> >> -
> >> -        /**
> >> -         *  @copy org.apache.royale.core.
> IUIBase#topMostEventDispatcher
> >> -         *
> >> -         *  @langversion 3.0
> >> -         *  @playerversion Flash 10.2
> >> -         *  @playerversion AIR 2.6
> >> -         *  @productversion Royale 0.0
> >> -         *  @royaleignorecoercion org.apache.royale.core.
> >> WrappedHTMLElement
> >> -         *  @royaleignorecoercion org.apache.royale.events.
> >> IEventDispatcher
> >> -         */
> >> -               public function get topMostEventDispatcher():
> >> IEventDispatcher
> >> -        {
> >> -            COMPILE::SWF
> >> -            {
> >> -                if (!_stageProxy)
> >> -                {
> >> -                    _stageProxy = new StageProxy(stage);
> >> -                    _stageProxy.addEventListener("removedFromStage",
> >> stageProxy_removedFromStageHandler);
> >> -                }
> >> -
> >> -                return _stageProxy;
> >> -            }
> >> -            COMPILE::JS
> >> -            {
> >> -                var e:WrappedHTMLElement = document.body as
> >> WrappedHTMLElement;
> >> -                return e.royale_wrapper as IEventDispatcher;
> >> -            }
> >> -        }
> >> -
> >> -        COMPILE::SWF
> >> -        private function stageProxy_removedFromStageHandler(event:
> >> Event):void
> >> -        {
> >> -            _stageProxy = null;
> >> -        }
> >> -
> >> -        /**
> >> -         * Rebroadcast an event from a sub component from the
> component.
> >> -         */
> >> -        protected function repeaterListener(event:Event):void
> >> -        {
> >> -            dispatchEvent(event);
> >> -        }
> >> -
> >> -        /**
> >> -         * The HTMLElement used to position the component.
> >> -         */
> >> -        COMPILE::JS
> >> -        public function get positioner():WrappedHTMLElement
> >> -        {
> >> -            return element;
> >> -        }
> >> -
> >> -        /**
> >> -         * @private
> >> -         */
> >> -        COMPILE::JS
> >> -        public function set positioner(value:WrappedHTMLElement):void
> >> -        {
> >> -            element = value;
> >> -        }
> >> -
> >> -        /**
> >> -         * @return The actual element to be parented.
> >> -         * @royaleignorecoercion org.apache.royale.core.
> >> WrappedHTMLElement
> >> -         */
> >> -        COMPILE::JS
> >> -        protected function createElement():WrappedHTMLElement
> >> -        {
> >> -                       addElementToWrapper(this,'div');
> >> -            positioner.style.display = 'block';
> >> -            //positioner.style.position = 'relative';
> >> -            return element;
> >> -        }
> >> -
> >> -
> >> -        /**
> >> -         * The HTMLElement used to position the component.
> >> -         * @royaleignorecoercion String
> >> -         */
> >> -        COMPILE::JS
> >> -        public function get alpha():Number
> >> -        {
> >> -            var stralpha:String = positioner.style.opacity as String;
> >> -            var alpha:Number = parseFloat(stralpha);
> >> -            return alpha;
> >> -        }
> >> -
> >> -        COMPILE::JS
> >> -        public function set alpha(value:Number):void
> >> -        {
> >> -            positioner.style.opacity = value;
> >> -        }
> >> -
> >> -        /**
> >> -         * @param value The event containing new style properties.
> >> -         */
> >> -        COMPILE::JS
> >> -        protected function styleChangeHandler(value:
> >> ValueChangeEvent):void
> >> -        {
> >> -            var newStyle:Object = {};
> >> -            newStyle[value.propertyName] = value.newValue;
> >> -            ValuesManager.valuesImpl.applyStyles(this, newStyle);
> >> -        }
> >> -
> >> -        /**
> >> -         * @royaleignorecoercion org.apache.royale.core.
> >> WrappedHTMLElement
> >> -         * @royaleignorecoercion org.apache.royale.core.IParent
> >> -         */
> >> -        COMPILE::JS
> >> -        public function get parent():IParent
> >> -        {
> >> -            var p:WrappedHTMLElement = this.positioner.parentNode as
> >> WrappedHTMLElement;
> >> -            var wrapper:IParent = p ? p.royale_wrapper as IParent :
> null;
> >> -            return wrapper;
> >> -        }
> >> -
> >> -        COMPILE::SWF
> >> -        {
> >> -        [SWFOverride(returns="flash.display.DisplayObjectContainer")]
> >> -        override public function get parent():IParent
> >> -        {
> >> -            return super.parent as IParent;
> >> -        }
> >> -        }
> >> -
> >> -               COMPILE::SWF
> >> -               public function get transformElement():IRoyaleElement
> >> -               {
> >> -                       return this;
> >> -               }
> >> -
> >> -               COMPILE::JS
> >> -               public function get transformElement():
> WrappedHTMLElement
> >> -               {
> >> -                       return element;
> >> -               }
> >> -
> >> -        COMPILE::SWF
> >> -        {
> >> -        [SWFOverride(params="flash.events.Event",
> >> altparams="org.apache.royale.events.Event:org.apache.
> >> royale.events.MouseEvent")]
> >> -        override public function dispatchEvent(event:org.
> >> apache.royale.events.Event):Boolean
> >> -        {
> >> -            return super.dispatchEvent(event);
> >> -        }
> >> -        }
> >> -
> >> -       }
> >> -}
> >>
> >> --
> >> To stop receiving notification emails like this one, please contact
> >> carlosrov...@apache.org.
> >>
> >
> >
> >
> > --
> > Carlos Rovira
> > http://about.me/carlosrovira
>
>


-- 
Carlos Rovira
http://about.me/carlosrovira

Reply via email to