| Index: lib/src/emitters.dart
|
| diff --git a/lib/src/emitters.dart b/lib/src/emitters.dart
|
| index 3fa27a94819cbc41eff4a94ab44043c56b180d3f..270ac6b518eefd8f219ee0247fbfe452ef82f4be 100644
|
| --- a/lib/src/emitters.dart
|
| +++ b/lib/src/emitters.dart
|
| @@ -614,7 +614,7 @@ class WebComponentEmitter extends RecursiveEmitter {
|
| elemInfo.node.sourceSpan,
|
| "new autogenerated.DocumentFragment.html('''"
|
| "${escapeDartString(elemInfo.node.innerHtml, triple: true)}"
|
| - "''')");
|
| + "''', treeSanitizer: autogenerated.nullTreeSanitizer)");
|
| _context.printer.addLine(
|
| "__root.nodes.add(__shadowTemplate.clone(true));");
|
| }
|
| @@ -828,30 +828,52 @@ String _emitCreateHtml(Node node, Declarations statics) {
|
| var isHtml = node.namespace == 'http://www.w3.org/1999/xhtml';
|
| var isSvg = node.namespace == 'http://www.w3.org/2000/svg';
|
| var isEmpty = node.attributes.length == 0 && node.nodes.length == 0;
|
| + var specialTags = const ['body', 'caption', 'col', 'colgroup', 'head',
|
| + 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'track'];
|
|
|
| - var constructor;
|
| + var expr;
|
| // Generate precise types like "new ButtonElement()" if we can.
|
| if (isEmpty && isHtml) {
|
| - constructor = htmlElementConstructors[node.tagName];
|
| + var constructor = htmlElementConstructors[node.tagName];
|
| if (constructor != null) {
|
| - constructor = '$constructor()';
|
| + expr = 'new autogenerated.$constructor()';
|
| } else {
|
| - constructor = "Element.tag('${node.tagName}')";
|
| + expr = "new autogenerated.Element.tag('${node.tagName}')";
|
| }
|
| } else if (isEmpty && isSvg) {
|
| - constructor = "_svg.SvgElement.tag('${node.tagName}')";
|
| - } else {
|
| + expr = "new autogenerated_svg.SvgElement.tag('${node.tagName}')";
|
| + } else if (isSvg || !specialTags.contains(node.tagName)) {
|
| // TODO(sigmund): does this work for the mathml namespace?
|
| - var target = isSvg ? '_svg.SvgElement.svg' : 'Element.html';
|
| - constructor = "$target('${escapeDartString(node.outerHtml)}')";
|
| + var constructor = isSvg ? 'autogenerated_svg.SvgElement.svg'
|
| + : 'autogenerated.Element.html';
|
| + expr = "new $constructor("
|
| + "'${escapeDartString(node.outerHtml)}', "
|
| + "treeSanitizer: autogenerated.nullTreeSanitizer)";
|
| + } else {
|
| + expr = "autogenerated.createSafeNode('${node.tagName}',"
|
| + " ${_attributesAsString(node.attributes)},"
|
| + "'${escapeDartString(node.innerHtml)}')";
|
| }
|
| -
|
| - var expr = 'new autogenerated.$constructor';
|
| var varName = '__html${statics.declarations.length}';
|
| statics.add('final', varName, node.sourceSpan, expr);
|
| return '${varName}.clone(true)';
|
| }
|
|
|
| +String _attributesAsString(Map attributes) {
|
| + var sb = new StringBuffer();
|
| + sb.write('{');
|
| + bool first = true;
|
| + for (var key in attributes.keys) {
|
| + if (!first) sb.write(',');
|
| + first = false;
|
| + var sKey = escapeDartString(key);
|
| + var sValue = escapeDartString(attributes[key]);
|
| + sb.write("'$sKey': '$sValue'");
|
| + }
|
| + sb.write('}');
|
| + return sb.toString();
|
| +}
|
| +
|
| /** Trim down the html for the main html page. */
|
| void transformMainHtml(Document document, FileInfo fileInfo,
|
| PathMapper pathMapper, bool hasCss, bool rewriteUrls, Messages messages,
|
|
|