diff --git a/app/assets/javascripts/emailPreviewPane.js b/app/assets/javascripts/previewPane.js similarity index 66% rename from app/assets/javascripts/emailPreviewPane.js rename to app/assets/javascripts/previewPane.js index 0509efa27..7a8172861 100644 --- a/app/assets/javascripts/emailPreviewPane.js +++ b/app/assets/javascripts/previewPane.js @@ -13,9 +13,8 @@ const $paneWrapper = $('
'); const $form = $('form'); - const $previewPane = $(''); + const previewType = $form.data('previewType'); + const $previewPane = $(``); function buildQueryString () { return $.map(arguments, (val, idx) => encodeURI(val[0]) + '=' + encodeURI(val[1])).join('&'); @@ -26,12 +25,12 @@ if ($target.attr('name') == 'branding_style') { branding_style = $target.val(); } - $previewPane.attr('src', '/_email?' + buildQueryString(['branding_style', branding_style])); + $previewPane.attr('src', `/_${previewType}?${buildQueryString(['branding_style', branding_style])}`); } $paneWrapper.append($previewPane); $form.find('.grid-row').eq(0).prepend($paneWrapper); - $form.attr('action', location.pathname.replace(/set-email-branding$/, 'preview-email-branding')); + $form.attr('action', location.pathname.replace(new RegExp(`set-${previewType}-branding$`), `preview-${previewType}-branding`)); $form.find('button[type="submit"]').text('Save'); $('fieldset').on('change', 'input[name="branding_style"]', setPreviewPane); diff --git a/app/assets/stylesheets/components/email-preview-pane.scss b/app/assets/stylesheets/components/preview-pane.scss similarity index 94% rename from app/assets/stylesheets/components/email-preview-pane.scss rename to app/assets/stylesheets/components/preview-pane.scss index c615df2ad..12b8c28c5 100644 --- a/app/assets/stylesheets/components/email-preview-pane.scss +++ b/app/assets/stylesheets/components/preview-pane.scss @@ -1,4 +1,4 @@ -.email-branding-preview { +.branding-preview { width: 100%; box-sizing: border-box; border: solid 1px $border-colour; @@ -11,7 +11,7 @@ background-image: linear-gradient(45deg, $grey-3 25%, transparent 25%), linear-gradient(-45deg, $grey-3 25%, transparent 25%), linear-gradient(45deg, transparent 75%, $grey-3 75%), linear-gradient(-45deg, transparent 75%, $grey-3 75%); background-size: 20px 20px; background-position: 0 0, 0 10px, 10px -10px, -10px 0px; - + img { display: block; } diff --git a/app/assets/stylesheets/main.scss b/app/assets/stylesheets/main.scss index f8fc5787c..1db1fcff1 100644 --- a/app/assets/stylesheets/main.scss +++ b/app/assets/stylesheets/main.scss @@ -61,7 +61,7 @@ $path: '/static/images/'; @import 'components/conditional-radios'; @import 'components/vendor/breadcrumbs'; @import 'components/vendor/responsive-embed'; -@import 'components/email-preview-pane'; +@import 'components/preview-pane'; @import 'components/task-list'; @import 'views/dashboard'; diff --git a/app/main/views/index.py b/app/main/views/index.py index c68296f9a..1247c0aa2 100644 --- a/app/main/views/index.py +++ b/app/main/views/index.py @@ -10,9 +10,9 @@ from flask_login import current_user, login_required from notifications_utils.international_billing_rates import ( INTERNATIONAL_BILLING_RATES, ) -from notifications_utils.template import HTMLEmailTemplate +from notifications_utils.template import HTMLEmailTemplate, LetterImageTemplate -from app import email_branding_client +from app import email_branding_client, letter_branding_client from app.main import main from app.main.forms import FieldWithNoneOption, SearchByNameForm from app.main.views.sub_navigation_dictionaries import features_nav @@ -174,6 +174,35 @@ def email_template(): return resp +@main.route('/_letter') +def letter_template(): + branding_style = request.args.get('branding_style') + + if branding_style == FieldWithNoneOption.NONE_OPTION_VALUE: + branding_style = None + + if branding_style: + filename = letter_branding_client.get_letter_branding(branding_style)['filename'] + else: + filename = 'no-branding' + + template = {'subject': '', 'content': ''} + image_url = url_for('main.letter_branding_preview_image', filename=filename) + + template_image = str(LetterImageTemplate( + template, + image_url=image_url, + page_count=1, + )) + + resp = make_response( + render_template('views/service-settings/letter-preview.html', template=template_image) + ) + + resp.headers['X-Frame-Options'] = 'SAMEORIGIN' + return resp + + @main.route('/documentation') def documentation(): return render_template('views/documentation.html') diff --git a/app/main/views/service_settings.py b/app/main/views/service_settings.py index 69b477de2..063c8730a 100644 --- a/app/main/views/service_settings.py +++ b/app/main/views/service_settings.py @@ -810,6 +810,28 @@ def service_set_letter_branding(service_id): current_branding=current_service.letter_branding_id, ) + if form.validate_on_submit(): + return redirect(url_for( + '.service_preview_letter_branding', + service_id=service_id, + branding_style=form.branding_style.data, + )) + + return render_template( + 'views/service-settings/set-letter-branding.html', + form=form, + search_form=SearchByNameForm() + ) + + +@main.route("/services/