Skip to content

Commit aff9f32

Browse files
authored
Merge pull request #154 from NHSDigital/PPHA-262-height-page-updates
PPHA-262: height page updates
2 parents d478ad3 + a4fa254 commit aff9f32

File tree

15 files changed

+218
-31
lines changed

15 files changed

+218
-31
lines changed

lung_cancer_screening/core/jinja2/layout.jinja

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,20 @@
99

1010
{% block pageTitle %}Lung Cancer Screening - NHS{% endblock %}
1111

12+
{% block beforeContent %}
13+
{% if back_link_url %}
14+
<nav>
15+
{{
16+
backLink({
17+
"href": back_link_url,
18+
"text": "Back"
19+
})
20+
}}
21+
</nav>
22+
{% endif %}
23+
{% endblock beforeContent %}
24+
25+
1226
{% block content %}
1327
{% block page_content %}
1428
{% endblock page_content %}

lung_cancer_screening/nhsuk_forms/decimal_field.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ def __init__(
1111
):
1212
kwargs["template_name"] = "input.jinja"
1313

14+
self.suffix = kwargs.pop("suffix", None)
1415
self.hint = hint
1516
self.classes = classes
1617
self.label_classes = label_classes

lung_cancer_screening/nhsuk_forms/imperial_height_form.py renamed to lung_cancer_screening/nhsuk_forms/imperial_height_field.py

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,18 +45,34 @@ class ImperialHeightField(forms.MultiValueField):
4545
def __init__(self, *args, **kwargs):
4646
error_messages = kwargs.get("error_messages", {})
4747

