|
|
|
|
@ -33,6 +33,7 @@ templ RegisterForm(groups []models.Group, isAdmin bool) {
|
|
|
|
|
hx-post="/api/racers"
|
|
|
|
|
hx-target="#racer-form-message"
|
|
|
|
|
hx-swap="innerHTML"
|
|
|
|
|
hx-on::before-request="return validateForm()"
|
|
|
|
|
hx-on::after-request="if(event.detail.successful) {
|
|
|
|
|
document.getElementById('racer-form').reset();
|
|
|
|
|
setTimeout(function() {
|
|
|
|
|
@ -55,7 +56,24 @@ templ RegisterForm(groups []models.Group, isAdmin bool) {
|
|
|
|
|
</div>
|
|
|
|
|
<div class="mb-3">
|
|
|
|
|
<label for="car-number" class="form-label">Car Number</label>
|
|
|
|
|
<input type="text" class="form-control" id="car-number" name="car_number" required/>
|
|
|
|
|
<input
|
|
|
|
|
type="text"
|
|
|
|
|
class="form-control"
|
|
|
|
|
id="car-number"
|
|
|
|
|
name="car_number"
|
|
|
|
|
required
|
|
|
|
|
hx-get="/api/validate/car-number"
|
|
|
|
|
hx-trigger="change"
|
|
|
|
|
hx-target="next .invalid-feedback"
|
|
|
|
|
hx-indicator="#car-number-indicator"
|
|
|
|
|
/>
|
|
|
|
|
<div class="invalid-feedback"></div>
|
|
|
|
|
<div id="car-number-indicator" class="htmx-indicator">
|
|
|
|
|
<div class="spinner-border spinner-border-sm text-primary" role="status">
|
|
|
|
|
<span class="visually-hidden">Loading...</span>
|
|
|
|
|
</div>
|
|
|
|
|
<small>Checking availability...</small>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="mb-3">
|
|
|
|
|
<label for="car-weight" class="form-label">Car Weight (oz)</label>
|
|
|
|
|
@ -81,4 +99,20 @@ templ RegisterForm(groups []models.Group, isAdmin bool) {
|
|
|
|
|
</form>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
<script>
|
|
|
|
|
function validateForm() {
|
|
|
|
|
const carNumberInput = document.getElementById('car-number');
|
|
|
|
|
const errorDiv = carNumberInput.nextElementSibling;
|
|
|
|
|
|
|
|
|
|
if (errorDiv.textContent.trim() !== '') {
|
|
|
|
|
// Show error message more prominently
|
|
|
|
|
errorDiv.classList.add('d-block');
|
|
|
|
|
carNumberInput.classList.add('is-invalid');
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
</script>
|