125 lines
4.9 KiB
HTML
125 lines
4.9 KiB
HTML
{% extends "base.html" %}
|
|
|
|
{% block content %}
|
|
<section class="section">
|
|
<div class="container">
|
|
<h1 class="title">Faire une acquisition</h1>
|
|
<div class="mb-2">
|
|
<p>Placez l'objet devant le scanner puis appuyez sur le bouton pour lancer l'acquisition.</p>
|
|
</div>
|
|
<div class="field is-grouped is-grouped-multiline">
|
|
<div class="control">
|
|
<button {% if acquisition and acquisition.validated %}disabled{% endif %} id="scan-button" class="button is-link">Lancer l'acquisition</button>
|
|
</div>
|
|
</div>
|
|
<article id="error-container" class="message is-danger" style="display: none;">
|
|
<div id="error-content" class="message-body">
|
|
</div>
|
|
</article>
|
|
<div class="fixed-grid has-8-cols">
|
|
<div id="grid" class="grid">
|
|
|
|
</div>
|
|
</div>
|
|
<progress id="progress-bar" class="progress is-link" style="display: none;" value="0" max="1000"></progress>
|
|
<div id="calibrate" {% if not acquisition %}style="display: none;"{% endif %}>
|
|
<p>Si les données acquises conviennent, appuyez sur le bouton ci-dessous pour valider l'acquisition.</p>
|
|
{% if acquisition %}
|
|
{% if acquisition.validated %}
|
|
<button disabled id="calibrate-button" class="button is-link">Cette acquisition a déjà été validée</button>
|
|
{% else %}
|
|
<a href="/validate-acquisition/{{ acquisition.id }}" id="calibrate-button" class="button is-link">Valider l'acquisition</a>
|
|
{% endif %}
|
|
{% else %}
|
|
<a id="calibrate-button" class="button is-link">Valider l'acquisition</a>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
</section>
|
|
{% endblock content %}
|
|
|
|
{% block extrajs %}
|
|
<script>
|
|
let acquisitionId = {% if acquisition %}{{ acquisition.id }}{% else %}null{% endif %};
|
|
let scanIndex = 1;
|
|
let progress = 0;
|
|
let scanButton = document.getElementById('scan-button');
|
|
let progressBar = document.getElementById('progress-bar');
|
|
let grid = document.getElementById('grid');
|
|
let buttons = [scanButton];
|
|
let errorContainer = document.getElementById('error-container');
|
|
let errorContent = document.getElementById('error-content');
|
|
let calibrateDiv = document.getElementById('calibrate');
|
|
let calibrateButton = document.getElementById('calibrate-button');
|
|
|
|
// If we already have calibration images, we show them right now
|
|
if (acquisitionId !== null) {
|
|
let cell, img;
|
|
{% for led in leds %}
|
|
cell = document.createElement('div');
|
|
cell.classList.add('cell');
|
|
img = document.createElement('img');
|
|
img.classList.add('is-loading');
|
|
img.src = '/data/objects/{{ object.id }}/' + acquisitionId + '/{{ led }}.jpg?v=0';
|
|
cell.appendChild(img);
|
|
grid.appendChild(cell);
|
|
{% endfor %}
|
|
}
|
|
|
|
scanButton.addEventListener('click', async () => {
|
|
scanIndex++;
|
|
progress = 0;
|
|
progressBar.value = 0;
|
|
buttons.forEach(x => x.setAttribute('disabled', 'disabled'));
|
|
scanButton.classList.add('is-loading');
|
|
progressBar.style.display = "block";
|
|
grid.innerHTML = '';
|
|
|
|
let response;
|
|
if (acquisitionId === null) {
|
|
response = await fetch('/api/scan-for-object/{{ object.id }}');
|
|
} else {
|
|
response = await fetch('/api/scan-for-acquisition/' + acquisitionId);
|
|
}
|
|
|
|
let reader = response.body.pipeThrough(new TextDecoderStream()).getReader();
|
|
|
|
while (true) {
|
|
let { value, done } = await reader.read();
|
|
|
|
if (done) {
|
|
buttons.forEach(x => x.removeAttribute('disabled'));
|
|
scanButton.classList.remove('is-loading');
|
|
calibrateDiv.style.display = "block";
|
|
break;
|
|
}
|
|
|
|
if (acquisitionId === null) {
|
|
acquisitionId = parseInt(value, 10);
|
|
calibrateButton.setAttribute('href', '/validate-acquisition/' + acquisitionId);
|
|
continue;
|
|
}
|
|
|
|
let [ uuid, ratio ] = value.trim().split(',');
|
|
progress = Math.ceil(1000 * parseFloat(ratio));
|
|
let cell = document.createElement('div');
|
|
cell.classList.add('cell');
|
|
let img = document.createElement('img');
|
|
img.classList.add('is-loading');
|
|
img.src = '/data/objects/{{ object.id }}/' + acquisitionId + '/' + uuid + '.jpg?v=' + scanIndex;
|
|
cell.appendChild(img);
|
|
grid.appendChild(cell);
|
|
}
|
|
});
|
|
|
|
function refreshProgressBar() {
|
|
if (progress !== progressBar.value) {
|
|
progressBar.value = Math.min(progressBar.value + 5, progress);
|
|
}
|
|
requestAnimationFrame(refreshProgressBar);
|
|
}
|
|
|
|
refreshProgressBar();
|
|
</script>
|
|
{% endblock extrajs %}
|