Skip to content

Commit 2bb5ef2

Browse files
authored
fix(html): make HTML column sorting consistent across index pages (fix #1766) (#1768)
* Add ids to column headers that you can sort by. * Use table header ids to remember sort columns, special casing the function/class column. * Rename 'function_or_class' and related names to 'region' and related. * Use 'file' as placeholder for the th id, so we sort on file in the absence of a recorded column id. * Fix bug of incorrectly recording direction changes. * Use 'let' instead of 'var' in the new code. * Update gold HTML tests. * Support scrubbing temporary paths in test_html.py on Windows. * Fix long line in test_html. * Add gold files for test_html partial (needs running tests on Python < 3.10). * Use scrub for Windows path when running test suite in all OSes. * Move scrubbing of Windows paths into test_other.
1 parent f34a353 commit 2bb5ef2

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+577
-489
lines changed

coverage/htmlfiles/coverage_html.js

+50-4
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,32 @@ function sortColumn(th) {
8181
.forEach(tr => tr.parentElement.appendChild(tr));
8282

8383
// Save the sort order for next time.
84-
localStorage.setItem(coverage.INDEX_SORT_STORAGE, JSON.stringify({column, direction}));
84+
if (th.id !== "region") {
85+
let th_id = "file"; // Sort by file if we don't have a column id
86+
let current_direction = direction;
87+
const stored_list = localStorage.getItem(coverage.INDEX_SORT_STORAGE);
88+
if (stored_list) {
89+
({th_id, direction} = JSON.parse(stored_list))
90+
}
91+
localStorage.setItem(coverage.INDEX_SORT_STORAGE, JSON.stringify({
92+
"th_id": th.id,
93+
"direction": current_direction
94+
}));
95+
if (th.id !== th_id || document.getElementById("region")) {
96+
// Sort column has changed, unset sorting by function or class.
97+
localStorage.setItem(coverage.SORTED_BY_REGION, JSON.stringify({
98+
"by_region": false,
99+
"region_direction": current_direction
100+
}));
101+
}
102+
}
103+
else {
104+
// Sort column has changed to by function or class, remember that.
105+
localStorage.setItem(coverage.SORTED_BY_REGION, JSON.stringify({
106+
"by_region": true,
107+
"region_direction": direction
108+
}));
109+
}
85110
}
86111

87112
// Find all the elements with data-shortcut attribute, and use them to assign a shortcut key.
@@ -223,18 +248,39 @@ coverage.wire_up_sorting = function () {
223248
);
224249

225250
// Look for a localStorage item containing previous sort settings:
226-
var column = 0, direction = "ascending";
251+
let th_id = "file", direction = "ascending";
227252
const stored_list = localStorage.getItem(coverage.INDEX_SORT_STORAGE);
228253
if (stored_list) {
229-
({column, direction} = JSON.parse(stored_list));
254+
({th_id, direction} = JSON.parse(stored_list));
255+
}
256+
let by_region = false, region_direction = "ascending";
257+
const sorted_by_region = localStorage.getItem(coverage.SORTED_BY_REGION);
258+
if (sorted_by_region) {
259+
({
260+
by_region,
261+
region_direction
262+
} = JSON.parse(sorted_by_region));
230263
}
231264

232-
const th = document.querySelector("[data-sortable]").tHead.rows[0].cells[column]; // nosemgrep: eslint.detect-object-injection
265+
const region_id = "region";
266+
if (by_region && document.getElementById(region_id)) {
267+
direction = region_direction;
268+
}
269+
// If we are in a page that has a column with id of "region", sort on
270+
// it if the last sort was by function or class.
271+
let th;
272+
if (document.getElementById(region_id)) {
273+
th = document.getElementById(by_region ? region_id : th_id);
274+
}
275+
else {
276+
th = document.getElementById(th_id);
277+
}
233278
th.setAttribute("aria-sort", direction === "ascending" ? "descending" : "ascending");
234279
th.click()
235280
};
236281

