Ah, one thing I forgot, a short overview of the prototype's directory
structure and files.
The root directory contains
- the HTML files *index.html* and those that load the three application
variants (*app-*.html*)
- the linked (minimized) generated JavaScript application files *
hello-world-all[.min].js*.
- The *README.md* tells you how to re-generate these from the faked
compiler output JS files (see below) after changes.
- *src *contains the example ActionScript source files, neatly sorted by
packages, for reference and for comparison with the faked compiler output
JavaScript files.
- *requirejs *contains original RequireJS 2.1.2 in a debug (*require.js*)
and a minified (*require-min.js*) version.
- *amd* contains all JavaScript files to be loaded/linked by RequireJS.
It directly contains
- the original RequireJS-plugin "shim" (*shim.js*, *shims.js*, *
shim-LICENSE.txt*) that takes care of loading...
- ...missing ECMAScript 5 functions if the browser does not support
them (*Array.*.js*, *Function.prototype.js*, *Object.js*)
- the main JavaScript file *hello-world.js* that loads/links the
example classes and interfaces and executes some rather random
tests on the
generated code
- *as3*: folder containing implementations of ActionScript operators /
functions missing in JavaScript
- *as.js* -- the ActionScript "as" operator
- *bind.js* -- a caching extension of Function#bind() for AS3
method binding
- *cast.js* -- a type cast operator for runtime type checks
(currently unused)
- *is.js* -- the ActionScript "is" operator (instanceof that also
works for interfaces)
- *trace-console.js* -- an ActionScript trace() simulation using
console.log()
- *trace.js* -- an ActionScript trace() simulation rendering to
the DOM for demo purposes
- *runtime*: folder that contains two small helper functions to
ease specifying AS3 class structures in JavaScript
- *defineClass.js* -- the central utility function that is used for
defining an ActionScript class structure
- *defineInterface.js* -- a little bit syntactic sugar to define
ActionScript interfaces (almost not worth the effort, but for
symmetry...)
- *classes*: folder containing the actual "generated" JavaScript
code, i.e. the faked FalconJx compiler output. It uses the well-known
pattern to define a sub-folder for every package "part".
- *com/acme*: sub-sub-folder for the first example package,
containing two classes and one interface
- *A.js* -- a faked compilation result of the ActionScript class *
src/com/acme/A.as*
- *B.js* -- a faked compilation result of the ActionScript
subclass *src/com/acme/B.as*
- *I.js* -- a faked compilation result of the ActionScript
interface *src/com/acme/I.as*, implemented by A
- *sub*: sub-folder for the second example package, containing
two more interfaces
- *IOther.js* -- a faked compilation result of the ActionScript
interface *src/com/acme/sub/IOther.as*, implemented by B
- *ISub.js* -- a faked compilation result of the
ActionScript interface *src/com/acme/sub/ISub.as*, also
implemented by B
The folder *amd/runtime* actually contains a third file *
defineClass-initializing-static-fields.js*, which is not yet used; it is an
alternative to *defineClass.js* that even takes care of initializing
classes when accessing their public static fields, but only works in real
ES5-browsers (not IE < 9). You can safely ignore it for now.
That's it!
-Frank-