Pre-release roundup!
I only have a few more classes to finish writing before I release the framework, so I thought I would write a post to quickly highlight some of the cool things you can look forward to.
Overview
xJSFL notes
- The xJSFL core and libraries are around 9,000 lines of JavaScript, similar to jQuery which is around 8600. The Snippets module on top of that is about 1,300 lines
- The xJSFL ActionScript source (UI and framework code) is about 10,000 lines of ActionScript 3
Installation and setup
- Install to any folder
- 1-click installation
- Easy initialisation of all classes and functions via xjsfl.init(this);
Usage
- Snippets panel to mange and run scripts
- Console panel to quickly test JSFL code
Coding
- Use Komodo IDE to manage projects and write larger JSFL scripts
- core, user and module folders keeps code separate
- assets, data, settings, templates, libraries, and scripts folders keeps things organised
API
xJSFL Core
- settings - access to common settings such as folders and paths
- utils - utility methods such as applyEach(), makeURI(), getValues(), unique(), parseValue()
- output - such as warn(), output(), and error()
- iterators - basic iteration for documents, items, layers, keyframes and elements
- file - file finding and loading
- Centralised management of all classes and modules
Stage / Library
- Context - convenient access to the major DOM elements (DOM, timeline, layers, frames)
- 
Collections - powerful Array-like classes for manipulating authoring-time elements, including:
- ItemCollection - for Library items
- ElementCollection - for Stage elements
- Soon to come will be Document, Layer and Frame Collections.
 
- Library ($$) - CSS-style selection of items in the Libray panel
- Stage ($) - CSS-style selection of layers, frames and elements
- Superdoc - logical routing to the expansive Document class' methods
User Interaction
- XUL - OO library for creating and managing XUL dialogs
- Module - Base class used to create and manage xJSFL Modules (collections of files)
File / Data
- Config - an object-oriented wrapper for easily saving and loading settings
- Events - handle JSAPI events like in AS3, including Event objects
- FileSystem - object-oriented File and Folder classes
- FLfile - adds FLfile platform-to-URI conversion compatibility for pre-CS4 versions of Flash
- JSFL - serialises values to XML for type-safe communication with Flash panels
- JSON - Standard JSON library
- XML - Some additional E4X methods to overcome some JSFL-specific bugs
Text I/O
- Output - logging, introspection, and a variety of printing and formatting methods
- Source - utility methods for developers to parse source code
- Table - outputs 2D Array/Object arrays to easily-readable ASCII tables
- Template - loading and population of templates, including nesting & auto-indentation
- Validation - validate user or other input
Utility
- Class - a base class to create new classes and inherit prototype chains
- Data - a collection of methods for manipulating data, including hierarchies
- Geom - Geometric classes including Bounds
- Timer - simple timer class, used for benchmarking, etc
- Utils - Array, Object, String, Number and Color methods
Cool code examples
Smooth all bitmaps in the library:
$$(':bitmap').attr('allowSmoothing', true);
Rename any exported items after their classes, and select them:
function rename(name, index, item){
    return item.linkageClassName.split('.').pop();
}
$$(':exported').rename(rename).select();
Organise library items into respective folders (assets/movie clip, assets/graphic, etc):
[':bitmap',':graphic',':button',':movieclip'].forEach
(
    function(e,i){ $$(e).move('assets/' + e + 's'); }
);
Synchronize the animation of any tweens in your entire .fla (not yet committed in the repo):
function syncAnimation(timeline, index){
    $frames(':animated', timeline).attr('motionTweenSync', true);
}
$$(':animated').exec(syncAnimation);
Rename, randomise, and select all Leaf items on the current frame (also, noy yet committed in the repo):
$(':Leaf')
	.rename('leaf_###')
	.randomize
	(
		{
			position:['20', '20'],
			width:[20, 100, 20],
			rotation:360,
			tint:{from:'green', to:'yellow', mode:'hsv'}
		}
	)
	.select();
