Coverage for lobster/tools/core/html_report/html_report_js.py: 100%
1 statements
« prev ^ index » next coverage.py v7.10.7, created at 2026-09-22 04:43 +0000
« prev ^ index » next coverage.py v7.10.7, created at 2026-09-22 04:43 +0000
1# LOBSTER - Lightweight Open BMW Software Traceability Evidence Report
2# Copyright (C) 2024-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
3#
4# This program is free software: you can redistribute it and/or modify
5# it under the terms of the GNU Affero General Public License as
6# published by the Free Software Foundation, either version 3 of the
7# License, or (at your option) any later version.
8#
9# This program is distributed in the hope that it will be useful, but
10# WITHOUT ANY WARRANTY; without even the implied warranty of
11# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12# Affero General Public License for more details.
13#
14# You should have received a copy of the GNU Affero General Public
15# License along with this program. If not, see
16# <https://www.gnu.org/licenses/>.
18JAVA_SCRIPT = """
19function buttonFilter(filter) {
20 var elms = document.getElementsByTagName("div");
21 var issue_elms = document.getElementsByClassName("issue");
22 for (i = 0; i < elms.length; i++) {
23 if (elms[i].id.startsWith("item-")) {
24 console.log("elms[i].className ", elms[i].className)
25 if (filter == "all") {
26 elms[i].style.display = "block";
27 } else if (elms[i].className == "item-" + filter) {
28 elms[i].style.display = "block";
29 } else {
30 elms[i].style.display = "none";
31 }
32 }
33 }
34 // filter the issues list based on the issue filter button clicked
35 for (i = 0; i < issue_elms.length; i++) {
36 console.log("log ", issue_elms[i].className)
37 if (filter == "all") {
38 issue_elms[i].style.display = "list-item";
39 } else if (issue_elms[i].className.includes("issue issue-" + filter)) {
40 issue_elms[i].style.display = "list-item";
41 } else {
42 issue_elms[i].style.display = "none";
43 }
44 }
45 activeButton(filter);
46 //call the search filering which could have been overwritten by the current filtering
47 searchItem();
48}
51function activeButton(filter) {
52 var elms = document.getElementsByTagName("button");
53 console.log("the click buitton is " + filter);
54 for (i = 0; i < elms.length; i++) {
55 if (elms[i].className.includes("buttonActive")) {
56 console.log("elem active found : " + elms[i].className);
57 elms[i].className = elms[i].className.replace("buttonActive", "");
58 } else if (elms[i].className.toLowerCase().includes("button" + filter.toLowerCase())) {
59 console.log("elem to be activated found : " + elms[i].className);
60 elms[i].className = elms[i].className + " buttonActive";
61 }
62 }
63}
66function ToggleIssues() {
67 var div_issue = document.getElementById("issues-section");
68 if (div_issue.style.display == "block" || div_issue.style.display == "") {
69 div_issue.style.display = "none";
70 document.getElementById("BtnToggleIssue").innerHTML = "Show Issues";
71 document.getElementById("BtnToggleIssue").className = document.getElementById("BtnToggleIssue").className + " buttonActive";
72 } else {
73 div_issue.style = 'display: block; flex-direction: column; height: 200px;' +
74 'overflow:auto;';
75 document.getElementById("BtnToggleIssue").innerHTML = "Hide Issues";
76 document.getElementById("BtnToggleIssue").className = document.getElementById("BtnToggleIssue").className.replace("buttonActive", "");
77 }
78}
81function searchItem() {
82 var input = document.getElementById('search').value
83 input = input.toLowerCase();
85 var divs = document.getElementsByClassName('item-name');
86 for (i = 0; i < divs.length; i++) {
87 var title = divs[i].parentNode.getAttribute("title");
88 // get requirement name: 2nd part when we cut the long string with /svg
89 var reqname = divs[i].innerHTML.toLowerCase().split("</svg>").pop();
90 reqname = reqname.split(" ").pop();
91 if (reqname.includes(input)) {
92 // the search pattern has been found, if this elem has the title "hidden-not-matching", put it back to diplayed
93 if (title) {
94 if (title.startsWith("hidden-not-matching")) {
95 divs[i].parentNode.style.display = "block";
96 }
97 }
98 divs[i].parentNode.setAttribute("title", "matching-" + input)
99 } else {
100 // not maching, we hide
101 divs[i].parentNode.setAttribute("title", "hidden-not-matching")
102 divs[i].parentNode.style.display = "none";
103 }
104 }
105}
106"""