Files
InfantrySkillCalculator/templates/modals/settings.html
MaxJa4 0b2d10e7b7
All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 42s
Enhanced icons and tooltips.
2024-01-24 10:48:28 +01:00

124 lines
5.8 KiB
HTML

{{ define "settings" }}
<div class="modal fade" data-bs-backdrop="static" data-bs-keyboard="false" id="settingsModal" tabindex="-1">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<div class="modal-header">
<h1 class="modal-title fs-3 text-primary fw-bold" id="settingsModalLabel">Persönliche Einstellungen</h1>
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body">
<div class="row">
<div class="col-auto">
<label class="col-form-label col-form-label-lg" for="games">Aktuelles Spiel:</label>
</div>
<div class="col">
<select class="form-select form-select-lg" id="games" hx-get="/game_html" hx-target="#games" hx-trigger="load">
<!-- fill dynamically with available games -->
</select>
</div>
</div>
<div class="form-check form-check-inline mt-3 fs-5 visually-hidden">
<input class="form-check-input" type="checkbox" id="settingsSquadColors" value="squadColors" checked>
<label class="form-check-label" for="settingsSquadColors">Squad-Farben aktivieren</label>
</div>
<div class="form-check form-check-inline mt-3 fs-5 visually-hidden" data-bs-action="tooltip" data-bs-title="Median zusätzlich berechnen">
<input class="form-check-input" type="checkbox" id="settingsCalcMedian" value="calcMedian">
<label class="form-check-label" for="settingsCalcMedian">Median aktivieren</label>
</div>
<div class="form-check form-check-inline mt-3 fs-5 visually-hidden">
<input class="form-check-input" type="checkbox" id="settingsUseCache" value="useCache" checked>
<label class="form-check-label" for="settingsUseCache">Infantryskill-Cache benutzen (empfohlen)</label>
</div>
<div class="error-message text-danger fs-5 badge" style="display: none;"></div>
</div>
<div class="modal-footer">
<button type="submit" name="submit" class="btn btn-lg btn-primary">Speichern</button>
<button type="button" class="btn btn-lg btn-secondary" data-bs-dismiss="modal">Abbrechen</button>
</div>
</div>
</div>
</div>
<script lang="javascript">
document.addEventListener('DOMContentLoaded', function() {
const settingsModal = document.getElementById('settingsModal');
const settingsModalBS = new bootstrap.Modal('#settingsModal');
const submitButton = settingsModal.querySelector('button[name="submit"]');
let submitSettingsHandler = null;
const games = document.getElementById('games');
const squadColors = document.getElementById('settingsSquadColors');
const calcMedian = document.getElementById('settingsCalcMedian');
const useCache = document.getElementById('settingsUseCache');
function createSubmitSettingsHandler() {
return function submitSettingsHandler(_) {
let activeGameId = games.options[games.selectedIndex].value;
if (activeGameId === '') {
alert('Bitte wähle ein Spiel aus.');
return;
}
activeGameId = parseInt(activeGameId);
fetch("/settings", {
method: "PATCH",
body: JSON.stringify({
active_game_id: activeGameId,
squad_colors: squadColors.checked,
calc_median: calcMedian.checked,
use_cache: useCache.checked
}),
headers: {
"Content-type": "application/json; charset=UTF-8"
}
})
.then(response => {
if (!response.ok) {
throw new Error('Server error');
}
})
.then(() => {
settingsModalBS.hide();
})
.catch((error) => {
alert('Fehler beim Speichern der Einstellungen: ' + error.message);
});
}
}
if (settingsModal) {
settingsModal.addEventListener('show.bs.modal', _ => {
submitSettingsHandler = createSubmitSettingsHandler();
submitButton.addEventListener('click', submitSettingsHandler);
fetch("/settings", {
method: "GET",
headers: {
"Content-type": "application/json; charset=UTF-8"
}
})
.then((response) => {
return response.json();
})
.then((result) => {
games.selectedIndex = games.querySelector(`option[value="${result['active_game_id']}"]`).index;
squadColors.checked = result['squad_colors'];
calcMedian.value = result['calc_median'];
useCache.value = result['use_cache'];
})
.catch((error) => {
alert('Fehler beim Laden der Einstellungen: ' + error.message);
});
});
settingsModal.addEventListener('keypress', event => {
if (event.key === 'Enter') {
submitButton.click();
}
});
}
});
</script>
{{ end }}