11var DATA_TEXTCONTENT = 'data-dd-original-textcontent' ;
22
3+ // From:
4+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
5+ var escapeRegExp = function ( string ) {
6+ return string . replace ( / [ . * + ? ^ $ { } ( ) | [ \] \\ ] / g, '\\$&' ) ; // $& means the whole matched string
7+ }
8+
9+ var mutateDOM = function ( mutations ) {
10+ return new Promise ( function ( resolve , _reject ) {
11+ requestAnimationFrame ( function ( ) {
12+ mutations . forEach ( function ( mut ) {
13+ mut ( ) ;
14+ } ) ;
15+ resolve ( true ) ;
16+ } ) ;
17+ } ) ;
18+ } ;
19+
320var hasSearchTerm = function ( string , term ) {
4- return string . indexOf ( term ) > - 1 ;
21+ return new RegExp ( escapeRegExp ( term ) , 'i' ) . test ( string ) ;
522} ;
623
724var highlightTermInNode = function ( node , term ) {
@@ -13,6 +30,13 @@ var highlightTermInNode = function(node, term) {
1330 // Make backup of original textContent.
1431 node . setAttribute ( DATA_TEXTCONTENT , content ) ;
1532 }
33+ const newContent = content . replace (
34+ new RegExp ( escapeRegExp ( term ) , 'gi' ) ,
35+ function ( match ) {
36+ return `<mark>${ match } </mark>` ;
37+ }
38+ ) ;
39+ node . innerHTML = newContent ;
1640 } ;
1741} ;
1842
@@ -39,11 +63,7 @@ var reset = function() {
3963 while ( treeWalker . nextNode ( ) ) {
4064 domMutations . push ( restoreNodeTextContent ( treeWalker . currentNode ) ) ;
4165 }
42- requestAnimationFrame ( function ( ) {
43- domMutations . forEach ( function ( mut ) {
44- mut ( ) ;
45- } ) ;
46- } ) ;
66+ return mutateDOM ( domMutations ) ;
4767} ;
4868
4969var search = function ( term ) {
@@ -68,11 +88,8 @@ var search = function(term) {
6888 } ) ;
6989 var domMutations = [ ] ;
7090 while ( treeWalker . nextNode ( ) ) {
71- domMutations . push ( highlightTermInNode ( treeWalker . currentNode . parentNode ) ) ;
91+ domMutations . push ( highlightTermInNode ( treeWalker . currentNode . parentNode , term ) ) ;
7292 }
73- requestAnimationFrame ( function ( ) {
74- domMutations . forEach ( function ( mut ) {
75- mut ( ) ;
76- } ) ;
77- } ) ;
93+ return mutateDOM ( domMutations ) ;
7894} ;
95+
0 commit comments