237282
coverage.INDEX_SORT_STORAGE = "COVERAGE_INDEX_SORT_2";
283+
coverage.SORTED_BY_REGION = "COVERAGE_SORT_REGION";
238284

239285
// Loaded on index.html
240286
coverage.index_ready = function () {

coverage/htmlfiles/index.html

+8-8
Original file line numberDiff line numberDiff line change
@@ -82,18 +82,18 @@ <h2>
8282
<thead>
8383
{# The title="" attr doesn't work in Safari. #}
8484
<tr class="tablehead" title="Click to sort">
85-
<th class="name left" aria-sort="none" data-shortcut="f">File<span class="arrows"></span></th>
85+
<th id="file" class="name left" aria-sort="none" data-shortcut="f">File<span class="arrows"></span></th>
8686
{% if column2 %}
87-
<th class="name left" aria-sort="none" data-default-sort-order="ascending" data-shortcut="n">{{ column2 }}<span class="arrows"></span></th>
87+
<th id="region" class="name left" aria-sort="none" data-default-sort-order="ascending" data-shortcut="n">{{ column2 }}<span class="arrows"></span></th>
8888
{% endif %}
89-
<th aria-sort="none" data-default-sort-order="descending" data-shortcut="s">statements<span class="arrows"></span></th>
90-
<th aria-sort="none" data-default-sort-order="descending" data-shortcut="m">missing<span class="arrows"></span></th>
91-
<th aria-sort="none" data-default-sort-order="descending" data-shortcut="x">excluded<span class="arrows"></span></th>
89+
<th id="statements" aria-sort="none" data-default-sort-order="descending" data-shortcut="s">statements<span class="arrows"></span></th>
90+
<th id="missing" aria-sort="none" data-default-sort-order="descending" data-shortcut="m">missing<span class="arrows"></span></th>
91+
<th id="excluded" aria-sort="none" data-default-sort-order="descending" data-shortcut="x">excluded<span class="arrows"></span></th>
9292
{% if has_arcs %}
93-
<th aria-sort="none" data-default-sort-order="descending" data-shortcut="b">branches<span class="arrows"></span></th>
94-
<th aria-sort="none" data-default-sort-order="descending" data-shortcut="p">partial<span class="arrows"></span></th>
93+
<th id="branches" aria-sort="none" data-default-sort-order="descending" data-shortcut="b">branches<span class="arrows"></span></th>
94+
<th id="partial" aria-sort="none" data-default-sort-order="descending" data-shortcut="p">partial<span class="arrows"></span></th>
9595
{% endif %}
96-
<th class="right" aria-sort="none" data-shortcut="c">coverage<span class="arrows"></span></th>
96+
<th id="coverage" class="right" aria-sort="none" data-shortcut="c">coverage<span class="arrows"></span></th>
9797
</tr>
9898
</thead>
9999
<tbody>

tests/gold/html/a/class_index.html

+10-10
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
55
<title>Coverage report</title>
66
<link rel="icon" sizes="32x32" href="favicon_32_cb_58284776.png">
7-
<link rel="stylesheet" href="style_cb_8e611ae1.css" type="text/css">
8-
<script src="coverage_html_cb_606408f0.js" defer></script>
7+
<link rel="stylesheet" href="style_cb_718ce007.css" type="text/css">
8+
<script src="coverage_html_cb_d1c4fcc4.js" defer></script>
99
</head>
1010
<body class="indexfile">
1111
<header>
@@ -55,20 +55,20 @@ <h2>
5555
</h2>
5656
<p class="text">
5757
<a class="nav" href="https://coverage.readthedocs.io/en/7.5.1a0.dev1">coverage.py v7.5.1a0.dev1</a>,
58-
created at 2024-04-24 09:22 -0400
58+
created at 2024-04-28 13:13 -0300
5959
</p>
6060
</div>
6161
</header>
6262
<main id="index">
6363
<table class="index" data-sortable>
6464
<thead>
6565
<tr class="tablehead" title="Click to sort">
66-
<th class="name left" aria-sort="none" data-shortcut="f">File<span class="arrows"></span></th>
67-
<th class="name left" aria-sort="none" data-default-sort-order="ascending" data-shortcut="n">class<span class="arrows"></span></th>
68-
<th aria-sort="none" data-default-sort-order="descending" data-shortcut="s">statements<span class="arrows"></span></th>
69-
<th aria-sort="none" data-default-sort-order="descending" data-shortcut="m">missing<span class="arrows"></span></th>
70-
<th aria-sort="none" data-default-sort-order="descending" data-shortcut="x">excluded<span class="arrows"></span></th>
71-
<th class="right" aria-sort="none" data-shortcut="c">coverage<span class="arrows"></span></th>
66+
<th id="file" class="name left" aria-sort="none" data-shortcut="f">File<span class="arrows"></span></th>
67+
<th id="region" class="name left" aria-sort="none" data-default-sort-order="ascending" data-shortcut="n">class<span class="arrows"></span></th>
68+
<th id="statements" aria-sort="none" data-default-sort-order="descending" data-shortcut="s">statements<span class="arrows"></span></th>
69+
<th id="missing" aria-sort="none" data-default-sort-order="descending" data-shortcut="m">missing<span class="arrows"></span></th>
70+
<th id="excluded" aria-sort="none" data-default-sort-order="descending" data-shortcut="x">excluded<span class="arrows"></span></th>
71+
<th id="coverage" class="right" aria-sort="none" data-shortcut="c">coverage<span class="arrows"></span></th>
7272
</tr>
7373
</thead>
7474
<tbody>
@@ -100,7 +100,7 @@ <h2>
100100
<div class="content">
101101
<p>
102102
<a class="nav" href="https://coverage.readthedocs.io/en/7.5.1a0.dev1">coverage.py v7.5.1a0.dev1</a>,
103-
created at 2024-04-24 09:22 -0400
103+
created at 2024-04-28 13:13 -0300
104104
</p>
105105
</div>
106106
<aside class="hidden">

tests/gold/html/a/function_index.html

+10-10
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
55
<title>Coverage report</title>
66
<link rel="icon" sizes="32x32" href="favicon_32_cb_58284776.png">
7-
<link rel="stylesheet" href="style_cb_8e611ae1.css" type="text/css">
8-
<script src="coverage_html_cb_606408f0.js" defer></script>
7+
<link rel="stylesheet" href="style_cb_718ce007.css" type="text/css">
8+
<script src="coverage_html_cb_d1c4fcc4.js" defer></script>
99
</head>
1010
<body class="indexfile">
1111
<header>
@@ -55,20 +55,20 @@ <h2>
5555
</h2>
5656
<p class="text">
5757
<a class="nav" href="https://coverage.readthedocs.io/en/7.5.1a0.dev1">coverage.py v7.5.1a0.dev1</a>,
58-
created at 2024-04-24 09:22 -0400
58+
created at 2024-04-28 13:13 -0300
5959
</p>
6060
</div>
6161
</header>
6262
<main id="index">
6363
<table class="index" data-sortable>
6464
<thead>
6565
<tr class="tablehead" title="Click to sort">
66-
<th class="name left" aria-sort="none" data-shortcut="f">File<span class="arrows"></span></th>
67-
<th class="name left" aria-sort="none" data-default-sort-order="ascending" data-shortcut="n">function<span class="arrows"></span></th>
68-
<th aria-sort="none" data-default-sort-order="descending" data-shortcut="s">statements<span class="arrows"></span></th>
69-
<th aria-sort="none" data-default-sort-order="descending" data-shortcut="m">missing<span class="arrows"></span></th>
70-
<th aria-sort="none" data-default-sort-order="descending" data-shortcut="x">excluded<span class="arrows"></span></th>
71-
<th class="right" aria-sort="none" data-shortcut="c">coverage<span class="arrows"></span></th>
66+
<th id="file" class="name left" aria-sort="none" data-shortcut="f">File<span class="arrows"></span></th>
67+
<th id="region" class="name left" aria-sort="none" data-default-sort-order="ascending" data-shortcut="n">function<span class="arrows"></span></th>
68+
<th id="statements" aria-sort="none" data-default-sort-order="descending" data-shortcut="s">statements<span class="arrows"></span></th>
69+
<th id="missing" aria-sort="none" data-default-sort-order="descending" data-shortcut="m">missing<span class="arrows"></span></th>
70+
<th id="excluded" aria-sort="none" data-default-sort-order="descending" data-shortcut="x">excluded<span class="arrows"></span></th>
71+
<th id="coverage" class="right" aria-sort="none" data-shortcut="c">coverage<span class="arrows"></span></th>
7272
</tr>
7373
</thead>
7474
<tbody>
@@ -100,7 +100,7 @@ <h2>
100100
<div class="content">
101101
<p>
102102
<a class="nav" href="https://coverage.readthedocs.io/en/7.5.1a0.dev1">coverage.py v7.5.1a0.dev1</a>,
103-
created at 2024-04-24 09:22 -0400
103+
created at 2024-04-28 13:13 -0300
104104
</p>
105105
</div>
106106
<aside class="hidden">

tests/gold/html/a/index.html

+9-9
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
55
<title>Coverage report</title>
66
<link rel="icon" sizes="32x32" href="favicon_32_cb_58284776.png">
7-
<link rel="stylesheet" href="style_cb_8e611ae1.css" type="text/css">
8-
<script src="coverage_html_cb_606408f0.js" defer></script>
7+
<link rel="stylesheet" href="style_cb_718ce007.css" type="text/css">
8+
<script src="coverage_html_cb_f81f1c3a.js" defer></script>
99
</head>
1010
<body class="indexfile">
1111
<header>
@@ -54,19 +54,19 @@ <h2>
5454
</h2>
5555
<p class="text">
5656
<a class="nav" href="https://coverage.readthedocs.io/en/7.5.1a0.dev1">coverage.py v7.5.1a0.dev1</a>,
57-
created at 2024-04-24 09:22 -0400
57+
created at 2024-04-25 23:03 -0300
5858
</p>
5959
</div>
6060
</header>
6161
<main id="index">
6262
<table class="index" data-sortable>
6363
<thead>
6464
<tr class="tablehead" title="Click to sort">
65-
<th class="name left" aria-sort="none" data-shortcut="f">File<span class="arrows"></span></th>
66-
<th aria-sort="none" data-default-sort-order="descending" data-shortcut="s">statements<span class="arrows"></span></th>
67-
<th aria-sort="none" data-default-sort-order="descending" data-shortcut="m">missing<span class="arrows"></span></th>
68-
<th aria-sort="none" data-default-sort-order="descending" data-shortcut="x">excluded<span class="arrows"></span></th>
69-
<th class="right" aria-sort="none" data-shortcut="c">coverage<span class="arrows"></span></th>
65+
<th id="file" class="name left" aria-sort="none" data-shortcut="f">File<span class="arrows"></span></th>
66+
<th id="statements" aria-sort="none" data-default-sort-order="descending" data-shortcut="s">statements<span class="arrows"></span></th>
67+
<th id="missing" aria-sort="none" data-default-sort-order="descending" data-shortcut="m">missing<span class="arrows"></span></th>
68+
<th id="excluded" aria-sort="none" data-default-sort-order="descending" data-shortcut="x">excluded<span class="arrows"></span></th>
69+
<th id="coverage" class="right" aria-sort="none" data-shortcut="c">coverage<span class="arrows"></span></th>
7070
</tr>
7171
</thead>
7272
<tbody>
@@ -96,7 +96,7 @@ <h2>
9696
<div class="content">
9797
<p>
9898
<a class="nav" href="https://coverage.readthedocs.io/en/7.5.1a0.dev1">coverage.py v7.5.1a0.dev1</a>,
99-
created at 2024-04-24 09:22 -0400
99+
created at 2024-04-25 23:03 -0300
100100
</p>
101101
</div>
102102
<aside class="hidden">

tests/gold/html/b_branch/class_index.html

+12-12
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
55
<title>Coverage report</title>
66
<link rel="icon" sizes="32x32" href="favicon_32_cb_58284776.png">
7-
<link rel="stylesheet" href="style_cb_8e611ae1.css" type="text/css">
8-
<script src="coverage_html_cb_606408f0.js" defer></script>
7+
<link rel="stylesheet" href="style_cb_718ce007.css" type="text/css">
8+
<script src="coverage_html_cb_d1c4fcc4.js" defer></script>
99
</head>
1010
<body class="indexfile">
1111
<header>
@@ -57,22 +57,22 @@ <h2>
5757
</h2>
5858
<p class="text">
5959
<a class="nav" href="https://coverage.readthedocs.io/en/7.5.1a0.dev1">coverage.py v7.5.1a0.dev1</a>,
60-
created at 2024-04-24 09:22 -0400
60+
created at 2024-04-28 13:13 -0300
6161
</p>
6262
</div>
6363
</header>
6464
<main id="index">
6565
<table class="index" data-sortable>
6666
<thead>
6767
<tr class="tablehead" title="Click to sort">
68-
<th class="name left" aria-sort="none" data-shortcut="f">File<span class="arrows"></span></th>
69-
<th class="name left" aria-sort="none" data-default-sort-order="ascending" data-shortcut="n">class<span class="arrows"></span></th>
70-
<th aria-sort="none" data-default-sort-order="descending" data-shortcut="s">statements<span class="arrows"></span></th>
71-
<th aria-sort="none" data-default-sort-order="descending" data-shortcut="m">missing<span class="arrows"></span></th>
72-
<th aria-sort="none" data-default-sort-order="descending" data-shortcut="x">excluded<span class="arrows"></span></th>
73-
<th aria-sort="none" data-default-sort-order="descending" data-shortcut="b">branches<span class="arrows"></span></th>
74-
<th aria-sort="none" data-default-sort-order="descending" data-shortcut="p">partial<span class="arrows"></span></th>
75-
<th class="right" aria-sort="none" data-shortcut="c">coverage<span class="arrows"></span></th>
68+
<th id="file" class="name left" aria-sort="none" data-shortcut="f">File<span class="arrows"></span></th>
69+
<th id="region" class="name left" aria-sort="none" data-default-sort-order="ascending" data-shortcut="n">class<span class="arrows"></span></th>
70+
<th id="statements" aria-sort="none" data-default-sort-order="descending" data-shortcut="s">statements<span class="arrows"></span></th>
71+
<th id="missing" aria-sort="none" data-default-sort-order="descending" data-shortcut="m">missing<span class="arrows"></span></th>
72+
<th id="excluded" aria-sort="none" data-default-sort-order="descending" data-shortcut="x">excluded<span class="arrows"></span></th>
73+
<th id="branches" aria-sort="none" data-default-sort-order="descending" data-shortcut="b">branches<span class="arrows"></span></th>
74+
<th id="partial" aria-sort="none" data-default-sort-order="descending" data-shortcut="p">partial<span class="arrows"></span></th>
75+
<th id="coverage" class="right" aria-sort="none" data-shortcut="c">coverage<span class="arrows"></span></th>
7676
</tr>
7777
</thead>
7878
<tbody>
@@ -108,7 +108,7 @@ <h2>
108108
<div class="content">
109109
<p>
110110
<a class="nav" href="https://coverage.readthedocs.io/en/7.5.1a0.dev1">coverage.py v7.5.1a0.dev1</a>,
111-
created at 2024-04-24 09:22 -0400
111+
created at 2024-04-28 13:13 -0300
112112
</p>
113113
</div>
114114
<aside class="hidden">

0 commit comments

Comments
 (0)