Index: lib/dom.dart |
diff --git a/lib/dom.dart b/lib/dom.dart |
index 6201f69dbf9ccd9ea93d927b2c6b2545db79878d..76eb85fdd1b9a49d830cbcb15bb209b1c055965a 100644 |
--- a/lib/dom.dart |
+++ b/lib/dom.dart |
@@ -402,18 +402,32 @@ class DocumentType extends Node { |
} |
class Text extends Node { |
- String data; |
+ /// The text node's data, stored as either a String or StringBuffer. |
+ /// We support storing a StringBuffer here to support fast [appendData]. |
+ /// It will flatten back to a String on read. |
+ var _data; |
- Text(this.data) : super._(); |
+ Text(String data) : _data = data != null ? data : '', super._(); |
int get nodeType => Node.TEXT_NODE; |
+ String get data => _data = _data.toString(); |
+ set data(String value) { |
+ _data = value != null ? value : ''; |
+ } |
+ |
String toString() => '"$data"'; |
void _addOuterHtml(StringBuffer str) => writeTextNodeAsHtml(str, this); |
Text clone(bool deep) => new Text(data); |
+ void appendData(String data) { |
+ if (_data is! StringBuffer) _data = new StringBuffer(_data); |
+ StringBuffer sb = _data; |
+ sb.write(data); |
+ } |
+ |
String get text => data; |
set text(String value) { |
data = value; |
@@ -539,13 +553,19 @@ class Element extends Node with _ParentNode, _ElementAndDocument { |
void _addOuterHtml(StringBuffer str) { |
// http://www.whatwg.org/specs/web-apps/current-work/multipage/the-end.html#serializing-html-fragments |
// Element is the most complicated one. |
- str.write('<${_getSerializationPrefix(namespaceUri)}$localName'); |
+ str.write('<'); |
+ str.write(_getSerializationPrefix(namespaceUri)); |
+ str.write(localName); |
if (attributes.length > 0) { |
attributes.forEach((key, v) { |
// Note: AttributeName.toString handles serialization of attribute |
// namespace, if needed. |
- str.write(' $key="${htmlSerializeEscape(v, attributeMode: true)}"'); |
+ str.write(' '); |
+ str.write(key); |
+ str.write('="'); |
+ str.write(htmlSerializeEscape(v, attributeMode: true)); |
+ str.write('"'); |
}); |
} |