From 33d8171675ea0fe321c863118710ba8ee97cbb33 Mon Sep 17 00:00:00 2001
From: Tom Byers
Date: Thu, 9 Apr 2020 11:51:11 +0100
Subject: [PATCH] Update templates page
Includes:
- changes to the govukCheckboxesField class
to allow params to be extended at render time
- updates to templates and folders CSS
---
.../stylesheets/components/message.scss | 34 +++++---
app/main/forms.py | 40 +++++++++-
.../views/templates/_template_list.html | 79 ++++++++++++-------
3 files changed, 108 insertions(+), 45 deletions(-)
diff --git a/app/assets/stylesheets/components/message.scss b/app/assets/stylesheets/components/message.scss
index 3d63ff455..14e02ebf7 100644
--- a/app/assets/stylesheets/components/message.scss
+++ b/app/assets/stylesheets/components/message.scss
@@ -24,6 +24,9 @@
}
}
+$message-text-left-spacing: 22px;
+$message-type-bottom-spacing: govuk-spacing(4);
+
.message {
&-name {
@@ -63,23 +66,14 @@
}
&-type {
- color: $secondary-text-colour;
- margin: 0 0 govuk-spacing(4) 0;
+ color: $govuk-secondary-text-colour;
+ margin: 0 0 $message-type-bottom-spacing 0;
+ padding-left: 0;
pointer-events: none;
}
}
-#template-list {
-
- margin-top: govuk-spacing(6);
-
- &.top-gutter-5px {
- margin-top: 5px;
- }
-
-}
-
.template-list {
&-item {
@@ -123,6 +117,22 @@
}
+ &-hint,
+ &-label {
+ padding-left: $message-text-left-spacing;
+ }
+
+ &-label {
+ padding-top: 0px;
+ padding-bottom: 0px;
+ }
+
+ // Fix for GOVUK Frontend selector with high precendence
+ // https://github.com/alphagov/govuk-frontend/blob/v2.13.0/src/components/hint/_hint.scss
+ &-label:not(.govuk-label--m):not(.govuk-label--l):not(.govuk-label--xl)+.template-list-item-hint {
+ margin-bottom: $message-type-bottom-spacing;
+ }
+
}
&-folder {
diff --git a/app/main/forms.py b/app/main/forms.py
index e23b43cdd..6837be289 100644
--- a/app/main/forms.py
+++ b/app/main/forms.py
@@ -623,11 +623,34 @@ class govukCheckboxesField(govukCheckboxesMixin, SelectMultipleField):
def get_items_from_options(self, field):
return [self.get_item_from_option(option) for option in field]
+ def extend_params(self, params, extensions):
+ items = None
+ param_items = len(params['items']) if 'items' in params else 0
+
+ # split items off from params to make it a pure dict
+ if 'items' in extensions:
+ items = extensions['items']
+ del extensions['items']
+
+ # merge dicts
+ params.update(extensions)
+
+ # merge items
+ if items:
+ if 'items' not in params:
+ params['items'] = items
+ else:
+ for idx, _item in enumerate(items):
+ if idx >= param_items:
+ params['items'].append(items[idx])
+ else:
+ params['items'][idx].update(items[idx])
+
# self.__call__ renders the HTML for the field by:
# 1. delegating to self.meta.render_field which
# 2. calls field.widget
# this bypasses that by making self.widget a method with the same interface as widget.__call__
- def widget(self, field, **kwargs):
+ def widget(self, field, param_extensions=None, **kwargs):
# error messages
error_message = None
@@ -1898,9 +1921,18 @@ class TemplateAndFoldersSelectionForm(Form):
return self.move_to_new_folder_name.data
return None
- templates_and_folders = MultiCheckboxField('Choose templates or folders', validators=[
- required_for_ops('move-to-new-folder', 'move-to-existing-folder')
- ])
+ templates_and_folders = govukCheckboxesField(
+ 'Choose templates or folders',
+ validators=[required_for_ops('move-to-new-folder', 'move-to-existing-folder')],
+ choices=[], # added to keep order of arguments, added properly in __init__
+ param_extensions={
+ "fieldset": {
+ "legend": {
+ "classes": "govuk-visually-hidden"
+ }
+ }
+ }
+ )
# if no default set, it is set to None, which process_data transforms to '__NONE__'
# this means '__NONE__' (self.ALL_TEMPLATES option) is selected when no form data has been submitted
# set default to empty string so process_data method doesn't perform any transformation
diff --git a/app/templates/views/templates/_template_list.html b/app/templates/views/templates/_template_list.html
index 5bcb03501..42483d33a 100644
--- a/app/templates/views/templates/_template_list.html
+++ b/app/templates/views/templates/_template_list.html
@@ -21,37 +21,58 @@
{% endif %}
{% else %}
-