Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(421)

Side by Side Diff: sky/framework/dom-serializer.sky

Issue 980423002: Organize sky/framework a bit (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « sky/framework/animation/fling-curve.dart ('k') | sky/framework/fling-curve.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 <!--
2 // Copyright 2015 The Chromium Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
5 -->
6 <script>
7 import "dart:sky";
8
9 final kEntityMap = new Map.fromIterable([
10 ['\u00a0', '&nbsp;'],
11 ['&', '&amp;'],
12 ['<', '&lt;'],
13 ['>', '&gt;'],
14 ['"', '&quot;'],
15 ], key: (item) => item[0], value: (item) => item[1]);
16
17 final RegExp kTextEscapePattern = new RegExp(r'&|<|>|"|\u00a0');
18 final RegExp kAttributeEscapePattern = new RegExp(r'&|>|"|\u00a0');
19 const kIndent = ' ';
20
21 String escapeText(String value, RegExp pattern) {
22 if (value == null)
23 value = '';
24 return value.replaceAllMapped(pattern, (Match match) {
25 return kEntityMap[match[0]];
26 });
27 }
28
29 String serializeAttributes(Element element) {
30 String buffer = '';
31 var attributes = element.getAttributes();
32
33 for (var i = 0; i < attributes.length; ++i) {
34 var attribute = attributes[i];
35 buffer += ' ';
36 buffer += attribute.name;
37 buffer += '="';
38 buffer += escapeText(attribute.value, kAttributeEscapePattern);
39 buffer += '"';
40 }
41
42 return buffer;
43 }
44
45 Node getFirstChild(Node node) {
46 if (node is HTMLTemplateElement)
47 return node.content.firstChild;
48 return node.firstChild;
49 }
50
51 Node getLastChild(Node node) {
52 if (node is HTMLTemplateElement)
53 return node.content.lastChild;
54 return node.lastChild;
55 }
56
57 String serializeChildren(Node node, int depth) {
58 String buffer = '';
59 Node firstChild = getFirstChild(node);
60 Node lastChild = getLastChild(node);
61 if (firstChild is Element && depth != 0)
62 buffer += '\n' + (kIndent * depth);
63 for (Node child = firstChild; child != null; child = child.nextSibling) {
64 buffer += serializeNode(child, depth);
65 if (child is Element && child.nextSibling is Element)
66 buffer += '\n' + (kIndent * depth);
67 }
68 if (lastChild is Element) {
69 buffer += '\n';
70 if (depth != 0)
71 buffer += kIndent * (depth - 1);
72 }
73 return buffer;
74 }
75
76 String serializeElement(Element element, int depth) {
77 String buffer = '<' + element.tagName + serializeAttributes(element) + '>';
78 buffer += serializeChildren(element, depth + 1);
79 buffer += '</' + element.tagName + '>';
80 return buffer;
81 }
82
83 String serializeText(Node node) {
84 Node parent = node.parentNode;
85 if (parent != null && (parent is HTMLScriptElement || parent is HTMLStyleEleme nt))
86 return node.data;
87 return escapeText(node.data, kTextEscapePattern);
88 }
89
90 String serializeNode(Node node, [int depth = 0]) {
91 if (node is Text)
92 return serializeText(node);
93 if (node is Element)
94 return serializeElement(node, depth);
95 if (node is Document || node is ShadowRoot)
96 return serializeChildren(node, depth);
97 throw new Error('Cannot serialize node');
98 }
99 </script>
OLDNEW
« no previous file with comments | « sky/framework/animation/fling-curve.dart ('k') | sky/framework/fling-curve.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698