Signed-off-by: Francois Gouget fgouget@codeweavers.com --- winetest/build-patterns | 22 +++++++++++++++++++--- winetest/patterns.js | 26 +++++++++++++++++++++++++- 2 files changed, 44 insertions(+), 4 deletions(-)
diff --git a/winetest/build-patterns b/winetest/build-patterns index fc6f7edbe..a1691db3d 100755 --- a/winetest/build-patterns +++ b/winetest/build-patterns @@ -1465,8 +1465,22 @@ EOF if (!$nolist) { my @table = ("<details><summary>Page cutomization</summary> -<div class='detailsbox'><p>Uncheck the reports you do not want to see on this page.</p> -<table width='100%'>"); +<div class='detailsbox'><p>This section lets you select the reports to show on this page.</p><p>"); + if (!$subpage or $subpage eq "-tb-win") + { + push @table, "<label><input id='tbwin' class='groupcb' type='checkbox' checked> Show the TestBot Windows reports</label><br>"; + } + if (!$subpage or $subpage eq "-tb-wine") + { + push @table, "<label><input id='tbwine' class='groupcb' type='checkbox' checked> Show the Testbot Wine reports</label><br>"; + } + if (!$subpage) + { + push @table, "<label><input id='win' class='groupcb' type='checkbox' checked> Show the other Windows reports</label><br> +<label><input id='wine' class='groupcb' type='checkbox' checked> Show the other Wine reports</label>"; + } + push @table, "</p><p>Use the table below to hide specific reports.</p><table width='100%'>"; + my @reportmap; for (my $i = 0; $i < @sortedreports; $i++) { @@ -1482,7 +1496,9 @@ EOF my $reportindex = $reportmap[$i + $c]; last if (!defined $reportindex); my $reportdir = $sortedreports[$reportindex] || ""; - push @table, "<td><label><input class='reportcb' type='checkbox' id='$reportdir' checked> $reportdir</label></td>"; + my $report = $reports{$reportdir}; + my $group = " data-group='". ($report->{tag} =~ /^newtb-/ ? "tb" : "") . ($report->{is_wine} ? "wine" : "win") ."'"; + push @table, "<td><label><input class='reportcb'$group type='checkbox' id='$reportdir' checked> $reportdir</label></td>"; } push @table, "</tr>"; } diff --git a/winetest/patterns.js b/winetest/patterns.js index a70df079e..80ac4b868 100644 --- a/winetest/patterns.js +++ b/winetest/patterns.js @@ -50,6 +50,24 @@ function refreshPage(changes) } }
+function toggledGroupCB(e) +{ + const group = e.target.id; + const checked = e.target.checked; + + const changes = {}; + for (let key in cbs) + { + const cb = cbs[key]; + if (cb.group == group) + { + cb.dom.checked = checked; + changes[key] = checked; + } + } + refreshPage(changes); +} + function toggledReportCB(e) { const cb = e.target; @@ -60,11 +78,17 @@ function toggledReportCB(e)
function init() { + document.querySelectorAll("input.groupcb").forEach(domcb => { + domcb.addEventListener('click', toggledGroupCB); + }); + const changes = {}; cbs = {}; document.querySelectorAll("input.reportcb").forEach(domcb => { - cbs[domcb.id] = { checked: true, /* all reports are shown by default */ + cbs[domcb.id] = { dom: domcb, + checked: true, /* all reports are shown by default */ display: domcb.style.display, + group: domcb.getAttribute("data-group"), patlines: [] }; changes[domcb.id] = domcb.checked;