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.
109export 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