Skip to content

Commit 071a007

Browse files
Moving domTraverseElements to XNode class. (#67)
1 parent 427f7b9 commit 071a007

File tree

2 files changed

+41
-44
lines changed

2 files changed

+41
-44
lines changed

src/dom/functions.ts

Lines changed: 0 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@
99
// the subset of the W3C DOM that is used in the XSLT implementation.
1010
import he from 'he';
1111

12-
import { DOM_ELEMENT_NODE } from "../constants";
13-
1412
import {
1513
namespaceMapAt
1614
} from './util';
@@ -80,39 +78,6 @@ export function domCreateDTDSection(doc: XDocument, data: any) {
8078
return doc.createDTDSection(data);
8179
}
8280

83-
// Traverses the element nodes in the DOM section underneath the given
84-
// node and invokes the given callbacks as methods on every element
85-
// node encountered. Function opt_pre is invoked before a node's
86-
// children are traversed; opt_post is invoked after they are
87-
// traversed. Traversal will not be continued if a callback function
88-
// returns boolean false. NOTE(mesch): copied from
89-
// <//google3/maps/webmaps/javascript/dom.js>.
90-
export function domTraverseElements(node: any, opt_pre: any, opt_post: any) {
91-
let ret;
92-
if (opt_pre) {
93-
ret = opt_pre.call(null, node);
94-
if (typeof ret == 'boolean' && !ret) {
95-
return false;
96-
}
97-
}
98-
99-
for (let c = node.firstChild; c; c = c.nextSibling) {
100-
if (c.nodeType == DOM_ELEMENT_NODE) {
101-
ret = domTraverseElements.call(this, c, opt_pre, opt_post);
102-
if (typeof ret == 'boolean' && !ret) {
103-
return false;
104-
}
105-
}
106-
}
107-
108-
if (opt_post) {
109-
ret = opt_post.call(null, node);
110-
if (typeof ret == 'boolean' && !ret) {
111-
return false;
112-
}
113-
}
114-
}
115-
11681
/**
11782
* Parses the given XML string with our custom, JavaScript XML parser
11883
* @param xml The XML String.

src/dom/xnode.ts

Lines changed: 41 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@
33
// where we can't reuse the HTML DOM for parsing our own XML, and for
44
// Safari, where it is too expensive to have the template processor
55

6-
import { DOM_ATTRIBUTE_NODE } from '../constants';
7-
import { domTraverseElements } from './functions';
6+
import { DOM_ATTRIBUTE_NODE, DOM_ELEMENT_NODE } from '../constants';
87

98
// operate on native DOM nodes.
109
export class XNode {
@@ -91,6 +90,39 @@ export class XNode {
9190
return [null, name];
9291
}
9392

93+
// Traverses the element nodes in the DOM section underneath the given
94+
// node and invokes the given callbacks as methods on every element
95+
// node encountered. Function opt_pre is invoked before a node's
96+
// children are traversed; opt_post is invoked after they are
97+
// traversed. Traversal will not be continued if a callback function
98+
// returns boolean false. NOTE(mesch): copied from
99+
// <//google3/maps/webmaps/javascript/dom.js>.
100+
protected domTraverseElements(node: any, opt_pre: any, opt_post: any) {
101+
let ret;
102+
if (opt_pre) {
103+
ret = opt_pre.call(null, node);
104+
if (typeof ret == 'boolean' && !ret) {
105+
return false;
106+
}
107+
}
108+
109+
for (let c = node.firstChild; c; c = c.nextSibling) {
110+
if (c.nodeType == DOM_ELEMENT_NODE) {
111+
ret = this.domTraverseElements.call(this, c, opt_pre, opt_post);
112+
if (typeof ret == 'boolean' && !ret) {
113+
return false;
114+
}
115+
}
116+
}
117+
118+
if (opt_post) {
119+
ret = opt_post.call(null, node);
120+
if (typeof ret == 'boolean' && !ret) {
121+
return false;
122+
}
123+
}
124+
}
125+
94126
static recycle(node: any) {
95127
if (!node) {
96128
return;
@@ -406,7 +438,7 @@ export class XNode {
406438
const ret = [];
407439
const self = this;
408440
if ('*' == name) {
409-
domTraverseElements(
441+
this.domTraverseElements(
410442
this,
411443
(node: any) => {
412444
if (self == node) return;
@@ -415,7 +447,7 @@ export class XNode {
415447
null
416448
);
417449
} else {
418-
domTraverseElements(
450+
this.domTraverseElements(
419451
this,
420452
(node: any) => {
421453
if (self == node) return;
@@ -433,7 +465,7 @@ export class XNode {
433465
const ret = [];
434466
const self = this;
435467
if ('*' == namespace && '*' == localName) {
436-
domTraverseElements(
468+
this.domTraverseElements(
437469
this,
438470
(node: any) => {
439471
if (self == node) return;
@@ -442,7 +474,7 @@ export class XNode {
442474
null
443475
);
444476
} else if ('*' == namespace) {
445-
domTraverseElements(
477+
this.domTraverseElements(
446478
this,
447479
(node: any) => {
448480
if (self == node) return;
@@ -451,7 +483,7 @@ export class XNode {
451483
null
452484
);
453485
} else if ('*' == localName) {
454-
domTraverseElements(
486+
this.domTraverseElements(
455487
this,
456488
(node: any) => {
457489
if (self == node) return;
@@ -460,7 +492,7 @@ export class XNode {
460492
null
461493
);
462494
} else {
463-
domTraverseElements(
495+
this.domTraverseElements(
464496
this,
465497
(node: any) => {
466498
if (self == node) return;
@@ -476,7 +508,7 @@ export class XNode {
476508

477509
getElementById(id: any): any {
478510
let ret = null;
479-
domTraverseElements(
511+
this.domTraverseElements(
480512
this,
481513
(node: any) => {
482514
if (node.getAttributeValue('id') == id) {

0 commit comments

Comments
 (0)