Skip to content

gh-115317: Rewrite changelog filter to use vanilla JavaScript #115324

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 7 commits into from
Feb 12, 2024
Merged
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 28 additions & 25 deletions Doc/tools/static/changelog_search.js
Original file line number Diff line number Diff line change
@@ -1,53 +1,56 @@
$(document).ready(function() {
document.addEventListener('DOMContentLoaded', function() {
// add the search form and bind the events
$('h1').after([
document.querySelector('h1').insertAdjacentHTML('afterend', [
'<p>Filter entries by content:',
'<input type="text" value="" id="searchbox" style="width: 50%">',
'<input type="submit" id="searchbox-submit" value="Filter"></p>'
].join('\n'));

function dofilter() {
let query;
try {
var query = new RegExp($('#searchbox').val(), 'i');
query = new RegExp(document.querySelector('#searchbox').value, 'i');
}
catch (e) {
return; // not a valid regex (yet)
}
// find headers for the versions (What's new in Python X.Y.Z?)
$('#changelog h2').each(function(index1, h2) {
var h2_parent = $(h2).parent();
var sections_found = 0;
const h2s = document.querySelectorAll('#changelog h2');
for(let h2 of h2s) {
let sections_found = 0;
// find headers for the sections (Core, Library, etc.)
h2_parent.find('h3').each(function(index2, h3) {
var h3_parent = $(h3).parent();
var entries_found = 0;
const h3s = h2.parentNode.querySelectorAll('h3');
for(let h3 of h3s) {
let entries_found = 0;
// find all the entries
h3_parent.find('li').each(function(index3, li) {
var li = $(li);
const lis = h3.parentNode.querySelectorAll('li');
for(let li of lis) {
// check if the query matches the entry
if (query.test(li.text())) {
li.show();
if (query.test(li.textContent)) {
li.style.display = 'block';
entries_found++;
}
else {
li.hide();
li.style.display = 'none';
}
});
}
// if there are entries, show the section, otherwise hide it
if (entries_found > 0) {
h3_parent.show();
h3.parentNode.style.display = 'block';
sections_found++;
}
else {
h3_parent.hide();
h3.parentNode.style.display = 'none';
}
});
if (sections_found > 0)
h2_parent.show();
else
h2_parent.hide();
});
}
if (sections_found > 0) {
h2.parentNode.style.display = 'block';
}
else {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this is the more common formatting for blocks in js

Suggested change
}
else {
} else {

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, I'm going to just run Prettier on this :)

h2.parentNode.style.display = 'none';
}
}
}
$('#searchbox').keyup(dofilter);
$('#searchbox-submit').click(dofilter);
document.querySelector('#searchbox').addEventListener('keyup', dofilter);
document.querySelector('#searchbox-submit').addEventListener('click', dofilter);
});