8000 Add reports from pytest-mpl, changed setup and tox · dstansby/napari-matplotlib@6727b3a · GitHub
[go: up one dir, main page]

8000
Skip to content

Commit 6727b3a

Browse files
committed
Add reports from pytest-mpl, changed setup and tox
1 parent 51b6b03 commit 6727b3a

File tree

15 files changed

+742
-1
lines changed

15 files changed

+742
-1
lines changed

setup.cfg

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ docs =
5454
sphinx-automodapi
5555
sphinx-gallery
5656
testing =
57+
matplotlib
5758
napari[pyqt6-experimental]
5859
pooch
5960
pyqt6
Lines changed: 209 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,209 @@
1+
// Enable tooltips
2+
var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'))
3+
var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
4+
return new bootstrap.Tooltip(tooltipTriggerEl)
5+
})
6+
7+
// Search, sort and filter
8+
var options = {
9+
valueNames: ['collected-sort', 'test-name', 'status-sort', 'rms-sort', 'filter-classes',
10+
'rms-value', 'baseline-hash-value', 'result-hash-value']
11+
};
12+
var resultsList = new List('results', options);
13+
14+
var filterClasses = [];
15+
var filterElements = document.getElementById('filterForm').getElementsByClassName('filter');
16+
for (var i = 0, elem; elem = filterElements[i++];) {
17+
filterClasses.push(elem.id);
18+
}
19+
countClasses();
20+
21+
// Get and apply initial search parameters from URL
22+
var searchParams = new URLSearchParams(window.location.search);
23+
if (window.location.search.length > 0) {
24+
applyURL();
25+
} else { // If no parameters, apply default but don't update the URL
26+
resultsList.sort('status-sort', {order: "desc"});
27+
}
28+
// Show page after initial filtering to prevent flashing
29+
document.getElementById('resultslist').style.display = null;
30+
31+
// Show a message if no tests match current filters
32+
var alertPlaceholder = document.getElementById('noResultsAlert');
33+
warnIfNone(); // Initialize
34+
resultsList.on('updated', function () {
35+
warnIfNone();
36+
})
37+
38+
// Record URL parameters after new sort (but do not update URL yet)
39+
resultsList.on('sortComplete', function updateSortURL() {
40+
var sortElements = document.getElementsByClassName('sort');
41+
for (var i = 0, elem; elem = sortElements[i++];) {
42+
if (elem.checked) {
43+
searchParams.set('sort', elem.dataset['sort']);
44+
searchParams.set('order', getSortOrder(elem));
45+
break;
46+
}
47+
}
48+
})
49+
50+
// Update URL when filter sidebar is hidden
51+
var filterOffcanvas = document.getElementById('offcanvasFilter');
52+
filterOffcanvas.addEventListener('hide.bs.offcanvas', function () {
53+
updateURL();
54+
})
55+
56+
// Update URL when search bar is clicked away from
57+
function searchComplete() {
58+
var q = document.getElementsByClassName('search')[0].value;
59+
if (q.length > 0) { // Include query in URL if active query
60+
searchParams.set('q', q);
61+
} else {
62+
searchParams.delete('q');
63+
}
64+
updateURL();
65+
}
66+
67+
// Search, sort and filter by the current URL parameters
68+
function applyURL() {
69+
// Get and apply sort
70+
var sort = searchParams.get('sort');
71+
if (sort) {
72+
document.getElementsByName('sort').forEach(
73+
function selectSort(elem) {
74+
if (elem.dataset['sort'] == sort) {
75+
elem.checked = true;
76+
}
77+
}
78+
)
79+
resultsList.sort(sort, {order: searchParams.get('order')});
80+
}
81+
// Get and apply filters
82+
var filters = searchParams.getAll('f');
83+
if (filters.length > 0) {
84+
var cond = searchParams.get('c');
85+
if (cond === 'and') {
86+
document.getElementById('conditionand').checked = true;
87+
} else if (cond === 'or') {
88+
document.getElementById('conditionor').checked = true;
89+
}
90+
for (var i = 0, f; f = filters[i++];) {
91+
document.getElementById(f).checked = true;
92+
}
93+
applyFilters();
94+
}
95+
// Get and apply search
96+
var query = searchParams.get('q');
97+
if (query) {
98+
document.getElementsByClassName('search')[0].value = query;
99+
resultsList.search(query);
100+
}
101+
}
102+
103+
// Update the URL with the current search parameters
104+
function updateURL() {
105+
var query = searchParams.toString();
106+
if (query.length > 0) { // Don't end the URL with '?'
107+
query = '?' + query;
108+
}
109+
if (window.location.search != query) { // Update URL if changed
110+
history.replaceState(null, '', window.location.pathname + query);
111+
}
112+
}
113+
114+
// Get the current sorting order from an active sort radio button
115+
function getSortOrder(elem) {
116+
var fixedOrder = elem.dataset['order'];
117+
if (fixedOrder == 'asc' || fixedOrder == 'desc') {
118+
return fixedOrder;
119+
} else if (elem.classList.contains('desc')) {
120+
return 'desc';
121+
} else if (elem.classList.contains('asc')) {
122+
return 'asc';
123+
} else {
124+
return 'asc';
125+
}
126+
}
127+
128+
function applyFilters() {
129+
searchParams.delete('f');
130+
searchParams.delete('c');
131+
var cond_and = document.getElementById('filterForm').elements['conditionand'].checked;
132+
var filters = [];
133+
var filterElements = document.getElementById('filterForm').getElementsByClassName('filter');
134+
for (var i = 0, elem; elem = filterElements[i++];) {
135+
if (elem.checked) {
136+
filters.push(elem.id);
137+
searchParams.append('f', elem.id);
138+
}
139+
}
140+
if (filters.length == 0) {
141+
resultsList.filter(); // Show all if nothing selected
142+
return countClasses();
143+
}
144+
searchParams.set('c', (cond_and) ? 'and' : 'or');
145+
resultsList.filter(function (item) {
146+
var inc = false;
147+
for (var i = 0, filt; filt = filters[i++];) {
148+
if (item.values()['filter-classes'].includes(filt)) {
149+
if (!cond_and) {
150+
return true;
151+
}
152+
inc = true;
153+
} else {
154+
if (cond_and) {
155+
return false;
156+
}
157+
}
158+
}
159+
return inc;
160+
});
161+
countClasses();
162+
}
163+
164+
function resetFilters() {
165+
resultsList.filter();
166+
document.getElementById("filterForm").reset();
167+
countClasses();
168+
searchParams.delete('f');
169+
searchParams.delete('c');
170+
}
171+
172+
function countClasses() {
173+
for (var i = 0, filt; filt = filterElements[i++];) {
174+
var count = 0;
175+
if (document.getElementById('filterForm').elements['conditionand'].checked) {
176+
var itms = resultsList.visibleItems;
177+
} else {
178+
var itms = resultsList.items;
179+
}
180+
for (var j = 0, itm; itm = itms[j++];) {
181+
if (itm.values()['filter-classes'].includes(filt.id)) {
182+
count++;
183+
}
184+
}
185+
var badge = filt.parentElement.getElementsByClassName('badge')[0];
186+
badge.innerHTML = count.toString();
187+
}
188+
}
189+
190+
function warnIfNone() {
191+
if (resultsList.visibleItems.length === 0) { // Show info box
192+
alertPlaceholder.innerHTML = '<div class="alert alert-info" role="alert">' +
193+
'<h4 class="alert-heading">No tests found</h4>' +
194+
'<p class="m-0">Try adjusting any active filters or searches, or ' +
195+
'<a href="javascript:clearAll()" class="alert-link">clear all</a>.</p>' +
196+
'</div>';
197+
} else { // Remove info box
198+
alertPlaceholder.innerHTML = '';
199+
}
200+
}
201+
202+
// Clear active search and filters
203+
function clearAll() {
204+
document.getElementsByClassName('search')[0].value = '';
205+
resultsList.search('');
206+
searchParams.delete('q');
207+
resetFilters();
208+
updateURL();
209+
}

0 commit comments

Comments
 (0)
0