Skip to content

Commit 7d084c7

Browse files
authored
Add resource navigation buttons #293 (#469)
Signed-off-by: Akhil Raj <[email protected]>
1 parent cbbe7b3 commit 7d084c7

File tree

1 file changed

+49
-18
lines changed

1 file changed

+49
-18
lines changed

scanpipe/templates/scanpipe/resource_detail.html

Lines changed: 49 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -34,15 +34,19 @@
3434
</ul>
3535
</div>
3636

37-
<section class="mx-5">
38-
<div class="message-header">
37+
<section class="mx-5 message is-dark">
38+
<div class="message-header is-flex">
3939
<p>
4040
{{ object.name }}
4141
| {{ object.size|filesizeformat }}
4242
| <a class="has-text-white" href="{{ object.get_raw_url }}?as_attachment=1"><i class="fas fa-download"></i></a>
4343
<br>
4444
<span style="font-size: 10px;">{{ object.path }}</span>
4545
</p>
46+
<div>
47+
<button class="button previous-btn is-dark" disabled><i class="fas fa-arrow-up mr-2"></i>Previous</button>
48+
<button class="button next-btn is-dark" disabled><i class="fas fa-arrow-down mr-2"></i>Next</button>
49+
</div>
4650
</div>
4751
<div id="editor" style="min-height:730px; border: lightgrey 1px solid;">{{ file_content }}</div>
4852
</section>
@@ -69,9 +73,9 @@
6973
function removeAllMarkers() {
7074
let session = editor.getSession();
7175
let markers = session.getMarkers();
72-
for (const [key, value] of Object.entries(markers)) {
73-
session.removeMarker(value.id);
74-
}
76+
for (const [key, value] of Object.entries(markers)) {
77+
session.removeMarker(value.id);
78+
}
7579
}
7680

7781
// Range(startRow, startColumn, endRow, endColumn)
@@ -81,15 +85,15 @@
8185
let annotations = [];
8286
removeAllMarkers();
8387

84-
detected_data.forEach(function ($el) {
88+
detected_data.forEach(function($el) {
8589
// Indexes a 0-based in ace.js
8690
let start_row = $el.start_line - 1;
8791
let start_column = 0;
8892
let end_row = $el.end_line - 1;
8993
let end_column = 10000;
9094

9195
let range = new Range(start_row, start_column, end_row, end_column);
92-
editor.session.addMarker(range, 'ace-marker', 'line'); // "fullLine" also available
96+
editor.session.addMarker(range, 'ace-marker', 'line'); // "fullLine" also available
9397

9498
annotations.push({
9599
row: start_row,
@@ -102,28 +106,55 @@
102106
editor.getSession().setAnnotations(annotations);
103107
}
104108

105-
const $selectionButtons = getAll('.tabs a');
109+
let scrollPositionIndex = 0;
110+
const selectionButtons = getAll('.tabs a');
111+
const previousBtn = document.querySelector('.previous-btn');
112+
const nextBtn = document.querySelector('.next-btn');
106113

107114
let detected_values = JSON.parse(document.querySelector("#detected_values").textContent);
115+
let detected_data;
108116

109-
if ($selectionButtons.length > 0) {
110-
$selectionButtons.forEach(function ($el) {
111-
$el.addEventListener('click', function () {
117+
if (selectionButtons.length > 0) {
118+
selectionButtons.forEach(function($el) {
119+
$el.addEventListener('click', function() {
120+
removeAllMarkers();
112121
let active_li = document.querySelector("li.is-active");
113122
if (active_li) active_li.classList.remove("is-active");
114-
$el.parentElement.classList.add("is-active");
115123

124+
$el.parentElement.classList.add("is-active");
116125
let type = $el.getAttribute("data-type");
117-
let detected_data = detected_values[type];
118-
if (detected_data) {
126+
detected_data = detected_values[type];
127+
128+
if (detected_data.length) {
129+
scrollPositionIndex = 0;
119130
setDetectedValues(detected_data);
120-
}
121-
else {
122-
removeAllMarkers();
123-
editor.getSession().setAnnotations([]);
131+
editor.renderer.scrollToLine(detected_data[0].start_line - 1);
132+
previousBtn.disabled = true;
133+
nextBtn.disabled = (detected_data.length - 1 == 0);
134+
} else {
135+
scrollPositionIndex = 0;
136+
editor.renderer.scrollToLine(0);
137+
previousBtn.disabled = true;
138+
nextBtn.disabled = true;
124139
}
125140
});
126141
});
127142
}
143+
144+
nextBtn.addEventListener('click', function() {
145+
if (scrollPositionIndex >= detected_data.length - 1) return false;
146+
scrollPositionIndex++;
147+
editor.renderer.scrollToLine(detected_data[scrollPositionIndex].start_line - 1);
148+
nextBtn.disabled = (scrollPositionIndex == detected_data.length - 1);
149+
previousBtn.disabled = false;
150+
})
151+
152+
previousBtn.addEventListener('click', function() {
153+
if (scrollPositionIndex <= 0) return false;
154+
scrollPositionIndex--;
155+
editor.renderer.scrollToLine(detected_data[scrollPositionIndex].start_line - 1);
156+
previousBtn.disabled = (scrollPositionIndex == 0);
157+
nextBtn.disabled = false;
158+
})
128159
</script>
129160
{% endblock %}

0 commit comments

Comments
 (0)