From 6e4323ac5541ba182511cee544529cf99adf3191 Mon Sep 17 00:00:00 2001 From: Dave Roberts Date: Wed, 9 Sep 2026 13:27:37 +0100 Subject: [PATCH 1/2] Update views to omit length check where it wasn't set --- views/fields/input.tt | 2 +- views/fields/textarea.tt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/views/fields/input.tt b/views/fields/input.tt index 5112e4cb4..8b08560f0 100644 --- a/views/fields/input.tt +++ b/views/fields/input.tt @@ -63,7 +63,7 @@ disabled[% END %][% IF is_readonly %] readonly[% END %][% IF is_required %] required - aria-required="true"[% END %][% IF max_length.defined %] + aria-required="true"[% END %][% IF max_length.defined && max_length.value %] data-max="[% max_length %]"[% END %] > diff --git a/views/fields/textarea.tt b/views/fields/textarea.tt index 7acc8363f..66f67cc8b 100644 --- a/views/fields/textarea.tt +++ b/views/fields/textarea.tt @@ -42,7 +42,7 @@ disabled[% END %][% IF is_readonly %] readonly[% END %][% IF is_required %] required - aria-required="true"[% END %][% IF max_length.defined %] + aria-required="true"[% END %][% IF max_length.defined && max_length.value %] data-max="[% max_length %]"[% END %] >[% INCLUDE fields/sub/filter.tt; %] From b9979002ae7210475e35d532a7e43cf7ab145c54 Mon Sep 17 00:00:00 2001 From: Dave Roberts Date: Wed, 9 Sep 2026 13:53:45 +0000 Subject: [PATCH 2/2] Update to allow for zero length and to test said case --- lib/GADS/Datum/String.pm | 3 ++- t/006_invalid_values.t | 5 +++++ views/fields/input.tt | 4 +++- views/fields/textarea.tt | 4 +++- 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/lib/GADS/Datum/String.pm b/lib/GADS/Datum/String.pm index fd23b7276..400216153 100644 --- a/lib/GADS/Datum/String.pm +++ b/lib/GADS/Datum/String.pm @@ -62,7 +62,8 @@ after set_value => sub { } } } - if (my $maxlen = $self->column->max_length) { + if (defined $self->column->max_length) { + my $maxlen = $self->column->max_length; foreach my $val (@values) { if (defined $val && defined $maxlen && length($val) > $maxlen) diff --git a/t/006_invalid_values.t b/t/006_invalid_values.t index b84caea32..99cede863 100644 --- a/t/006_invalid_values.t +++ b/t/006_invalid_values.t @@ -83,4 +83,9 @@ $string1->max_length(10); try { $record->fields->{$string1->id}->set_value("foobarbazquux") } hide => 'ALL'; ok( $@, "Failed to write string value exceeding max_length" ); +$string1->force_regex(undef); +$string1->max_length(0); +try { $record->fields->{$string1->id}->set_value("a") } hide => 'ALL'; +ok( $@, "Failed to write string value exceeding max_length of 0" ); + done_testing(); diff --git a/views/fields/input.tt b/views/fields/input.tt index 8b08560f0..ad5a04ca8 100644 --- a/views/fields/input.tt +++ b/views/fields/input.tt @@ -63,7 +63,9 @@ disabled[% END %][% IF is_readonly %] readonly[% END %][% IF is_required %] required - aria-required="true"[% END %][% IF max_length.defined && max_length.value %] + [% # If using $.defined, TT still defines the value even if it's undef instead of expected behaviour + # we use $.size instead, as we still want to allow a max length of 0 if it's set. %] + aria-required="true"[% END %][% IF max_length.size %] data-max="[% max_length %]"[% END %] > diff --git a/views/fields/textarea.tt b/views/fields/textarea.tt index 66f67cc8b..ae99f4fa5 100644 --- a/views/fields/textarea.tt +++ b/views/fields/textarea.tt @@ -42,7 +42,9 @@ disabled[% END %][% IF is_readonly %] readonly[% END %][% IF is_required %] required - aria-required="true"[% END %][% IF max_length.defined && max_length.value %] + [% # If using $.defined, TT still defines the value even if it's undef instead of expected behaviour + # we use $.size instead, as we still want to allow a max length of 0 if it's set. %] + aria-required="true"[% END %][% IF max_length.size %] data-max="[% max_length %]"[% END %] >[% INCLUDE fields/sub/filter.tt; %]