





<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>xJSFL</title>
	<atom:link href="http://www.xjsfl.com/feed" rel="self" type="application/rss+xml" />
	<link>http://www.xjsfl.com</link>
	<description>The rapid development framework for extending Adobe Flash</description>
	<lastBuildDate>Thu, 10 May 2012 10:44:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2</generator>
		<item>
		<title>xJSFL presentation at Codame San Francisco</title>
		<link>http://www.xjsfl.com/blog/xjsfl-presentation-at-codame-san-francisco</link>
		<comments>http://www.xjsfl.com/blog/xjsfl-presentation-at-codame-san-francisco#comments</comments>
		<pubDate>Mon, 06 Feb 2012 02:05:08 +0000</pubDate>
		<dc:creator>Dave Stewart</dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://www.xjsfl.com/?p=835</guid>
		<description><![CDATA[Whilst on my travels recently, I got the chance to present xJSFL in San Francisco, at the Flash on Games (or now Codame) group, at the Adobe building. I'd literally just that morning got off a 12 hour flight from New Zealand, which had left Auckland at 3pm on Thursday, but because we crossed the [...]]]></description>
			<content:encoded><![CDATA[<p>Whilst on my travels recently, I got the chance to present xJSFL in San Francisco, at the Flash on Games (or now <a href="http://games.codame.com/">Codame</a>) group, at the Adobe building.</p>
<p>I'd literally just that morning got off a 12 hour flight from New Zealand, which had left Auckland at 3pm on Thursday, but because we crossed the date line, landed in Los Angeles at 9:30am Thursday! I then had to book into my hotel, and spend the rest of the day getting the talk together. My Thursday was effectively 48 hours!</p>
<p>My plan for the presentation was to:</p>
<ul>
<li>present a short set of slides for the framework</li>
<li>run through a 10 minute live-coding session of the framework's features</li>
<li>demo some of the tools built for <a href="http://pocketgod.blogspot.com/">Pocket God</a>, along with Dave Castelnuovo of Bolt</li>
</ul>
<p>In the end, when our slot came up, most of the audience had been listening to about an hour and half's worth of other talks, and there was now only 5 minutes to fit everything in. With such tight constraints, I basically dumped all the live coding stuff, and Dave and I tag-teamed the preso in a much looser style.</p>
<p>It could have been a lot better, but still good to get it out there! You can see our ramblings here:</p>
<p><a href="http://games.codame.com/post/16568732561/games-coding-event-recordings-jan-18-2012">http://games.codame.com/post/16568732561/games-coding-event-recordings-jan-18-2012</a></p>
<p>It was very nice to meet a bunch of local devs as well, and I was amazed that I didn't crash too badly with the lack of sleep.</p>
<p>Thanks Bruno!</p>
<ul>
<li><a href="https://twitter.com/#%21/brunofonzi">https://twitter.com/#!/brunofonzi</a></li>
<li><a href="https://twitter.com/#%21/GAMESatCODAME">https://twitter.com/#!/GAMESatCODAME</a></li>
<li><a href="https://twitter.com/#!/davecazz">https://twitter.com/#!/davecazz</a></li>
</ul>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xjsfl.com/blog/xjsfl-presentation-at-codame-san-francisco/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Custom selectors</title>
		<link>http://www.xjsfl.com/blog/custom-selectors</link>
		<comments>http://www.xjsfl.com/blog/custom-selectors#comments</comments>
		<pubDate>Thu, 02 Feb 2012 01:40:13 +0000</pubDate>
		<dc:creator>Dave Stewart</dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://www.xjsfl.com/?p=828</guid>
		<description><![CDATA[I got some time to tinker on the framework today, and I've finally done something I've been wanting to do for ages, which is the ability to programatically create and add your own selectors. But what does that mean? Overview Currently, if you want to select items or elements based on properties that aren't covered [...]]]></description>
			<content:encoded><![CDATA[<p>I got some time to tinker on the framework today, and I've finally done something I've been wanting to do for ages, which is the ability to programatically create and add your own selectors. But what does that mean?</p>
<h4>Overview</h4>
<p>Currently, if you want to select items or elements based on properties that aren't covered by the built-in selectors i.e. <strong>name</strong>, <strong>:symbol</strong>, <strong>[x&gt;50]</strong>, you would need to over-select items, then use a callback to filter the collection.</p>
<p>The following example selects all symbol elements, then filters them using a callback:</p>
<pre class="prettyprint">function isBlurred(element)
{
    // code for determining whether element is blurred or not
    return state;
}
var collection = $(':symbol').filter(isBlurred);</pre>
<p>While that's a perfectly valid way to select elements, rather than selecting then filtering, it would be inherently more flexible to simply define a <strong>new</strong> selector which itself could be referenced, combined and reused within CSS expressions, for example, choosing to select all blurred stage elements using an expression such as:</p>
<pre class="prettyprint">':blurred'</pre>
<p>Well, it is now possible to register your own custom <strong>:pseudo</strong> and <strong>[attribute]</strong> selectors that determine whether an element should be included in a collection via an external callback which you supply.</p>
<h4>:pseudo selectors</h4>
<p>In the case of the above example, we would register a <strong>custom pseudo</strong> selector called <strong>:blurred</strong> to a function that determines if the element is blurred or not:</p>
<pre class="prettyprint">function blurred(element)
{
    function callback(filter)
    {
        return filter.name === 'blurFilter' &amp;&amp; filter.enabled &amp;&amp; filter.strength &gt; 0;
    }
    return element.filters &amp;&amp; element.filters.some(callback);
}
Selectors.element.register(':blurred', blurred);</pre>
<p>Note the colon (<strong>:</strong>) starting the first parameter of <strong>register()</strong>. This indicates that the custom selector is a pseudo-selector. Callbacks for psuedo selectors are expected to return a <strong>true/false</strong> value, indicating the condition either <strong>is</strong>, or <strong>isn't</strong>.</p>
<p>You then simply use the selector as follows:</p>
<pre class="prettyprint">var collection = $(':blurred').select();</pre>
<p>The result is, as below:</p>
<p><img class="alignnone size-full wp-image-830" title="selectors-custom-pseudo" src="http://www.xjsfl.com/wp-content/uploads/selectors-custom-pseudo.png" alt="" width="370" height="100" /></p>
<h4>[attribute] selectors</h4>
<p>Often, rather than a <strong>yes/no</strong> selection, you want the flexibility to select elements based on values at run time, such as an element's  layer name, or perhaps a Textfield's font (did you know that there is no top-level <strong>.font</strong> property?)</p>
<p>This is where <strong>custom attribute</strong> selectors come in, which are specified using square braces (<strong>[]</strong>) and allow us to supply values directly within the CSS expression itself.</p>
<p>The following example examines the element's first textRuns object, and returns the font name:</p>
<pre class="prettyprint">function font(element)
{
    return element.textRuns ? element.textRuns[0].textAttrs.face : null;
}
Selectors.element.register('[font]', font);</pre>
<p>Note that in this case, because a comparison needs to be made, a <strong>value</strong>, <strong>not</strong> a Boolean, is returned so that the Selector engine can compare the value within the supplied expression.</p>
<p>Again, the selector is simply used within an expression:</p>
<pre class="prettyprint">var collection = $('[font=Arial]').select();</pre>
<p>The results of which, are below:</p>
<p><img class="alignnone size-full wp-image-831" title="selectors-custom-attribute" src="http://www.xjsfl.com/wp-content/uploads/selectors-custom-attribute.png" alt="" width="343" height="160" /></p>
<h4>In conclusion</h4>
<p>As you can see, custom selectors provide a simple and flexible method to choose which elements to select on stage, and have an advantage over filters that they can be easily combined with other selectors simply by concatenating:</p>
<pre class="prettyprint">var collection = $('[font=Arial][x&gt;30]:selected').select();</pre>
<p>And don't forget, you can also write custom selectors for Library items too!</p>
<pre class="prettyprint">function isAsset(item)
{
    return item.name.indexOf('asset') != -1;
}
Selectors.item.register(':asset', isAsset);

$$(':asset:exported').select();</pre>
<p>All this new functionality is available in the repo now.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xjsfl.com/blog/custom-selectors/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>xJSFL is officially in Beta</title>
		<link>http://www.xjsfl.com/blog/xjsfl-is-officially-in-beta</link>
		<comments>http://www.xjsfl.com/blog/xjsfl-is-officially-in-beta#comments</comments>
		<pubDate>Fri, 30 Dec 2011 02:30:48 +0000</pubDate>
		<dc:creator>Dave Stewart</dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://www.xjsfl.com/?p=773</guid>
		<description><![CDATA[Yes, it's true... I can hardly believe it myself, but in the final hours of 2011 I'm officially announcing xJSFL as a Beta release! The framework has been in pre-beta since around June this year and those following on Twitter will know that the code has been available on GitHub for all that time. However, [...]]]></description>
			<content:encoded><![CDATA[<h3>Yes, it's true...</h3>
<p>I can hardly believe it myself, but in the final hours of 2011 I'm officially announcing xJSFL as a Beta release!</p>
<p>The framework has been in pre-beta since around June this year and those following on Twitter will know that the code has been available on <a href="https://github.com/davestewart/xJSFL">GitHub</a> for all that time.</p>
<p>However, it has been a <em>mammoth</em> task to get the framework code, documentation and support material to a level where I feel it's reasonable to release it without insulting people with broken code, or worse, constant changes and updates whilst they try to use it in their own projects.</p>
<p>The real stumbling block though, has been that the Komodo xJSFL extension ended up being a <em>much</em> bigger task than expected, with technical issue after technical issue holding things up.</p>
<p>But now, <em>finally</em>, everything is ready-enough for a Beta release!</p>
<h3>So what's new for this release?</h3>
<h5>Komodo extension</h5>
<p>This was the big one, the thing that would really make writing JSFL code easy and fun, and special thanks go to both Todd Whiteman at Active State and <a href="http://noiseandheat.com/ ">David Wagner</a> for making this happen. I got things about 80% of the way there with workarounds, but Todd moved things on to Komodo version 7, and David ironed out the final bugs and omissions. Thank you Todd &amp; David!</p>
<h5>ActionScript 3 framework</h5>
<p>Initially I wasn't going to release the AS3 code I've been using in the Snippets module and such like, but doing production work with xJSFL it just became too much of a headache maintaining separate code bases and reinventing the wheel, so all the AS3 module code is now going to be released open source with the core JSFL code.</p>
<h5>Module framework</h5>
<p>The module framework is something I'm really proud of. Proper separation of responsibilities between front and back end, fully-managed, bi-directional communication between AS3 and JSFL, intuitive config and asset management, proper namespacing, library management, and loading of framework code. In a nutshell, Flash panels made easy-peasy.</p>
<h5>Library and class autoloading</h5>
<p>Early versions of xJSFL had a manual bootstrap file, but I ditched that in favour of fully-automatic loading of libraries, along with bootstraps for core, user, and all module folders, providing a flexible mix between fully automatic and customised initialization and loading of user code.</p>
<h5>A unified Selector Engine</h5>
<p>Both Item and Element selectors work from a unified selector engine which makes it really easy to add new selector methods. For example, the <strong>:animated</strong> selector which allows you to select animated items in either the library or stage was implemented in <em>one line of code</em>.</p>
<h5>28 core classes and libraries</h5>
<p>At the time of writing there are 28 different classes or libraries that ship with xJSFL, covering <a href="../support#data">Data</a>, <a href="../support#elements">Elements</a>, <a href="../support#flash">Flash</a>, <a href="../support#file">File</a>, <a href="../support#oop">OOP</a>, <a href="../support#text">Text</a>, <a href="../support#ui">UI</a> and <a href="../support#utilities">Utilities</a>. These should cover a multitude of needs, and if they don't, just add your own classes to the user/jsfl/libraries folder and register the code with the framework using <a href="http://www.xjsfl.com/support/api/core/xjsfl#classes.register">xjsfl.classes.register()</a>.</p>
<h5>Documentation</h5>
<p>About 75% of the documentation is complete. About 5-10% of that needs to be updated as things have changed since it was written. The remaining 25% still needs to be written (but most of it is Tutorial rather than core API documentation) which I will do over the coming months.</p>
<p>The main things that's not documented right now is the AS3 side of the module framework. See the Sample module for a concise example though.</p>
<h3>Caveat Emptor</h3>
<p>So, whilst the vast majority of the framework is stellar, what are the things that are not quite there yet?</p>
<ul>
<li>Selector code: function arguments need to be expanded from expressions only</li>
<li>File loading: I may change the format so relative paths load relative to the calling file, rather than the xJSFL root, which will make it easier for Modules to access their own files. A leading slash would default to xJSFL root, and only a file:/// would access an absolute path.</li>
<li>Context: a bit buggy at the moment, and I don't feel the creation functions are flexible-enough</li>
<li>User folder and config cascade: was good in theory - still think it has to prove itself</li>
<li>Documentation: perhaps there's too much?</li>
<li>AS3 framework: this will probably never be documented. I don't have the time or inclination, so read the source</li>
<li>JSON: not yet implemented</li>
<li>Superdoc: good idea in theory, not completely implemented in practice</li>
<li>CS5 and CS5.5 support: I'm not on CS5+ yet, so no idea about that</li>
</ul>
<h3>ToDos</h3>
<p>xJSFL still has a lot of  ToDo items in its code, which I will methodically go through before I announce a 1.0 release. Here they are  in one place (in raw format) for convenience:</p>
<h4><a href="../category/support/api/core">Core</a></h4>
<p><strong>xJSFL/core/install/Tools/xJSFL Loader.jsfl</strong></p>
<ul>
<li>Add checks to make sure xjsfl.ui folder exists, and promt to reinstall if it doesn't</li>
</ul>
<p><strong>xJSFL/core/jsfl/libraries/xjsfl.jsfl</strong></p>
<ul>
<li>Look to see if passing in an error message is good design or not</li>
<li>Add option to sort alphabetically, including switches in partition</li>
<li>change function name parsing to recognize function() {...}</li>
<li>Connect this to user / framework settings, so messages are only logged if the setting allows it</li>
<li>Decide whether to display this or not</li>
<li>IMPORTANT! Throw error / passback false on empty string</li>
<li>If an empty string is passed back, the system assumes the URI is the root. This could be dangerous (especialy if files are to be deleted!) so consider throwing an error, or passing back xJSFL core</li>
<li>Add a check to see if we are loading, and if so, only load classes that are not yet defined. Can we do that? Do we need to cache load paths in that case?</li>
<li>consider moving xjsfl out of libraries</li>
<li>add a list of filesnames to load first</li>
<li>Setup modules so that modules are only found, and only when called are they loaded</li>
<li>Possibly add in an alert box which is controlled by debug level</li>
</ul>
<h4><a href="../category/support/api/data">Data</a></h4>
<p><strong>xJSFL/core/jsfl/libraries/config.jsfl</strong></p>
<ul>
<li>decide if this is what we want. Should null configs be allowed?</li>
</ul>
<p><strong>xJSFL/core/jsfl/libraries/data.jsfl</strong></p>
<ul>
<li>Assess feasibility of moving Output.inspect functions to Data as a generic recurse method</li>
<li>review recursive function signatures &amp; implementation, &amp; provide default callbacks if appropriate. @see Data#recurseFolder</li>
<li>Fix 260 character limit in File</li>
</ul>
<p><strong>xJSFL/core/jsfl/libraries/xml.jsfl</strong></p>
<ul>
<li>Investigate function:: workaround more thoroughly</li>
</ul>
<h4><a href="../category/support/api/elements">Elements</a></h4>
<p><strong>xJSFL/core/jsfl/libraries/context.jsfl</strong></p>
<ul>
<li>consider modifying Context.create() to just take a single argument</li>
<li>add layers and frames properties on timeline and layer changes</li>
<li>Work out a decent workaround for already selected layers</li>
</ul>
<p><strong>xJSFL/core/jsfl/libraries/element-collection.jsfl</strong></p>
<ul>
<li>Update to handle 3D properties</li>
<li>modify width and height to update in object-space (rotate, resize, rotate back)</li>
<li>Add screenwidth and screenheight properties</li>
</ul>
<p><strong>xJSFL/core/jsfl/libraries/element-selector.jsfl</strong></p>
<ul>
<li>Review the use of context here</li>
</ul>
<p><strong>xJSFL/core/jsfl/libraries/item-collection.jsfl</strong></p>
<ul>
<li>double check that expandFolder IS actually buggy</li>
</ul>
<p><strong>xJSFL/core/jsfl/libraries/item-selector.jsfl</strong></p>
<ul>
<li>Review the use of context here</li>
<li>Handle arrays, element collections, single items, etc</li>
</ul>
<p><strong>xJSFL/core/jsfl/libraries/selector.jsfl</strong></p>
<ul>
<li>Decide where in the process toUniqueArray() should be called</li>
</ul>
<p><strong>xJSFL/core/jsfl/libraries/selectors.jsfl</strong></p>
<ul>
<li>Complete RegExp comparison</li>
<li>filter() functionality</li>
<li>not() functionality</li>
<li>contains() functionality - should this be custom per type, i.e. items, elements, frames?</li>
<li>nth()</li>
<li>Add video</li>
</ul>
<h4><a href="../category/support/api/flash">Flash</a></h4>
<p><strong>xJSFL/core/jsfl/libraries/iterators.jsfl</strong></p>
<ul>
<li>Create global find() method</li>
<li>Should the DOM iterator swap the active window, or should the callback handle this?</li>
<li>instead of callbacks, allow any valid context arguments to be sent through</li>
</ul>
<p><strong>xJSFL/user/jsfl/examples/context.jsfl</strong></p>
<ul>
<li>check that frame selection isn't suffering the same toggle bug that layers are</li>
</ul>
<h4><a href="../category/support/api/file">File</a></h4>
<p><strong>xJSFL/core/jsfl/libraries/filesystem.jsfl</strong></p>
<ul>
<li>implemement xcopy on windows or the equivilent on a mac</li>
<li>check if pattern macthes an extension-only, then filter against extension only</li>
</ul>
<p><strong>xJSFL/core/jsfl/libraries/flfile.jsfl</strong></p>
<ul>
<li>Check whether this 260 char limit is an FLfile issue, or a general filesystem issue. @see FileSystem</li>
<li>need to add spport for network paths</li>
</ul>
<p><strong>xJSFL/user/jsfl/examples/filesystem.jsfl</strong></p>
<ul>
<li>- implemement Data.recurse properly!</li>
</ul>
<h4><a href="../category/support/api/oop">OOP</a></h4>
<p><strong>xJSFL/core/jsfl/libraries/events.jsfl</strong></p>
<ul>
<li>Double-check pre-emptive events are needed now that we know that JSAPI events are fatally-flawed anyway</li>
</ul>
<p><strong>xJSFL/core/jsfl/libraries/module.jsfl</strong></p>
<ul>
<li>replace name with panelName and add new prototype .panel property</li>
<li>add call() function which serialises and passes type-safe parameters to the AS3 panel</li>
</ul>
<h4><a href="../category/support/api/text">Text</a></h4>
<p><strong>xJSFL/core/jsfl/libraries/output.jsfl</strong></p>
<ul>
<li>Add option to skip underscore properties. If signature gets complex, use an {options} object</li>
<li>Maybe just have an include object, which could be like {underscores:false, functions:false,strings:false}</li>
<li>Refactor all iteration to the Data class</li>
<li>For callback / debug, output to file in two separate passes - 1:key, 2:value, that way you get to see the actual key name who's value breaks the iteration</li>
<li>Refactor {filter} argument to an {options} object so many parameters can be passed in</li>
<li>Refactor illegal "keywords" to illegal "paths"</li>
<li>Check if we need the compound recursion check, and if a stack.indexOf(value[key]) would suffice</li>
</ul>
<p><strong>xJSFL/core/jsfl/libraries/table.jsfl</strong></p>
<ul>
<li>Add option to automatically skip functions, including constructors</li>
<li>Add a setHeading() method to add a table heading row</li>
<li>Update constructor to allow setting of heading</li>
</ul>
<p><strong>xJSFL/core/jsfl/libraries/template.jsfl</strong></p>
<ul>
<li>Make render() more obvious - offload to a protected method perhaps? Need to make stack better-protected</li>
<li>Add option to auto-clean unused tags</li>
<li>Look at re-constructing class to make variables private</li>
<li>Look at renaming variables to _name, then updating Output class</li>
<li>Add some kind of post-processing / callback, which is called after render</li>
<li>See how lines that have all placeholders removed can be removed, without removing ALL blank lines</li>
</ul>
<h4><a href="../category/support/api/ui">UI</a></h4>
<p><strong>xJSFL/core/jsfl/libraries/xul.jsfl</strong></p>
<ul>
<li>Allow a file: uri to be passed into the constructor</li>
<li>Consider making XUL driver-based, so basic controls are constructed using the core, but can be wrapped with additional markup using driver-based methods</li>
<li>Alternatively, have an additional XULBuilder class, so code and presentation are kept separate</li>
<li>Add functionality for basic arithmetic to be performed inside textboxes</li>
<li>columns flex properly, and ensure appropriate elements flex to fill</li>
<li>implement building from Object</li>
<li>// TODO: possibly add in check to skip prototype values in for loop</li>
<li>Add xml:functionality</li>
<li>update this to work with xjsfl.utils.parseValue</li>
<li>add functinality to save a string of variables to a hard-coded location, as you can't pass in query strings, which you then load in manually</li>
<li>Can the SWF determine its location using ExternalInterface, or do we need to use a hardcoded URL? Does MMExecute work in a XUL dialog?</li>
<li>check if we need to first set() the property to have it work</li>
<li>Add support for checkbox groups</li>
<li>Re-evaluate the logic behind using XMLUI.settings, and think about using XUL.values</li>
<li>Implement proper validation using rules, and the Validation class</li>
</ul>
<h4><a href="../category/support/api/utilities">Utilities</a></h4>
<p><strong>xJSFL/core/jsfl/libraries/geom.jsfl</strong></p>
<ul>
<li>Add</li>
</ul>
<h4>AS3 framework</h4>
<p><strong>xJSFL/core/as3/lib/com/xjsfl/jsfl/modules/AbstractModule.as</strong></p>
<ul>
<li>add incoming call() function which deserialises and converts type-safe parameters from JSFL</li>
</ul>
<p><strong>xJSFL/core/as3/lib/com/xjsfl/jsfl/modules/Loader.as</strong></p>
<ul>
<li>Get these from xjsfl.settings.uris</li>
</ul>
<p><strong>xJSFL/core/as3/lib/com/xjsfl/ui/containers/layout/FlowContainer.as</strong></p>
<ul>
<li>Think about using dependency injection here, or an alternative Layout class</li>
<li>Can this be moved to the display utils class, and packaged like identify?</li>
</ul>
<p><strong>xJSFL/core/as3/lib/com/xjsfl/ui/controls/rightclickmenu/RightClickMenu.as</strong></p>
<ul>
<li>Swap init and select handlers</li>
</ul>
<h4>Modules</h4>
<p><strong>xJSFL/modules/Snippets/jsfl/snippets.jsfl</strong></p>
<ul>
<li>use Source class instead</li>
<li>also parse functions</li>
<li>update to use Template class</li>
</ul>
<p><strong>xJSFL/modules/Snippets/ui/src/classes/display/panels/SnippetsPanel.as</strong></p>
<ul>
<li>Add a favourites or browse popup treeMenu: load, add, remove, manage</li>
<li>Get latest commits: http://github.com/api/v2/json/commits/list/davestewart/xjsfl/master</li>
</ul>
<p>&nbsp;</p>
<h3>Final word</h3>
<p>I have wondered how <em>relevant</em> xJSFL is now, especially with the wane of Flash and rise of HTML 5, along with the now de-facto code-only development workflow, where there's little or no reliance on the Flash IDE.</p>
<p>However, the framework <em>is</em> complete, it's good (in fact, I think it's great!) and perhaps with the rise of Flash games, especially on mobile devices, xJSFL will find its place as the framework of choice to manage the assets that will need to be produced, and build the in-house tools that animators and production houses will need to pump this content out. I hope as well that xJSFL will fuel a renaissance in Flash tools, especially those used by individual designers who could really benefit from the power of code in their life.</p>
<p>Time will tell.</p>
<p>Anyway. <a href="http://www.xjsfl.com/download">Get downloading</a> then start working your way down the <a href="http://www.xjsfl.com/support">Support</a> index - it's all hopefully in the most logical order.</p>
<p>Cheers for now,<br />
Dave</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xjsfl.com/blog/xjsfl-is-officially-in-beta/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JSFL bugs</title>
		<link>http://www.xjsfl.com/support/appendix/knowledgebase/jsfl-bugs</link>
		<comments>http://www.xjsfl.com/support/appendix/knowledgebase/jsfl-bugs#comments</comments>
		<pubDate>Sun, 21 Aug 2011 11:09:49 +0000</pubDate>
		<dc:creator>Dave Stewart</dc:creator>
				<category><![CDATA[JSFL Knowledgebase]]></category>

		<guid isPermaLink="false">http://www.xjsfl.com/?p=647</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[]]></content:encoded>
			<wfw:commentRss>http://www.xjsfl.com/support/appendix/knowledgebase/jsfl-bugs/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JSFL gotchas</title>
		<link>http://www.xjsfl.com/support/appendix/knowledgebase/jsfl-gotchas</link>
		<comments>http://www.xjsfl.com/support/appendix/knowledgebase/jsfl-gotchas#comments</comments>
		<pubDate>Sun, 21 Aug 2011 11:09:38 +0000</pubDate>
		<dc:creator>Dave Stewart</dc:creator>
				<category><![CDATA[JSFL Knowledgebase]]></category>

		<guid isPermaLink="false">http://www.xjsfl.com/?p=646</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[]]></content:encoded>
			<wfw:commentRss>http://www.xjsfl.com/support/appendix/knowledgebase/jsfl-gotchas/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Method styles</title>
		<link>http://www.xjsfl.com/support/appendix/coding/method-styles</link>
		<comments>http://www.xjsfl.com/support/appendix/coding/method-styles#comments</comments>
		<pubDate>Sun, 21 Aug 2011 11:09:34 +0000</pubDate>
		<dc:creator>Dave Stewart</dc:creator>
				<category><![CDATA[Coding]]></category>

		<guid isPermaLink="false">http://www.xjsfl.com/?p=645</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[]]></content:encoded>
			<wfw:commentRss>http://www.xjsfl.com/support/appendix/coding/method-styles/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>xJSFL coding conventions</title>
		<link>http://www.xjsfl.com/support/appendix/coding/xjsfl-coding-style</link>
		<comments>http://www.xjsfl.com/support/appendix/coding/xjsfl-coding-style#comments</comments>
		<pubDate>Tue, 05 Jul 2011 01:02:00 +0000</pubDate>
		<dc:creator>Dave Stewart</dc:creator>
				<category><![CDATA[Coding]]></category>

		<guid isPermaLink="false">http://www.xjsfl.com/?p=644</guid>
		<description><![CDATA[Code Structure Related lines of code should be grouped into blocks Whatespace should be used to make it obvious what belongs together and what doesn't All blocks should be clearly labelled with leading single-line comments Comments // comments should be outdented by a single tab, making it easy to scan the code Explanatory comments should [...]]]></description>
			<content:encoded><![CDATA[<h2>Code</h2>
<h3>Structure</h3>
<p>Related lines of code should be grouped into blocks</p>
<p>Whatespace should be used to make it obvious what belongs together and what doesn't</p>
<p>All blocks should be clearly labelled with leading single-line comments</p>
<h3>Comments</h3>
<p>// comments should be outdented by a single tab, making it easy to scan the code</p>
<p>Explanatory comments should</p>
<h3>Variables</h3>
<p>Variables names and values should be lined up in columns using tabs when more than one variable is being set, with the = operator ranged right, with a single space separating it from the assignment.</p>
<p>If only one variable is being set, it is OK to use a single space either side of the = operator</p>
<h2>Files</h2>
<h3>File naming</h3>
<p>Casing</p>
<ul>
<li>Files should be lower case</li>
<li>Module root folders should be Title Case</li>
<li>SWF panels should be Title Case</li>
</ul>
<p>English</p>
<ul>
<li>English-language filenames should be favoured over camelCased or hyphenated-file-naming</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.xjsfl.com/support/appendix/coding/xjsfl-coding-style/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Writing better JavaScript</title>
		<link>http://www.xjsfl.com/support/appendix/coding/writing-better-javascript</link>
		<comments>http://www.xjsfl.com/support/appendix/coding/writing-better-javascript#comments</comments>
		<pubDate>Sun, 21 Aug 2011 11:09:24 +0000</pubDate>
		<dc:creator>Dave Stewart</dc:creator>
				<category><![CDATA[Coding]]></category>

		<guid isPermaLink="false">http://www.xjsfl.com/?p=643</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[]]></content:encoded>
			<wfw:commentRss>http://www.xjsfl.com/support/appendix/coding/writing-better-javascript/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Settings (class)</title>
		<link>http://www.xjsfl.com/support/as3/module-framework/settings</link>
		<comments>http://www.xjsfl.com/support/as3/module-framework/settings#comments</comments>
		<pubDate>Wed, 31 Aug 2011 13:28:52 +0000</pubDate>
		<dc:creator>Dave Stewart</dc:creator>
				<category><![CDATA[Module framework]]></category>

		<guid isPermaLink="false">http://www.xjsfl.com/?p=691</guid>
		<description><![CDATA[Utility class to save and load settings to a local shared object between sessions]]></description>
			<content:encoded><![CDATA[


<h2>Overview</h2>
<h3>Summary</h3>
<p>Copy</p>
<h3>Contents</h3>
<p>Contents</p>
<h2>API</h2>
<h3>Properties</h3>
<p>Property</p>
<h3>Methods</h3>
<p>Method</p>

]]></content:encoded>
			<wfw:commentRss>http://www.xjsfl.com/support/as3/module-framework/settings/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Loader (class)</title>
		<link>http://www.xjsfl.com/support/as3/module-framework/loader</link>
		<comments>http://www.xjsfl.com/support/as3/module-framework/loader#comments</comments>
		<pubDate>Wed, 31 Aug 2011 13:28:43 +0000</pubDate>
		<dc:creator>Dave Stewart</dc:creator>
				<category><![CDATA[Module framework]]></category>

		<guid isPermaLink="false">http://www.xjsfl.com/?p=690</guid>
		<description><![CDATA[Utility class to load config and assets from module and user folders]]></description>
			<content:encoded><![CDATA[


<h2>Overview</h2>
<h3>Summary</h3>
<p>Copy</p>
<h3>Contents</h3>
<p>Contents</p>
<h2>API</h2>
<h3>Properties</h3>
<p>Property</p>
<h3>Methods</h3>
<p>Method</p>

]]></content:encoded>
			<wfw:commentRss>http://www.xjsfl.com/support/as3/module-framework/loader/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

