2
0
mirror of https://expo.survex.com/repositories/troggle/.git synced 2026-01-19 01:23:12 +00:00

with more styling

This commit is contained in:
2025-12-28 01:16:14 +00:00
parent 8706991888
commit 136f9bf935
2 changed files with 84 additions and 28 deletions

View File

@@ -288,29 +288,70 @@ class EntranceLetterForm(ModelForm):
class NewProspectForm(forms.Form):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# If the form is bound (POSTed), update the field's value to uppercase
if self.is_bound:
data = self.data.copy()
ident = data.get('identifier')
if ident:
data['identifier'] = ident.upper()
self.data = data
# If initial data is present, ensure it's uppercase too
if 'identifier' in self.initial:
self.initial['identifier'] = self.initial['identifier'].upper()
def clean_identifier(self):
identifier = self.cleaned_data['identifier']
if identifier:
return identifier.upper()
return identifier
def clean_date_found(self):
date = self.cleaned_data['date_found']
if date.year <= 1990:
raise forms.ValidationError('Year must be after 1990.')
return date
date_found = forms.DateField(
label="Date Found",
widget=forms.DateInput(attrs={"type": "date"})
label="Date Found (YYYY-MM-DD)",
input_formats=["%Y-%m-%d"],
widget=forms.DateInput(attrs={
"type": "text",
"placeholder": "2025-08-23",
"pattern": "\\d{4}-\\d{2}-\\d{2}",
"title": "Enter date as YYYY-MM-DD (e.g. 2025-08-23)",
"size": 10,
"style": "width: 10ch; min-width: 0;"
})
)
area_code = forms.CharField(
area_code = forms.ChoiceField(
label="Area Code",
max_length=10
choices=[('1623', '1623'), ('1626', '1626')],
initial='1623',
widget=forms.Select(attrs={"style": "width: 6em; min-width: 0;"})
)
identifier = forms.CharField(
label="Identifier (e.g. 2025-AB-01)",
max_length=20
label="New cave identifier",
max_length=20,
widget=forms.TextInput(attrs={
"placeholder": "2025-AB-01",
"size": 10,
"style": "width: 10ch; min-width: 0;"
})
)
discovery_name = forms.CharField(
label="Discovery Name",
max_length=100
max_length=100,
widget=forms.TextInput(attrs={"placeholder": "Dreibierbittehohle"})
)
gps_lat = forms.DecimalField(
label="GPS Latitude",
max_digits=10,
decimal_places=7
decimal_places=7,
widget=forms.NumberInput(attrs={"placeholder": "47.687180"})
)
gps_long = forms.DecimalField(
label="GPS Longitude",
max_digits=10,
decimal_places=7
decimal_places=7,
widget=forms.NumberInput(attrs={"placeholder": "13.825211"})
)

View File

@@ -12,45 +12,60 @@ New Prospect
<h1>New Prospect</h1>
<p>Please fill in the details for a new prospect: a hole which might be a cave. Fields are documented in the <a href="/handbook/survey/caveentryfields.html">cave entry fields</a> guide.</p>
{% if success %}
<div class="success-message">Prospect submitted successfully. You can edit the details below or enter another.</div>
{% endif %}
<style>
div > label {
display:block;
.prospect-form-container {
max-width: 100%;
margin-left: 15%;
font-family: monospace;
font-weight: bold;
margin-top: 5px;
font-size: 150%;
text-align: right;
}
.prospect-form label {
display: inline-block;
width: 320px;
text-align: right;
margin-right: 20px;
margin-bottom: 8px;
}
.prospect-form input, .prospect-form select, .prospect-form textarea {
width: 87%;
margin-bottom: 10px;
font-family: monospace;
font-weight: bold;
font-size: 100%;
padding: 0.5em;
width: 20%;
margin-bottom: 10px;
}
.success-message {
color: green;
font-weight: bold;
margin-bottom: 15px;
}
.form-group {
margin-bottom: 15px;
}
.error {
color: red;
font-size: 90%;
display: block;
margin-bottom: 5px;
}
</style>
<form method="post" class="prospect-form">
{% csrf_token %}
<div class="form-fields">
<div class="prospect-form-container">
<form method="post" class="prospect-form">
{% csrf_token %}
{% for field in form %}
<div class="form-group">
<div>
<label for="{{ field.id_for_label }}">{{ field.label }}</label>
{{ field }}
{% if field.help_text %}<small>{{ field.help_text }}</small>{% endif %}
{% for error in field.errors %}<div class="error">{{ error }}</div>{% endfor %}
{% for error in field.errors %}<span class="error">{{ error }}</span>{% endfor %}
</div>
{% endfor %}
</div>
<p><button class="fancybutton" style="padding: 0.5em 25px; margin-left: 155px; font-size: 90%;" type="submit">Submit</button></p>
</form>
<br>
<button class="fancybutton" style="padding: 0.5em 25px; margin-left: 155px; font-size: 90%;" type="submit">Submit</button>
</form>
</div>
{% if success %}
<div class="success-message">Prospect submitted successfully. You can edit the details below or enter another.</div>
{% endif %}
{% endblock %}