That would be one option. Maybe use the 'fragments' collection theme that i saw in use in FalconJS. I think that having a global state runs a bit counter to the idea behind FalconJX. But whatever works :-)
Another option would be to provide a 'global utils' class in FlexJS and have FalconJX emit the correct code translation. EdB On Sat, Apr 20, 2013 at 3:13 PM, Alex Harui <[email protected]> wrote: > What do you think of the idea of moving these helper functions out of the > html template and have the compiler codegen them on-demand somehow. IMO, it > is a slippery slope to keep adding code to the html template that might not > actually be used by the app, and it is one more thing that can be screwed up > as the user customizes the html file. > > > On 4/20/13 3:54 AM, "[email protected]" <[email protected]> wrote: > >> [FalconJX] updated NativeUtils and support/tests >> >> I've updated NativeUtils to more closely match the desired state of JS >> 'native' support for AS global objects and functions. Updated the tests for >> Object, int and uint again, together with the addition of support methods in >> the Publisher. >> >> Signed-off-by: Erik de Bruin <[email protected]> >> >> >> Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo >> Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/6f8e8f9e >> Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/6f8e8f9e >> Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/6f8e8f9e >> >> Branch: refs/heads/develop >> Commit: 6f8e8f9e4a315213a13f935dcf4084477abe41e8 >> Parents: 0420b98 >> Author: Erik de Bruin <[email protected]> >> Authored: Sat Apr 20 12:48:58 2013 +0200 >> Committer: Erik de Bruin <[email protected]> >> Committed: Sat Apr 20 12:48:58 2013 +0200 >> >> ---------------------------------------------------------------------- >> .../js/flexjs/TestFlexJSGlobalFunctions.java | 35 +++----------- >> .../codegen/mxml/flexjs/MXMLFlexJSPublisher.java | 21 ++++++++- >> .../apache/flex/compiler/utils/NativeUtils.java | 27 ++++++++++- >> 3 files changed, 50 insertions(+), 33 deletions(-) >> ---------------------------------------------------------------------- >> >> >> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6f8e8f9e/compiler.jx.t >> ests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSGlobalF >> unctions.java >> ---------------------------------------------------------------------- >> diff --git >> a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/Te >> stFlexJSGlobalFunctions.java >> b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/Te >> stFlexJSGlobalFunctions.java >> index a3f6207..7cdeebc 100644 >> --- >> a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/Te >> stFlexJSGlobalFunctions.java >> +++ >> b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/Te >> stFlexJSGlobalFunctions.java >> @@ -48,33 +48,6 @@ public class TestFlexJSGlobalFunctions extends >> TestGoogGlobalFunctions >> >> @Override >> @Test >> - public void testInt() >> - { >> - IVariableNode node = getVariable("var a:int = int(1.8);"); >> - asBlockWalker.visitVariable(node); >> - assertOut("var /** @type {number} */ a = 1.8/** Cast to int */"); >> - } >> - >> - @Override >> - @Test >> - public void testObject() >> - { >> - IVariableNode node = getVariable("var a:Object = Object(\"1\");"); >> - asBlockWalker.visitVariable(node); >> - assertOut("var /** @type {Object} */ a = \"1\"/** Cast to Object >> */"); >> - } >> - >> - @Override >> - @Test >> - public void testUint() >> - { >> - IVariableNode node = getVariable("var a:uint = uint(-100);"); >> - asBlockWalker.visitVariable(node); >> - assertOut("var /** @type {number} */ a = -100/** Cast to uint */"); >> - } >> - >> - @Override >> - @Test >> public void testVector() >> { >> IVariableNode node = getVariable("var a:Vector.<String> = >> Vector.<String>(['Hello', 'World']);"); >> @@ -93,6 +66,10 @@ public class TestFlexJSGlobalFunctions extends >> TestGoogGlobalFunctions >> // <@/> or something like that? >> // I cannot find any reference to creating an XML object via a >> // global function >> + >> + // (erikdebruin) E4X in Javascript is obsolete. >> + // Ref.: https://developer.mozilla.org/en-US/docs/E4X >> + >> assertOut("var /** @type {XML} */ a = XML('@')"); >> } >> >> @@ -107,6 +84,10 @@ public class TestFlexJSGlobalFunctions extends >> TestGoogGlobalFunctions >> // <@/> or something like that? >> // I cannot find any reference to creating an XML object via a >> // global function >> + >> + // (erikdebruin) E4X in Javascript is obsolete. >> + // Ref.: https://developer.mozilla.org/en-US/docs/E4X >> + >> assertOut("var /** @type {XMLList} */ a = XMLList('<!-- comment >> -->')"); >> } >> >> >> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6f8e8f9e/compiler.jx/s >> rc/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.j >> ava >> ---------------------------------------------------------------------- >> diff --git >> a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFl >> exJSPublisher.java >> b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFl >> exJSPublisher.java >> index f6b358a..137dd61 100644 >> --- >> a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFl >> exJSPublisher.java >> +++ >> b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFl >> exJSPublisher.java >> @@ -284,13 +284,28 @@ public class MXMLFlexJSPublisher extends >> JSGoogPublisher >> implements >> htmlFile.append("\t\t\treturn true;\n"); >> htmlFile.append("\t\t};\n"); >> htmlFile.append("\t\t\n"); >> + // int() >> + htmlFile.append("\t\tfunction int(value) {\n"); >> + htmlFile.append("\t\t\treturn value >> 0;\n"); >> + htmlFile.append("\t\t};\n"); >> + htmlFile.append("\t\t\n"); >> // trace() >> htmlFile.append("\t\tfunction trace(value) {\n"); >> - htmlFile.append("\t\t\tif (console && console.log)\n"); >> - htmlFile.append("\t\t\t\tconsole.log(value);\n"); >> + htmlFile.append("\t\t\ttry {\n"); >> + htmlFile.append("\t\t\t\tif (console && console.log) {\n"); >> + htmlFile.append("\t\t\t\t\tconsole.log(value);\n"); >> + htmlFile.append("\t\t\t\t}\n"); >> + htmlFile.append("\t\t\t} catch (e) {\n"); >> + htmlFile.append("\t\t\t\t// ignore; at least we tried ;-)\n"); >> + htmlFile.append("\t\t\t}\n"); >> htmlFile.append("\t\t};\n"); >> htmlFile.append("\t\t\n"); >> - >> + // uint() >> + htmlFile.append("\t\tfunction uint(value) {\n"); >> + htmlFile.append("\t\t\treturn value >>> 0;\n"); >> + htmlFile.append("\t\t};\n"); >> + htmlFile.append("\t\t\n"); >> + >> htmlFile.append("\t\tnew "); >> htmlFile.append(projectName); >> htmlFile.append("()"); >> >> http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6f8e8f9e/compiler.jx/s >> rc/org/apache/flex/compiler/utils/NativeUtils.java >> ---------------------------------------------------------------------- >> diff --git a/compiler.jx/src/org/apache/flex/compiler/utils/NativeUtils.java >> b/compiler.jx/src/org/apache/flex/compiler/utils/NativeUtils.java >> index 361f178..4f53496 100644 >> --- a/compiler.jx/src/org/apache/flex/compiler/utils/NativeUtils.java >> +++ b/compiler.jx/src/org/apache/flex/compiler/utils/NativeUtils.java >> @@ -86,9 +86,10 @@ public class NativeUtils >> >> public enum NativeJSType >> { >> + // (erikdebruin) Ref.: >> https://cwiki.apache.org/confluence/display/FLEX/Full+Table >> + >> + Array("Array"), >> Boolean("Boolean"), >> - Number("Number"), >> - String("String"), >> decodeURI("decodeURI"), >> decodeURIComponent("decodeURIComponent"), >> encodeURI("encodeURI"), >> @@ -96,10 +97,30 @@ public class NativeUtils >> escape("escape"), >> isFinite("isFinite"), >> isNaN("isNaN"), >> + Number("Number"), >> + Object("Object"), >> parseFloat("parseFloat"), >> parseInt("parseInt"), >> - unescape("unescape"); >> + String("String"), >> + unescape("unescape"), >> + >> + // (erikdebruin) These aren't strictly 'native' to JS, but the >> + // Publisher provides global functions, so, for all >> + // intends and purposes they behave like they are. >> + _int("int"), >> + trace("trace"), >> + uint("uint"), >> + >> + // (erikdebruin) These are left out, but should, at some point, be >> + // treated as if they actually are 'native'. >> + /* >> + isXMLName("isXMLName"), >> + Vector("Vector"), >> + XML("XML"), >> + XMLList("XMLList"), >> + */ >> >> + ; >> private final String value; >> >> NativeJSType(String value) >> > > -- > Alex Harui > Flex SDK Team > Adobe Systems, Inc. > http://blogs.adobe.com/aharui > -- Ix Multimedia Software Jan Luykenstraat 27 3521 VB Utrecht T. 06-51952295 I. www.ixsoftware.nl
