Skip to content

Commit c85abca

Browse files
shlomomdahanArtmorsebasil
authored
[JENKINS-69658] - CSP compatibility for summary.jelly (#654)
Co-authored-by: lemorse <[email protected]> Co-authored-by: Arthur Caron <[email protected]> Co-authored-by: Basil Crow <[email protected]>
1 parent 05e2505 commit c85abca

File tree

2 files changed

+30
-24
lines changed

2 files changed

+30
-24
lines changed

src/main/resources/hudson/tasks/junit/CaseResult/summary.jelly

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,12 @@ THE SOFTWARE.
3131
<j:set var="id" value="${attrs.id}-${attrs.name}"/>
3232
<j:set var="display" value="${attrs.opened ? '' : 'none'}"/>
3333
<j:set var="idisplay" value="${attrs.opened ? 'none' : ''}"/>
34-
<j:set var="open" value="javascript:showFailureSummary('${id}')"/>
35-
<j:set var="close" value="javascript:hideFailureSummary('${id}')"/>
34+
<st:adjunct includes="lib.hudson.test.js.failureSummary" />
3635
<h4>
37-
<a id="${id}-showlink" href="${open}" title="Show ${title}" style="display: ${idisplay}">
36+
<a id="${id}-showlink" title="Show ${title}" style="display: ${idisplay}">
3837
<l:icon src="symbol-add-outline plugin-ionicons-api" class="icon-sm"/><st:nbsp/>${title}
3938
</a>
40-
<a id="${id}-hidelink" href="${close}" title="Hide ${title}" style="display: ${display}">
39+
<a id="${id}-hidelink" title="Hide ${title}" style="display: ${display}">
4140
<l:icon src="symbol-remove-outline plugin-ionicons-api" class="icon-sm"/><st:nbsp/>${title}
4241
</a>
4342
</h4>
Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
21
const PREFIX = "test-";
32
const SHOWLINK_SUFFIX = "-showlink";
43
const HIDELINK_SUFFIX = "-hidelink";
@@ -10,12 +9,16 @@ function showFailureSummary(summaryId, query) {
109
document.getElementById(summaryId + SHOWLINK_SUFFIX).style.display = "none";
1110
document.getElementById(summaryId + HIDELINK_SUFFIX).style.display = "";
1211

13-
if (typeof query !== 'undefined') {
12+
if (typeof query !== 'undefined' && element.innerHTML.trim() === 'Loading...') {
1413
let rqo = new XMLHttpRequest();
1514
rqo.open('GET', query, true);
16-
rqo.onreadystatechange = function() { element.innerHTML = rqo.responseText; }
15+
rqo.onreadystatechange = function() {
16+
element.innerHTML = rqo.responseText;
17+
initializeShowHideLinks(element);
18+
}
1719
rqo.send(null);
1820
}
21+
1922
}
2023

2124
function hideFailureSummary(summaryId) {
@@ -24,24 +27,28 @@ function hideFailureSummary(summaryId) {
2427
document.getElementById(summaryId + HIDELINK_SUFFIX).style.display = "none";
2528
}
2629

30+
function initializeShowHideLinks(container) {
31+
container = container || document;
2732

28-
document.addEventListener('DOMContentLoaded', () => {
29-
const testShowlinks = document.querySelectorAll("a[id*=test-][id*=-showlink]");
30-
testShowlinks.forEach((element) => {
31-
element.addEventListener('click', (event) => {
32-
const id = element.id.replace(PREFIX, '').replace(SHOWLINK_SUFFIX, '');
33-
const summaryId = PREFIX + id;
34-
showFailureSummary(summaryId, document.URL + id + "summary");
35-
})
33+
container.querySelectorAll('a[id$="-showlink"], a[id$="-hidelink"]').forEach(link => {
34+
link.addEventListener('click', handleShowHideClick);
35+
link.style.cursor = 'pointer';
3636
});
37+
}
3738

38-
// add the onclick behavior for all the "hidelinks"
39-
const testHidelinks = document.querySelectorAll("a[id*=test-][id*=-hidelink]");
40-
testHidelinks.forEach((element) => {
41-
element.addEventListener('click', (event) => {
42-
const id = element.id.replace(PREFIX, '').replace(HIDELINK_SUFFIX, '');
43-
const summaryId = PREFIX + id;
44-
hideFailureSummary(summaryId);
45-
})
46-
});
39+
function handleShowHideClick(event) {
40+
event.preventDefault();
41+
42+
let link = event.target.closest('a[id$="-showlink"], a[id$="-hidelink"]');
43+
const id = link.id.replace(/-showlink$/, '').replace(/-hidelink$/, '');
44+
45+
if (link.id.endsWith('-showlink')) {
46+
showFailureSummary(id, document.URL + id.replace(PREFIX, '') + "summary");
47+
} else {
48+
hideFailureSummary(id);
49+
}
50+
}
51+
52+
document.addEventListener('DOMContentLoaded', () => {
53+
initializeShowHideLinks();
4754
});

0 commit comments

Comments
 (0)