Skip to content

Commit 343e66d

Browse files
committed
Highlight search terms
1 parent cae1c92 commit 343e66d

File tree

1 file changed

+29
-12
lines changed

1 file changed

+29
-12
lines changed

devdocs-macos/user-scripts/page-search.js

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,24 @@
11
var 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+
320
var hasSearchTerm = function(string, term) {
4-
return string.indexOf(term) > -1;
21+
return new RegExp(escapeRegExp(term), 'i').test(string);
522
};
623

724
var 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

4969
var 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

Comments
 (0)