[search] filter script and style elements from search result summary text. (#12057)

Co-authored-by: Bénédikt Tran <10796600+picnixz@users.noreply.github.com>
This commit is contained in:
James Addison 2024-03-17 14:14:03 +00:00 committed by GitHub
parent b2069fb64f
commit bf0bec3b4b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 33 additions and 15 deletions

View File

@ -109,6 +109,9 @@ Bugs fixed
Patch by Bénédikt Tran.
* #11894: Do not add checksums to css files if building using the htmlhelp builder.
Patch by mkay.
* #12052: Remove ``<script>`` and ``<style>`` tags from the content of search result
summary snippets.
Patch by James Addison.
Testing
-------

View File

@ -162,7 +162,9 @@ const Search = {
htmlToText: (htmlString, anchor) => {
const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html');
htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() });
for (const removalQuery of [".headerlinks", "script", "style"]) {
htmlElement.querySelectorAll(removalQuery).forEach((el) => { el.remove() });
}
if (anchor) {
const anchorContent = htmlElement.querySelector(`[role="main"] ${anchor}`);
if (anchorContent) return anchorContent.textContent;

View File

@ -61,20 +61,33 @@ describe('Basic html theme search', function() {
describe("htmlToText", function() {
const testHTML = `<html>
<div class="body" role="main">
<section id="getting-started">
<h1>Getting Started</h1>
<p>Some text</p>
</section>
<section id="other-section">
<h1>Other Section</h1>
<p>Other text</p>
</section>
<section id="yet-another-section">
<h1>Yet Another Section</h1>
<p>More text</p>
</section>
</div>
<body>
<script src="directory/filename.js"></script>
<div class="body" role="main">
<script>
console.log('dynamic');
</script>
<style>
div.body p.centered {
text-align: center;
margin-top: 25px;
}
</style>
<!-- main content -->
<section id="getting-started">
<h1>Getting Started</h1>
<p>Some text</p>
</section>
<section id="other-section">
<h1>Other Section</h1>
<p>Other text</p>
</section>
<section id="yet-another-section">
<h1>Yet Another Section</h1>
<p>More text</p>
</section>
</div>
</body>
</html>`;
it("basic case", () => {