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 <[email protected]> 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 <[email protected]>: > >> 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 <[email protected]> >> 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 >> [email protected]. >> > > > > -- > Carlos Rovira > http://about.me/carlosrovira