Inspect any object's properties, in this case, a library Item:
var item = $$('Movieclip 1').get(0);
Output.inspect(item);
/*
Inspect: SymbolItem (objects:8, values:55, time:0.0 seconds)
--------------------------------------------------------------------------
object => SymbolItem
	[timeline] => Timeline
		 name: "MovieClip 2"
		[layers] => Array
			[0] => Layer
				 name: "Layer 1"
				 layerType: "normal"
				 visible: true
				 locked: false
				 frameCount: 1
				[frames] => Array
					[0] => Frame
						 name: ""
						 actionScript: ""
						[elements] => Array
						 startFrame: 0
						 duration: 1
						 soundLibraryItem: null
						 soundEffect: "none"
						 soundName: ""
						 soundSync: "stream"
						 soundLoopMode: "repeat"
						 soundLoop: 1
						 tweenType: "none"
						 tweenEasing: 0
						 motionTweenScale: true
						 motionTweenRotate: "auto"
						 motionTweenRotateTimes: 0
						 motionTweenOrientToPath: false
						 motionTweenSync: false
						 motionTweenSnap: false
						 shapeTweenBlend: "distributive"
						 labelType: "none"
						 hasCustomEase: false
						 useSingleEaseCurve: true
				 color: "#4fff4f"
				 height: 100
				 outline: false
				 parentLayer: null
		 frameCount: 1
		 currentFrame: 0
		 layerCount: 1
		 currentLayer: 0
		[bindings] => Array
	 symbolType: "movie clip"
	 sourceFilePath: ""
	 sourceLibraryName: undefined
	 sourceAutoUpdate: undefined
	 scalingGrid: true
	[scalingGridRect] => Object
		 left: -12.749
		 top: -12.749
		 right: 12.75
		 bottom: 12.75
	 itemType: "movie clip"
	 name: "Folder 1/MovieClip 2"
	 linkageExportForAS: true
	 linkageExportForRS: false
	 linkageImportForRS: undefined
	 linkageExportInFirstFrame: true
	 linkageIdentifier: ""
	 linkageClassName: "display.MyClass"
	 linkageBaseClass: ""
	 linkageURL: undefined
*/
Inspect the properties of several library items in table format:
var elements = $$(':movieclip').sort().elements;
Table.print(elements, 'symbolType,name,linkageClassName,linkageBaseClass');
/*
+------------+----------------------+-------------------+----------------------+
| symbolType | name                 | linkageClassName  | linkageBaseClass     |
+------------+----------------------+-------------------+----------------------+
| movie clip | Folder 1/MovieClip 1 | display.YourClass |                      |
| movie clip | Folder 1/MovieClip 2 | display.MyClass   |                      |
| movie clip | Folder 1/Sprite 1    | Sprite1           | flash.display.Sprite |
| movie clip | Folder 3/Sprite 2    | Sprite2           | flash.display.Sprite |
| movie clip | MovieClip 3          |                   |                      |
+------------+----------------------+-------------------+----------------------+
*/
Read a file's contents:
var text = new File('assets/text.txt').contents;
Populate a template and output it, retaining indentation {>...}, rendering nested templates {...}, and removing optional non-populated variables {...?}:
// input: object.txt
/*
  {doc?}
  {name} =
  {
  	  {>content}
  }
*/
var methodTemplate = new Template('method.txt', methodData);
var objectData     = {name:'TestClass', content:methodTemplate};
var objectTemplate = new Template('object.txt', objectData);
objectTemplate.render(true);
// output
/*
TestClass =
{
	set color:function(color)
	{
		document.setFillColor(color);
	}
}
*/
Count the total lines of code for all files in a folder (and subfolders):
var lines  = 0;
var folder = new Folder(xjsfl.utils.makeURI('core'));
countLines = function(file){
    lines += file.contents.split('\n').length;
};
Data.recurseFolder(folder, countLines);
// 8522
Output the hierarchical structure of a folder:
Output.folder('core', true); // relative paths are relative to the xJSFL root
/*
/core
	/docs
	/jsfl
		/bootstrap.jsfl
		/install
			/External Libraries
				/xjsfl.dll
				/xjsfl
			/install.jsfl
			/xJSFL Loader.jsfl
			/xJSFL Splash.txt
			/xJSFL.ini
		/libraries
			/class.jsfl
			/collections.jsfl
			/config.jsfl
			/data.jsfl
			/events.jsfl
			/filesystem.jsfl
			/flfile.jsfl
			/jsfl.jsfl
			/library.jsfl
			/module.jsfl
			/output.jsfl
			/simple-template.jsfl
			/stage.jsfl
			/superdoc.jsfl
			/table.jsfl
			/template.jsfl
			/timer.jsfl
			/xjsfl.jsfl
		/run
			/exec.jsfl
			/file.jsfl
			/lib.jsfl
*/
Test a function and output the error stack if it fails:
function demo()
{
	var settings = XUL.create('xcolorchip:Color,numeric:Frame rate,Title');
}
xjsfl.utils.test(demo);
/*
Error: XUL.add(): Undefined control type "xcolorchip"
----------------------------------------------------------------------------------------------------
	0 > ("xcolorchip:Color,numeric:Frame rate,Title")
		line: 1088
		file: xul.jsfl
		path: xJSFL/core/jsfl/libraries/
	1 > XUL("xcolorchip:Color,numeric:Frame rate,Title")
		line: 96
		file: xul.jsfl
		path: xJSFL/core/jsfl/libraries/
	2 > ("xcolorchip:Color,numeric:Frame rate,Title")
		line: 239
		file: xul.jsfl
		path: xJSFL/core/jsfl/libraries/
	3 > demo()
		line: 1429
		file: xul.jsfl
		path: xJSFL/core/jsfl/libraries/
	4 > (demo)
		line: 684
		file: xjsfl.jsfl
		path: xJSFL/core/jsfl/libraries/
	5 >
		line: 1497
		file: xul.jsfl
		path: xJSFL/core/jsfl/libraries/
*/
Anyway, you get the general idea.
Once you get your hands on Komodo and have a look at the source code, you'll be into writing proper classes as well.
Laters,
Dave

Hi Dave,
I can’t find a description of $frames function.
If I execute your example with synchronization of tweens, error ocured:
The following JavaScript error(s) occurred:
At line 280 of file “library.jsfl”:
TypeError: xjsfl.iterators has no properties
Also my Komodo Edit 6 doesn’t show autocompletion. But I’ve made all steps that you described.
Thanks.
Best you ask this question in the forum, then everyone gets to benefit from the answers, OK?
And sorry, $frames is not yet committed! Still working on some of that bit of the framework. As I said, jump in on the forum, and I’ll discuss some workarounds in the meantime.
PS. Sorry about the iterators error – that’s a bug! I just pushed a fix, so pull / download again and you should be good (no need to reinstall, just update the files)