--- /dev/null
+layer at (0,0) size 800x600
+ RenderCanvas at (0,0) size 800x600
+layer at (0,0) size 800x600
+ RenderBlock {HTML} at (0,0) size 800x600
+ RenderBody {BODY} at (8,8) size 784x578
+ RenderBlock {DIV} at (0,0) size 784x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderBlock {DIV} at (0,0) size 784x106
+ RenderBlock {P} at (0,0) size 784x16
+ RenderInline {B} at (0,0) size 280x16
+ RenderText {TEXT} at (0,0) size 280x16
+ text run at (0,0) width 280: "Expect ref node 'A'; pointer before"
+ RenderText {TEXT} at (280,0) size 168x16
+ text run at (280,0) width 168: ": * A B C D E F G H I"
+ RenderBlock {P} at (0,30) size 784x16
+ RenderInline {B} at (0,0) size 272x16
+ RenderText {TEXT} at (0,0) size 272x16
+ text run at (0,0) width 272: "Expect ref node 'A'; pointer after"
+ RenderText {TEXT} at (272,0) size 184x16
+ text run at (272,0) width 184: ": [A] * B C D E F G H I"
+ RenderBlock {P} at (0,60) size 784x16
+ RenderInline {B} at (0,0) size 280x16
+ RenderText {TEXT} at (0,0) size 280x16
+ text run at (0,0) width 280: "Expect ref node 'A'; pointer before"
+ RenderText {TEXT} at (280,0) size 184x16
+ text run at (280,0) width 184: ": * [A] B C D E F G H I"
+ RenderBlock {P} at (0,90) size 784x16
+ RenderInline {B} at (0,0) size 280x16
+ RenderText {TEXT} at (0,0) size 280x16
+ text run at (0,0) width 280: "Expect ref node 'A'; pointer before"
+ RenderText {TEXT} at (280,0) size 184x16
+ text run at (280,0) width 184: ": * [A] B C D E F G H I"
--- /dev/null
+<html>
+<head>
+<script src=traversal.js language="JavaScript" type="text/JavaScript" ></script>
+<title>Traversal Test</title>
+</head>
+<body>
+<div id="test">
+<span id="A"></span><span id="B"></span><span id="C"></span><span id="D"></span><span id="E"></span><span id="F"></span><span id="G"></span><span id="H"></span><span id="I"></span>
+</div>
+<div style="font-family: Courier; font-size: 14;">
+<script>
+var root = document.getElementById('A');
+
+function testNodeFiter(n)
+{
+ if (n.tagName == 'SPAN') return NodeFilter.FILTER_ACCEPT;
+ return NodeFilter.FILTER_SKIP;
+}
+
+var it = document.createNodeIterator(root, NodeFilter.SHOW_ELEMENT, testNodeFiter, false);
+document.write(dumpNodeIterator(it, "ref node 'A'; pointer before"));
+it.nextNode();
+document.write(dumpNodeIterator(it, "ref node 'A'; pointer after"));
+it.previousNode();
+document.write(dumpNodeIterator(it, "ref node 'A'; pointer before"));
+it.previousNode();
+document.write(dumpNodeIterator(it, "ref node 'A'; pointer before"));
+</script>
+</div>
+</body>
+</html>
--- /dev/null
+layer at (0,0) size 800x600
+ RenderCanvas at (0,0) size 800x600
+layer at (0,0) size 800x600
+ RenderBlock {HTML} at (0,0) size 800x600
+ RenderBody {BODY} at (8,8) size 784x578
+ RenderBlock {DIV} at (0,0) size 784x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderBlock {DIV} at (0,0) size 784x196
+ RenderBlock {P} at (0,0) size 784x16
+ RenderInline {B} at (0,0) size 272x16
+ RenderText {TEXT} at (0,0) size 272x16
+ text run at (0,0) width 272: "Expect ref node 'D'; pointer after"
+ RenderText {TEXT} at (272,0) size 184x16
+ text run at (272,0) width 184: ": A B C [D] * E F G H I"
+ RenderBlock {P} at (0,30) size 784x16
+ RenderText {TEXT} at (0,0) size 120x16
+ text run at (0,0) width 120: "remove node 'E'"
+ RenderBlock {P} at (0,60) size 784x16
+ RenderInline {B} at (0,0) size 272x16
+ RenderText {TEXT} at (0,0) size 272x16
+ text run at (0,0) width 272: "Expect ref node 'D'; pointer after"
+ RenderText {TEXT} at (272,0) size 168x16
+ text run at (272,0) width 168: ": A B C [D] * F G H I"
+ RenderBlock {P} at (0,90) size 784x16
+ RenderText {TEXT} at (0,0) size 240x16
+ text run at (0,0) width 240: "insert new node 'X' before 'F'"
+ RenderBlock {P} at (0,120) size 784x16
+ RenderInline {B} at (0,0) size 272x16
+ RenderText {TEXT} at (0,0) size 272x16
+ text run at (0,0) width 272: "Expect ref node 'D'; pointer after"
+ RenderText {TEXT} at (272,0) size 184x16
+ text run at (272,0) width 184: ": A B C [D] * X F G H I"
+ RenderBlock {P} at (0,150) size 784x16
+ RenderText {TEXT} at (0,0) size 192x16
+ text run at (0,0) width 192: "move node 'I' before 'X'"
+ RenderBlock {P} at (0,180) size 784x16
+ RenderInline {B} at (0,0) size 272x16
+ RenderText {TEXT} at (0,0) size 272x16
+ text run at (0,0) width 272: "Expect ref node 'D'; pointer after"
+ RenderText {TEXT} at (272,0) size 184x16
+ text run at (272,0) width 184: ": A B C [D] * I X F G H"
--- /dev/null
+<html>
+<head>
+<script src=traversal.js language="JavaScript" type="text/JavaScript" ></script>
+<title>Traversal Test</title>
+</head>
+<body>
+<div id="test">
+<span id="A"></span><span id="B"></span><span id="C"></span><span id="D"></span><span id="E"></span><span id="F"></span><span id="G"></span><span id="H"></span><span id="I"></span>
+</div>
+<div style="font-family: Courier; font-size: 14;">
+<script>
+var parent = document.getElementById('test');
+var root = document.getElementById('A');
+
+function testNodeFiter(n)
+{
+ if (n.tagName == 'SPAN') return NodeFilter.FILTER_ACCEPT;
+ return NodeFilter.FILTER_SKIP;
+}
+
+var it = document.createNodeIterator(root, NodeFilter.SHOW_ELEMENT, testNodeFiter, false);
+for (i = 0; i < 4; i++)
+ it.nextNode();
+document.write(dumpNodeIterator(it, "ref node 'D'; pointer after"));
+
+// remove node 'E'
+document.write("<p>remove node 'E'");
+parent.removeChild(document.getElementById('E'));
+document.write(dumpNodeIterator(it, "ref node 'D'; pointer after"));
+
+// insert new node 'X' before 'F'
+document.write("<p>insert new node 'X' before 'F'");
+var X = document.createElement('SPAN');
+X.setAttribute('ID', 'X');
+parent.insertBefore(X, document.getElementById('F'));
+document.write(dumpNodeIterator(it, "ref node 'D'; pointer after"));
+
+// move node 'I' before 'X'
+document.write("<p>move node 'I' before 'X'");
+var I = document.getElementById('I');
+parent.removeChild(I);
+parent.insertBefore(I, X);
+document.write(dumpNodeIterator(it, "ref node 'D'; pointer after"));
+</script>
+</div>
+</body>
+</html>
--- /dev/null
+layer at (0,0) size 800x600
+ RenderCanvas at (0,0) size 800x600
+layer at (0,0) size 800x600
+ RenderBlock {HTML} at (0,0) size 800x600
+ RenderBody {BODY} at (8,8) size 784x578
+ RenderBlock {DIV} at (0,0) size 784x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderBlock {DIV} at (0,0) size 784x76
+ RenderBlock {P} at (0,0) size 784x16
+ RenderInline {B} at (0,0) size 272x16
+ RenderText {TEXT} at (0,0) size 272x16
+ text run at (0,0) width 272: "Expect ref node 'D'; pointer after"
+ RenderText {TEXT} at (272,0) size 184x16
+ text run at (272,0) width 184: ": A B C [D] * E F G H I"
+ RenderBlock {P} at (0,30) size 784x16
+ RenderText {TEXT} at (0,0) size 120x16
+ text run at (0,0) width 120: "remove node 'D'"
+ RenderBlock {P} at (0,60) size 784x16
+ RenderInline {B} at (0,0) size 272x16
+ RenderText {TEXT} at (0,0) size 272x16
+ text run at (0,0) width 272: "Expect ref node 'C'; pointer after"
+ RenderText {TEXT} at (272,0) size 168x16
+ text run at (272,0) width 168: ": A B [C] * E F G H I"
--- /dev/null
+<html>
+<head>
+<script src=traversal.js language="JavaScript" type="text/JavaScript" ></script>
+<title>Traversal Test</title>
+</head>
+<body>
+<div id="test">
+<span id="A"></span><span id="B"></span><span id="C"></span><span id="D"></span><span id="E"></span><span id="F"></span><span id="G"></span><span id="H"></span><span id="I"></span>
+</div>
+<div style="font-family: Courier; font-size: 14;">
+<script>
+var parent = document.getElementById('test');
+var root = document.getElementById('A');
+
+function testNodeFiter(n)
+{
+ if (n.tagName == 'SPAN') return NodeFilter.FILTER_ACCEPT;
+ return NodeFilter.FILTER_SKIP;
+}
+
+var it = document.createNodeIterator(root, NodeFilter.SHOW_ELEMENT, testNodeFiter, false);
+for (i = 0; i < 4; i++)
+ it.nextNode();
+document.write(dumpNodeIterator(it, "ref node 'D'; pointer after"));
+
+// remove node 'D'
+document.write("<p>remove node 'D'");
+parent.removeChild(document.getElementById('D'));
+document.write(dumpNodeIterator(it, "ref node 'C'; pointer after"));
+</script>
+</div>
+</body>
+</html>
--- /dev/null
+layer at (0,0) size 800x600
+ RenderCanvas at (0,0) size 800x600
+layer at (0,0) size 800x600
+ RenderBlock {HTML} at (0,0) size 800x600
+ RenderBody {BODY} at (8,8) size 784x578
+ RenderBlock {DIV} at (0,0) size 784x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderBlock {DIV} at (0,0) size 784x76
+ RenderBlock {P} at (0,0) size 784x16
+ RenderInline {B} at (0,0) size 280x16
+ RenderText {TEXT} at (0,0) size 280x16
+ text run at (0,0) width 280: "Expect ref node 'E'; pointer before"
+ RenderText {TEXT} at (280,0) size 184x16
+ text run at (280,0) width 184: ": A B C D * [E] F G H I"
+ RenderBlock {P} at (0,30) size 784x16
+ RenderText {TEXT} at (0,0) size 120x16
+ text run at (0,0) width 120: "remove node 'E'"
+ RenderBlock {P} at (0,60) size 784x16
+ RenderInline {B} at (0,0) size 280x16
+ RenderText {TEXT} at (0,0) size 280x16
+ text run at (0,0) width 280: "Expect ref node 'F'; pointer before"
+ RenderText {TEXT} at (280,0) size 168x16
+ text run at (280,0) width 168: ": A B C D * [F] G H I"
--- /dev/null
+<html>
+<head>
+<script src=traversal.js language="JavaScript" type="text/JavaScript" ></script>
+<title>Traversal Test</title>
+</head>
+<body>
+<div id="test">
+<span id="A"></span><span id="B"></span><span id="C"></span><span id="D"></span><span id="E"></span><span id="F"></span><span id="G"></span><span id="H"></span><span id="I"></span>
+</div>
+<div style="font-family: Courier; font-size: 14;">
+<script>
+var parent = document.getElementById('test');
+var root = document.getElementById('A');
+
+function testNodeFiter(n)
+{
+ if (n.tagName == 'SPAN') return NodeFilter.FILTER_ACCEPT;
+ return NodeFilter.FILTER_SKIP;
+}
+
+var it = document.createNodeIterator(root, NodeFilter.SHOW_ELEMENT, testNodeFiter, false);
+for (i = 0; i < 5; i++)
+ it.nextNode();
+it.previousNode();
+document.write(dumpNodeIterator(it, "ref node 'E'; pointer before"));
+
+// remove node 'E'
+document.write("<p>remove node 'E'");
+parent.removeChild(document.getElementById('E'));
+document.write(dumpNodeIterator(it, "ref node 'F'; pointer before"));
+</script>
+</div>
+</body>
+</html>
--- /dev/null
+layer at (0,0) size 800x600
+ RenderCanvas at (0,0) size 800x600
+layer at (0,0) size 800x600
+ RenderBlock {HTML} at (0,0) size 800x600
+ RenderBody {BODY} at (8,8) size 784x578
+ RenderBlock {DIV} at (0,0) size 784x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderBlock {DIV} at (0,0) size 784x76
+ RenderBlock {P} at (0,0) size 784x16
+ RenderInline {B} at (0,0) size 272x16
+ RenderText {TEXT} at (0,0) size 272x16
+ text run at (0,0) width 272: "Expect ref node 'D'; pointer after"
+ RenderText {TEXT} at (272,0) size 184x16
+ text run at (272,0) width 184: ": A B C [D] * E F G H I"
+ RenderBlock {P} at (0,30) size 784x16
+ RenderText {TEXT} at (0,0) size 120x16
+ text run at (0,0) width 120: "remove node 'D'"
+ RenderBlock {P} at (0,60) size 784x16
+ RenderInline {B} at (0,0) size 272x16
+ RenderText {TEXT} at (0,0) size 272x16
+ text run at (0,0) width 272: "Expect ref node 'C'; pointer after"
+ RenderText {TEXT} at (272,0) size 184x16
+ text run at (272,0) width 184: ": A B [C] * E F G H I D"
--- /dev/null
+<html>
+<head>
+<script src=traversal.js language="JavaScript" type="text/JavaScript" ></script>
+<title>Traversal Test</title>
+</head>
+<body>
+<div id="test">
+<span id="A"></span><span id="B"></span><span id="C"></span><span id="D"></span><span id="E"></span><span id="F"></span><span id="G"></span><span id="H"></span><span id="I"></span>
+</div>
+<div style="font-family: Courier; font-size: 14;">
+<script>
+var parent = document.getElementById('test');
+var root = document.getElementById('A');
+
+function testNodeFiter(n)
+{
+ if (n.tagName == 'SPAN') return NodeFilter.FILTER_ACCEPT;
+ return NodeFilter.FILTER_SKIP;
+}
+
+var it = document.createNodeIterator(root, NodeFilter.SHOW_ELEMENT, testNodeFiter, false);
+for (i = 0; i < 4; i++)
+ it.nextNode();
+document.write(dumpNodeIterator(it, "ref node 'D'; pointer after"));
+
+// remove node 'D'; insert it at the end
+document.write("<p>remove node 'D'");
+var D = document.getElementById('D');
+parent.removeChild(D);
+parent.appendChild(D);
+document.write(dumpNodeIterator(it, "ref node 'C'; pointer after"));
+</script>
+</div>
+</body>
+</html>
--- /dev/null
+layer at (0,0) size 800x600
+ RenderCanvas at (0,0) size 800x600
+layer at (0,0) size 800x600
+ RenderBlock {HTML} at (0,0) size 800x600
+ RenderBody {BODY} at (8,8) size 784x578
+ RenderBlock {DIV} at (0,0) size 784x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderBlock {DIV} at (0,0) size 784x76
+ RenderBlock {P} at (0,0) size 784x16
+ RenderInline {B} at (0,0) size 280x16
+ RenderText {TEXT} at (0,0) size 280x16
+ text run at (0,0) width 280: "Expect ref node 'C'; pointer before"
+ RenderText {TEXT} at (280,0) size 88x16
+ text run at (280,0) width 88: ": A B * [C]"
+ RenderBlock {P} at (0,30) size 784x16
+ RenderText {TEXT} at (0,0) size 120x16
+ text run at (0,0) width 120: "remove node 'C'"
+ RenderBlock {P} at (0,60) size 784x16
+ RenderInline {B} at (0,0) size 272x16
+ RenderText {TEXT} at (0,0) size 272x16
+ text run at (0,0) width 272: "Expect ref node 'B'; pointer after"
+ RenderText {TEXT} at (272,0) size 72x16
+ text run at (272,0) width 72: ": A [B] *"
--- /dev/null
+<html>
+<head>
+<script src=traversal.js language="JavaScript" type="text/JavaScript" ></script>
+<title>Traversal Test</title>
+</head>
+<body>
+<div id="test">
+<span id="A"></span><span id="B"></span><span id="C"></span>
+</div>
+<div style="font-family: Courier; font-size: 14;">
+<script>
+var parent = document.getElementById('test');
+var root = document.getElementById('A');
+
+function testNodeFiter(n)
+{
+ if (n.tagName == 'SPAN') return NodeFilter.FILTER_ACCEPT;
+ return NodeFilter.FILTER_SKIP;
+}
+
+var it = document.createNodeIterator(root, NodeFilter.SHOW_ELEMENT, testNodeFiter, false);
+for (i = 0; i < 3; i++)
+ it.nextNode();
+ it.previousNode();
+document.write(dumpNodeIterator(it, "ref node 'C'; pointer before"));
+
+// remove node 'C'
+document.write("<p>remove node 'C'");
+var D = document.getElementById('C');
+parent.removeChild(D);
+document.write(dumpNodeIterator(it, "ref node 'B'; pointer after"));
+</script>
+</div>
+</body>
+</html>
--- /dev/null
+layer at (0,0) size 800x600
+ RenderCanvas at (0,0) size 800x600
+layer at (0,0) size 800x600
+ RenderBlock {HTML} at (0,0) size 800x600
+ RenderBody {BODY} at (8,8) size 784x578
+ RenderBlock {DIV} at (0,0) size 784x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderBlock {DIV} at (0,0) size 784x76
+ RenderBlock {P} at (0,0) size 784x16
+ RenderInline {B} at (0,0) size 272x16
+ RenderText {TEXT} at (0,0) size 272x16
+ text run at (0,0) width 272: "Expect ref node 'D'; pointer after"
+ RenderText {TEXT} at (272,0) size 184x16
+ text run at (272,0) width 184: ": A B C [D] * E F G H I"
+ RenderBlock {P} at (0,30) size 784x16
+ RenderText {TEXT} at (0,0) size 120x16
+ text run at (0,0) width 120: "remove node 'C'"
+ RenderBlock {P} at (0,60) size 784x16
+ RenderInline {B} at (0,0) size 272x16
+ RenderText {TEXT} at (0,0) size 272x16
+ text run at (0,0) width 272: "Expect ref node 'B'; pointer after"
+ RenderText {TEXT} at (272,0) size 120x16
+ text run at (272,0) width 120: ": A [B] * G H I"
--- /dev/null
+<html>
+<head>
+<script src=traversal.js language="JavaScript" type="text/JavaScript" ></script>
+<title>Traversal Test</title>
+</head>
+<body>
+<div id="test">
+<span id="A"></span><span id="B"></span><span id="C"><span id="D"></span><span id="E"></span><span id="F"></span></span><span id="G"></span><span id="H"></span><span id="I"></span>
+</div>
+<div style="font-family: Courier; font-size: 14;">
+<script>
+var parent = document.getElementById('test');
+var root = document.getElementById('A');
+
+function testNodeFiter(n)
+{
+ if (n.tagName == 'SPAN') return NodeFilter.FILTER_ACCEPT;
+ return NodeFilter.FILTER_SKIP;
+}
+
+var it = document.createNodeIterator(root, NodeFilter.SHOW_ELEMENT, testNodeFiter, false);
+for (i = 0; i < 4; i++)
+ it.nextNode();
+document.write(dumpNodeIterator(it, "ref node 'D'; pointer after"));
+
+// remove node 'C'
+document.write("<p>remove node 'C'");
+var D = document.getElementById('C');
+parent.removeChild(D);
+document.write(dumpNodeIterator(it, "ref node 'B'; pointer after"));
+</script>
+</div>
+</body>
+</html>
--- /dev/null
+//-------------------------------------------------------------------------------------------------------
+// Java script library to run traversal layout tests
+
+function dumpNodeIterator(it, expectedResult) {
+ var string = '<p><b>Expect ' + expectedResult + '</b>: ';
+ var checkIt = document.createNodeIterator(root, NodeFilter.SHOW_ELEMENT, testNodeFiter, false);
+ var printedPointer = false;
+ while (1) {
+ var node = checkIt.nextNode();
+ if (!node)
+ break;
+ if (!printedPointer && (it.referenceNode == node || it.referenceNode == undefined)) {
+ printedPointer = true;
+ var s = it.referenceNode == undefined ? node.id + ' ' : '[' + node.id + '] ';
+ if (it.pointerBeforeReferenceNode)
+ string += "* " + s;
+ else
+ string += s + "* ";
+ }
+ else {
+ string += node.id + " ";
+ }
+ }
+ return string;
+}
+
+//-------------------------------------------------------------------------------------------------------
+
+function nodeDepth(node) {
+ var depth = 0;
+ while ((node = node.parentNode))
+ depth++;
+ return depth;
+}
+
+//-------------------------------------------------------------------------------------------------------
+
+function dumpTreeWalker(tw, root, start, backwards) {
+ var string = '<p><b>Tree Walker: </b><br>';
+ if (root == undefined)
+ root = tw.currentNode;
+ var rootDepth = nodeDepth(root);
+ if (start == undefined)
+ start = root;
+ tw.currentNode = start;
+ string += start.id + '<br>';
+ while (1) {
+ var current = tw.currentNode;
+ if (backwards == undefined)
+ tw.nextNode();
+ else
+ backwards ? tw.previousNode() : tw.nextNode();
+ var n = tw.currentNode;
+ if (current == n)
+ break;
+ var depth = nodeDepth(n) - rootDepth;
+ for (i = 0; i < depth; i++)
+ string += ' ';
+ string += n.id + '<br>';
+ }
+ return string;
+}
+
+//-------------------------------------------------------------------------------------------------------
+
--- /dev/null
+layer at (0,0) size 800x600
+ RenderCanvas at (0,0) size 800x600
+layer at (0,0) size 800x600
+ RenderBlock {HTML} at (0,0) size 800x600
+ RenderBody {BODY} at (8,8) size 784x578
+ RenderBlock {DIV} at (0,0) size 784x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderBlock {DIV} at (0,0) size 784x272
+ RenderBlock {P} at (0,0) size 784x272
+ RenderInline {B} at (0,0) size 104x16
+ RenderText {TEXT} at (0,0) size 104x16
+ text run at (0,0) width 104: "Tree Walker: "
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,16) size 8x16
+ text run at (0,16) width 8: "A"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,32) size 40x16
+ text run at (0,32) width 40: " A.1"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,48) size 40x16
+ text run at (0,48) width 40: " A.2"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,64) size 40x16
+ text run at (0,64) width 40: " A.3"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,80) size 8x16
+ text run at (0,80) width 8: "B"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,96) size 40x16
+ text run at (0,96) width 40: " B.1"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,112) size 72x16
+ text run at (0,112) width 72: " B.1.1"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,128) size 8x16
+ text run at (0,128) width 8: "C"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,144) size 40x16
+ text run at (0,144) width 40: " C.1"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,160) size 72x16
+ text run at (0,160) width 72: " C.1.1"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,176) size 104x16
+ text run at (0,176) width 104: " C.1.1.1"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,192) size 104x16
+ text run at (0,192) width 104: " C.1.1.2"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,208) size 104x16
+ text run at (0,208) width 104: " C.1.1.3"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,224) size 72x16
+ text run at (0,224) width 72: " C.1.2"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,240) size 88x16
+ text run at (0,240) width 88: " C.2.1"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,256) size 8x16
+ text run at (0,256) width 8: "D"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
--- /dev/null
+<html>
+<head>
+<script src=traversal.js language="JavaScript" type="text/JavaScript" ></script>
+<title>Traversal Test</title>
+</head>
+<body>
+<div id="test">
+<span id="A">
+ <span id="A.1">
+ </span>
+ <span id="A.2">
+ </span>
+ <span id="A.3">
+ </span>
+</span>
+<span id="B">
+ <span id="B.1">
+ <span id="B.1.1">
+ </span>
+ </span>
+</span>
+<span id="C">
+ <span id="C.1">
+ <span id="C.1.1">
+ <span id="C.1.1.1">
+ </span>
+ <span id="C.1.1.2">
+ </span>
+ <span id="C.1.1.3">
+ </span>
+ </span>
+ <span id="C.1.2">
+ <span id="C.2.1">
+ </span>
+ </span>
+ </span>
+</span>
+<span id="D">
+</span>
+</div>
+<div style="font-family: Courier; font-size: 14; white-space: pre">
+<script>
+var root = document.getElementById('A');
+
+function testNodeFiter(n)
+{
+ if (n.tagName == 'SPAN') return NodeFilter.FILTER_ACCEPT;
+ return NodeFilter.FILTER_SKIP;
+}
+
+var tw = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT, testNodeFiter, false);
+document.write(dumpTreeWalker(tw, root));
+</script>
+</div>
+</body>
+</html>
--- /dev/null
+layer at (0,0) size 800x600
+ RenderCanvas at (0,0) size 800x600
+layer at (0,0) size 800x600
+ RenderBlock {HTML} at (0,0) size 800x600
+ RenderBody {BODY} at (8,8) size 784x578
+ RenderBlock {DIV} at (0,0) size 784x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderBlock {DIV} at (0,0) size 784x208
+ RenderBlock {P} at (0,0) size 784x208
+ RenderInline {B} at (0,0) size 104x16
+ RenderText {TEXT} at (0,0) size 104x16
+ text run at (0,0) width 104: "Tree Walker: "
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,16) size 8x16
+ text run at (0,16) width 8: "B"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,32) size 40x16
+ text run at (0,32) width 40: " B.1"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,48) size 72x16
+ text run at (0,48) width 72: " B.1.1"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,64) size 8x16
+ text run at (0,64) width 8: "C"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,80) size 40x16
+ text run at (0,80) width 40: " C.1"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,96) size 72x16
+ text run at (0,96) width 72: " C.1.1"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,112) size 104x16
+ text run at (0,112) width 104: " C.1.1.1"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,128) size 104x16
+ text run at (0,128) width 104: " C.1.1.2"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,144) size 104x16
+ text run at (0,144) width 104: " C.1.1.3"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,160) size 72x16
+ text run at (0,160) width 72: " C.1.2"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,176) size 88x16
+ text run at (0,176) width 88: " C.2.1"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,192) size 8x16
+ text run at (0,192) width 8: "D"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
--- /dev/null
+<html>
+<head>
+<script src=traversal.js language="JavaScript" type="text/JavaScript" ></script>
+<title>Traversal Test</title>
+</head>
+<body>
+<div id="test">
+<span id="A">
+ <span id="A.1">
+ </span>
+ <span id="A.2">
+ </span>
+ <span id="A.3">
+ </span>
+</span>
+<span id="B">
+ <span id="B.1">
+ <span id="B.1.1">
+ </span>
+ </span>
+</span>
+<span id="C">
+ <span id="C.1">
+ <span id="C.1.1">
+ <span id="C.1.1.1">
+ </span>
+ <span id="C.1.1.2">
+ </span>
+ <span id="C.1.1.3">
+ </span>
+ </span>
+ <span id="C.1.2">
+ <span id="C.2.1">
+ </span>
+ </span>
+ </span>
+</span>
+<span id="D">
+</span>
+</div>
+<div style="font-family: Courier; font-size: 14; white-space: pre">
+<script>
+var root = document.getElementById('B');
+
+function testNodeFiter(n)
+{
+ if (n.tagName == 'SPAN') return NodeFilter.FILTER_ACCEPT;
+ return NodeFilter.FILTER_SKIP;
+}
+
+var tw = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT, testNodeFiter, false);
+tw.previousNode();
+document.write(dumpTreeWalker(tw, root));
+</script>
+</div>
+</body>
+</html>
--- /dev/null
+layer at (0,0) size 800x600
+ RenderCanvas at (0,0) size 800x600
+layer at (0,0) size 800x600
+ RenderBlock {HTML} at (0,0) size 800x600
+ RenderBody {BODY} at (8,8) size 784x578
+ RenderBlock {DIV} at (0,0) size 784x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderBlock {DIV} at (0,0) size 784x430
+ RenderBlock {P} at (0,0) size 784x208
+ RenderInline {B} at (0,0) size 104x16
+ RenderText {TEXT} at (0,0) size 104x16
+ text run at (0,0) width 104: "Tree Walker: "
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,16) size 8x16
+ text run at (0,16) width 8: "A"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,32) size 40x16
+ text run at (0,32) width 40: " A.1"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,48) size 40x16
+ text run at (0,48) width 40: " A.2"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,64) size 40x16
+ text run at (0,64) width 40: " A.3"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,80) size 8x16
+ text run at (0,80) width 8: "B"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,96) size 40x16
+ text run at (0,96) width 40: " B.2"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,112) size 72x16
+ text run at (0,112) width 72: " B.2.1"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,128) size 8x16
+ text run at (0,128) width 8: "C"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,144) size 40x16
+ text run at (0,144) width 40: " C.1"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,160) size 72x16
+ text run at (0,160) width 72: " C.1.2"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,176) size 88x16
+ text run at (0,176) width 88: " C.2.1"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,192) size 8x16
+ text run at (0,192) width 8: "D"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderBlock {P} at (0,222) size 784x208
+ RenderInline {B} at (0,0) size 104x16
+ RenderText {TEXT} at (0,0) size 104x16
+ text run at (0,0) width 104: "Tree Walker: "
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,16) size 8x16
+ text run at (0,16) width 8: "D"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,32) size 88x16
+ text run at (0,32) width 88: " C.2.1"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,48) size 72x16
+ text run at (0,48) width 72: " C.1.2"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,64) size 40x16
+ text run at (0,64) width 40: " C.1"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,80) size 8x16
+ text run at (0,80) width 8: "C"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,96) size 72x16
+ text run at (0,96) width 72: " B.2.1"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,112) size 40x16
+ text run at (0,112) width 40: " B.2"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,128) size 8x16
+ text run at (0,128) width 8: "B"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,144) size 40x16
+ text run at (0,144) width 40: " A.3"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,160) size 40x16
+ text run at (0,160) width 40: " A.2"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,176) size 40x16
+ text run at (0,176) width 40: " A.1"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,192) size 8x16
+ text run at (0,192) width 8: "A"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
--- /dev/null
+<html>
+<head>
+<script src=traversal.js language="JavaScript" type="text/JavaScript" ></script>
+<title>Traversal Test</title>
+</head>
+<body>
+<div id="test">
+<span id="A">
+ <span id="A.1">
+ </span>
+ <span id="A.2">
+ </span>
+ <span id="A.3">
+ </span>
+</span>
+<span id="B">
+ <span id="B.1">
+ <span id="B.1.1">
+ </span>
+ <span id="B.1.2">
+ </span>
+ </span>
+ <span id="B.2">
+ <span id="B.2.1">
+ </span>
+ </span>
+</span>
+<span id="C">
+ <span id="C.1">
+ <span id="C.1.1">
+ <span id="C.1.1.1">
+ </span>
+ <span id="C.1.1.2">
+ </span>
+ <span id="C.1.1.3">
+ </span>
+ </span>
+ <span id="C.1.2">
+ <span id="C.2.1">
+ </span>
+ </span>
+ </span>
+</span>
+<span id="D">
+</span>
+</div>
+<div style="font-family: Courier; font-size: 14; white-space: pre">
+<script>
+var root = document.getElementById('A');
+
+function testNodeFiter(n)
+{
+ if (n.tagName == 'SPAN') {
+ if (n.id == 'B.1' || n.id == 'C.1.1')
+ return NodeFilter.FILTER_REJECT;
+ return NodeFilter.FILTER_ACCEPT;
+ }
+ return NodeFilter.FILTER_SKIP;
+}
+
+var tw1 = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT, testNodeFiter, false);
+document.write(dumpTreeWalker(tw1, root));
+
+var tw2 = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT, testNodeFiter, false);
+document.write(dumpTreeWalker(tw2, root, document.getElementById('D'), true));
+
+</script>
+</div>
+</body>
+</html>
--- /dev/null
+layer at (0,0) size 800x676
+ RenderCanvas at (0,0) size 800x600
+layer at (0,0) size 800x676
+ RenderBlock {HTML} at (0,0) size 800x676
+ RenderBody {BODY} at (8,8) size 784x654
+ RenderBlock {DIV} at (0,0) size 784x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
+ RenderBlock {DIV} at (0,0) size 784x654
+ RenderBlock {P} at (0,0) size 784x320
+ RenderInline {B} at (0,0) size 104x16
+ RenderText {TEXT} at (0,0) size 104x16
+ text run at (0,0) width 104: "Tree Walker: "
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,16) size 8x16
+ text run at (0,16) width 8: "A"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,32) size 40x16
+ text run at (0,32) width 40: " A.1"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,48) size 40x16
+ text run at (0,48) width 40: " A.2"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,64) size 40x16
+ text run at (0,64) width 40: " A.3"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,80) size 8x16
+ text run at (0,80) width 8: "B"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,96) size 40x16
+ text run at (0,96) width 40: " B.1"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,112) size 72x16
+ text run at (0,112) width 72: " B.1.1"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,128) size 72x16
+ text run at (0,128) width 72: " B.1.2"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,144) size 40x16
+ text run at (0,144) width 40: " B.2"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,160) size 72x16
+ text run at (0,160) width 72: " B.2.1"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,176) size 8x16
+ text run at (0,176) width 8: "C"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,192) size 40x16
+ text run at (0,192) width 40: " C.1"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,208) size 72x16
+ text run at (0,208) width 72: " C.1.1"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,224) size 104x16
+ text run at (0,224) width 104: " C.1.1.1"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,240) size 104x16
+ text run at (0,240) width 104: " C.1.1.2"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,256) size 104x16
+ text run at (0,256) width 104: " C.1.1.3"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,272) size 72x16
+ text run at (0,272) width 72: " C.1.2"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,288) size 88x16
+ text run at (0,288) width 88: " C.2.1"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,304) size 8x16
+ text run at (0,304) width 8: "D"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderBlock {P} at (0,334) size 784x320
+ RenderInline {B} at (0,0) size 104x16
+ RenderText {TEXT} at (0,0) size 104x16
+ text run at (0,0) width 104: "Tree Walker: "
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,16) size 8x16
+ text run at (0,16) width 8: "D"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,32) size 88x16
+ text run at (0,32) width 88: " C.2.1"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,48) size 72x16
+ text run at (0,48) width 72: " C.1.2"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,64) size 104x16
+ text run at (0,64) width 104: " C.1.1.3"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,80) size 104x16
+ text run at (0,80) width 104: " C.1.1.2"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,96) size 104x16
+ text run at (0,96) width 104: " C.1.1.1"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,112) size 72x16
+ text run at (0,112) width 72: " C.1.1"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,128) size 40x16
+ text run at (0,128) width 40: " C.1"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,144) size 8x16
+ text run at (0,144) width 8: "C"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,160) size 72x16
+ text run at (0,160) width 72: " B.2.1"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,176) size 40x16
+ text run at (0,176) width 40: " B.2"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,192) size 72x16
+ text run at (0,192) width 72: " B.1.2"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,208) size 72x16
+ text run at (0,208) width 72: " B.1.1"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,224) size 40x16
+ text run at (0,224) width 40: " B.1"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,240) size 8x16
+ text run at (0,240) width 8: "B"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,256) size 40x16
+ text run at (0,256) width 40: " A.3"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,272) size 40x16
+ text run at (0,272) width 40: " A.2"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,288) size 40x16
+ text run at (0,288) width 40: " A.1"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,304) size 8x16
+ text run at (0,304) width 8: "A"
+ RenderBR {BR} at (0,0) size 0x0
+ RenderText {TEXT} at (0,0) size 0x0
--- /dev/null
+<html>
+<head>
+<script src=traversal.js language="JavaScript" type="text/JavaScript" ></script>
+<title>Traversal Test</title>
+</head>
+<body>
+<div id="test">
+<span id="A">
+ <span id="A.1">
+ </span>
+ <span id="A.2">
+ </span>
+ <span id="A.3">
+ </span>
+</span>
+<span id="B">
+ <span id="B.1">
+ <span id="B.1.1">
+ </span>
+ <span id="B.1.2">
+ </span>
+ </span>
+ <span id="B.2">
+ <span id="B.2.1">
+ </span>
+ </span>
+</span>
+<span id="C">
+ <span id="C.1">
+ <span id="C.1.1">
+ <span id="C.1.1.1">
+ </span>
+ <span id="C.1.1.2">
+ </span>
+ <span id="C.1.1.3">
+ </span>
+ </span>
+ <span id="C.1.2">
+ <span id="C.2.1">
+ </span>
+ </span>
+ </span>
+</span>
+<span id="D">
+</span>
+</div>
+<div style="font-family: Courier; font-size: 14; white-space: pre">
+<script>
+var root = document.getElementById('A');
+
+function testNodeFiter(n)
+{
+ if (n.tagName == 'SPAN')
+ return NodeFilter.FILTER_ACCEPT;
+ return NodeFilter.FILTER_SKIP;
+}
+
+var tw1 = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT, testNodeFiter, false);
+document.write(dumpTreeWalker(tw1, root));
+
+var tw2 = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT, testNodeFiter, false);
+document.write(dumpTreeWalker(tw2, root, document.getElementById('D'), true));
+
+</script>
+</div>
+</body>
+</html>
2004-05-04 Ken Kocienda <kocienda@apple.com>
+ Reviewed by me
+
+ Added layout tests for DOM traversal objects.
+
+ * layout-tests/traversal/node-iterator-001-expected.txt: Added.
+ * layout-tests/traversal/node-iterator-001.html: Added.
+ * layout-tests/traversal/node-iterator-002-expected.txt: Added.
+ * layout-tests/traversal/node-iterator-002.html: Added.
+ * layout-tests/traversal/node-iterator-003-expected.txt: Added.
+ * layout-tests/traversal/node-iterator-003.html: Added.
+ * layout-tests/traversal/node-iterator-004-expected.txt: Added.
+ * layout-tests/traversal/node-iterator-004.html: Added.
+ * layout-tests/traversal/node-iterator-005-expected.txt: Added.
+ * layout-tests/traversal/node-iterator-005.html: Added.
+ * layout-tests/traversal/node-iterator-006-expected.txt: Added.
+ * layout-tests/traversal/node-iterator-006.html: Added.
+ * layout-tests/traversal/node-iterator-007-expected.txt: Added.
+ * layout-tests/traversal/node-iterator-007.html: Added.
+ * layout-tests/traversal/traversal.js: Added.
+ * layout-tests/traversal/tree-walker-001-expected.txt: Added.
+ * layout-tests/traversal/tree-walker-001.html: Added.
+ * layout-tests/traversal/tree-walker-002-expected.txt: Added.
+ * layout-tests/traversal/tree-walker-002.html: Added.
+ * layout-tests/traversal/tree-walker-003-expected.txt: Added.
+ * layout-tests/traversal/tree-walker-003.html: Added.
+ * layout-tests/traversal/tree-walker-004-expected.txt: Added.
+ * layout-tests/traversal/tree-walker-004.html: Added.
+
+2004-05-04 Ken Kocienda <kocienda@apple.com>
+
Reviewed by Hyatt
* khtml/xml/dom2_traversalimpl.cpp: