From 4e5157d1ee9633853065cd5f515567eb71734caa Mon Sep 17 00:00:00 2001 From: Pete Matsyburka Date: Fri, 24 Jan 2025 23:08:44 +0200 Subject: [PATCH] add text valign --- app/javascript/submission_form/area.vue | 9 ++++++--- app/javascript/template_builder/area.vue | 11 +++++++---- app/views/submissions/_value.html.erb | 15 +++++++++------ lib/submissions/generate_result_attachments.rb | 16 +++++++++++++--- 4 files changed, 35 insertions(+), 16 deletions(-) diff --git a/app/javascript/submission_form/area.vue b/app/javascript/submission_form/area.vue index ce212a4f..d18aae5f 100644 --- a/app/javascript/submission_form/area.vue +++ b/app/javascript/submission_form/area.vue @@ -183,7 +183,7 @@ v-else ref="textContainer" dir="auto" - class="flex items-center px-0.5 w-full" + class="flex px-0.5 w-full" :class="{ ...alignClasses, ...fontClasses }" >
+<% valign = field.dig('preferences', 'valign') %> <% color = field.dig('preferences', 'color') %> <% font = field.dig('preferences', 'font') %> <% font_type = field.dig('preferences', 'font_type') %> -width: <%= area['w'] * 100 %>%; height: <%= area['h'] * 100 %>%; left: <%= area['x'] * 100 %>%; top: <%= area['y'] * 100 %>%; <%= "font-size: clamp(4pt, 1.6vw, #{field['preferences']['font_size'].to_i * 1.23}pt); line-height: `clamp(6pt, 2.0vw, #{(field['preferences']['font_size'].to_i * 1.23) + 3}pt)`" if field.dig('preferences', 'font_size') %>"> +width: <%= area['w'] * 100 %>%; height: <%= area['h'] * 100 %>%; left: <%= area['x'] * 100 %>%; top: <%= area['y'] * 100 %>%; <%= "font-size: clamp(4pt, 1.6vw, #{field['preferences']['font_size'].to_i * 1.23}pt); line-height: `clamp(6pt, 2.0vw, #{(field['preferences']['font_size'].to_i * 1.23) + 3}pt)`" if field.dig('preferences', 'font_size') %>"> <% if field['type'] == 'signature' %>
@@ -61,17 +62,19 @@
<% elsif field['type'] == 'date' %> -
+
<% value = Time.current.in_time_zone(local_assigns[:timezone]).to_date.to_s if value == '{{date}}' %> - <%= TimeUtils.format_date_string(value, field.dig('preferences', 'format'), local_assigns[:locale]) %> +
<%= TimeUtils.format_date_string(value, field.dig('preferences', 'format'), local_assigns[:locale]) %>
<% elsif field['type'] == 'number' %> -
- <%= NumberUtils.format_number(value, field.dig('preferences', 'format')) %> +
+
<%= NumberUtils.format_number(value, field.dig('preferences', 'format')) %>
<% else %> -
<%= Array.wrap(value).join(', ') %>
+
+
<%= Array.wrap(value).join(', ') %>
+
<% end %> diff --git a/lib/submissions/generate_result_attachments.rb b/lib/submissions/generate_result_attachments.rb index 34453141..87c04402 100644 --- a/lib/submissions/generate_result_attachments.rb +++ b/lib/submissions/generate_result_attachments.rb @@ -229,8 +229,9 @@ module Submissions text_align = field.dig('preferences', 'align').to_s.to_sym.presence || (value.to_s.match?(RTL_REGEXP) ? :right : :left) - layouter = HexaPDF::Layout::TextLayouter.new(text_valign: :center, text_align:, - font:, font_size:) + text_valign = (field.dig('preferences', 'valign').to_s.presence || 'center').to_sym + + layouter = HexaPDF::Layout::TextLayouter.new(text_valign:, text_align:, font:, font_size:) next if Array.wrap(value).compact_blank.blank? @@ -515,10 +516,19 @@ module Submissions 0 end + align_y_diff = + if text_valign == :top + 0 + elsif text_valign == :bottom + height_diff + TEXT_TOP_MARGIN + else + height_diff / 2 + end + layouter.fit([text], field['type'].in?(%w[date number]) ? width : area['w'] * width, height_diff.positive? ? box_height : area['h'] * height) .draw(canvas, (area['x'] * width) - right_align_x_adjustment + TEXT_LEFT_MARGIN, - height - (area['y'] * height) + height_diff - TEXT_TOP_MARGIN) + height - (area['y'] * height) + align_y_diff - TEXT_TOP_MARGIN) end end end