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

Side by Side Diff: pkg/third_party/html5lib/lib/src/treebuilder.dart

Issue 268623002: [html5lib] implement querySelector/querySelectorAll (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 7 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 | Annotate | Revision Log
OLDNEW
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
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
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
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 }
OLDNEW
« no previous file with comments | « pkg/third_party/html5lib/lib/src/query_selector.dart ('k') | pkg/third_party/html5lib/pubspec.yaml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698