OLD | NEW |
| (Empty) |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | |
2 // for details. All rights reserved. Use of this source code is governed by a | |
3 // BSD-style license that can be found in the LICENSE file. | |
4 | |
5 class XMLDocumentWrappingImplementation extends DocumentWrappingImplementation | |
6 implements XMLDocument { | |
7 // This really just wants to extend both DocumentWrappingImplementation and | |
8 // XMLElementWrappingImplementation, but since that's not possible we delegate | |
9 // to the latter. | |
10 XMLElement documentEl; | |
11 | |
12 XMLDocumentWrappingImplementation._wrap(documentPtr, ptr) : | |
13 super._wrap(documentPtr, ptr) { | |
14 // We want to wrap the pointer in an XMLElement to use its implementation of | |
15 // various Element methods, but DOMWrapperBase complains if | |
16 // dartObjectLocalStorage is already set. | |
17 ptr.dartObjectLocalStorage = null; | |
18 this.documentEl = new XMLElementWrappingImplementation._wrap(ptr); | |
19 ptr.dartObjectLocalStorage = this; | |
20 } | |
21 | |
22 factory XMLDocumentWrappingImplementation.xml(String xml) { | |
23 final parser = new dom.DOMParser(); | |
24 final xmlDoc = LevelDom.wrapDocument( | |
25 parser.parseFromString(xml, 'text/xml')); | |
26 // When XML parsing fails, the browser creates a document containing a | |
27 // PARSERERROR element. We want to throw an exception when parsing fails, | |
28 // but we don't want false positives if the user intends to create a | |
29 // PARSERERROR element for some reason, so we check for that in the input. | |
30 // | |
31 // TODO(nweiz): This is pretty hacky, it would be nice to this some other | |
32 // way if we can find one. | |
33 if (!xml.toLowerCase().contains('<parsererror') && | |
34 xmlDoc.query('parsererror') != null) { | |
35 throw new IllegalArgumentException('Error parsing XML: "$xml"'); | |
36 } | |
37 return xmlDoc; | |
38 } | |
39 | |
40 Node get parent() => null; | |
41 | |
42 Node _insertAdjacentNode(String where, Node node) { | |
43 switch (where.toLowerCase()) { | |
44 case "beforebegin": | |
45 return null; | |
46 case "afterend": | |
47 return null; | |
48 case "afterbegin": | |
49 this.insertBefore(node, nodes.first); | |
50 return node; | |
51 case "beforeend": | |
52 this.nodes.add(node); | |
53 return node; | |
54 default: | |
55 throw new IllegalArgumentException("Invalid position ${where}"); | |
56 } | |
57 } | |
58 | |
59 XMLElement insertAdjacentElement([String where = null, | |
60 XMLElement element = null]) => this._insertAdjacentNode(where, element); | |
61 | |
62 void insertAdjacentText([String where = null, String text = null]) { | |
63 this._insertAdjacentNode(where, new Text(text)); | |
64 } | |
65 | |
66 void insertAdjacentHTML( | |
67 [String position_OR_where = null, String text = null]) { | |
68 this._insertAdjacentNode( | |
69 position_OR_where, new DocumentFragment.xml(text)); | |
70 } | |
71 | |
72 XMLElement get activeElement() => null; | |
73 | |
74 void set body(Element value) { | |
75 throw new UnsupportedOperationException("XML documents don't have a body."); | |
76 } | |
77 | |
78 String get cookie() { | |
79 throw new UnsupportedOperationException( | |
80 "XML documents don't support cookies."); | |
81 } | |
82 | |
83 void set cookie(String value) { | |
84 throw new UnsupportedOperationException( | |
85 "XML documents don't support cookies."); | |
86 } | |
87 | |
88 String get manifest() => ""; | |
89 | |
90 void set manifest(String value) { | |
91 throw new UnsupportedOperationException( | |
92 "Manifest can't be set for XML documents."); | |
93 } | |
94 | |
95 Set<String> get classes() => documentEl.classes; | |
96 | |
97 ElementList get elements() => documentEl.elements; | |
98 | |
99 // TODO: The type of value should be Collection<Element>. See http://b/5392897 | |
100 void set elements(value) { documentEl.elements = value; } | |
101 | |
102 String get outerHTML() => documentEl.outerHTML; | |
103 | |
104 String get innerHTML() => documentEl.innerHTML; | |
105 | |
106 void set innerHTML(String xml) { documentEl.innerHTML = xml; } | |
107 | |
108 String get contentEditable() => documentEl.contentEditable; | |
109 | |
110 void set contentEditable(String value) { documentEl.contentEditable = value; } | |
111 | |
112 bool get isContentEditable() => documentEl.isContentEditable; | |
113 | |
114 bool get draggable() => documentEl.draggable; | |
115 | |
116 void set draggable(bool value) { documentEl.draggable = value; } | |
117 | |
118 bool get spellcheck() => documentEl.spellcheck; | |
119 | |
120 void set spellcheck(bool value) { documentEl.spellcheck = value; } | |
121 | |
122 bool get hidden() => documentEl.hidden; | |
123 | |
124 void set hidden(bool value) { documentEl.hidden = value; } | |
125 | |
126 int get tabIndex() => documentEl.tabIndex; | |
127 | |
128 void set tabIndex(int value) { documentEl.tabIndex = value; } | |
129 | |
130 String get id() => documentEl.id; | |
131 | |
132 void set id(String value) { documentEl.id = value; } | |
133 | |
134 String get title() => documentEl.title; | |
135 | |
136 void set title(String value) { documentEl.title = value; } | |
137 | |
138 String get webkitdropzone() => documentEl.webkitdropzone; | |
139 | |
140 void set webkitdropzone(String value) { documentEl.webkitdropzone = value; } | |
141 | |
142 String get lang() => documentEl.lang; | |
143 | |
144 void set lang(String value) { documentEl.lang = value; } | |
145 | |
146 String get dir() => documentEl.dir; | |
147 | |
148 void set dir(String value) { documentEl.dir = value; } | |
149 } | |
OLD | NEW |