| OLD | NEW |
| 1 /// This library contains extra APIs that aren't in the DOM, but are useful | 1 /// This library contains extra APIs that aren't in the DOM, but are useful |
| 2 /// when interacting with the parse tree. | 2 /// when interacting with the parse tree. |
| 3 library dom_parsing; | 3 library dom_parsing; |
| 4 | 4 |
| 5 import 'dom.dart'; | 5 import 'dom.dart'; |
| 6 import 'src/constants.dart' show rcdataElements; | 6 import 'src/constants.dart' show rcdataElements; |
| 7 | 7 |
| 8 /// A simple tree visitor for the DOM nodes. | 8 /// A simple tree visitor for the DOM nodes. |
| 9 class TreeVisitor { | 9 class TreeVisitor { |
| 10 visit(Node node) { | 10 visit(Node node) { |
| (...skipping 22 matching lines...) Expand all Loading... |
| 33 | 33 |
| 34 visitDocumentType(DocumentType node) => visitNodeFallback(node); | 34 visitDocumentType(DocumentType node) => visitNodeFallback(node); |
| 35 | 35 |
| 36 visitText(Text node) => visitNodeFallback(node); | 36 visitText(Text node) => visitNodeFallback(node); |
| 37 | 37 |
| 38 // TODO(jmesserly): visit attributes. | 38 // TODO(jmesserly): visit attributes. |
| 39 visitElement(Element node) => visitNodeFallback(node); | 39 visitElement(Element node) => visitNodeFallback(node); |
| 40 | 40 |
| 41 visitComment(Comment node) => visitNodeFallback(node); | 41 visitComment(Comment node) => visitNodeFallback(node); |
| 42 | 42 |
| 43 // Note: visits document by default because DocumentFragment is a Document. | 43 visitDocumentFragment(DocumentFragment node) => visitNodeFallback(node); |
| 44 visitDocumentFragment(DocumentFragment node) => visitDocument(node); | |
| 45 } | 44 } |
| 46 | 45 |
| 47 /// Converts the DOM tree into an HTML string with code markup suitable for | 46 /// Converts the DOM tree into an HTML string with code markup suitable for |
| 48 /// displaying the HTML's source code with CSS colors for different parts of the | 47 /// displaying the HTML's source code with CSS colors for different parts of the |
| 49 /// markup. See also [CodeMarkupVisitor]. | 48 /// markup. See also [CodeMarkupVisitor]. |
| 50 String htmlToCodeMarkup(Node node) { | 49 String htmlToCodeMarkup(Node node) { |
| 51 return (new CodeMarkupVisitor()..visit(node)).toString(); | 50 return (new CodeMarkupVisitor()..visit(node)).toString(); |
| 52 } | 51 } |
| 53 | 52 |
| 54 /// Converts the DOM tree into an HTML string with code markup suitable for | 53 /// Converts the DOM tree into an HTML string with code markup suitable for |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 159 case "wbr": | 158 case "wbr": |
| 160 return true; | 159 return true; |
| 161 } | 160 } |
| 162 return false; | 161 return false; |
| 163 } | 162 } |
| 164 | 163 |
| 165 /// Serialize text node according to: | 164 /// Serialize text node according to: |
| 166 /// <http://www.whatwg.org/specs/web-apps/current-work/multipage/the-end.html#ht
ml-fragment-serialization-algorithm> | 165 /// <http://www.whatwg.org/specs/web-apps/current-work/multipage/the-end.html#ht
ml-fragment-serialization-algorithm> |
| 167 void writeTextNodeAsHtml(StringBuffer str, Text node) { | 166 void writeTextNodeAsHtml(StringBuffer str, Text node) { |
| 168 // Don't escape text for certain elements, notably <script>. | 167 // Don't escape text for certain elements, notably <script>. |
| 169 final parent = node.parent; | 168 final parent = node.parentNode; |
| 170 if (parent is Element) { | 169 if (parent is Element) { |
| 171 var tag = parent.localName; | 170 var tag = parent.localName; |
| 172 if (rcdataElements.contains(tag) || tag == 'plaintext') { | 171 if (rcdataElements.contains(tag) || tag == 'plaintext') { |
| 173 str.write(node.data); | 172 str.write(node.data); |
| 174 return; | 173 return; |
| 175 } | 174 } |
| 176 } | 175 } |
| 177 str.write(htmlSerializeEscape(node.data)); | 176 str.write(htmlSerializeEscape(node.data)); |
| 178 } | 177 } |
| OLD | NEW |