<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-9194803383693725531</id><updated>2012-01-30T10:29:43.534+02:00</updated><category term='ActionScript'/><category term='Flex'/><title type='text'>Sergey Kovalyov</title><subtitle type='html'>Flash Platform, Flex, ActionScript, RIA Development</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://skovalyov.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9194803383693725531/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://skovalyov.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Sergey Kovalyov</name><uri>http://www.blogger.com/profile/12977809674331642977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-KNlCi7ApyVY/ThtyH-7EguI/AAAAAAAAChI/g417ynqmiSI/s220/profile-picture.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>19</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-9194803383693725531.post-100760051356822977</id><published>2011-11-09T12:58:00.000+02:00</published><updated>2011-11-10T15:22:11.889+02:00</updated><title type='text'>Adobe focuses on technologies which actually work</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;According to rumors, which are likely to be confirmed soon,&amp;nbsp;&lt;a href="http://www.zdnet.com/blog/perlow/exclusive-adobe-ceases-development-on-mobile-browser-flash-refocuses-efforts-on-html5/19226"&gt;Adobe has stopped development on Flash Player for browsers on mobile&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Easy to guess that it will trigger an avalanche of sarcastic comments from fanboys who have no clue about the technology.&lt;br /&gt;&lt;br /&gt;This already happens.&lt;br /&gt;&lt;br /&gt;But is it really game changing announcement?&lt;br /&gt;&lt;br /&gt;Definitely not!&lt;br /&gt;&lt;br /&gt;In fact, nothing has changed, because until now there was no single significant Flash project targeting mobile browsers.&lt;br /&gt;&lt;br /&gt;From the very beginning with Flash Lite the whole idea of delivering ANY SWF to mobile browser was weak.&lt;br /&gt;&lt;br /&gt;Complex web applications are not suitable for that at all from UI and performance perspective.&lt;br /&gt;&lt;br /&gt;Games could be and should be packaged as apps and &lt;a href="http://blogs.adobe.com/flashplatform/2011/09/flash-based-machinarium-game-is-now-1-ipad-app-delivered-using-adobe-air.html"&gt;some companies already do so&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Ads with the flying tagline and pulsating product picture? Well, I do not really care about ads, but this is probably the area where so called HTML5 is already good enough.&lt;br /&gt;&lt;br /&gt;That is why I totally support Adobe's move to sharpen focus on:&lt;br /&gt;&lt;br /&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;Desktop Flash Player. It is crucial to choose the right tool for the right task. Using Flash for simple wizard nowdays is nonsense. At the same time it remains the obvious choice for complex web applications. With Flash Builder and Flex SDK you can build high-quality applications with unbeatable performance which work the same in all browsers on all operation systems. Other than that there are still a lot of important features which are either not supported as such or virtually impossible to implement and maintain with HTML/CSS/JS stack of technologies. When you attach multiple files in GMail - it's Flash. Charts in Google Analytics Flash again. All more or less complex operations with media content from Grooveshark to YouTube are also implemented in Flash.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Air as a tool to build cross platform apps. Now also for mobile. Although there is huge iOS domination in smartphone and tablet markets, there are some other platforms already present on the market and it is quite possible that new will appear. Companies have to invest a lot to address all of them with native apps. For giants it is not a big issue. For certain performance sensitive applications it will remain inevitable as well. But with latest releases from Adobe and native extensions support Air becomes the best choice for many others. With single code base you address iOS, Android and other platforms and use any platform specific feature when needed.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;HTML5 authoring software. There is too much hype about HTML5 (mostly from people who know this buzzword only from Steve Jobs famous Thoughts on Flash), but until now there are no tools for creative professionals to produce content comparable even to Flash 3 (more than 10 years ago!). Every single HTML5 ad, demo, promo is PROGRAMMED by frontend developers. For sure this must be changed. And there is a big opportunity for Adobe here. Hopefully in future JavaScript, that is probably the worst programming language in the world, will evolve to something like ActionScript 3.0 and we will see HTML5 authoring software not only for designers and animators, but also for developers.&lt;/li&gt;&lt;/ol&gt;UPDATE&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.beautifycode.com/flash-mobile-died-so-what"&gt;http://www.beautifycode.com/flash-mobile-died-so-what&lt;/a&gt;&lt;br /&gt;&lt;a href="http://gskinner.com/blog/archives/2011/11/flash-player-mobile-a-post-mortem.html"&gt;http://gskinner.com/blog/archives/2011/11/flash-player-mobile-a-post-mortem.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.leebrimelow.com/?p=3151"&gt;http://www.leebrimelow.com/?p=3151&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9194803383693725531-100760051356822977?l=skovalyov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skovalyov.blogspot.com/feeds/100760051356822977/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9194803383693725531&amp;postID=100760051356822977' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9194803383693725531/posts/default/100760051356822977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9194803383693725531/posts/default/100760051356822977'/><link rel='alternate' type='text/html' href='http://skovalyov.blogspot.com/2011/11/according-to-rumors-which-are-likely-to.html' title='Adobe focuses on technologies which actually work'/><author><name>Sergey Kovalyov</name><uri>http://www.blogger.com/profile/12977809674331642977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-KNlCi7ApyVY/ThtyH-7EguI/AAAAAAAAChI/g417ynqmiSI/s220/profile-picture.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9194803383693725531.post-2079800842566533134</id><published>2010-09-22T19:19:00.008+03:00</published><updated>2010-10-14T15:11:12.184+02:00</updated><title type='text'>How to format the time span between now and the date specified in a "Facebook way"</title><content type='html'>Recently I was looking for some method to format the time span between now and the date specified in a "Facebook way". There are some, but none was completely what I was looking for. So I have decided to create mine. Moreover, it's not that complicated:&lt;pre style='color:#000020;background:#f6f8ff;'&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;package&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;import&lt;/span&gt; mx&lt;span style='color:#308080; '&gt;.&lt;/span&gt;formatters&lt;span style='color:#308080; '&gt;.&lt;/span&gt;DateFormatter&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;import&lt;/span&gt; mx&lt;span style='color:#308080; '&gt;.&lt;/span&gt;utils&lt;span style='color:#308080; '&gt;.&lt;/span&gt;StringUtil&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;public&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;class&lt;/span&gt; DateUtil &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;public&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;static&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;const&lt;/span&gt; SECOND_IN_MILLISECONDS &lt;span style='color:#308080; '&gt;:&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;int&lt;/span&gt; &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#008c00; '&gt;1000&lt;/span&gt;&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;public&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;static&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;const&lt;/span&gt; FEW_SECONDS &lt;span style='color:#308080; '&gt;:&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;int&lt;/span&gt; &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#008c00; '&gt;5&lt;/span&gt;&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;public&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;static&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;const&lt;/span&gt; MINUTE_IN_SECONDS &lt;span style='color:#308080; '&gt;:&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;int&lt;/span&gt; &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#008c00; '&gt;60&lt;/span&gt;&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;public&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;static&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;const&lt;/span&gt; HOUR_IN_SECONDS &lt;span style='color:#308080; '&gt;:&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;int&lt;/span&gt; &lt;span style='color:#308080; '&gt;=&lt;/span&gt; MINUTE_IN_SECONDS &lt;span style='color:#308080; '&gt;*&lt;/span&gt; &lt;span style='color:#008c00; '&gt;60&lt;/span&gt;&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;private&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;static&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;const&lt;/span&gt; X_SECONDS_AGO &lt;span style='color:#308080; '&gt;:&lt;/span&gt; &lt;span style='color:#007d45; '&gt;String&lt;/span&gt; &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;{0} seconds ago&lt;/span&gt;&lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;private&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;static&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;const&lt;/span&gt; X_MINUTES_AGO &lt;span style='color:#308080; '&gt;:&lt;/span&gt; &lt;span style='color:#007d45; '&gt;String&lt;/span&gt; &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;{0} minutes ago&lt;/span&gt;&lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;private&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;static&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;const&lt;/span&gt; X_HOURS_AGO &lt;span style='color:#308080; '&gt;:&lt;/span&gt; &lt;span style='color:#007d45; '&gt;String&lt;/span&gt; &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;{0} hours ago&lt;/span&gt;&lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;private&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;static&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;const&lt;/span&gt; IN_X_SECONDS &lt;span style='color:#308080; '&gt;:&lt;/span&gt; &lt;span style='color:#007d45; '&gt;String&lt;/span&gt; &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;In {0} seconds&lt;/span&gt;&lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;private&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;static&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;const&lt;/span&gt; IN_X_MINUTES &lt;span style='color:#308080; '&gt;:&lt;/span&gt; &lt;span style='color:#007d45; '&gt;String&lt;/span&gt; &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;In {0} minutes&lt;/span&gt;&lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;private&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;static&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;const&lt;/span&gt; IN_X_HOURS &lt;span style='color:#308080; '&gt;:&lt;/span&gt; &lt;span style='color:#007d45; '&gt;String&lt;/span&gt; &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;In {0} hours&lt;/span&gt;&lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;private&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;static&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;const&lt;/span&gt; YESTERDAY_TOMORROW_PATTERN &lt;span style='color:#308080; '&gt;:&lt;/span&gt; &lt;span style='color:#007d45; '&gt;String&lt;/span&gt; &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;at L:NNA&lt;/span&gt;&lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;private&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;static&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;const&lt;/span&gt; THIS_WEEK_PATTERN &lt;span style='color:#308080; '&gt;:&lt;/span&gt; &lt;span style='color:#007d45; '&gt;String&lt;/span&gt; &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;EEEE at L:NNA&lt;/span&gt;&lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;private&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;static&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;const&lt;/span&gt; THIS_YEAR_PATTERN &lt;span style='color:#308080; '&gt;:&lt;/span&gt; &lt;span style='color:#007d45; '&gt;String&lt;/span&gt; &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;MMMM D at L:NNA&lt;/span&gt;&lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;private&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;static&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;const&lt;/span&gt; ANOTHER_YEAR_PATTERN &lt;span style='color:#308080; '&gt;:&lt;/span&gt; &lt;span style='color:#007d45; '&gt;String&lt;/span&gt; &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;MMMM D, YYYY at L:NNA&lt;/span&gt;&lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span style='color:#595979; '&gt;/**&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#595979; '&gt;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;* Format the time span between now and the date specified in a "Facebook way".&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#595979; '&gt;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;*&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#595979; '&gt;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;* Examples:&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#595979; '&gt;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;*&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#595979; '&gt;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;* May 18, 2011 at 5:11AM&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#595979; '&gt;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;* December 25 at 8:43PM&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#595979; '&gt;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;* Friday at 3:53PM&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#595979; '&gt;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;* Tomorrow at 10:44AM&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#595979; '&gt;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;* In 10 hours&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#595979; '&gt;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;* In about an hour&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#595979; '&gt;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;* In 25 minutes&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#595979; '&gt;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;* In about a minute&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#595979; '&gt;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;* In 17 seconds&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#595979; '&gt;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;* In a few seconds&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#595979; '&gt;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;* A few seconds ago&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#595979; '&gt;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;* 31 seconds ago&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#595979; '&gt;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;* About a minute ago&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#595979; '&gt;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;* 47 minutes ago&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#595979; '&gt;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;* About an hour ago&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#595979; '&gt;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;* 4 hours ago&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#595979; '&gt;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;* Yesterday at 6:25PM&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#595979; '&gt;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;* Monday at 12:30AM&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#595979; '&gt;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;* September 11 at 7:11AM&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#595979; '&gt;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;* September 10, 2009 at 12:23PM&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#595979; '&gt;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;*/&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;public&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;static&lt;/span&gt; function getTimeSpan(date &lt;span style='color:#308080; '&gt;:&lt;/span&gt; &lt;span style='color:#007d45; '&gt;Date&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#308080; '&gt;:&lt;/span&gt; &lt;span style='color:#007d45; '&gt;String&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#200080; font-weight:bold; '&gt;var&lt;/span&gt; result &lt;span style='color:#308080; '&gt;:&lt;/span&gt; &lt;span style='color:#007d45; '&gt;String&lt;/span&gt;&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#200080; font-weight:bold; '&gt;var&lt;/span&gt; now &lt;span style='color:#308080; '&gt;:&lt;/span&gt; &lt;span style='color:#007d45; '&gt;Date&lt;/span&gt; &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;new&lt;/span&gt; &lt;span style='color:#007d45; '&gt;Date&lt;/span&gt;&lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#200080; font-weight:bold; '&gt;var&lt;/span&gt; dateFormatter &lt;span style='color:#308080; '&gt;:&lt;/span&gt; DateFormatter &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;new&lt;/span&gt; DateFormatter&lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#200080; font-weight:bold; '&gt;var&lt;/span&gt; range &lt;span style='color:#308080; '&gt;:&lt;/span&gt; &lt;span style='color:#007d45; '&gt;Number&lt;/span&gt; &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;now&lt;span style='color:#308080; '&gt;.&lt;/span&gt;time &lt;span style='color:#308080; '&gt;-&lt;/span&gt; date&lt;span style='color:#308080; '&gt;.&lt;/span&gt;time&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#308080; '&gt;/&lt;/span&gt; SECOND_IN_MILLISECONDS&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;            &lt;span style='color:#200080; font-weight:bold; '&gt;var&lt;/span&gt; nextYearStart &lt;span style='color:#308080; '&gt;:&lt;/span&gt; &lt;span style='color:#007d45; '&gt;Date&lt;/span&gt; &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;new&lt;/span&gt; &lt;span style='color:#007d45; '&gt;Date&lt;/span&gt;&lt;span style='color:#308080; '&gt;(&lt;/span&gt;now&lt;span style='color:#308080; '&gt;.&lt;/span&gt;fullYear &lt;span style='color:#308080; '&gt;+&lt;/span&gt; &lt;span style='color:#008c00; '&gt;1&lt;/span&gt;&lt;span style='color:#308080; '&gt;,&lt;/span&gt; &lt;span style='color:#008c00; '&gt;0&lt;/span&gt;&lt;span style='color:#308080; '&gt;,&lt;/span&gt; &lt;span style='color:#008c00; '&gt;1&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#200080; font-weight:bold; '&gt;var&lt;/span&gt; nextWeekStart &lt;span style='color:#308080; '&gt;:&lt;/span&gt; &lt;span style='color:#007d45; '&gt;Date&lt;/span&gt; &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;new&lt;/span&gt; &lt;span style='color:#007d45; '&gt;Date&lt;/span&gt;&lt;span style='color:#308080; '&gt;(&lt;/span&gt;now&lt;span style='color:#308080; '&gt;.&lt;/span&gt;fullYear&lt;span style='color:#308080; '&gt;,&lt;/span&gt; now&lt;span style='color:#308080; '&gt;.&lt;/span&gt;month&lt;span style='color:#308080; '&gt;,&lt;/span&gt; now&lt;span style='color:#308080; '&gt;.&lt;/span&gt;date &lt;span style='color:#308080; '&gt;+&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#008c00; '&gt;7&lt;/span&gt; &lt;span style='color:#308080; '&gt;-&lt;/span&gt; now&lt;span style='color:#308080; '&gt;.&lt;/span&gt;day&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#200080; font-weight:bold; '&gt;var&lt;/span&gt; tomorrowStart &lt;span style='color:#308080; '&gt;:&lt;/span&gt; &lt;span style='color:#007d45; '&gt;Date&lt;/span&gt; &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;new&lt;/span&gt; &lt;span style='color:#007d45; '&gt;Date&lt;/span&gt;&lt;span style='color:#308080; '&gt;(&lt;/span&gt;now&lt;span style='color:#308080; '&gt;.&lt;/span&gt;fullYear&lt;span style='color:#308080; '&gt;,&lt;/span&gt; now&lt;span style='color:#308080; '&gt;.&lt;/span&gt;month&lt;span style='color:#308080; '&gt;,&lt;/span&gt; now&lt;span style='color:#308080; '&gt;.&lt;/span&gt;date &lt;span style='color:#308080; '&gt;+&lt;/span&gt; &lt;span style='color:#008c00; '&gt;1&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#200080; font-weight:bold; '&gt;var&lt;/span&gt; theDayAfterTomorrowStart &lt;span style='color:#308080; '&gt;:&lt;/span&gt; &lt;span style='color:#007d45; '&gt;Date&lt;/span&gt; &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;new&lt;/span&gt; &lt;span style='color:#007d45; '&gt;Date&lt;/span&gt;&lt;span style='color:#308080; '&gt;(&lt;/span&gt;now&lt;span style='color:#308080; '&gt;.&lt;/span&gt;fullYear&lt;span style='color:#308080; '&gt;,&lt;/span&gt; now&lt;span style='color:#308080; '&gt;.&lt;/span&gt;month&lt;span style='color:#308080; '&gt;,&lt;/span&gt; now&lt;span style='color:#308080; '&gt;.&lt;/span&gt;date &lt;span style='color:#308080; '&gt;+&lt;/span&gt; &lt;span style='color:#008c00; '&gt;2&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#200080; font-weight:bold; '&gt;var&lt;/span&gt; todayStart &lt;span style='color:#308080; '&gt;:&lt;/span&gt; &lt;span style='color:#007d45; '&gt;Date&lt;/span&gt; &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;new&lt;/span&gt; &lt;span style='color:#007d45; '&gt;Date&lt;/span&gt;&lt;span style='color:#308080; '&gt;(&lt;/span&gt;now&lt;span style='color:#308080; '&gt;.&lt;/span&gt;fullYear&lt;span style='color:#308080; '&gt;,&lt;/span&gt; now&lt;span style='color:#308080; '&gt;.&lt;/span&gt;month&lt;span style='color:#308080; '&gt;,&lt;/span&gt; now&lt;span style='color:#308080; '&gt;.&lt;/span&gt;date&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#200080; font-weight:bold; '&gt;var&lt;/span&gt; yesterdayStart &lt;span style='color:#308080; '&gt;:&lt;/span&gt; &lt;span style='color:#007d45; '&gt;Date&lt;/span&gt; &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;new&lt;/span&gt; &lt;span style='color:#007d45; '&gt;Date&lt;/span&gt;&lt;span style='color:#308080; '&gt;(&lt;/span&gt;now&lt;span style='color:#308080; '&gt;.&lt;/span&gt;fullYear&lt;span style='color:#308080; '&gt;,&lt;/span&gt; now&lt;span style='color:#308080; '&gt;.&lt;/span&gt;month&lt;span style='color:#308080; '&gt;,&lt;/span&gt; now&lt;span style='color:#308080; '&gt;.&lt;/span&gt;date &lt;span style='color:#308080; '&gt;-&lt;/span&gt; &lt;span style='color:#008c00; '&gt;1&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#200080; font-weight:bold; '&gt;var&lt;/span&gt; thisWeekStart &lt;span style='color:#308080; '&gt;:&lt;/span&gt; &lt;span style='color:#007d45; '&gt;Date&lt;/span&gt; &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;new&lt;/span&gt; &lt;span style='color:#007d45; '&gt;Date&lt;/span&gt;&lt;span style='color:#308080; '&gt;(&lt;/span&gt;now&lt;span style='color:#308080; '&gt;.&lt;/span&gt;fullYear&lt;span style='color:#308080; '&gt;,&lt;/span&gt; now&lt;span style='color:#308080; '&gt;.&lt;/span&gt;month&lt;span style='color:#308080; '&gt;,&lt;/span&gt; now&lt;span style='color:#308080; '&gt;.&lt;/span&gt;date &lt;span style='color:#308080; '&gt;-&lt;/span&gt; now&lt;span style='color:#308080; '&gt;.&lt;/span&gt;day&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#200080; font-weight:bold; '&gt;var&lt;/span&gt; thisYearStart &lt;span style='color:#308080; '&gt;:&lt;/span&gt; &lt;span style='color:#007d45; '&gt;Date&lt;/span&gt; &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;new&lt;/span&gt; &lt;span style='color:#007d45; '&gt;Date&lt;/span&gt;&lt;span style='color:#308080; '&gt;(&lt;/span&gt;now&lt;span style='color:#308080; '&gt;.&lt;/span&gt;fullYear&lt;span style='color:#308080; '&gt;,&lt;/span&gt; &lt;span style='color:#008c00; '&gt;0&lt;/span&gt;&lt;span style='color:#308080; '&gt;,&lt;/span&gt; &lt;span style='color:#008c00; '&gt;1&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;            &lt;br /&gt;            &lt;span style='color:#200080; font-weight:bold; '&gt;var&lt;/span&gt; nextYearRange &lt;span style='color:#308080; '&gt;:&lt;/span&gt; &lt;span style='color:#007d45; '&gt;Number&lt;/span&gt; &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;now&lt;span style='color:#308080; '&gt;.&lt;/span&gt;time &lt;span style='color:#308080; '&gt;-&lt;/span&gt; nextYearStart&lt;span style='color:#308080; '&gt;.&lt;/span&gt;time&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#308080; '&gt;/&lt;/span&gt; SECOND_IN_MILLISECONDS&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#200080; font-weight:bold; '&gt;var&lt;/span&gt; nextWeekRange &lt;span style='color:#308080; '&gt;:&lt;/span&gt; &lt;span style='color:#007d45; '&gt;Number&lt;/span&gt; &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;now&lt;span style='color:#308080; '&gt;.&lt;/span&gt;time &lt;span style='color:#308080; '&gt;-&lt;/span&gt; nextWeekStart&lt;span style='color:#308080; '&gt;.&lt;/span&gt;time&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#308080; '&gt;/&lt;/span&gt; SECOND_IN_MILLISECONDS&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#200080; font-weight:bold; '&gt;var&lt;/span&gt; theDayAfterTomorrowRange &lt;span style='color:#308080; '&gt;:&lt;/span&gt; &lt;span style='color:#007d45; '&gt;Number&lt;/span&gt; &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;now&lt;span style='color:#308080; '&gt;.&lt;/span&gt;time &lt;span style='color:#308080; '&gt;-&lt;/span&gt; theDayAfterTomorrowStart&lt;span style='color:#308080; '&gt;.&lt;/span&gt;time&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#308080; '&gt;/&lt;/span&gt; SECOND_IN_MILLISECONDS&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#200080; font-weight:bold; '&gt;var&lt;/span&gt; tomorrowRange &lt;span style='color:#308080; '&gt;:&lt;/span&gt; &lt;span style='color:#007d45; '&gt;Number&lt;/span&gt; &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;now&lt;span style='color:#308080; '&gt;.&lt;/span&gt;time &lt;span style='color:#308080; '&gt;-&lt;/span&gt; tomorrowStart&lt;span style='color:#308080; '&gt;.&lt;/span&gt;time&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#308080; '&gt;/&lt;/span&gt; SECOND_IN_MILLISECONDS&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#200080; font-weight:bold; '&gt;var&lt;/span&gt; todayRange &lt;span style='color:#308080; '&gt;:&lt;/span&gt; &lt;span style='color:#007d45; '&gt;Number&lt;/span&gt; &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;now&lt;span style='color:#308080; '&gt;.&lt;/span&gt;time &lt;span style='color:#308080; '&gt;-&lt;/span&gt; todayStart&lt;span style='color:#308080; '&gt;.&lt;/span&gt;time&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#308080; '&gt;/&lt;/span&gt; SECOND_IN_MILLISECONDS&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#200080; font-weight:bold; '&gt;var&lt;/span&gt; yesterdayRange &lt;span style='color:#308080; '&gt;:&lt;/span&gt; &lt;span style='color:#007d45; '&gt;Number&lt;/span&gt; &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;now&lt;span style='color:#308080; '&gt;.&lt;/span&gt;time &lt;span style='color:#308080; '&gt;-&lt;/span&gt; yesterdayStart&lt;span style='color:#308080; '&gt;.&lt;/span&gt;time&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#308080; '&gt;/&lt;/span&gt; SECOND_IN_MILLISECONDS&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#200080; font-weight:bold; '&gt;var&lt;/span&gt; thisWeekRange &lt;span style='color:#308080; '&gt;:&lt;/span&gt; &lt;span style='color:#007d45; '&gt;Number&lt;/span&gt; &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;now&lt;span style='color:#308080; '&gt;.&lt;/span&gt;time &lt;span style='color:#308080; '&gt;-&lt;/span&gt; thisWeekStart&lt;span style='color:#308080; '&gt;.&lt;/span&gt;time&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#308080; '&gt;/&lt;/span&gt; SECOND_IN_MILLISECONDS&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#200080; font-weight:bold; '&gt;var&lt;/span&gt; thisYearRange &lt;span style='color:#308080; '&gt;:&lt;/span&gt; &lt;span style='color:#007d45; '&gt;Number&lt;/span&gt; &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;now&lt;span style='color:#308080; '&gt;.&lt;/span&gt;time &lt;span style='color:#308080; '&gt;-&lt;/span&gt; thisYearStart&lt;span style='color:#308080; '&gt;.&lt;/span&gt;time&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#308080; '&gt;/&lt;/span&gt; SECOND_IN_MILLISECONDS&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;            &lt;span style='color:#200080; font-weight:bold; '&gt;if&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;range &lt;span style='color:#308080; '&gt;&gt;=&lt;/span&gt; &lt;span style='color:#008c00; '&gt;0&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#200080; font-weight:bold; '&gt;if&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;range &lt;span style='color:#308080; '&gt;&amp;lt;&lt;/span&gt; FEW_SECONDS&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;                    result &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;A few seconds ago&lt;/span&gt;&lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#406080; '&gt;}&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;else&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;if&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;range &lt;span style='color:#308080; '&gt;&amp;lt;&lt;/span&gt; MINUTE_IN_SECONDS&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;                    result &lt;span style='color:#308080; '&gt;=&lt;/span&gt; StringUtil&lt;span style='color:#308080; '&gt;.&lt;/span&gt;substitute&lt;span style='color:#308080; '&gt;(&lt;/span&gt;X_SECONDS_AGO&lt;span style='color:#308080; '&gt;,&lt;/span&gt; &lt;span style='color:#007d45; '&gt;Math&lt;/span&gt;&lt;span style='color:#308080; '&gt;.&lt;/span&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;floor&lt;/span&gt;&lt;span style='color:#308080; '&gt;(&lt;/span&gt;range&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#406080; '&gt;}&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;else&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;if&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;range &lt;span style='color:#308080; '&gt;&amp;lt;&lt;/span&gt; MINUTE_IN_SECONDS &lt;span style='color:#308080; '&gt;*&lt;/span&gt; &lt;span style='color:#008c00; '&gt;2&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;                    result &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;About a minute ago&lt;/span&gt;&lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#406080; '&gt;}&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;else&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;if&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;range &lt;span style='color:#308080; '&gt;&amp;lt;&lt;/span&gt; HOUR_IN_SECONDS&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;                    result &lt;span style='color:#308080; '&gt;=&lt;/span&gt; StringUtil&lt;span style='color:#308080; '&gt;.&lt;/span&gt;substitute&lt;span style='color:#308080; '&gt;(&lt;/span&gt;X_MINUTES_AGO&lt;span style='color:#308080; '&gt;,&lt;/span&gt; &lt;span style='color:#007d45; '&gt;Math&lt;/span&gt;&lt;span style='color:#308080; '&gt;.&lt;/span&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;floor&lt;/span&gt;&lt;span style='color:#308080; '&gt;(&lt;/span&gt;range &lt;span style='color:#308080; '&gt;/&lt;/span&gt; MINUTE_IN_SECONDS&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#406080; '&gt;}&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;else&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;if&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;range &lt;span style='color:#308080; '&gt;&amp;lt;&lt;/span&gt; HOUR_IN_SECONDS &lt;span style='color:#308080; '&gt;*&lt;/span&gt; &lt;span style='color:#008c00; '&gt;2&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;                    result &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;About an hour ago&lt;/span&gt;&lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#406080; '&gt;}&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;else&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;if&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;range &lt;span style='color:#308080; '&gt;&amp;lt;&lt;/span&gt; todayRange&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;                    result &lt;span style='color:#308080; '&gt;=&lt;/span&gt; StringUtil&lt;span style='color:#308080; '&gt;.&lt;/span&gt;substitute&lt;span style='color:#308080; '&gt;(&lt;/span&gt;X_HOURS_AGO&lt;span style='color:#308080; '&gt;,&lt;/span&gt; &lt;span style='color:#007d45; '&gt;Math&lt;/span&gt;&lt;span style='color:#308080; '&gt;.&lt;/span&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;floor&lt;/span&gt;&lt;span style='color:#308080; '&gt;(&lt;/span&gt;range &lt;span style='color:#308080; '&gt;/&lt;/span&gt; HOUR_IN_SECONDS&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#406080; '&gt;}&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;else&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;if&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;range &lt;span style='color:#308080; '&gt;&amp;lt;&lt;/span&gt; yesterdayRange&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;                    dateFormatter&lt;span style='color:#308080; '&gt;.&lt;/span&gt;formatString &lt;span style='color:#308080; '&gt;=&lt;/span&gt; YESTERDAY_TOMORROW_PATTERN&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;                    result &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;Yesterday &lt;/span&gt;&lt;span style='color:#800000; '&gt;"&lt;/span&gt; &lt;span style='color:#308080; '&gt;+&lt;/span&gt; dateFormatter&lt;span style='color:#308080; '&gt;.&lt;/span&gt;format&lt;span style='color:#308080; '&gt;(&lt;/span&gt;date&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#406080; '&gt;}&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;else&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;if&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;range &lt;span style='color:#308080; '&gt;&amp;lt;&lt;/span&gt; thisWeekRange&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;                    dateFormatter&lt;span style='color:#308080; '&gt;.&lt;/span&gt;formatString &lt;span style='color:#308080; '&gt;=&lt;/span&gt; THIS_WEEK_PATTERN&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;                    result &lt;span style='color:#308080; '&gt;=&lt;/span&gt; dateFormatter&lt;span style='color:#308080; '&gt;.&lt;/span&gt;format&lt;span style='color:#308080; '&gt;(&lt;/span&gt;date&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#406080; '&gt;}&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;else&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;if&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;range &lt;span style='color:#308080; '&gt;&amp;lt;&lt;/span&gt; thisYearRange&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;                    dateFormatter&lt;span style='color:#308080; '&gt;.&lt;/span&gt;formatString &lt;span style='color:#308080; '&gt;=&lt;/span&gt; THIS_YEAR_PATTERN&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;                    result &lt;span style='color:#308080; '&gt;=&lt;/span&gt; dateFormatter&lt;span style='color:#308080; '&gt;.&lt;/span&gt;format&lt;span style='color:#308080; '&gt;(&lt;/span&gt;date&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#406080; '&gt;}&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;else&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;                    dateFormatter&lt;span style='color:#308080; '&gt;.&lt;/span&gt;formatString &lt;span style='color:#308080; '&gt;=&lt;/span&gt; ANOTHER_YEAR_PATTERN&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;                    result &lt;span style='color:#308080; '&gt;=&lt;/span&gt; dateFormatter&lt;span style='color:#308080; '&gt;.&lt;/span&gt;format&lt;span style='color:#308080; '&gt;(&lt;/span&gt;date&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#406080; '&gt;}&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;else&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#200080; font-weight:bold; '&gt;if&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;range &lt;span style='color:#308080; '&gt;&gt;&lt;/span&gt; &lt;span style='color:#308080; '&gt;-&lt;/span&gt;FEW_SECONDS&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;                    result &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;In a few seconds&lt;/span&gt;&lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#406080; '&gt;}&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;else&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;if&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;range &lt;span style='color:#308080; '&gt;&gt;&lt;/span&gt; &lt;span style='color:#308080; '&gt;-&lt;/span&gt;MINUTE_IN_SECONDS&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;                    result &lt;span style='color:#308080; '&gt;=&lt;/span&gt; StringUtil&lt;span style='color:#308080; '&gt;.&lt;/span&gt;substitute&lt;span style='color:#308080; '&gt;(&lt;/span&gt;IN_X_SECONDS&lt;span style='color:#308080; '&gt;,&lt;/span&gt; &lt;span style='color:#007d45; '&gt;Math&lt;/span&gt;&lt;span style='color:#308080; '&gt;.&lt;/span&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;floor&lt;/span&gt;&lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;range&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#406080; '&gt;}&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;else&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;if&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;range &lt;span style='color:#308080; '&gt;&gt;&lt;/span&gt; &lt;span style='color:#308080; '&gt;-&lt;/span&gt;MINUTE_IN_SECONDS &lt;span style='color:#308080; '&gt;*&lt;/span&gt; &lt;span style='color:#008c00; '&gt;2&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;                    result &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;In about a minute&lt;/span&gt;&lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#406080; '&gt;}&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;else&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;if&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;range &lt;span style='color:#308080; '&gt;&gt;&lt;/span&gt; &lt;span style='color:#308080; '&gt;-&lt;/span&gt;HOUR_IN_SECONDS&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;                    result &lt;span style='color:#308080; '&gt;=&lt;/span&gt; StringUtil&lt;span style='color:#308080; '&gt;.&lt;/span&gt;substitute&lt;span style='color:#308080; '&gt;(&lt;/span&gt;IN_X_MINUTES&lt;span style='color:#308080; '&gt;,&lt;/span&gt; &lt;span style='color:#007d45; '&gt;Math&lt;/span&gt;&lt;span style='color:#308080; '&gt;.&lt;/span&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;floor&lt;/span&gt;&lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;range &lt;span style='color:#308080; '&gt;/&lt;/span&gt; MINUTE_IN_SECONDS&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#406080; '&gt;}&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;else&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;if&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;range &lt;span style='color:#308080; '&gt;&gt;&lt;/span&gt; &lt;span style='color:#308080; '&gt;-&lt;/span&gt;HOUR_IN_SECONDS &lt;span style='color:#308080; '&gt;*&lt;/span&gt; &lt;span style='color:#008c00; '&gt;2&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;                    result &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;In about an hour&lt;/span&gt;&lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#406080; '&gt;}&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;else&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;if&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;range &lt;span style='color:#308080; '&gt;&gt;&lt;/span&gt; tomorrowRange&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;                    result &lt;span style='color:#308080; '&gt;=&lt;/span&gt; StringUtil&lt;span style='color:#308080; '&gt;.&lt;/span&gt;substitute&lt;span style='color:#308080; '&gt;(&lt;/span&gt;IN_X_HOURS&lt;span style='color:#308080; '&gt;,&lt;/span&gt; &lt;span style='color:#007d45; '&gt;Math&lt;/span&gt;&lt;span style='color:#308080; '&gt;.&lt;/span&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;floor&lt;/span&gt;&lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;range &lt;span style='color:#308080; '&gt;/&lt;/span&gt; HOUR_IN_SECONDS&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#406080; '&gt;}&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;else&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;if&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;range &lt;span style='color:#308080; '&gt;&gt;&lt;/span&gt; theDayAfterTomorrowRange&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;                    dateFormatter&lt;span style='color:#308080; '&gt;.&lt;/span&gt;formatString &lt;span style='color:#308080; '&gt;=&lt;/span&gt; YESTERDAY_TOMORROW_PATTERN&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;                    result &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;Tomorrow &lt;/span&gt;&lt;span style='color:#800000; '&gt;"&lt;/span&gt; &lt;span style='color:#308080; '&gt;+&lt;/span&gt; dateFormatter&lt;span style='color:#308080; '&gt;.&lt;/span&gt;format&lt;span style='color:#308080; '&gt;(&lt;/span&gt;date&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#406080; '&gt;}&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;else&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;if&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;range &lt;span style='color:#308080; '&gt;&gt;&lt;/span&gt; nextWeekRange&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;                    dateFormatter&lt;span style='color:#308080; '&gt;.&lt;/span&gt;formatString &lt;span style='color:#308080; '&gt;=&lt;/span&gt; THIS_WEEK_PATTERN&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;                    result &lt;span style='color:#308080; '&gt;=&lt;/span&gt; dateFormatter&lt;span style='color:#308080; '&gt;.&lt;/span&gt;format&lt;span style='color:#308080; '&gt;(&lt;/span&gt;date&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#406080; '&gt;}&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;else&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;if&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;range &lt;span style='color:#308080; '&gt;&gt;&lt;/span&gt; nextYearRange&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;                    dateFormatter&lt;span style='color:#308080; '&gt;.&lt;/span&gt;formatString &lt;span style='color:#308080; '&gt;=&lt;/span&gt; THIS_YEAR_PATTERN&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;                    result &lt;span style='color:#308080; '&gt;=&lt;/span&gt; dateFormatter&lt;span style='color:#308080; '&gt;.&lt;/span&gt;format&lt;span style='color:#308080; '&gt;(&lt;/span&gt;date&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#406080; '&gt;}&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;else&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;                    dateFormatter&lt;span style='color:#308080; '&gt;.&lt;/span&gt;formatString &lt;span style='color:#308080; '&gt;=&lt;/span&gt; ANOTHER_YEAR_PATTERN&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;                    result &lt;span style='color:#308080; '&gt;=&lt;/span&gt; dateFormatter&lt;span style='color:#308080; '&gt;.&lt;/span&gt;format&lt;span style='color:#308080; '&gt;(&lt;/span&gt;date&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;            &lt;br /&gt;            &lt;span style='color:#200080; font-weight:bold; '&gt;return&lt;/span&gt; result&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9194803383693725531-2079800842566533134?l=skovalyov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skovalyov.blogspot.com/feeds/2079800842566533134/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9194803383693725531&amp;postID=2079800842566533134' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9194803383693725531/posts/default/2079800842566533134'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9194803383693725531/posts/default/2079800842566533134'/><link rel='alternate' type='text/html' href='http://skovalyov.blogspot.com/2010/09/how-to-format-time-span-between-now-and.html' title='How to format the time span between now and the date specified in a &quot;Facebook way&quot;'/><author><name>Sergey Kovalyov</name><uri>http://www.blogger.com/profile/12977809674331642977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-KNlCi7ApyVY/ThtyH-7EguI/AAAAAAAAChI/g417ynqmiSI/s220/profile-picture.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9194803383693725531.post-1348886672158262901</id><published>2008-11-06T15:51:00.002+02:00</published><updated>2008-11-06T16:10:21.615+02:00</updated><title type='text'>Do not comment code!</title><content type='html'>Commenting code is the worst practice promoted by "wannabe smart" books about software engineering. &lt;a href="http://en.wikipedia.org/wiki/Joshua_Bloch"&gt;Joshua Block&lt;/a&gt; in his &lt;a href="http://www.google.com/search?q=Joshua+Bloch+How+to+Design+a+Good+API+and+Why+it+Matters"&gt;How to Design a Good API and Why it Matters keynote&lt;/a&gt; notes that &lt;span style="font-style:italic;"&gt;code should read like prose&lt;/span&gt; and shows the good example:&lt;br /&gt;&lt;br /&gt;&lt;pre style='color:#000020;background:#f6f8ff;overflow:auto;'&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;if&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;car&lt;span style='color:#308080; '&gt;.&lt;/span&gt;speed&lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#308080; '&gt;&gt;&lt;/span&gt; &lt;span style='color:#008c00; '&gt;2&lt;/span&gt; &lt;span style='color:#308080; '&gt;*&lt;/span&gt; SPEED_LIMIT&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;br /&gt;    generateAlert&lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;Watch out for cops!&lt;/span&gt;&lt;span style='color:#800000; '&gt;"&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;And I completely agree with this statement. Thus good code is self-explanatory and does not require comments. On the other hand comments will never rescue bad code. Sure, we can use something like "TODO: I will fix this dummy trick in the next iteration", but no more than it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9194803383693725531-1348886672158262901?l=skovalyov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skovalyov.blogspot.com/feeds/1348886672158262901/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9194803383693725531&amp;postID=1348886672158262901' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9194803383693725531/posts/default/1348886672158262901'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9194803383693725531/posts/default/1348886672158262901'/><link rel='alternate' type='text/html' href='http://skovalyov.blogspot.com/2008/11/do-not-comment-code.html' title='Do not comment code!'/><author><name>Sergey Kovalyov</name><uri>http://www.blogger.com/profile/12977809674331642977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-KNlCi7ApyVY/ThtyH-7EguI/AAAAAAAAChI/g417ynqmiSI/s220/profile-picture.jpg'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9194803383693725531.post-582970830092572999</id><published>2008-05-12T12:09:00.002+03:00</published><updated>2008-05-12T12:35:37.357+03:00</updated><title type='text'>Second Ukrainian Flash Platform User Group official meeting</title><content type='html'>This time &lt;a href="http://www.fpug.org.ua/"&gt;Ukrainian Flash Platform User Group&lt;/a&gt; meeting has been held in Kiev. Two previous meetings have been held in Kharkov. We have gathered at cozy &lt;a href="http://www.goldengatepubkiev.com/"&gt;Golden Gate Pub&lt;/a&gt; of &lt;a href="http://www.kartamir.com.ua/eng/index.html"&gt;Mirovaya Karta&lt;/a&gt; chain near Golden Gates. Ilya Panin from Kharkov has compared different IDEs (&lt;a href="http://www.adobe.com/products/flex/"&gt;Adobe Flex Builder&lt;/a&gt;, &lt;a href="http://fdt.powerflasher.com/"&gt;FDT&lt;/a&gt;, &lt;a href="http://www.flashdevelop.org/"&gt;FlashDevelop&lt;/a&gt;, &lt;a href="http://www.jetbrains.com/idea/"&gt;IDEA&lt;/a&gt;) and summarized that as a whole Adobe Flex Builder is the best choice to develop Flex applications now. Tatyana Belaya from Moscow has told about sound visualization using &lt;a href="http://livedocs.adobe.com/flex/2/langref/flash/media/SoundMixer.html"&gt;SoundMixer.computeSpectrum() method&lt;/a&gt; with snowflakes on background. Roman Shuper has shared his experience using &lt;a href="http://ant.apache.org/"&gt;Apache Ant&lt;/a&gt; to deploy Flex projects and also told about conditional compilation and running executables from AIR applications.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/skovalyov/2480974553/" title="Flash Platform User Group by Sergey Kovalyov, on Flickr"&gt;&lt;img src="http://farm3.static.flickr.com/2229/2480974553_ec879f2431.jpg" width="500" height="375" alt="Flash Platform User Group" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9194803383693725531-582970830092572999?l=skovalyov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skovalyov.blogspot.com/feeds/582970830092572999/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9194803383693725531&amp;postID=582970830092572999' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9194803383693725531/posts/default/582970830092572999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9194803383693725531/posts/default/582970830092572999'/><link rel='alternate' type='text/html' href='http://skovalyov.blogspot.com/2008/05/second-ukrainian-flash-platform-user.html' title='Second Ukrainian Flash Platform User Group official meeting'/><author><name>Sergey Kovalyov</name><uri>http://www.blogger.com/profile/12977809674331642977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-KNlCi7ApyVY/ThtyH-7EguI/AAAAAAAAChI/g417ynqmiSI/s220/profile-picture.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm3.static.flickr.com/2229/2480974553_ec879f2431_t.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9194803383693725531.post-2084610837478798935</id><published>2008-04-17T09:19:00.002+02:00</published><updated>2008-04-17T09:42:38.692+02:00</updated><title type='text'>Flex SDK coding conventions and best practices</title><content type='html'>Adobe has published &lt;a href="http://opensource.adobe.com/wiki/display/flexsdk/Coding+Conventions"&gt;Flex SDK coding conventions and best practices&lt;/a&gt;. Now it is mostly about ActionScript 3.0. I work in a team for a long time, so we have created our own conventions long time ago, because it is a must for collaborative development. It is based on &lt;a href="http://www.adobe.com/devnet/flash/articles/as_bestpractices_04.html"&gt;ActionScript 2.0 Best Practices&lt;/a&gt;, &lt;a href="http://java.sun.com/docs/codeconv/"&gt;Code Conventions for the Java Programming Language&lt;/a&gt; and the common sense. Nevertheless, it's a great effort from Adobe, because vendor supported guidelines are always more respected and tend to become industry standard. Now I hope Adobe would also extend the document with MXML conventions.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9194803383693725531-2084610837478798935?l=skovalyov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skovalyov.blogspot.com/feeds/2084610837478798935/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9194803383693725531&amp;postID=2084610837478798935' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9194803383693725531/posts/default/2084610837478798935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9194803383693725531/posts/default/2084610837478798935'/><link rel='alternate' type='text/html' href='http://skovalyov.blogspot.com/2008/04/flex-sdk-coding-conventions-and-best.html' title='Flex SDK coding conventions and best practices'/><author><name>Sergey Kovalyov</name><uri>http://www.blogger.com/profile/12977809674331642977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-KNlCi7ApyVY/ThtyH-7EguI/AAAAAAAAChI/g417ynqmiSI/s220/profile-picture.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9194803383693725531.post-7820395501726984353</id><published>2008-03-17T14:43:00.002+02:00</published><updated>2008-03-17T14:57:35.904+02:00</updated><title type='text'>First Ukrainian Flash Platform User Group official meeting</title><content type='html'>&lt;a href="http://fpug.org.ua/node/54"&gt;The meeting&lt;/a&gt; has been hosted by Kharkov office of &lt;a href="http://www.globallogic.com/"&gt;GlobalLogic&lt;/a&gt;, formerly known as &lt;a href="http://www.validio.com/index.html"&gt;Validio&lt;/a&gt;. Eldar Prilutsky has introduced &lt;a href="http://livedocs.adobe.com/flash/9.0/main/00000136.html"&gt;ActionScript 3.0 event model&lt;/a&gt;, Rostislav Siryk has shared his experience with &lt;a href="http://www.puremvc.org/"&gt;PureMVC framework&lt;/a&gt; while developing Moscow vector map and Denis Papazov has told about &lt;a href="http://www.adobe.com/products/flashmediaserver/"&gt;Flash Media Server&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/skovalyov/2339147554/" title="Flash Platform User Group by Sergey Kovalyov, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3237/2339147554_a2e49e1e5c.jpg" width="375" height="500" alt="Flash Platform User Group" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9194803383693725531-7820395501726984353?l=skovalyov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skovalyov.blogspot.com/feeds/7820395501726984353/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9194803383693725531&amp;postID=7820395501726984353' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9194803383693725531/posts/default/7820395501726984353'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9194803383693725531/posts/default/7820395501726984353'/><link rel='alternate' type='text/html' href='http://skovalyov.blogspot.com/2008/03/first-ukrainian-flash-platform-user.html' title='First Ukrainian Flash Platform User Group official meeting'/><author><name>Sergey Kovalyov</name><uri>http://www.blogger.com/profile/12977809674331642977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-KNlCi7ApyVY/ThtyH-7EguI/AAAAAAAAChI/g417ynqmiSI/s220/profile-picture.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3237/2339147554_a2e49e1e5c_t.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9194803383693725531.post-8473196182290714775</id><published>2008-03-11T23:44:00.001+02:00</published><updated>2008-03-11T23:45:22.458+02:00</updated><title type='text'>Macromedia Flash 2 box!</title><content type='html'>&lt;a href="http://www.flickr.com/photos/skovalyov/2312803730/" title="Old stuff by Sergey Kovalyov, on Flickr"&gt;&lt;img src="http://farm3.static.flickr.com/2195/2312803730_3a03d61f22.jpg" width="375" height="500" alt="Old stuff" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9194803383693725531-8473196182290714775?l=skovalyov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skovalyov.blogspot.com/feeds/8473196182290714775/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9194803383693725531&amp;postID=8473196182290714775' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9194803383693725531/posts/default/8473196182290714775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9194803383693725531/posts/default/8473196182290714775'/><link rel='alternate' type='text/html' href='http://skovalyov.blogspot.com/2008/03/macromedia-flash-2-box.html' title='Macromedia Flash 2 box!'/><author><name>Sergey Kovalyov</name><uri>http://www.blogger.com/profile/12977809674331642977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-KNlCi7ApyVY/ThtyH-7EguI/AAAAAAAAChI/g417ynqmiSI/s220/profile-picture.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm3.static.flickr.com/2195/2312803730_3a03d61f22_t.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9194803383693725531.post-2293619426717332534</id><published>2007-10-08T14:22:00.000+02:00</published><updated>2007-10-08T15:19:13.894+02:00</updated><title type='text'>States and form layout</title><content type='html'>I have created component based on Form container and it has some states with AddChild overrides. Unfortunately, adding new FormItem to the Form instance runtime doesn't force the Form instance to update its layout. Thus labels are not aligned correctly as it's expected. Actually, it's &lt;a href="https://bugs.adobe.com/jira/browse/SDK-10980"&gt;known bug&lt;/a&gt; and Adobe plans to fix it in SDK Moxie RC. Yet they recommend to use workaround and call invalidateSize() on Form instance's children upon state change. I have implemented it in ExtendedForm, that could be reused easily the same way you use native Form:&lt;pre&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;package&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;import&lt;/span&gt; mx&lt;span style='color:#308080; '&gt;.&lt;/span&gt;containers&lt;span style='color:#308080; '&gt;.&lt;/span&gt;Form&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;import&lt;/span&gt; mx&lt;span style='color:#308080; '&gt;.&lt;/span&gt;core&lt;span style='color:#308080; '&gt;.&lt;/span&gt;UIComponent&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;import&lt;/span&gt; mx&lt;span style='color:#308080; '&gt;.&lt;/span&gt;events&lt;span style='color:#308080; '&gt;.&lt;/span&gt;FlexEvent&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;public&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;class&lt;/span&gt; ExtendedForm &lt;span style='color:#200080; font-weight:bold; '&gt;extends&lt;/span&gt; Form &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;public&lt;/span&gt; function ExtendedForm(&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#200080; font-weight:bold; '&gt;super&lt;/span&gt;&lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;            &lt;br /&gt;            addEventListener&lt;span style='color:#308080; '&gt;(&lt;/span&gt;FlexEvent&lt;span style='color:#308080; '&gt;.&lt;/span&gt;UPDATE_COMPLETE&lt;span style='color:#308080; '&gt;,&lt;/span&gt; onUpdateComplete&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;private&lt;/span&gt; function onUpdateComplete(event &lt;span style='color:#308080; '&gt;:&lt;/span&gt; FlexEvent&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#308080; '&gt;:&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;void&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#200080; font-weight:bold; '&gt;for&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;var&lt;/span&gt; i &lt;span style='color:#308080; '&gt;:&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;int&lt;/span&gt; &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#008c00; '&gt;0&lt;/span&gt;&lt;span style='color:#308080; '&gt;;&lt;/span&gt; i &lt;span style='color:#308080; '&gt;&amp;lt;&lt;/span&gt; numChildren&lt;span style='color:#308080; '&gt;;&lt;/span&gt; i&lt;span style='color:#308080; '&gt;++&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;                UIComponent&lt;span style='color:#308080; '&gt;(&lt;/span&gt;getChildAt&lt;span style='color:#308080; '&gt;(&lt;/span&gt;i&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#308080; '&gt;.&lt;/span&gt;invalidateSize&lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;    &lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9194803383693725531-2293619426717332534?l=skovalyov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skovalyov.blogspot.com/feeds/2293619426717332534/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9194803383693725531&amp;postID=2293619426717332534' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9194803383693725531/posts/default/2293619426717332534'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9194803383693725531/posts/default/2293619426717332534'/><link rel='alternate' type='text/html' href='http://skovalyov.blogspot.com/2007/10/states-and-form-layout.html' title='States and form layout'/><author><name>Sergey Kovalyov</name><uri>http://www.blogger.com/profile/12977809674331642977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-KNlCi7ApyVY/ThtyH-7EguI/AAAAAAAAChI/g417ynqmiSI/s220/profile-picture.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9194803383693725531.post-1274412570286263556</id><published>2007-07-04T10:47:00.000+03:00</published><updated>2007-07-04T10:57:57.625+03:00</updated><title type='text'>A brand new site about Russia</title><content type='html'>&lt;i&gt;Wow, Russia is the biggest country in the wolrd. Aloha!&lt;br /&gt;&lt;br /&gt;Yes, guys, it is. So everybody knows that there are two cities in Russia - Moscow and St. Petersburg. That is also true. The rest of the country is called Siberia. That's it. Pretty simple geography.&lt;br /&gt;&lt;br /&gt;So what else do we have in Russia? We have bears, of course. A lots of different bears. Some of them are wearing lapti and playing balalayka all day long, some of them are drinking vodka all the time, some of them can fly, some live in the internet, some went to politics and some are just hanging out in the streets.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.wowrussia.com/"&gt;Great Flash site&lt;/a&gt; about Kalashnikov, Ushanka, Matrioshka and... Chelsea. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9194803383693725531-1274412570286263556?l=skovalyov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skovalyov.blogspot.com/feeds/1274412570286263556/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9194803383693725531&amp;postID=1274412570286263556' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9194803383693725531/posts/default/1274412570286263556'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9194803383693725531/posts/default/1274412570286263556'/><link rel='alternate' type='text/html' href='http://skovalyov.blogspot.com/2007/07/brand-new-site-about-russia.html' title='A brand new site about Russia'/><author><name>Sergey Kovalyov</name><uri>http://www.blogger.com/profile/12977809674331642977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-KNlCi7ApyVY/ThtyH-7EguI/AAAAAAAAChI/g417ynqmiSI/s220/profile-picture.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9194803383693725531.post-5277349447669994906</id><published>2007-06-12T19:04:00.000+03:00</published><updated>2007-06-12T19:07:28.587+03:00</updated><title type='text'>The World Leader in Evaporative Cooling?</title><content type='html'>It &lt;a href="http://www.google.com/search?hl=uk&amp;q=Adobe+AIR"&gt;was found&lt;/a&gt; that Adobe AIR is &lt;a href="http://www.adobeair.com/"&gt;The World Leader in Evaporative Cooling&lt;/a&gt;. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9194803383693725531-5277349447669994906?l=skovalyov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skovalyov.blogspot.com/feeds/5277349447669994906/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9194803383693725531&amp;postID=5277349447669994906' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9194803383693725531/posts/default/5277349447669994906'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9194803383693725531/posts/default/5277349447669994906'/><link rel='alternate' type='text/html' href='http://skovalyov.blogspot.com/2007/06/world-leader-in-evaporative-cooling.html' title='The World Leader in Evaporative Cooling?'/><author><name>Sergey Kovalyov</name><uri>http://www.blogger.com/profile/12977809674331642977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-KNlCi7ApyVY/ThtyH-7EguI/AAAAAAAAChI/g417ynqmiSI/s220/profile-picture.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9194803383693725531.post-282848000323410659</id><published>2007-04-24T13:39:00.000+02:00</published><updated>2007-04-24T17:25:31.920+02:00</updated><title type='text'>Constraint-based layout vs. nested layout containers</title><content type='html'>I have heard different opinions regarding what layout technique is better, though I would strongly recommend nested layout containers wherever it's possible. Sure, if you want your components to overlap each other, using Canvas is the only option, but don't use it when nested layout containers fit better:&lt;pre&gt;&lt;span style='color:#0057a6; '&gt;&amp;lt;&lt;/span&gt;&lt;span style='color:#0066ee; '&gt;mx&lt;/span&gt;&lt;span style='color:#406080; '&gt;:&lt;/span&gt;&lt;span style='color:#333385; '&gt;Canvas&lt;/span&gt; &lt;span style='color:#474796; '&gt;width&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;100%&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"&lt;/span&gt; &lt;span style='color:#474796; '&gt;height&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;50%&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"&lt;/span&gt;&lt;span style='color:#0057a6; '&gt;&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#0057a6; '&gt;&amp;lt;&lt;/span&gt;&lt;span style='color:#0066ee; '&gt;mx&lt;/span&gt;&lt;span style='color:#406080; '&gt;:&lt;/span&gt;&lt;span style='color:#333385; '&gt;TextInput&lt;/span&gt; &lt;span style='color:#474796; '&gt;id&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;myTextInput&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"&lt;/span&gt; &lt;span style='color:#474796; '&gt;x&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;10&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"&lt;/span&gt; &lt;span style='color:#474796; '&gt;y&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;10&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"&lt;/span&gt; &lt;span style='color:#0057a6; '&gt;/&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#0057a6; '&gt;&amp;lt;&lt;/span&gt;&lt;span style='color:#0066ee; '&gt;mx&lt;/span&gt;&lt;span style='color:#406080; '&gt;:&lt;/span&gt;&lt;span style='color:#333385; '&gt;TextArea&lt;/span&gt; &lt;span style='color:#474796; '&gt;id&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;myTextArea&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"&lt;/span&gt; &lt;span style='color:#474796; '&gt;x&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;10&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"&lt;/span&gt; &lt;span style='color:#474796; '&gt;y&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;{myTextInput.y + myTextInput.height + 10}&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"&lt;/span&gt; &lt;span style='color:#0057a6; '&gt;/&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#0057a6; '&gt;&amp;lt;&lt;/span&gt;&lt;span style='color:#0066ee; '&gt;mx&lt;/span&gt;&lt;span style='color:#406080; '&gt;:&lt;/span&gt;&lt;span style='color:#333385; '&gt;NumericStepper&lt;/span&gt; &lt;span style='color:#474796; '&gt;id&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;myNumericStepper&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"&lt;/span&gt; &lt;span style='color:#474796; '&gt;x&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;10&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"&lt;/span&gt; &lt;span style='color:#474796; '&gt;y&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;{myTextArea.y + myTextArea.height + 10}&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"&lt;/span&gt; &lt;span style='color:#0057a6; '&gt;/&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#0057a6; '&gt;&amp;lt;/&lt;/span&gt;&lt;span style='color:#0066ee; '&gt;mx&lt;/span&gt;&lt;span style='color:#406080; '&gt;:&lt;/span&gt;&lt;span style='color:#333385; '&gt;Canvas&lt;/span&gt;&lt;span style='color:#0057a6; '&gt;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;vs.&lt;br /&gt;&lt;pre&gt;&lt;span style='color:#0057a6; '&gt;&amp;lt;&lt;/span&gt;&lt;span style='color:#0066ee; '&gt;mx&lt;/span&gt;&lt;span style='color:#406080; '&gt;:&lt;/span&gt;&lt;span style='color:#333385; '&gt;VBox&lt;/span&gt; &lt;span style='color:#474796; '&gt;width&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;100%&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"&lt;/span&gt; &lt;span style='color:#474796; '&gt;height&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;50%&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"&lt;/span&gt; &lt;span style='color:#474796; '&gt;paddingLeft&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;10&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"&lt;/span&gt; &lt;span style='color:#474796; '&gt;paddingTop&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;10&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"&lt;/span&gt; &lt;span style='color:#474796; '&gt;verticalGap&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;10&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"&lt;/span&gt;&lt;span style='color:#0057a6; '&gt;&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#0057a6; '&gt;&amp;lt;&lt;/span&gt;&lt;span style='color:#0066ee; '&gt;mx&lt;/span&gt;&lt;span style='color:#406080; '&gt;:&lt;/span&gt;&lt;span style='color:#333385; '&gt;TextInput&lt;/span&gt; &lt;span style='color:#0057a6; '&gt;/&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#0057a6; '&gt;&amp;lt;&lt;/span&gt;&lt;span style='color:#0066ee; '&gt;mx&lt;/span&gt;&lt;span style='color:#406080; '&gt;:&lt;/span&gt;&lt;span style='color:#333385; '&gt;TextArea&lt;/span&gt; &lt;span style='color:#0057a6; '&gt;/&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#0057a6; '&gt;&amp;lt;&lt;/span&gt;&lt;span style='color:#0066ee; '&gt;mx&lt;/span&gt;&lt;span style='color:#406080; '&gt;:&lt;/span&gt;&lt;span style='color:#333385; '&gt;NumericStepper&lt;/span&gt; &lt;span style='color:#0057a6; '&gt;/&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#0057a6; '&gt;&amp;lt;/&lt;/span&gt;&lt;span style='color:#0066ee; '&gt;mx&lt;/span&gt;&lt;span style='color:#406080; '&gt;:&lt;/span&gt;&lt;span style='color:#333385; '&gt;VBox&lt;/span&gt;&lt;span style='color:#0057a6; '&gt;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The same result, but even in this very simple example the second option is much more laconic.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9194803383693725531-282848000323410659?l=skovalyov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skovalyov.blogspot.com/feeds/282848000323410659/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9194803383693725531&amp;postID=282848000323410659' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9194803383693725531/posts/default/282848000323410659'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9194803383693725531/posts/default/282848000323410659'/><link rel='alternate' type='text/html' href='http://skovalyov.blogspot.com/2007/04/constraint-based-layout-vs-nested.html' title='Constraint-based layout vs. nested layout containers'/><author><name>Sergey Kovalyov</name><uri>http://www.blogger.com/profile/12977809674331642977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-KNlCi7ApyVY/ThtyH-7EguI/AAAAAAAAChI/g417ynqmiSI/s220/profile-picture.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9194803383693725531.post-3100365365291515444</id><published>2007-02-17T23:46:00.000+02:00</published><updated>2007-02-19T17:23:40.872+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ActionScript'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><title type='text'>Text control with truncateToFit property support</title><content type='html'>As you probably know, Label control supports truncateToFit property, while Text doesn't. Even if you explicitly set it to true in your particular Text instance, nothing happens. I have created TruncatedText class that acts the similar way as Label does. If a TruncatedText instance is sized to be smaller than its text, the text is truncated with "...":&lt;br /&gt;&lt;pre&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;package&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;import&lt;/span&gt; mx&lt;span style='color:#308080; '&gt;.&lt;/span&gt;controls&lt;span style='color:#308080; '&gt;.&lt;/span&gt;Text&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;import&lt;/span&gt; mx&lt;span style='color:#308080; '&gt;.&lt;/span&gt;core&lt;span style='color:#308080; '&gt;.&lt;/span&gt;UITextField&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;import&lt;/span&gt; mx&lt;span style='color:#308080; '&gt;.&lt;/span&gt;core&lt;span style='color:#308080; '&gt;.&lt;/span&gt;mx_internal&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    use namespace mx_internal&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;public&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;class&lt;/span&gt; TruncatedText &lt;span style='color:#200080; font-weight:bold; '&gt;extends&lt;/span&gt; Text &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;protected&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;static&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;const&lt;/span&gt; TRUNCATION_INDICATOR &lt;span style='color:#406080; '&gt;:&lt;/span&gt; String &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#1060b6; '&gt;"..."&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;public&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;function&lt;/span&gt; TruncatedText&lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#200080; font-weight:bold; '&gt;super&lt;/span&gt;&lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;            &lt;br /&gt;            truncateToFit &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#0f4d75; '&gt;true&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        override &lt;span style='color:#200080; font-weight:bold; '&gt;public&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;function&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;set&lt;/span&gt; text&lt;span style='color:#308080; '&gt;(&lt;/span&gt;text &lt;span style='color:#406080; '&gt;:&lt;/span&gt; String&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;:&lt;/span&gt; void &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;            _isHTML &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#0f4d75; '&gt;false&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;            &lt;span style='color:#200080; font-weight:bold; '&gt;super&lt;/span&gt;&lt;span style='color:#308080; '&gt;.&lt;/span&gt;text &lt;span style='color:#308080; '&gt;=&lt;/span&gt; text&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        override &lt;span style='color:#200080; font-weight:bold; '&gt;public&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;function&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;set&lt;/span&gt; htmlText&lt;span style='color:#308080; '&gt;(&lt;/span&gt;htmlText &lt;span style='color:#406080; '&gt;:&lt;/span&gt; String&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;:&lt;/span&gt; void &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;            _isHTML &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#0f4d75; '&gt;true&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;             &lt;span style='color:#200080; font-weight:bold; '&gt;super&lt;/span&gt;&lt;span style='color:#308080; '&gt;.&lt;/span&gt;htmlText &lt;span style='color:#308080; '&gt;=&lt;/span&gt; htmlText&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;protected&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;function&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;get&lt;/span&gt; truncationRequired&lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;:&lt;/span&gt; Boolean &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#200080; font-weight:bold; '&gt;return&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;textField&lt;span style='color:#308080; '&gt;.&lt;/span&gt;height &lt;span style='color:#308080; '&gt;&amp;lt;&lt;/span&gt; textField&lt;span style='color:#308080; '&gt;.&lt;/span&gt;textHeight &lt;span style='color:#308080; '&gt;+&lt;/span&gt; UITextField&lt;span style='color:#308080; '&gt;.&lt;/span&gt;TEXT_HEIGHT_PADDING&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        override &lt;span style='color:#200080; font-weight:bold; '&gt;protected&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;function&lt;/span&gt; updateDisplayList&lt;span style='color:#308080; '&gt;(&lt;/span&gt;w &lt;span style='color:#406080; '&gt;:&lt;/span&gt; &lt;span style='color:#007d45; '&gt;Number&lt;/span&gt;&lt;span style='color:#308080; '&gt;,&lt;/span&gt; h &lt;span style='color:#406080; '&gt;:&lt;/span&gt; &lt;span style='color:#007d45; '&gt;Number&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;:&lt;/span&gt; void &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#200080; font-weight:bold; '&gt;super&lt;/span&gt;&lt;span style='color:#308080; '&gt;.&lt;/span&gt;updateDisplayList&lt;span style='color:#308080; '&gt;(&lt;/span&gt;w&lt;span style='color:#308080; '&gt;,&lt;/span&gt; h&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;            &lt;br /&gt;            &lt;span style='color:#200080; font-weight:bold; '&gt;if&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;truncateToFit&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#200080; font-weight:bold; '&gt;if&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;!_isHTML&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;                    &lt;span style='color:#200080; font-weight:bold; '&gt;var&lt;/span&gt; originalText &lt;span style='color:#406080; '&gt;:&lt;/span&gt; String &lt;span style='color:#308080; '&gt;=&lt;/span&gt; textField&lt;span style='color:#308080; '&gt;.&lt;/span&gt;text &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;super&lt;/span&gt;&lt;span style='color:#308080; '&gt;.&lt;/span&gt;text&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;                    &lt;span style='color:#200080; font-weight:bold; '&gt;if&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;truncationRequired&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;                        &lt;span style='color:#200080; font-weight:bold; '&gt;var&lt;/span&gt; l &lt;span style='color:#406080; '&gt;:&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;int&lt;/span&gt; &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#008c00; '&gt;0&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;                        &lt;span style='color:#200080; font-weight:bold; '&gt;var&lt;/span&gt; r &lt;span style='color:#406080; '&gt;:&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;int&lt;/span&gt; &lt;span style='color:#308080; '&gt;=&lt;/span&gt; textField&lt;span style='color:#308080; '&gt;.&lt;/span&gt;text&lt;span style='color:#308080; '&gt;.&lt;/span&gt;length&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;                        &lt;span style='color:#200080; font-weight:bold; '&gt;while&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;r &lt;span style='color:#308080; '&gt;-&lt;/span&gt; l &lt;span style='color:#308080; '&gt;&gt;&lt;/span&gt; &lt;span style='color:#008c00; '&gt;1&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;                            &lt;span style='color:#200080; font-weight:bold; '&gt;var&lt;/span&gt; median &lt;span style='color:#406080; '&gt;:&lt;/span&gt; &lt;span style='color:#007d45; '&gt;Number&lt;/span&gt; &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#007d45; '&gt;Math&lt;/span&gt;&lt;span style='color:#308080; '&gt;.&lt;/span&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;floor&lt;/span&gt;&lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#308080; '&gt;(&lt;/span&gt;l &lt;span style='color:#308080; '&gt;+&lt;/span&gt; r&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#800000; '&gt;/&lt;/span&gt;&lt;span style='color:#1060b6; '&gt; 2);&lt;/span&gt;&lt;br /&gt;                            textField&lt;span style='color:#308080; '&gt;.&lt;/span&gt;text &lt;span style='color:#308080; '&gt;=&lt;/span&gt; originalText&lt;span style='color:#308080; '&gt;.&lt;/span&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;substr&lt;/span&gt;&lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#008c00; '&gt;0&lt;/span&gt;&lt;span style='color:#308080; '&gt;,&lt;/span&gt; median&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#308080; '&gt;+&lt;/span&gt; TRUNCATION_INDICATOR&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;                            &lt;span style='color:#200080; font-weight:bold; '&gt;if&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;truncationRequired&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;                                r &lt;span style='color:#308080; '&gt;=&lt;/span&gt; median&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;                            &lt;span style='color:#406080; '&gt;}&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;else&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;                                l &lt;span style='color:#308080; '&gt;=&lt;/span&gt; median&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;                            &lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;                        &lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;                        &lt;span style='color:#200080; font-weight:bold; '&gt;while&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;truncationRequired &lt;span style='color:#308080; '&gt;&amp;amp;&amp;amp;&lt;/span&gt; median &lt;span style='color:#308080; '&gt;&gt;&lt;/span&gt; &lt;span style='color:#008c00; '&gt;0&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;                            median&lt;span style='color:#308080; '&gt;--&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;                            textField&lt;span style='color:#308080; '&gt;.&lt;/span&gt;text &lt;span style='color:#308080; '&gt;=&lt;/span&gt; originalText&lt;span style='color:#308080; '&gt;.&lt;/span&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;substr&lt;/span&gt;&lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#008c00; '&gt;0&lt;/span&gt;&lt;span style='color:#308080; '&gt;,&lt;/span&gt; median&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#308080; '&gt;+&lt;/span&gt; TRUNCATION_INDICATOR&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;                        &lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;                    &lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;            &lt;br /&gt;        &lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;private&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;var&lt;/span&gt; _isHTML &lt;span style='color:#406080; '&gt;:&lt;/span&gt; Boolean&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;    &lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9194803383693725531-3100365365291515444?l=skovalyov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skovalyov.blogspot.com/feeds/3100365365291515444/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9194803383693725531&amp;postID=3100365365291515444' title='31 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9194803383693725531/posts/default/3100365365291515444'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9194803383693725531/posts/default/3100365365291515444'/><link rel='alternate' type='text/html' href='http://skovalyov.blogspot.com/2007/02/text-control-with-truncatetofit.html' title='Text control with truncateToFit property support'/><author><name>Sergey Kovalyov</name><uri>http://www.blogger.com/profile/12977809674331642977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-KNlCi7ApyVY/ThtyH-7EguI/AAAAAAAAChI/g417ynqmiSI/s220/profile-picture.jpg'/></author><thr:total>31</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9194803383693725531.post-4956452197458900201</id><published>2007-01-10T12:01:00.001+02:00</published><updated>2007-01-19T20:29:07.451+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ActionScript'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><title type='text'>How to prevent pop-up blocking in Firefox</title><content type='html'>Using navigateToURL() method causes pop-up blocking feature activation in Firefox since Flash is a plug-in:&lt;br /&gt;&lt;pre&gt;navigateToURL&lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;new&lt;/span&gt; URLRequest&lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"http://http://skovalyov.blogspot.com/"&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#308080; '&gt;,&lt;/span&gt; &lt;span style='color:#1060b6; '&gt;"_blank"&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;Use window.open() JavaScript method instead. I have created URLUtil class with openWindow() static method to make it easier:&lt;br /&gt;&lt;pre&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;package&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;import&lt;/span&gt; flash&lt;span style='color:#308080; '&gt;.&lt;/span&gt;external&lt;span style='color:#308080; '&gt;.&lt;/span&gt;ExternalInterface&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;public&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;class&lt;/span&gt; URLUtil    &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;protected&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;static&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;const&lt;/span&gt; WINDOW_OPEN_FUNCTION &lt;span style='color:#406080; '&gt;:&lt;/span&gt; String &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#1060b6; '&gt;"window.open"&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;public&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;static&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;function&lt;/span&gt; openWindow&lt;span style='color:#308080; '&gt;(&lt;/span&gt;url &lt;span style='color:#406080; '&gt;:&lt;/span&gt; String&lt;span style='color:#308080; '&gt;,&lt;/span&gt; window &lt;span style='color:#406080; '&gt;:&lt;/span&gt; String &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#1060b6; '&gt;"_blank"&lt;/span&gt;&lt;span style='color:#308080; '&gt;,&lt;/span&gt; features &lt;span style='color:#406080; '&gt;:&lt;/span&gt; String &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#1060b6; '&gt;""&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;:&lt;/span&gt; void &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;            ExternalInterface&lt;span style='color:#308080; '&gt;.&lt;/span&gt;call&lt;span style='color:#308080; '&gt;(&lt;/span&gt;WINDOW_OPEN_FUNCTION&lt;span style='color:#308080; '&gt;,&lt;/span&gt; url&lt;span style='color:#308080; '&gt;,&lt;/span&gt; window&lt;span style='color:#308080; '&gt;,&lt;/span&gt; features&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;Now my blog could be opened in a new browser window this way:&lt;br /&gt;&lt;pre&gt;URLUtil&lt;span style='color:#308080; '&gt;.&lt;/span&gt;openWindow&lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"http://skovalyov.blogspot.com/"&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9194803383693725531-4956452197458900201?l=skovalyov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skovalyov.blogspot.com/feeds/4956452197458900201/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9194803383693725531&amp;postID=4956452197458900201' title='43 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9194803383693725531/posts/default/4956452197458900201'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9194803383693725531/posts/default/4956452197458900201'/><link rel='alternate' type='text/html' href='http://skovalyov.blogspot.com/2007/01/how-to-prevent-pop-up-blocking-in.html' title='How to prevent pop-up blocking in Firefox'/><author><name>Sergey Kovalyov</name><uri>http://www.blogger.com/profile/12977809674331642977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-KNlCi7ApyVY/ThtyH-7EguI/AAAAAAAAChI/g417ynqmiSI/s220/profile-picture.jpg'/></author><thr:total>43</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9194803383693725531.post-1668869788128231310</id><published>2007-01-09T13:51:00.000+02:00</published><updated>2007-01-09T23:40:44.915+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ActionScript'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><title type='text'>Left aligned label in FormItem</title><content type='html'>FormItem class doesn't have any styles or properties to control corresponding label alignment. Right alignment is applied by default and it's good idea to keep it "as is", because &lt;a href="http://jroller.com/page/microarchitect?entry=why_you_should_right_align"&gt;some usability researches&lt;/a&gt; say it's more friendly for user. Though if you want to make your FormItem label left aligned, use ExtendedFormItem class instead of regular FormItem:&lt;br /&gt;&lt;pre&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;package&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;import&lt;/span&gt; flash&lt;span style='color:#308080; '&gt;.&lt;/span&gt;display&lt;span style='color:#308080; '&gt;.&lt;/span&gt;DisplayObject&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;import&lt;/span&gt; mx&lt;span style='color:#308080; '&gt;.&lt;/span&gt;containers&lt;span style='color:#308080; '&gt;.&lt;/span&gt;FormItem&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;import&lt;/span&gt; mx&lt;span style='color:#308080; '&gt;.&lt;/span&gt;controls&lt;span style='color:#308080; '&gt;.&lt;/span&gt;Label&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;import&lt;/span&gt; mx&lt;span style='color:#308080; '&gt;.&lt;/span&gt;styles&lt;span style='color:#308080; '&gt;.&lt;/span&gt;CSSStyleDeclaration&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;import&lt;/span&gt; mx&lt;span style='color:#308080; '&gt;.&lt;/span&gt;styles&lt;span style='color:#308080; '&gt;.&lt;/span&gt;StyleManager&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style='color:#308080; '&gt;[&lt;/span&gt;Style&lt;span style='color:#308080; '&gt;(&lt;/span&gt;name&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"labelAlign"&lt;/span&gt;&lt;span style='color:#308080; '&gt;,&lt;/span&gt; type&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"String"&lt;/span&gt;&lt;span style='color:#308080; '&gt;,&lt;/span&gt; enumeration&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"left,right"&lt;/span&gt;&lt;span style='color:#308080; '&gt;,&lt;/span&gt; inherit&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"no"&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#308080; '&gt;]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;public&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;class&lt;/span&gt; ExtendedFormItem &lt;span style='color:#200080; font-weight:bold; '&gt;extends&lt;/span&gt; FormItem &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;private&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;static&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;const&lt;/span&gt; CLASS_NAME &lt;span style='color:#406080; '&gt;:&lt;/span&gt; String &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#1060b6; '&gt;"ExtendedFormItem"&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;private&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;static&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;var&lt;/span&gt; classConstructed &lt;span style='color:#406080; '&gt;:&lt;/span&gt; Boolean &lt;span style='color:#308080; '&gt;=&lt;/span&gt; staticConstructor&lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;private&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;static&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;function&lt;/span&gt; staticConstructor&lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;:&lt;/span&gt; Boolean &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#200080; font-weight:bold; '&gt;if&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;!StyleManager&lt;span style='color:#308080; '&gt;.&lt;/span&gt;getStyleDeclaration&lt;span style='color:#308080; '&gt;(&lt;/span&gt;CLASS_NAME&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#200080; font-weight:bold; '&gt;var&lt;/span&gt; newStyleDeclaration &lt;span style='color:#406080; '&gt;:&lt;/span&gt; CSSStyleDeclaration &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;new&lt;/span&gt; CSSStyleDeclaration&lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;                newStyleDeclaration&lt;span style='color:#308080; '&gt;.&lt;/span&gt;setStyle&lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"labelAlign"&lt;/span&gt;&lt;span style='color:#308080; '&gt;,&lt;/span&gt; &lt;span style='color:#1060b6; '&gt;"left"&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;                StyleManager&lt;span style='color:#308080; '&gt;.&lt;/span&gt;setStyleDeclaration&lt;span style='color:#308080; '&gt;(&lt;/span&gt;CLASS_NAME&lt;span style='color:#308080; '&gt;,&lt;/span&gt; newStyleDeclaration&lt;span style='color:#308080; '&gt;,&lt;/span&gt; &lt;span style='color:#0f4d75; '&gt;true&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#200080; font-weight:bold; '&gt;return&lt;/span&gt; &lt;span style='color:#0f4d75; '&gt;true&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        override &lt;span style='color:#200080; font-weight:bold; '&gt;public&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;function&lt;/span&gt; styleChanged&lt;span style='color:#308080; '&gt;(&lt;/span&gt;styleProp &lt;span style='color:#406080; '&gt;:&lt;/span&gt; String&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;:&lt;/span&gt; void &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#200080; font-weight:bold; '&gt;super&lt;/span&gt;&lt;span style='color:#308080; '&gt;.&lt;/span&gt;styleChanged&lt;span style='color:#308080; '&gt;(&lt;/span&gt;styleProp&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#200080; font-weight:bold; '&gt;switch&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;styleProp&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#200080; font-weight:bold; '&gt;case&lt;/span&gt; &lt;span style='color:#1060b6; '&gt;"labelAlign"&lt;/span&gt; &lt;span style='color:#406080; '&gt;:&lt;/span&gt;&lt;br /&gt;                    invalidateDisplayList&lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;                    &lt;span style='color:#200080; font-weight:bold; '&gt;break&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        override &lt;span style='color:#200080; font-weight:bold; '&gt;protected&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;function&lt;/span&gt; updateDisplayList&lt;span style='color:#308080; '&gt;(&lt;/span&gt;w &lt;span style='color:#406080; '&gt;:&lt;/span&gt; &lt;span style='color:#007d45; '&gt;Number&lt;/span&gt;&lt;span style='color:#308080; '&gt;,&lt;/span&gt; h &lt;span style='color:#406080; '&gt;:&lt;/span&gt; &lt;span style='color:#007d45; '&gt;Number&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;:&lt;/span&gt; void &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#200080; font-weight:bold; '&gt;super&lt;/span&gt;&lt;span style='color:#308080; '&gt;.&lt;/span&gt;updateDisplayList&lt;span style='color:#308080; '&gt;(&lt;/span&gt;w&lt;span style='color:#308080; '&gt;,&lt;/span&gt; h&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#200080; font-weight:bold; '&gt;if&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;label&lt;span style='color:#308080; '&gt;.&lt;/span&gt;length &lt;span style='color:#308080; '&gt;&gt;&lt;/span&gt; &lt;span style='color:#008c00; '&gt;0&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#200080; font-weight:bold; '&gt;var&lt;/span&gt; labelAlign &lt;span style='color:#406080; '&gt;:&lt;/span&gt; String &lt;span style='color:#308080; '&gt;=&lt;/span&gt; getStyle&lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"labelAlign"&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#200080; font-weight:bold; '&gt;var&lt;/span&gt; labelIndex &lt;span style='color:#406080; '&gt;:&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;int&lt;/span&gt; &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;required &lt;span style='color:#406080; '&gt;?&lt;/span&gt; rawChildren&lt;span style='color:#308080; '&gt;.&lt;/span&gt;numChildren &lt;span style='color:#308080; '&gt;-&lt;/span&gt; &lt;span style='color:#008c00; '&gt;2&lt;/span&gt; &lt;span style='color:#406080; '&gt;:&lt;/span&gt; rawChildren&lt;span style='color:#308080; '&gt;.&lt;/span&gt;numChildren &lt;span style='color:#308080; '&gt;-&lt;/span&gt; &lt;span style='color:#008c00; '&gt;1&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#200080; font-weight:bold; '&gt;var&lt;/span&gt; label &lt;span style='color:#406080; '&gt;:&lt;/span&gt; Label &lt;span style='color:#308080; '&gt;=&lt;/span&gt; Label&lt;span style='color:#308080; '&gt;(&lt;/span&gt;rawChildren&lt;span style='color:#308080; '&gt;.&lt;/span&gt;getChildAt&lt;span style='color:#308080; '&gt;(&lt;/span&gt;labelIndex&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#200080; font-weight:bold; '&gt;if&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;labelAlign &lt;span style='color:#308080; '&gt;==&lt;/span&gt; &lt;span style='color:#1060b6; '&gt;"left"&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;                    label&lt;span style='color:#308080; '&gt;.&lt;/span&gt;x &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#008c00; '&gt;0&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;                    &lt;span style='color:#200080; font-weight:bold; '&gt;if&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;required&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;                        &lt;span style='color:#200080; font-weight:bold; '&gt;var&lt;/span&gt; indicator &lt;span style='color:#406080; '&gt;:&lt;/span&gt; DisplayObject &lt;span style='color:#308080; '&gt;=&lt;/span&gt; rawChildren&lt;span style='color:#308080; '&gt;.&lt;/span&gt;getChildAt&lt;span style='color:#308080; '&gt;(&lt;/span&gt;rawChildren&lt;span style='color:#308080; '&gt;.&lt;/span&gt;numChildren &lt;span style='color:#308080; '&gt;-&lt;/span&gt; &lt;span style='color:#008c00; '&gt;1&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;                        indicator&lt;span style='color:#308080; '&gt;.&lt;/span&gt;x &lt;span style='color:#308080; '&gt;=&lt;/span&gt; label&lt;span style='color:#308080; '&gt;.&lt;/span&gt;width &lt;span style='color:#308080; '&gt;+&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#308080; '&gt;(&lt;/span&gt;getStyle&lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"indicatorGap"&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#308080; '&gt;-&lt;/span&gt; indicator&lt;span style='color:#308080; '&gt;.&lt;/span&gt;width&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#800000; '&gt;/&lt;/span&gt;&lt;span style='color:#1060b6; '&gt; 2);&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#1060b6; '&gt;                    }&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#1060b6; '&gt;                }&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#1060b6; '&gt;            }&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#1060b6; '&gt;        }&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#1060b6; '&gt;        &lt;/span&gt;&lt;br /&gt;&lt;span style='color:#1060b6; '&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#1060b6; '&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#1060b6; '&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;ExtendedFormItem label is left aligned by default, but you can set labelAlign style to "right" if necessary.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9194803383693725531-1668869788128231310?l=skovalyov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skovalyov.blogspot.com/feeds/1668869788128231310/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9194803383693725531&amp;postID=1668869788128231310' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9194803383693725531/posts/default/1668869788128231310'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9194803383693725531/posts/default/1668869788128231310'/><link rel='alternate' type='text/html' href='http://skovalyov.blogspot.com/2007/01/left-aligned-label-in-formitem.html' title='Left aligned label in FormItem'/><author><name>Sergey Kovalyov</name><uri>http://www.blogger.com/profile/12977809674331642977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-KNlCi7ApyVY/ThtyH-7EguI/AAAAAAAAChI/g417ynqmiSI/s220/profile-picture.jpg'/></author><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9194803383693725531.post-6130771152410409962</id><published>2007-01-02T16:48:00.000+02:00</published><updated>2007-01-04T11:57:01.371+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ActionScript'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><title type='text'>Invalidation mechanism for non-UI classes</title><content type='html'>Invalidation mechanism is very useful to synchronize modifications to components. Though it's "built-in" in UIComponent and its successors, sometimes you need it in non-UI classes. I have created InvalidatingEventDispatcher abstract class inherited from EventDispatcher for this purpose. Just call invalidateProperties() whenever you want to mark your class instance so that its commitProperties() method gets called during the next timer tick (1 sec / frame rate). Override commitProperties() in your particular subclass implementation as well. Use validateNow() method to force validation.&lt;pre&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;package&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;import&lt;/span&gt; flash&lt;span style='color:#308080; '&gt;.&lt;/span&gt;events&lt;span style='color:#308080; '&gt;.&lt;/span&gt;EventDispatcher&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;import&lt;/span&gt; flash&lt;span style='color:#308080; '&gt;.&lt;/span&gt;events&lt;span style='color:#308080; '&gt;.&lt;/span&gt;IEventDispatcher&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;import&lt;/span&gt; flash&lt;span style='color:#308080; '&gt;.&lt;/span&gt;events&lt;span style='color:#308080; '&gt;.&lt;/span&gt;TimerEvent&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;import&lt;/span&gt; flash&lt;span style='color:#308080; '&gt;.&lt;/span&gt;utils&lt;span style='color:#308080; '&gt;.&lt;/span&gt;Timer&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;public&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;class&lt;/span&gt; InvalidatingEventDispatcher &lt;span style='color:#200080; font-weight:bold; '&gt;extends&lt;/span&gt; EventDispatcher &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;protected&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;var&lt;/span&gt; timer &lt;span style='color:#406080; '&gt;:&lt;/span&gt; Timer&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;public&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;function&lt;/span&gt; InvalidatingEventDispatcher&lt;span style='color:#308080; '&gt;(&lt;/span&gt;target &lt;span style='color:#406080; '&gt;:&lt;/span&gt; IEventDispatcher &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#0f4d75; '&gt;null&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#200080; font-weight:bold; '&gt;super&lt;/span&gt;&lt;span style='color:#308080; '&gt;(&lt;/span&gt;target&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;            &lt;br /&gt;            timer &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;new&lt;/span&gt; Timer&lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#008c00; '&gt;1&lt;/span&gt;&lt;span style='color:#308080; '&gt;,&lt;/span&gt; &lt;span style='color:#008c00; '&gt;1&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;            timer&lt;span style='color:#308080; '&gt;.&lt;/span&gt;addEventListener&lt;span style='color:#308080; '&gt;(&lt;/span&gt;TimerEvent&lt;span style='color:#308080; '&gt;.&lt;/span&gt;TIMER_COMPLETE&lt;span style='color:#308080; '&gt;,&lt;/span&gt; onTimerComplete&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;public&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;function&lt;/span&gt; validateNow&lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;:&lt;/span&gt; void &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;            validateProperties&lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;public&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;function&lt;/span&gt; validateProperties&lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;:&lt;/span&gt; void &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#200080; font-weight:bold; '&gt;if&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;timer&lt;span style='color:#308080; '&gt;.&lt;/span&gt;running&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;                commitProperties&lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;                timer&lt;span style='color:#308080; '&gt;.&lt;/span&gt;stop&lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;public&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;function&lt;/span&gt; invalidateProperties&lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;:&lt;/span&gt; void &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#200080; font-weight:bold; '&gt;if&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;!timer&lt;span style='color:#308080; '&gt;.&lt;/span&gt;running&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;                timer&lt;span style='color:#308080; '&gt;.&lt;/span&gt;start&lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;protected&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;function&lt;/span&gt; commitProperties&lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;:&lt;/span&gt; void &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;private&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;function&lt;/span&gt; onTimerComplete&lt;span style='color:#308080; '&gt;(&lt;/span&gt;event &lt;span style='color:#406080; '&gt;:&lt;/span&gt; TimerEvent&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;:&lt;/span&gt; void &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;            commitProperties&lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#406080; '&gt;}&lt;/span&gt;        &lt;br /&gt;        &lt;br /&gt;    &lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9194803383693725531-6130771152410409962?l=skovalyov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skovalyov.blogspot.com/feeds/6130771152410409962/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9194803383693725531&amp;postID=6130771152410409962' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9194803383693725531/posts/default/6130771152410409962'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9194803383693725531/posts/default/6130771152410409962'/><link rel='alternate' type='text/html' href='http://skovalyov.blogspot.com/2007/01/invalidation-mechanism-for-non-ui.html' title='Invalidation mechanism for non-UI classes'/><author><name>Sergey Kovalyov</name><uri>http://www.blogger.com/profile/12977809674331642977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-KNlCi7ApyVY/ThtyH-7EguI/AAAAAAAAChI/g417ynqmiSI/s220/profile-picture.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9194803383693725531.post-6166103566609842487</id><published>2006-12-28T18:38:00.000+02:00</published><updated>2007-01-02T14:44:45.683+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ActionScript'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><title type='text'>Singleton in ActionScript 3.0</title><content type='html'>There are some ways to create singleton in ActionScript 3.0, though I prefer public "facade" with static initialization of internal class:&lt;br /&gt;&lt;pre&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;package&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;public&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;class&lt;/span&gt; AuthenticationManager &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;public&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;static&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;var&lt;/span&gt; instance &lt;span style='color:#406080; '&gt;:&lt;/span&gt; AuthenticationManagerInstance &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;new&lt;/span&gt; AuthenticationManagerInstance&lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;    &lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;&lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;Internal class (it should be in the same package with "facade"):&lt;br /&gt;&lt;pre&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;package&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;    internal &lt;span style='color:#200080; font-weight:bold; '&gt;class&lt;/span&gt; AuthenticationManagerInstance &lt;span style='color:#200080; font-weight:bold; '&gt;extends&lt;/span&gt; EventDispatcher &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;public&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;function&lt;/span&gt; AuthenticationManagerInstance&lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#200080; font-weight:bold; '&gt;super&lt;/span&gt;&lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;public&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;function&lt;/span&gt; authenticate&lt;span style='color:#308080; '&gt;(&lt;/span&gt;username &lt;span style='color:#406080; '&gt;:&lt;/span&gt; String&lt;span style='color:#308080; '&gt;,&lt;/span&gt; password &lt;span style='color:#406080; '&gt;:&lt;/span&gt; String&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;:&lt;/span&gt; void &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#595979; '&gt;// Authentication routine&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;                &lt;br /&gt;    &lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;Usage example:&lt;br /&gt;&lt;pre&gt;AuthenticationManager&lt;span style='color:#308080; '&gt;.&lt;/span&gt;instance&lt;span style='color:#308080; '&gt;.&lt;/span&gt;authenticate&lt;span style='color:#308080; '&gt;(&lt;/span&gt;usernameTextInput&lt;span style='color:#308080; '&gt;.&lt;/span&gt;text&lt;span style='color:#308080; '&gt;,&lt;/span&gt; passwordTextInput&lt;span style='color:#308080; '&gt;.&lt;/span&gt;text&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9194803383693725531-6166103566609842487?l=skovalyov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skovalyov.blogspot.com/feeds/6166103566609842487/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9194803383693725531&amp;postID=6166103566609842487' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9194803383693725531/posts/default/6166103566609842487'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9194803383693725531/posts/default/6166103566609842487'/><link rel='alternate' type='text/html' href='http://skovalyov.blogspot.com/2006/12/there-are-some-ways-to-create-singleton.html' title='Singleton in ActionScript 3.0'/><author><name>Sergey Kovalyov</name><uri>http://www.blogger.com/profile/12977809674331642977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-KNlCi7ApyVY/ThtyH-7EguI/AAAAAAAAChI/g417ynqmiSI/s220/profile-picture.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9194803383693725531.post-5740316193342887285</id><published>2006-12-27T19:30:00.000+02:00</published><updated>2006-12-27T23:37:46.299+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ActionScript'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><title type='text'>Make the focused child visible!</title><content type='html'>Probably, one of the most annoying thing about Flex is lack of "browser native" features support. For example, if you have scrollable container it doesn't scroll its content upon Tab button click to make the focused child visible. However, browser do this! I have created easy to use class AutoScrollManager that makes it possible in Flex:&lt;br /&gt;&lt;pre&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;package&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;import&lt;/span&gt; flash&lt;span style='color:#308080; '&gt;.&lt;/span&gt;display&lt;span style='color:#308080; '&gt;.&lt;/span&gt;InteractiveObject&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;import&lt;/span&gt; flash&lt;span style='color:#308080; '&gt;.&lt;/span&gt;events&lt;span style='color:#308080; '&gt;.&lt;/span&gt;EventDispatcher&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;import&lt;/span&gt; flash&lt;span style='color:#308080; '&gt;.&lt;/span&gt;events&lt;span style='color:#308080; '&gt;.&lt;/span&gt;FocusEvent&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;import&lt;/span&gt; flash&lt;span style='color:#308080; '&gt;.&lt;/span&gt;events&lt;span style='color:#308080; '&gt;.&lt;/span&gt;TimerEvent&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;import&lt;/span&gt; flash&lt;span style='color:#308080; '&gt;.&lt;/span&gt;geom&lt;span style='color:#308080; '&gt;.&lt;/span&gt;Point&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;import&lt;/span&gt; flash&lt;span style='color:#308080; '&gt;.&lt;/span&gt;utils&lt;span style='color:#308080; '&gt;.&lt;/span&gt;Timer&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;import&lt;/span&gt; mx&lt;span style='color:#308080; '&gt;.&lt;/span&gt;collections&lt;span style='color:#308080; '&gt;.&lt;/span&gt;ArrayCollection&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;import&lt;/span&gt; mx&lt;span style='color:#308080; '&gt;.&lt;/span&gt;core&lt;span style='color:#308080; '&gt;.&lt;/span&gt;Application&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;import&lt;/span&gt; mx&lt;span style='color:#308080; '&gt;.&lt;/span&gt;core&lt;span style='color:#308080; '&gt;.&lt;/span&gt;Container&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;import&lt;/span&gt; mx&lt;span style='color:#308080; '&gt;.&lt;/span&gt;core&lt;span style='color:#308080; '&gt;.&lt;/span&gt;EdgeMetrics&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;import&lt;/span&gt; mx&lt;span style='color:#308080; '&gt;.&lt;/span&gt;core&lt;span style='color:#308080; '&gt;.&lt;/span&gt;IFlexDisplayObject&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;import&lt;/span&gt; mx&lt;span style='color:#308080; '&gt;.&lt;/span&gt;core&lt;span style='color:#308080; '&gt;.&lt;/span&gt;IMXMLObject&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;import&lt;/span&gt; mx&lt;span style='color:#308080; '&gt;.&lt;/span&gt;core&lt;span style='color:#308080; '&gt;.&lt;/span&gt;UIComponent&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;import&lt;/span&gt; mx&lt;span style='color:#308080; '&gt;.&lt;/span&gt;core&lt;span style='color:#308080; '&gt;.&lt;/span&gt;UITextField&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;public&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;class&lt;/span&gt; AutoScrollManager &lt;span style='color:#200080; font-weight:bold; '&gt;extends&lt;/span&gt; EventDispatcher &lt;span style='color:#200080; font-weight:bold; '&gt;implements&lt;/span&gt; IMXMLObject &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;protected&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;static&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;const&lt;/span&gt; NEXT_FRAME_TIME &lt;span style='color:#406080; '&gt;:&lt;/span&gt; &lt;span style='color:#007d45; '&gt;Number&lt;/span&gt; &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#008c00; '&gt;1&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;public&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;function&lt;/span&gt; AutoScrollManager&lt;span style='color:#308080; '&gt;(&lt;/span&gt;target &lt;span style='color:#406080; '&gt;:&lt;/span&gt; IFlexDisplayObject &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#0f4d75; '&gt;null&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#200080; font-weight:bold; '&gt;super&lt;/span&gt;&lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;            _timer &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;new&lt;/span&gt; Timer&lt;span style='color:#308080; '&gt;(&lt;/span&gt;NEXT_FRAME_TIME&lt;span style='color:#308080; '&gt;,&lt;/span&gt; &lt;span style='color:#008c00; '&gt;1&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;            _timer&lt;span style='color:#308080; '&gt;.&lt;/span&gt;addEventListener&lt;span style='color:#308080; '&gt;(&lt;/span&gt;TimerEvent&lt;span style='color:#308080; '&gt;.&lt;/span&gt;TIMER_COMPLETE&lt;span style='color:#308080; '&gt;,&lt;/span&gt; onTimerComplete&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;public&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;function&lt;/span&gt; initialized&lt;span style='color:#308080; '&gt;(&lt;/span&gt;document &lt;span style='color:#406080; '&gt;:&lt;/span&gt; &lt;span style='color:#007d45; '&gt;Object&lt;/span&gt;&lt;span style='color:#308080; '&gt;,&lt;/span&gt; id &lt;span style='color:#406080; '&gt;:&lt;/span&gt; String&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;:&lt;/span&gt; void &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;            _document &lt;span style='color:#308080; '&gt;=&lt;/span&gt; document &lt;span style='color:#406080; '&gt;?&lt;/span&gt; IFlexDisplayObject&lt;span style='color:#308080; '&gt;(&lt;/span&gt;document&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;:&lt;/span&gt; IFlexDisplayObject&lt;span style='color:#308080; '&gt;(&lt;/span&gt;Application&lt;span style='color:#308080; '&gt;.&lt;/span&gt;application&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;public&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;function&lt;/span&gt; addInstance&lt;span style='color:#308080; '&gt;(&lt;/span&gt;container &lt;span style='color:#406080; '&gt;:&lt;/span&gt; Container&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;:&lt;/span&gt; void &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#200080; font-weight:bold; '&gt;if&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;!_containers&lt;span style='color:#308080; '&gt;.&lt;/span&gt;contains&lt;span style='color:#308080; '&gt;(&lt;/span&gt;container&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;                container&lt;span style='color:#308080; '&gt;.&lt;/span&gt;addEventListener&lt;span style='color:#308080; '&gt;(&lt;/span&gt;FocusEvent&lt;span style='color:#308080; '&gt;.&lt;/span&gt;FOCUS_IN&lt;span style='color:#308080; '&gt;,&lt;/span&gt; onContainerFocusIn&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;                _containers&lt;span style='color:#308080; '&gt;.&lt;/span&gt;addItem&lt;span style='color:#308080; '&gt;(&lt;/span&gt;container&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;public&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;function&lt;/span&gt; removeInstance&lt;span style='color:#308080; '&gt;(&lt;/span&gt;container &lt;span style='color:#406080; '&gt;:&lt;/span&gt; Container&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;:&lt;/span&gt; void &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#200080; font-weight:bold; '&gt;if&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;_containers&lt;span style='color:#308080; '&gt;.&lt;/span&gt;contains&lt;span style='color:#308080; '&gt;(&lt;/span&gt;container&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;                container&lt;span style='color:#308080; '&gt;.&lt;/span&gt;removeEventListener&lt;span style='color:#308080; '&gt;(&lt;/span&gt;FocusEvent&lt;span style='color:#308080; '&gt;.&lt;/span&gt;FOCUS_IN&lt;span style='color:#308080; '&gt;,&lt;/span&gt; onContainerFocusIn&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;                _containers&lt;span style='color:#308080; '&gt;.&lt;/span&gt;removeItemAt&lt;span style='color:#308080; '&gt;(&lt;/span&gt;_containers&lt;span style='color:#308080; '&gt;.&lt;/span&gt;getItemIndex&lt;span style='color:#308080; '&gt;(&lt;/span&gt;container&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;protected&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;function&lt;/span&gt; onContainerFocusIn&lt;span style='color:#308080; '&gt;(&lt;/span&gt;event &lt;span style='color:#406080; '&gt;:&lt;/span&gt; FocusEvent&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;:&lt;/span&gt; void &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#200080; font-weight:bold; '&gt;var&lt;/span&gt; target &lt;span style='color:#406080; '&gt;:&lt;/span&gt; InteractiveObject &lt;span style='color:#308080; '&gt;=&lt;/span&gt; InteractiveObject&lt;span style='color:#308080; '&gt;(&lt;/span&gt;event&lt;span style='color:#308080; '&gt;.&lt;/span&gt;target&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;            _container &lt;span style='color:#308080; '&gt;=&lt;/span&gt; Container&lt;span style='color:#308080; '&gt;(&lt;/span&gt;event&lt;span style='color:#308080; '&gt;.&lt;/span&gt;currentTarget&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;            &lt;span style='color:#200080; font-weight:bold; '&gt;if&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;_container&lt;span style='color:#308080; '&gt;.&lt;/span&gt;contains&lt;span style='color:#308080; '&gt;(&lt;/span&gt;target&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;                _focused &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;target is UITextField &lt;span style='color:#406080; '&gt;?&lt;/span&gt; target&lt;span style='color:#308080; '&gt;.&lt;/span&gt;parent &lt;span style='color:#406080; '&gt;:&lt;/span&gt; target&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;                _focusedChanged &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#0f4d75; '&gt;true&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#200080; font-weight:bold; '&gt;if&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;!_timer&lt;span style='color:#308080; '&gt;.&lt;/span&gt;running&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;                    _timer&lt;span style='color:#308080; '&gt;.&lt;/span&gt;start&lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;protected&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;function&lt;/span&gt; onTimerComplete&lt;span style='color:#308080; '&gt;(&lt;/span&gt;event &lt;span style='color:#406080; '&gt;:&lt;/span&gt; TimerEvent&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;:&lt;/span&gt; void &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#200080; font-weight:bold; '&gt;if&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;_focusedChanged&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#200080; font-weight:bold; '&gt;var&lt;/span&gt; focusThickness &lt;span style='color:#406080; '&gt;:&lt;/span&gt; &lt;span style='color:#007d45; '&gt;Number&lt;/span&gt; &lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;br /&gt;                    &lt;span style='color:#308080; '&gt;(&lt;/span&gt;_focused is UIComponent &lt;span style='color:#406080; '&gt;?&lt;/span&gt;&lt;br /&gt;                        UIComponent&lt;span style='color:#308080; '&gt;(&lt;/span&gt;_focused&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#308080; '&gt;.&lt;/span&gt;getStyle&lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"focusThickness"&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;:&lt;/span&gt; &lt;span style='color:#008c00; '&gt;0&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;                &lt;span style='color:#200080; font-weight:bold; '&gt;var&lt;/span&gt; viewMetricsAndPadding &lt;span style='color:#406080; '&gt;:&lt;/span&gt; EdgeMetrics &lt;span style='color:#308080; '&gt;=&lt;/span&gt; _container&lt;span style='color:#308080; '&gt;.&lt;/span&gt;viewMetricsAndPadding&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;                &lt;span style='color:#200080; font-weight:bold; '&gt;var&lt;/span&gt; localPosition &lt;span style='color:#406080; '&gt;:&lt;/span&gt; Point &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;new&lt;/span&gt; Point&lt;span style='color:#308080; '&gt;(&lt;/span&gt;_focused&lt;span style='color:#308080; '&gt;.&lt;/span&gt;x&lt;span style='color:#308080; '&gt;,&lt;/span&gt; _focused&lt;span style='color:#308080; '&gt;.&lt;/span&gt;y&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#200080; font-weight:bold; '&gt;var&lt;/span&gt; globalPosition &lt;span style='color:#406080; '&gt;:&lt;/span&gt; Point &lt;span style='color:#308080; '&gt;=&lt;/span&gt; _focused&lt;span style='color:#308080; '&gt;.&lt;/span&gt;parent&lt;span style='color:#308080; '&gt;.&lt;/span&gt;localToGlobal&lt;span style='color:#308080; '&gt;(&lt;/span&gt;localPosition&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#200080; font-weight:bold; '&gt;var&lt;/span&gt; containerPosition &lt;span style='color:#406080; '&gt;:&lt;/span&gt; Point &lt;span style='color:#308080; '&gt;=&lt;/span&gt; _container&lt;span style='color:#308080; '&gt;.&lt;/span&gt;globalToLocal&lt;span style='color:#308080; '&gt;(&lt;/span&gt;globalPosition&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;                &lt;span style='color:#200080; font-weight:bold; '&gt;var&lt;/span&gt; focusedBottom &lt;span style='color:#406080; '&gt;:&lt;/span&gt; &lt;span style='color:#007d45; '&gt;Number&lt;/span&gt; &lt;span style='color:#308080; '&gt;=&lt;/span&gt; containerPosition&lt;span style='color:#308080; '&gt;.&lt;/span&gt;y &lt;span style='color:#308080; '&gt;+&lt;/span&gt; _focused&lt;span style='color:#308080; '&gt;.&lt;/span&gt;height &lt;span style='color:#308080; '&gt;+&lt;/span&gt; focusThickness&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#200080; font-weight:bold; '&gt;var&lt;/span&gt; containerBottom &lt;span style='color:#406080; '&gt;:&lt;/span&gt; &lt;span style='color:#007d45; '&gt;Number&lt;/span&gt; &lt;span style='color:#308080; '&gt;=&lt;/span&gt; _container&lt;span style='color:#308080; '&gt;.&lt;/span&gt;height &lt;span style='color:#308080; '&gt;-&lt;/span&gt; viewMetricsAndPadding&lt;span style='color:#308080; '&gt;.&lt;/span&gt;bottom&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#200080; font-weight:bold; '&gt;if&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;focusedBottom &lt;span style='color:#308080; '&gt;&gt;&lt;/span&gt; containerBottom&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;                    _container&lt;span style='color:#308080; '&gt;.&lt;/span&gt;verticalScrollPosition &lt;span style='color:#308080; '&gt;+=&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;focusedBottom &lt;span style='color:#308080; '&gt;-&lt;/span&gt; containerBottom&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;                &lt;br /&gt;                &lt;span style='color:#200080; font-weight:bold; '&gt;var&lt;/span&gt; focusedTop &lt;span style='color:#406080; '&gt;:&lt;/span&gt; &lt;span style='color:#007d45; '&gt;Number&lt;/span&gt; &lt;span style='color:#308080; '&gt;=&lt;/span&gt; containerPosition&lt;span style='color:#308080; '&gt;.&lt;/span&gt;y &lt;span style='color:#308080; '&gt;-&lt;/span&gt; focusThickness&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#200080; font-weight:bold; '&gt;var&lt;/span&gt; containerTop &lt;span style='color:#406080; '&gt;:&lt;/span&gt; &lt;span style='color:#007d45; '&gt;Number&lt;/span&gt; &lt;span style='color:#308080; '&gt;=&lt;/span&gt; viewMetricsAndPadding&lt;span style='color:#308080; '&gt;.&lt;/span&gt;top&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#200080; font-weight:bold; '&gt;if&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;focusedTop &lt;span style='color:#308080; '&gt;&amp;lt;&lt;/span&gt; containerTop&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;                    _container&lt;span style='color:#308080; '&gt;.&lt;/span&gt;verticalScrollPosition &lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;containerTop &lt;span style='color:#308080; '&gt;-&lt;/span&gt; focusedTop&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;                &lt;br /&gt;                &lt;span style='color:#200080; font-weight:bold; '&gt;var&lt;/span&gt; focusedRight &lt;span style='color:#406080; '&gt;:&lt;/span&gt; &lt;span style='color:#007d45; '&gt;Number&lt;/span&gt; &lt;span style='color:#308080; '&gt;=&lt;/span&gt; containerPosition&lt;span style='color:#308080; '&gt;.&lt;/span&gt;x &lt;span style='color:#308080; '&gt;+&lt;/span&gt; _focused&lt;span style='color:#308080; '&gt;.&lt;/span&gt;width &lt;span style='color:#308080; '&gt;+&lt;/span&gt; focusThickness&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#200080; font-weight:bold; '&gt;var&lt;/span&gt; containerRight &lt;span style='color:#406080; '&gt;:&lt;/span&gt; &lt;span style='color:#007d45; '&gt;Number&lt;/span&gt; &lt;span style='color:#308080; '&gt;=&lt;/span&gt; _container&lt;span style='color:#308080; '&gt;.&lt;/span&gt;width &lt;span style='color:#308080; '&gt;-&lt;/span&gt; viewMetricsAndPadding&lt;span style='color:#308080; '&gt;.&lt;/span&gt;right&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#200080; font-weight:bold; '&gt;if&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;focusedRight &lt;span style='color:#308080; '&gt;&gt;&lt;/span&gt; containerRight&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;                    _container&lt;span style='color:#308080; '&gt;.&lt;/span&gt;horizontalScrollPosition &lt;span style='color:#308080; '&gt;+=&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;focusedRight &lt;span style='color:#308080; '&gt;-&lt;/span&gt; containerRight&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;                &lt;br /&gt;                &lt;span style='color:#200080; font-weight:bold; '&gt;var&lt;/span&gt; focusedLeft &lt;span style='color:#406080; '&gt;:&lt;/span&gt; &lt;span style='color:#007d45; '&gt;Number&lt;/span&gt; &lt;span style='color:#308080; '&gt;=&lt;/span&gt; containerPosition&lt;span style='color:#308080; '&gt;.&lt;/span&gt;x &lt;span style='color:#308080; '&gt;-&lt;/span&gt; focusThickness&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#200080; font-weight:bold; '&gt;var&lt;/span&gt; containerLeft &lt;span style='color:#406080; '&gt;:&lt;/span&gt; &lt;span style='color:#007d45; '&gt;Number&lt;/span&gt; &lt;span style='color:#308080; '&gt;=&lt;/span&gt; viewMetricsAndPadding&lt;span style='color:#308080; '&gt;.&lt;/span&gt;left&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#200080; font-weight:bold; '&gt;if&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;focusedLeft &lt;span style='color:#308080; '&gt;&amp;lt;&lt;/span&gt; containerLeft&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;                    _container&lt;span style='color:#308080; '&gt;.&lt;/span&gt;horizontalScrollPosition &lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;containerLeft &lt;span style='color:#308080; '&gt;-&lt;/span&gt; focusedLeft&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;                &lt;br /&gt;                _focusedChanged &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#0f4d75; '&gt;false&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;private&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;var&lt;/span&gt; _document &lt;span style='color:#406080; '&gt;:&lt;/span&gt; IFlexDisplayObject&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;private&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;var&lt;/span&gt; _containers &lt;span style='color:#406080; '&gt;:&lt;/span&gt; ArrayCollection &lt;span style='color:#595979; '&gt;/* of containers */&lt;/span&gt; &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;new&lt;/span&gt; ArrayCollection&lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;private&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;var&lt;/span&gt; _timer &lt;span style='color:#406080; '&gt;:&lt;/span&gt; Timer&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;private&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;var&lt;/span&gt; _container &lt;span style='color:#406080; '&gt;:&lt;/span&gt; Container&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;private&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;var&lt;/span&gt; _focused &lt;span style='color:#406080; '&gt;:&lt;/span&gt; InteractiveObject&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;private&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;var&lt;/span&gt; _focusedChanged &lt;span style='color:#406080; '&gt;:&lt;/span&gt; Boolean&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;    &lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;It could be instantiated either in MXML:&lt;br /&gt;&lt;pre&gt;&lt;span style='color:#0057a6; '&gt;&amp;lt;&lt;/span&gt;&lt;span style='color:#333385; '&gt;autoscrollmanager&lt;/span&gt; &lt;span style='color:#474796; '&gt;id&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;autoScrollManager&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"&lt;/span&gt;&lt;span style='color:#0057a6; '&gt;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;Or in ActionScript:&lt;br /&gt;&lt;pre&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;var&lt;/span&gt; autoScrollManager &lt;span style='color:#406080; '&gt;:&lt;/span&gt; AutoScrollManager &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;new&lt;/span&gt; AutoScrollManager&lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;MXML instantiation is usable in case you create custom containers (e. g. AdvancedBox extended from built-in Box) with autoScrollManager property defined:&lt;br /&gt;&lt;pre&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;public&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;function&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;get&lt;/span&gt; autoScrollManager&lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;:&lt;/span&gt; AutoScrollManager &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;return&lt;/span&gt; _autoScrollManager&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;public&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;function&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;set&lt;/span&gt; autoScrollManager&lt;span style='color:#308080; '&gt;(&lt;/span&gt;autoScrollManager &lt;span style='color:#406080; '&gt;:&lt;/span&gt; AutoScrollManager&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;:&lt;/span&gt; void &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;if&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;_autoScrollManager &lt;span style='color:#308080; '&gt;!=&lt;/span&gt; &lt;span style='color:#0f4d75; '&gt;null&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;        _autoScrollManager&lt;span style='color:#308080; '&gt;.&lt;/span&gt;removeInstance&lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;this&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;    _autoScrollManager &lt;span style='color:#308080; '&gt;=&lt;/span&gt; autoScrollManager&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;    _autoScrollManager&lt;span style='color:#308080; '&gt;.&lt;/span&gt;addInstance&lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;this&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;private&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;var&lt;/span&gt; _autoScrollManager &lt;span style='color:#406080; '&gt;:&lt;/span&gt; AutoScrollManager&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;So that you could use binding:&lt;br /&gt;&lt;pre&gt;&lt;span style='color:#0057a6; '&gt;&amp;lt;&lt;/span&gt;&lt;span style='color:#333385; '&gt;AutoScrollManager&lt;/span&gt; &lt;span style='color:#474796; '&gt;id&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;autoScrollManager&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"&lt;/span&gt; &lt;span style='color:#0057a6; '&gt;/&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#0057a6; '&gt;&amp;lt;&lt;/span&gt;&lt;span style='color:#333385; '&gt;AdvancedBox&lt;/span&gt; &lt;span style='color:#474796; '&gt;id&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;advancedBox&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"&lt;/span&gt; &lt;span style='color:#474796; '&gt;autoScrollManager&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;{autoScrollManager}&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"&lt;/span&gt; &lt;span style='color:#0057a6; '&gt;/&gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;Otherwise, use addInstance() method directly:&lt;br /&gt;&lt;pre&gt;autoScrollManager&lt;span style='color:#308080; '&gt;.&lt;/span&gt;addInstance&lt;span style='color:#308080; '&gt;(&lt;/span&gt;advancedBox&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9194803383693725531-5740316193342887285?l=skovalyov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skovalyov.blogspot.com/feeds/5740316193342887285/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9194803383693725531&amp;postID=5740316193342887285' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9194803383693725531/posts/default/5740316193342887285'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9194803383693725531/posts/default/5740316193342887285'/><link rel='alternate' type='text/html' href='http://skovalyov.blogspot.com/2006/12/probably-one-of-most-annoying-thing.html' title='Make the focused child visible!'/><author><name>Sergey Kovalyov</name><uri>http://www.blogger.com/profile/12977809674331642977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-KNlCi7ApyVY/ThtyH-7EguI/AAAAAAAAChI/g417ynqmiSI/s220/profile-picture.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9194803383693725531.post-6074198221292473174</id><published>2006-12-12T16:58:00.000+02:00</published><updated>2006-12-27T23:36:04.560+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ActionScript'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><title type='text'>truncateToFit() performance problem</title><content type='html'>Setting very long string to the text property of classes that decorate UITextField (e. g. Label) causes timeout exception. Take a look at the truncateToFit() method in UITextField class. You could find this block there:&lt;br /&gt;&lt;pre&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;while&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;s&lt;span style='color:#308080; '&gt;.&lt;/span&gt;length &lt;span style='color:#308080; '&gt;&gt;&lt;/span&gt; &lt;span style='color:#008c00; '&gt;1&lt;/span&gt; &lt;span style='color:#308080; '&gt;&amp;amp;&amp;amp;&lt;/span&gt; textWidth &lt;span style='color:#308080; '&gt;+&lt;/span&gt; TEXT_WIDTH_PADDING &lt;span style='color:#308080; '&gt;&gt;&lt;/span&gt; w&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#406080; '&gt;{&lt;/span&gt;&lt;br /&gt;    s &lt;span style='color:#308080; '&gt;=&lt;/span&gt; s&lt;span style='color:#308080; '&gt;.&lt;/span&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;slice&lt;/span&gt;&lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#008c00; '&gt;0&lt;/span&gt;&lt;span style='color:#308080; '&gt;,&lt;/span&gt; &lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#008c00; '&gt;1&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;super&lt;/span&gt;&lt;span style='color:#308080; '&gt;.&lt;/span&gt;text &lt;span style='color:#308080; '&gt;=&lt;/span&gt; s &lt;span style='color:#308080; '&gt;+&lt;/span&gt; truncationIndicator&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#406080; '&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;It means that actual text is cut char by char until result of its concatenation with truncation indicator fits into the width available or only one char left. When text is very long this looping is almost infinitive. I believe it would work much more faster with &lt;i&gt;division by 2&lt;/i&gt; approach. In this case even 64K text truncation will take only 16 loop cycles.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9194803383693725531-6074198221292473174?l=skovalyov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skovalyov.blogspot.com/feeds/6074198221292473174/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9194803383693725531&amp;postID=6074198221292473174' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9194803383693725531/posts/default/6074198221292473174'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9194803383693725531/posts/default/6074198221292473174'/><link rel='alternate' type='text/html' href='http://skovalyov.blogspot.com/2006/12/setting-very-long-string-to-text.html' title='truncateToFit() performance problem'/><author><name>Sergey Kovalyov</name><uri>http://www.blogger.com/profile/12977809674331642977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-KNlCi7ApyVY/ThtyH-7EguI/AAAAAAAAChI/g417ynqmiSI/s220/profile-picture.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9194803383693725531.post-2068341514166874310</id><published>2006-12-12T10:52:00.001+02:00</published><updated>2006-12-12T10:52:53.985+02:00</updated><title type='text'></title><content type='html'>My 1st post! :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9194803383693725531-2068341514166874310?l=skovalyov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skovalyov.blogspot.com/feeds/2068341514166874310/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9194803383693725531&amp;postID=2068341514166874310' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9194803383693725531/posts/default/2068341514166874310'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9194803383693725531/posts/default/2068341514166874310'/><link rel='alternate' type='text/html' href='http://skovalyov.blogspot.com/2006/12/my-1st-post.html' title=''/><author><name>Sergey Kovalyov</name><uri>http://www.blogger.com/profile/12977809674331642977</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-KNlCi7ApyVY/ThtyH-7EguI/AAAAAAAAChI/g417ynqmiSI/s220/profile-picture.jpg'/></author><thr:total>0</thr:total></entry></feed>
