|
1 | 1 | (function() { |
2 | 2 | const DATA_TEXTCONTENT = 'data-dd-original-textcontent'; |
3 | 3 |
|
| 4 | + const rootSearchNode = function() { |
| 5 | + return document.querySelector('main[role="main"]'); |
| 6 | + }; |
| 7 | + |
4 | 8 | // From: |
5 | 9 | // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions |
6 | 10 | const escapeRegExp = function(string) { |
|
49 | 53 | }; |
50 | 54 |
|
51 | 55 | const reset = function() { |
52 | | - var mainNode = document.querySelector('main[role="main"]'); |
| 56 | + var mainNode = rootSearchNode(); |
53 | 57 | var treeWalker = document.createTreeWalker(mainNode, NodeFilter.SHOW_ELEMENT, { |
54 | 58 | acceptNode: function(node) { |
55 | 59 | if (node.hasAttribute(DATA_TEXTCONTENT)) { |
|
66 | 70 | }; |
67 | 71 |
|
68 | 72 | const search = function(term) { |
69 | | - var mainNode = document.querySelector('main[role="main"]'); |
| 73 | + var mainNode = rootSearchNode(); |
70 | 74 | var treeWalker = document.createTreeWalker(mainNode, NodeFilter.SHOW_TEXT, { |
71 | 75 | acceptNode: function(node) { |
72 | 76 | var parent = node.parentNode; |
73 | | - // TODO switching docs doesn't invalidate the nodes. |
74 | | - // MutationObserver to track? |
75 | 77 | if (parent.tagName === 'MARK') { |
76 | 78 | return NodeFilter.FILTER_REJECT; |
77 | 79 | } |
|
92 | 94 | return mutateDOM(domMutations); |
93 | 95 | }; |
94 | 96 |
|
| 97 | + // hacky, but seems to be the only reliable way to clear search results on |
| 98 | + // page change. |
| 99 | + (function() { |
| 100 | + const observer = new MutationObserver(() => { |
| 101 | + reset(); |
| 102 | + }); |
| 103 | + const titleEl = document.querySelector('title'); |
| 104 | + observer.observe(titleEl, { |
| 105 | + childList: true, |
| 106 | + characterData: true, |
| 107 | + subtree: true, |
| 108 | + }); |
| 109 | + })(); |
| 110 | + |
95 | 111 | window.search = function(term) { |
96 | 112 | if (term === '' || typeof term !== 'string') { |
97 | 113 | return; |
|
0 commit comments