OLD | NEW |
1 /// Internals to the tree builders. | 1 /// Internals to the tree builders. |
2 library treebuilder; | 2 library treebuilder; |
3 | 3 |
4 import 'dart:collection'; | 4 import 'dart:collection'; |
5 import 'package:html5lib/dom.dart'; | 5 import 'package:html5lib/dom.dart'; |
6 import 'package:html5lib/parser.dart' show getElementNameTuple; | 6 import 'package:html5lib/parser.dart' show getElementNameTuple; |
7 import 'package:source_maps/span.dart' show FileSpan; | 7 import 'package:source_maps/span.dart' show FileSpan; |
8 import 'constants.dart'; | 8 import 'constants.dart'; |
9 import 'list_proxy.dart'; | 9 import 'list_proxy.dart'; |
10 import 'token.dart'; | 10 import 'token.dart'; |
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
244 parent = openElements.last; | 244 parent = openElements.last; |
245 } | 245 } |
246 parent.nodes.add(new Comment(token.data)..sourceSpan = token.span); | 246 parent.nodes.add(new Comment(token.data)..sourceSpan = token.span); |
247 } | 247 } |
248 | 248 |
249 /// Create an element but don't insert it anywhere | 249 /// Create an element but don't insert it anywhere |
250 Element createElement(StartTagToken token) { | 250 Element createElement(StartTagToken token) { |
251 var name = token.name; | 251 var name = token.name; |
252 var namespace = token.namespace; | 252 var namespace = token.namespace; |
253 if (namespace == null) namespace = defaultNamespace; | 253 if (namespace == null) namespace = defaultNamespace; |
254 var element = new Element(name, namespace) | 254 var element = document.createElementNS(namespace, name) |
255 ..attributes = token.data | 255 ..attributes = token.data |
256 ..sourceSpan = token.span; | 256 ..sourceSpan = token.span; |
257 return element; | 257 return element; |
258 } | 258 } |
259 | 259 |
260 Element insertElement(StartTagToken token) { | 260 Element insertElement(StartTagToken token) { |
261 if (insertFromTable) return insertElementTable(token); | 261 if (insertFromTable) return insertElementTable(token); |
262 return insertElementNormal(token); | 262 return insertElementNormal(token); |
263 } | 263 } |
264 | 264 |
265 Element insertElementNormal(StartTagToken token) { | 265 Element insertElementNormal(StartTagToken token) { |
266 var name = token.name; | 266 var name = token.name; |
267 var namespace = token.namespace; | 267 var namespace = token.namespace; |
268 if (namespace == null) namespace = defaultNamespace; | 268 if (namespace == null) namespace = defaultNamespace; |
269 var element = new Element(name, namespace) | 269 var element = document.createElementNS(namespace, name) |
270 ..attributes = token.data | 270 ..attributes = token.data |
271 ..sourceSpan = token.span; | 271 ..sourceSpan = token.span; |
272 openElements.last.nodes.add(element); | 272 openElements.last.nodes.add(element); |
273 openElements.add(element); | 273 openElements.add(element); |
274 return element; | 274 return element; |
275 } | 275 } |
276 | 276 |
277 Element insertElementTable(token) { | 277 Element insertElementTable(token) { |
278 /// Create an element and insert it into the tree | 278 /// Create an element and insert it into the tree |
279 var element = createElement(token); | 279 var element = createElement(token); |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
350 var insertBefore = null; | 350 var insertBefore = null; |
351 for (var elm in openElements.reversed) { | 351 for (var elm in openElements.reversed) { |
352 if (elm.localName == "table") { | 352 if (elm.localName == "table") { |
353 lastTable = elm; | 353 lastTable = elm; |
354 break; | 354 break; |
355 } | 355 } |
356 } | 356 } |
357 if (lastTable != null) { | 357 if (lastTable != null) { |
358 // XXX - we should really check that this parent is actually a | 358 // XXX - we should really check that this parent is actually a |
359 // node here | 359 // node here |
360 if (lastTable.parent != null) { | 360 if (lastTable.parentNode != null) { |
361 fosterParent = lastTable.parent; | 361 fosterParent = lastTable.parentNode; |
362 insertBefore = lastTable; | 362 insertBefore = lastTable; |
363 } else { | 363 } else { |
364 fosterParent = openElements[openElements.indexOf(lastTable) - 1]; | 364 fosterParent = openElements[openElements.indexOf(lastTable) - 1]; |
365 } | 365 } |
366 } else { | 366 } else { |
367 fosterParent = openElements[0]; | 367 fosterParent = openElements[0]; |
368 } | 368 } |
369 return [fosterParent, insertBefore]; | 369 return [fosterParent, insertBefore]; |
370 } | 370 } |
371 | 371 |
(...skipping 13 matching lines...) Expand all Loading... |
385 Document getDocument() => document; | 385 Document getDocument() => document; |
386 | 386 |
387 /// Return the final fragment. | 387 /// Return the final fragment. |
388 DocumentFragment getFragment() { | 388 DocumentFragment getFragment() { |
389 //XXX assert innerHTML | 389 //XXX assert innerHTML |
390 var fragment = new DocumentFragment(); | 390 var fragment = new DocumentFragment(); |
391 openElements[0].reparentChildren(fragment); | 391 openElements[0].reparentChildren(fragment); |
392 return fragment; | 392 return fragment; |
393 } | 393 } |
394 } | 394 } |
OLD | NEW |