48+
between_feet="Feet must be between 4 and 8"
49+
4850
feet_kwargs = {
51+
"min_value": 4,
52+
"max_value": 8,
4953
"error_messages": {
50-
'invalid': 'Feet must be in whole numbers',
5154
**error_messages,
55+
'invalid': 'Feet must be in whole numbers',
56+
'min_value': between_feet,
57+
'max_value': between_feet,
58+
'incomplete': between_feet,
5259
},
5360
}
61+
62+
between_inches = "Inches must be between 0 and 11"
63+
5464
inches_kwargs = {
65+
"min_value": 0,
66+
"max_value": 11,
5567
"error_messages": {
56-
'invalid': 'Inches must be in whole numbers',
5768
**error_messages,
69+
'invalid': 'Inches must be in whole numbers',
70+
'min_value': between_inches,
71+
'max_value': between_inches,
72+
'incomplete': between_inches,
5873
},
5974
}
75+
6076
fields = (
6177
IntegerField(**feet_kwargs),
6278
IntegerField(**inches_kwargs),

lung_cancer_screening/nhsuk_forms/integer_field.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ def __init__(
1212
):
1313
kwargs["template_name"] = "input.jinja"
1414

15+
self.suffix = kwargs.pop("suffix", None)
1516
self.hint = hint
1617
self.classes = classes
1718
self.label_classes = label_classes

lung_cancer_screening/nhsuk_forms/jinja2/imperial-height-input.jinja

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
{{ input({
2222
"label": {
2323
"text": "Feet",
24-
"classes": "nhsuk-fieldset__legend--m",
2524
"isPageHeading": false
2625
},
2726
"hint": {
@@ -30,23 +29,24 @@
3029
"id": field.auto_id + "_0",
3130
"name": field.html_name + "_0",
3231
"value": field.subwidgets.0.data.value,
33-
"classes": "nhsuk-input--width-2" + field_error_classes,
34-
"type": "number"
32+
"classes": "nhsuk-input--width-4" + field_error_classes,
33+
"type": "number",
34+
"suffix": "ft"
3535
}) }}
3636
</div>
3737

3838
<div class="multi-field-input__item">
3939
{{ input({
4040
"label": {
4141
"text": "Inches",
42-
"classes": "nhsuk-fieldset__legend--m",
4342
"isPageHeading": false
4443
},
4544
"id": field.auto_id + "_1",
4645
"name": field.html_name + "_1",
4746
"value": field.subwidgets.1.data.value,
48-
"classes": "nhsuk-input--width-2" + field_error_classes,
49-
"type": "number"
47+
"classes": "nhsuk-input--width-4" + field_error_classes,
48+
"type": "number",
49+
"suffix": "in"
5050
}) }}
5151
</div>
5252
</div>

lung_cancer_screening/nhsuk_forms/jinja2/input.jinja

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
"hint": {
1616
"text": unbound_field.hint
1717
} if unbound_field.hint,
18+
"suffix": unbound_field.suffix if unbound_field.suffix,
1819
"id": field.auto_id,
1920
"name": field.html_name,
2021
"value": field.value() or "",
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
from django.test import TestCase
2+
from django.forms import Form
3+
from ...decimal_field import DecimalField
4+
5+
6+
class TestDecimalField(TestCase):
7+
def test_renders_nhs_input(self):
8+
class TestForm(Form):
9+
field = DecimalField(label="Abc", initial=1, max_value=10)
10+
self.assertHTMLEqual(
11+
TestForm()["field"].as_field_group(),
12+
"""
13+
<div class="nhsuk-form-group">
14+
<label class="nhsuk-label" for="id_field">
15+
Abc
16+
</label><input class="nhsuk-input" id="id_field" name="field" type="number" value="1">
17+
</div>
18+
""",
19+
)
20+
21+
def test_renders_nhs_input_with_suffix(self):
22+
class TestForm(Form):
23+
field = DecimalField(label="Abc", initial=1, max_value=10, suffix="cm")
24+
self.assertHTMLEqual(
25+
TestForm()["field"].as_field_group(),
26+
"""
27+
<div class="nhsuk-form-group">
28+
<label class="nhsuk-label" for="id_field">
29+
Abc
30+
</label>
31+
<div class="nhsuk-input__wrapper">
32+
<input class="nhsuk-input" id="id_field" name="field" type="number" value="1">
33+
<div class="nhsuk-input__suffix" aria-hidden="true">cm</div>
34+
</div>
35+
</>
36+
""",
37+
)
38+

lung_cancer_screening/nhsuk_forms/tests/unit/test_integer_field.py

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,10 @@
33
from ...integer_field import IntegerField
44

55

6-
class TestForm(Form):
7-
field = IntegerField(label="Abc", initial=1, max_value=10)
8-
96
class TestIntegerField(TestCase):
107
def test_renders_nhs_input(self):
8+
class TestForm(Form):
9+
field = IntegerField(label="Abc", initial=1, max_value=10)
1110
self.assertHTMLEqual(
1211
TestForm()["field"].as_field_group(),
1312
"""
@@ -19,3 +18,20 @@ def test_renders_nhs_input(self):
1918
""",
2019
)
2120

21+
def test_renders_nhs_input_with_suffix(self):
22+
class TestForm(Form):
23+
field = IntegerField(label="Abc", initial=1, max_value=10, suffix="suffix")
24+
self.assertHTMLEqual(
25+
TestForm()["field"].as_field_group(),
26+
"""
27+
<div class="nhsuk-form-group">
28+
<label class="nhsuk-label" for="id_field">
29+
Abc
30+
</label>
31+
<div class="nhsuk-input__wrapper">
32+
<input class="nhsuk-input" id="id_field" name="field" type="number" value="1">
33+
<div class="nhsuk-input__suffix" aria-hidden="true">suffix</div>
34+
</div>
35+
</div>
36+
""",
37+
)

lung_cancer_screening/questions/forms/imperial_height_form.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from django import forms
22

3-
from ...nhsuk_forms.imperial_height_form import ImperialHeightField
3+
from ...nhsuk_forms.imperial_height_field import ImperialHeightField
44
from ..models.response_set import ResponseSet
55

66
class ImperialHeightForm(forms.ModelForm):
@@ -16,7 +16,6 @@ def __init__(self, *args, **kwargs):
1616
require_all_fields=False,
1717
error_messages={
1818
'required': 'Enter your height',
19-
'incomplete': 'Enter your height'
2019
}
2120
)
2221

lung_cancer_screening/questions/forms/metric_height_form.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,14 @@ def __init__(self, *args, **kwargs):
1111
self.instance.participant = self.participant
1212

1313
self.fields["height"] = DecimalField(
14+
decimal_places=1,
1415
label="Centimetres",
1516
classes="nhsuk-input--width-4",
1617
error_messages={
1718
'required': 'Enter your height',
18-
}
19+
"max_decimal_places": "Centimetres must be to 1 decimal place, for example 185.5cm",
20+
},
21+
suffix="cm"
1922
)
2023

2124
def clean_height(self):

0 commit comments

Comments
 (0)