diff --git a/app/controllers/api/tools_controller.rb b/app/controllers/api/tools_controller.rb index 7b2d5cb4e..63a50f89e 100644 --- a/app/controllers/api/tools_controller.rb +++ b/app/controllers/api/tools_controller.rb @@ -34,6 +34,8 @@ def verify } end } + rescue HexaPDF::MalformedPDFError + render json: { error: 'Malformed PDF' }, status: :unprocessable_entity end end end diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index a48146ee6..a3cb0242f 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -30,7 +30,7 @@ class ApplicationController < ActionController::Base redirect_to request.referer, alert: 'Too many requests', status: :too_many_requests end - if Rails.env.production? + if Rails.env.production? || Rails.env.test? rescue_from CanCan::AccessDenied do |e| Rollbar.warning(e) if defined?(Rollbar) diff --git a/app/controllers/send_submission_email_controller.rb b/app/controllers/send_submission_email_controller.rb index 10a3d8d70..06481b1ad 100644 --- a/app/controllers/send_submission_email_controller.rb +++ b/app/controllers/send_submission_email_controller.rb @@ -9,8 +9,6 @@ class SendSubmissionEmailController < ApplicationController SEND_DURATION = 30.minutes - def success; end - def create @submitter = if params[:template_slug] @@ -31,7 +29,7 @@ def create end respond_to do |f| - f.html { redirect_to success_send_submission_email_index_path } + f.html { render :success } f.json { head :ok } end end diff --git a/app/controllers/submissions_preview_controller.rb b/app/controllers/submissions_preview_controller.rb index 862b45d94..1df14e211 100644 --- a/app/controllers/submissions_preview_controller.rb +++ b/app/controllers/submissions_preview_controller.rb @@ -40,6 +40,7 @@ def show def completed @submission = Submission.find_by!(slug: params[:submissions_preview_slug]) + @template = @submission.template render :completed, layout: 'form' end diff --git a/app/controllers/templates_preferences_controller.rb b/app/controllers/templates_preferences_controller.rb index 7e358537a..a9221f7bd 100644 --- a/app/controllers/templates_preferences_controller.rb +++ b/app/controllers/templates_preferences_controller.rb @@ -28,8 +28,10 @@ def template_params submitters_order completed_notification_email_subject completed_notification_email_body completed_notification_email_enabled completed_notification_email_attach_audit] + - [completed_message: %i[title body]] + [completed_message: %i[title body], + submitters: [%i[uuid request_email_subject request_email_body]]] ).tap do |attrs| + attrs[:preferences].delete(:submitters) if params[:request_email_per_submitter] != '1' attrs[:preferences] = attrs[:preferences].transform_values do |value| if %w[true false].include?(value) value == 'true' diff --git a/app/javascript/elements/autoresize_textarea.js b/app/javascript/elements/autoresize_textarea.js index 8fd25801a..a5a8b5ed0 100644 --- a/app/javascript/elements/autoresize_textarea.js +++ b/app/javascript/elements/autoresize_textarea.js @@ -3,6 +3,8 @@ export default class extends HTMLElement { this.resize() this.textarea.addEventListener('input', () => this.resize()) + + this.observeVisibility() } resize () { @@ -11,6 +13,28 @@ export default class extends HTMLElement { } } + observeVisibility () { + this.observer = new IntersectionObserver( + (entries) => { + entries.forEach((entry) => { + if (entry.isIntersecting) { + this.resize() + this.observer.unobserve(this.textarea) + } + }) + }, + { + threshold: 0.1 + } + ) + + this.observer.observe(this.textarea) + } + + disconnectedCallback () { + this.observer.unobserve(this.textarea) + } + get textarea () { return this.querySelector('textarea') } diff --git a/app/javascript/submission_form/area.vue b/app/javascript/submission_form/area.vue index f30b2dd34..0a4533974 100644 --- a/app/javascript/submission_form/area.vue +++ b/app/javascript/submission_form/area.vue @@ -3,7 +3,7 @@ class="field-area flex absolute lg:text-base -outline-offset-1" dir="auto" :style="computedStyle" - :class="{ 'font-serif': field.preferences?.font === 'Times', 'text-[1.6vw] lg:text-base': !textOverflowChars, 'text-[1.0vw] lg:text-xs': textOverflowChars, 'cursor-default': !submittable, 'border border-red-100 bg-red-100 cursor-pointer': submittable, 'border border-red-100': !isActive && submittable, 'bg-opacity-80': !isActive && !isValueSet && submittable, 'field-area-active outline-red-500 outline-dashed outline-2 z-10': isActive && submittable, 'bg-opacity-40': (isActive || isValueSet) && submittable }" + :class="{ 'font-mono': field.preferences?.font === 'Courier', 'font-serif': field.preferences?.font === 'Times', 'text-[1.6vw] lg:text-base': !textOverflowChars, 'text-[1.0vw] lg:text-xs': textOverflowChars, 'cursor-default': !submittable, 'border border-red-100 bg-red-100 cursor-pointer': submittable, 'border border-red-100': !isActive && submittable, 'bg-opacity-80': !isActive && !isValueSet && submittable, 'field-area-active outline-red-500 outline-dashed outline-2 z-10': isActive && submittable, 'bg-opacity-40': (isActive || isValueSet) && submittable }" >