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

Reply via email to