119 lines
5.5 KiB
HTML
119 lines
5.5 KiB
HTML
{{ define "settings" }}
|
|
|
|
<div class="modal fade" 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">
|
|
<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">
|
|
<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">
|
|
<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(e) {
|
|
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', event => {
|
|
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) => {
|
|
console.log(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);
|
|
});
|
|
});
|
|
}
|
|
});
|
|
</script>
|
|
|
|
{{ end }} |