//throw new JSElement.Exn("Unknown XT library: "+uri);
} else if (uri.startsWith("local:")) {
- Template t = parse(s.getLocalPath() + uri.substring(6), s);
+ // merge a new template into this tree
+ String path = uri.substring(6) + e.getLocalName() + ".xt";
+ Template t = parse(s.getLocalPath() + path, s);
List c = e.getChildren();
if (c.size() > 0) {
e.getChildren().clear();
}
- // merge original attributes with replacement template
- e = new JSElement.Merge(t, e);
+ XML.Element merged = new JSElement.Merge(t, e);
+
+ // remap the parent of the original element
+ if (e.getParent() != null) {
+ List ch = e.getParent().getChildren();
+ ch.set(ch.indexOf(e), merged);
+ }
+
+ return wrap(merged, s);
}
XML.Attributes a = e.getAttributes();
}
/** Returns the first Template.Children child found. */
- private static Template.Children findPlaceholder(XML.Element e) {
- if (e instanceof Template.Children) return (Template.Children)e;
+ private static XML.Element findPlaceholder(XML.Element e) {
+ if ("http://xt.ibex.org/".equals(e.getUri()) && "children".equals(e.getLocalName()))
+ return e;
+
List c = e.getChildren();
for (int i=0; i < c.size(); i++) {
if (!(c.get(i) instanceof XML.Element)) continue;
- Template.Children ret = findPlaceholder((XML.Element)c.get(i));
+ XML.Element ret = findPlaceholder((XML.Element)c.get(i));
if (ret != null) return ret;
}
return null;