diff --git a/app/assets/javascripts/main.js b/app/assets/javascripts/main.js index a6153dcbc..f5e930438 100644 --- a/app/assets/javascripts/main.js +++ b/app/assets/javascripts/main.js @@ -2,8 +2,6 @@ $(() => $("time.timeago").timeago()); $(() => GOVUK.modules.start()); -$(() => new GOVUK.SelectionButtons('.block-label input, .sms-message-option input')); - $(() => $('.error-message').eq(0).parent('label').next('input').trigger('focus')); $(() => $('.banner-dangerous').eq(0).trigger('focus')); diff --git a/app/assets/javascripts/radioSelect.js b/app/assets/javascripts/radioSelect.js index 8d359cc7d..62fc2b938 100644 --- a/app/assets/javascripts/radioSelect.js +++ b/app/assets/javascripts/radioSelect.js @@ -5,54 +5,57 @@ let states = { 'initial': Hogan.compile(`
- +
+ + +
{{#categories}} - + {{/categories}}
`), 'choose': Hogan.compile(`
- +
+ + +
{{#choices}} - +
+ + +
{{/choices}}
`), 'chosen': Hogan.compile(`
- +
+ + +
{{#choices}} -
- +
`) }; let focusSelected = function() { setTimeout( - () => $('[type=radio]:checked').parent('label').blur().trigger('focus').addClass('selected'), + () => $('[type=radio]:checked').next('label').blur().trigger('focus').addClass('selected'), 10 ); }; @@ -62,13 +65,16 @@ this.start = function(component) { let $component = $(component); - let render = (state, data) => $component.html(states[state].render(data)); + let render = (state, data) => { + $component.html(states[state].render(data)); + new GOVUK.SelectionButtons('.block-label input'); + }; let choices = $('label', $component).toArray().map(function(element) { let $element = $(element); return { 'id': $element.attr('for'), 'label': $.trim($element.text()), - 'value': $element.find('input').attr('value') + 'value': $element.prev('input').attr('value') }; }); let categories = $component.data('categories').split(','); @@ -95,7 +101,7 @@ if (!event.pageX) return true; event.preventDefault(); - let value = $(this).attr('value'); + let value = $('input', this).attr('value'); render('chosen', { 'choices': choices.filter( element => element.value == value diff --git a/app/assets/stylesheets/_grids.scss b/app/assets/stylesheets/_grids.scss index afd38dc71..c7becdee2 100644 --- a/app/assets/stylesheets/_grids.scss +++ b/app/assets/stylesheets/_grids.scss @@ -18,6 +18,10 @@ @include grid-column(1/8); } +.column-five-eighths { + @include grid-column(5/8); +} + .column-seven-eighths { @include grid-column(7/8); } diff --git a/app/assets/stylesheets/app.scss b/app/assets/stylesheets/app.scss index 5d6ccea31..76dd0a05c 100644 --- a/app/assets/stylesheets/app.scss +++ b/app/assets/stylesheets/app.scss @@ -46,8 +46,7 @@ } .beta-badge { - @include phase-tag(beta); - background: $govuk-blue; + @include phase-tag(); margin: 10px 0 0 0; } @@ -151,22 +150,10 @@ td { margin-bottom: 5px; } -a[rel='external'] { - @include external-link-default; - @include external-link-16; - @include media(tablet) { - @include external-link-19; - } -} - .hint { color: $secondary-text-colour; } -.button { - padding: 0.3em 0.6em 0.2em 0.6em; -} - .list-bullet { .list-bullet { @@ -256,10 +243,16 @@ details .arrow { margin-top: 5px; } -.block-label input[disabled] { - opacity: 0.5; -} - #content.override-elements-content { padding-bottom: 0; } + +.multiple-choice input:disabled+label { + opacity: 1; + color: $secondary-text-colour; + cursor: default; +} + +.multiple-choice input:disabled { + opacity: 0.5; +} diff --git a/app/assets/stylesheets/components/radio-select.scss b/app/assets/stylesheets/components/radio-select.scss index 1440d0ad6..a01d9ffed 100644 --- a/app/assets/stylesheets/components/radio-select.scss +++ b/app/assets/stylesheets/components/radio-select.scss @@ -5,33 +5,38 @@ display: inline-block; vertical-align: top; - .block-label { + .multiple-choice { margin-right: 5px; - padding-right: $gutter - 10px; + padding-right: 10px; padding-left: 54px - 10px; } } - .tertiary-button { + .js-reset-button, + .js-category-button { + background: none; + text-decoration: underline; + color: $link-colour; + //font-weight: bold; + border: none; display: inline-block; vertical-align: top; width: auto; - padding: 20px $gutter-half 15px $gutter-half; + padding: 7px 20px 7px 10px; margin-right: 5px; } .js-enabled & { - height: 60px; overflow: visible; - .block-label { + .multiple-choice { display: none; } - .js-block-label { - display: inline-block; + .js-multiple-choice { + display: block; } } diff --git a/app/assets/stylesheets/components/sms-message.scss b/app/assets/stylesheets/components/sms-message.scss index 9b260cf9d..a5a79e6d6 100644 --- a/app/assets/stylesheets/components/sms-message.scss +++ b/app/assets/stylesheets/components/sms-message.scss @@ -2,7 +2,7 @@ .sms-message-wrapper { width: 100%; - max-width: 450px; + max-width: 464px; box-sizing: border-box; padding: $gutter-half $gutter-half $gutter-half $gutter-half; background: $panel-colour; diff --git a/app/assets/stylesheets/main.scss b/app/assets/stylesheets/main.scss index 7cf0c200d..9fa8df2be 100644 --- a/app/assets/stylesheets/main.scss +++ b/app/assets/stylesheets/main.scss @@ -24,7 +24,7 @@ $path: '/static/images/'; @import 'elements/elements-typography'; @import 'elements/forms'; @import 'elements/forms/form-validation'; -@import 'elements/forms/form-block-labels'; +@import 'elements/forms/form-multiple-choice'; @import 'elements/forms/form-validation'; @import 'elements/icons'; @import 'elements/layout'; diff --git a/app/assets/stylesheets/views/template.scss b/app/assets/stylesheets/views/template.scss index 93ca1aea8..a059504e8 100644 --- a/app/assets/stylesheets/views/template.scss +++ b/app/assets/stylesheets/views/template.scss @@ -30,12 +30,12 @@ .edit-template-link-letter-address { @extend %edit-template-link; - top: 16.5%; // align bottom edge to bottom of address + top: 14.65%; // align bottom edge to bottom of address left: -5px; } .edit-template-link-letter-body { @extend %edit-template-link; - top: 33.3%; // aligns to top of subject + top: 38.5%; // aligns to top of subject left: -5px; } diff --git a/app/main/uploader.py b/app/main/uploader.py index cc1f708c3..4c00fbce5 100644 --- a/app/main/uploader.py +++ b/app/main/uploader.py @@ -2,37 +2,18 @@ import uuid import botocore from boto3 import resource from flask import current_app +from notifications_utils.s3 import s3upload as utils_s3upload FILE_LOCATION_STRUCTURE = 'service-{}-notify/{}.csv' def s3upload(service_id, filedata, region): - s3 = resource('s3') - bucket_name = current_app.config['CSV_UPLOAD_BUCKET_NAME'] - contents = filedata['data'] - - exists = True - try: - s3.meta.client.head_bucket( - Bucket=bucket_name) - except botocore.exceptions.ClientError as e: - error_code = int(e.response['Error']['Code']) - if error_code == 404: - exists = False - else: - current_app.logger.error( - "Unable to create s3 bucket {}".format(bucket_name)) - raise e - - if not exists: - s3.create_bucket(Bucket=bucket_name, - CreateBucketConfiguration={'LocationConstraint': region}) - upload_id = str(uuid.uuid4()) upload_file_name = FILE_LOCATION_STRUCTURE.format(service_id, upload_id) - key = s3.Object(bucket_name, upload_file_name) - key.put(Body=contents, ServerSideEncryption='AES256') - + utils_s3upload(filedata=filedata['data'], + region=region, + bucket_name=current_app.config['CSV_UPLOAD_BUCKET_NAME'], + file_location=upload_file_name) return upload_id diff --git a/app/templates/components/checkbox.html b/app/templates/components/checkbox.html index 3e71a949c..a0edb9c65 100644 --- a/app/templates/components/checkbox.html +++ b/app/templates/components/checkbox.html @@ -1,29 +1,22 @@ {% macro checkbox( field, hint=False, - help_link=None, - help_link_text=None, - width='2-3', - suffix=None, - block=False + width='2-3' ) %} -