I found a case where Flacon is not producing useable output for E4X filters:
var folderFolders:XMLList = assetXML.folder.(key.indexOf(folder.key) == 0);
var folderImages:XMLList = assetXML.image.(key.indexOf(folder.key) == 0);
Outputs:
var /** @type {XMLList} */ folderFolders =
this.assetXML.child('folder').filter(function(node){return
(node.key.indexOf(folder.key) == 0)});
var /** @type {XMLList} */ folderImages =
this.assetXML.child('image').filter(function(node){return
(node.key.indexOf(folder.key) == 0)});
It needs to output this instead:
var /** @type {XMLList} */ folderFolders =
this.assetXML.child('folder').filter(function(node){return
(node.child("key").indexOf(folder.key) == 0)});
var /** @type {XMLList} */ folderImages =
this.assetXML.child('image').filter(function(node){return
(node.child("key").indexOf(folder.key) == 0)});
This seems kind of difficult. For example, the following is correct, so both
situations would need to be handled:
if(name && runtimeQualifiers.(text().toString().indexOf("image_name") ==
0).length()){
qs.appendChild(<qualifier><key>image_name</key><value>{name}</value></qualifier>);
}
if(keywords && runtimeQualifiers.(text().toString().indexOf("image_keywords")
== 0).length()){
qs.appendChild(<qualifier><key>image_keywords</key><value>{keywords}</value></qualifier>);
}
Correctly outputs:
if (name && this.runtimeQualifiers.filter(function(node){return
(node.text().toString().indexOf("image_name") == 0)}).length()) {
qs.appendChild(new XML( '<qualifier><key>image_name</key><value>' + name +
'</value></qualifier>'));
}
if (keywords && this.runtimeQualifiers.filter(function(node){return
(node.text().toString().indexOf("image_keywords") == 0)}).length()) {
qs.appendChild(new XML( '<qualifier><key>image_keywords</key><value>' +
keywords + '</value></qualifier>'));
}
The work-around is to use “child(‘key)” instead of “key” in the filter, but if
this valid use of E4X could be worked out, that would be great.
Harbs