From 1a4936d7329c9298eeedb586480d99c06e0404fe Mon Sep 17 00:00:00 2001 From: Robin Getz Date: Fri, 28 Nov 2025 12:17:47 -0500 Subject: [PATCH] htmlreport: preserve filter state when navigating back/forward Currently, using browser back/forward buttons resets filtered issue lists, even though checkbox states persist. This is confusing and makes it hard to see the filtered results consistently. Changes: - Added a `reapplyFilters()` function that reapplies ID, severity, classification, and tool filters based on the current checkbox states. - Hooked `reapplyFilters()` to the `pageshow` event to restore filtered classes when navigating with back/forward. --- htmlreport/cppcheck-htmlreport | 51 ++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/htmlreport/cppcheck-htmlreport b/htmlreport/cppcheck-htmlreport index b33699ca2ed..ddf5e1709c9 100755 --- a/htmlreport/cppcheck-htmlreport +++ b/htmlreport/cppcheck-htmlreport @@ -356,6 +356,57 @@ HTML_HEAD = """ } } + function reapplyFilters() { + // Reapply ID filters + var idToggles = document.querySelectorAll(".idToggle"); + for (var i = 1; i < idToggles.length; i++) { + var cb = idToggles[i]; + var elements = document.querySelectorAll("." + cb.id); + for (var j = 0; j < elements.length; j++) { + elements[j].classList.toggle("id-filtered", !cb.checked); + } + } + + // Reapply severity filters + var sevToggles = document.querySelectorAll(".sev_toggle"); + for (var i = 0; i < sevToggles.length; i++) { + var cb = sevToggles[i]; + var elements = document.querySelectorAll(".sev_" + cb.id); + for (var j = 0; j < elements.length; j++) { + elements[j].classList.toggle("severity-filtered", !cb.checked); + } + } + + // Reapply classification filters + var classToggles = document.querySelectorAll(".class_toggle"); + for (var i = 0; i < classToggles.length; i++) { + var cb = classToggles[i]; + var elements = document.querySelectorAll(".class_" + cb.id); + for (var j = 0; j < elements.length; j++) { + elements[j].classList.toggle("classification-filtered", !cb.checked); + } + } + + // Reapply tool filters + var toolToggles = document.querySelectorAll(".tool_toggle"); + for (var i = 0; i < toolToggles.length; i++) { + var cb = toolToggles[i]; + var elements; + if (cb.id == "clang-tidy") + elements = document.querySelectorAll("[class^=clang-tidy-]"); + else + elements = document.querySelectorAll(".issue:not([class^=clang-tidy-])"); + + for (var j = 0; j < elements.length; j++) { + elements[j].classList.toggle("tool-filtered", !cb.checked); + } + } + + // Update file rows + updateFileRows(); + } + + window.addEventListener("pageshow", reapplyFilters); window.addEventListener("load", initExpandables);