@@ -13,6 +13,7 @@ sub new {
13
13
my $self = shift -> next::method(@_ );
14
14
15
15
$self -> filename(' repeatable' );
16
+ $self -> is_repeatable(1);
16
17
17
18
return $self ;
18
19
}
@@ -47,8 +48,6 @@ sub repeat {
47
48
my @clones = map { $_ -> clone } @$children ;
48
49
my $block = $self -> element(' Block' );
49
50
50
- map { $_ -> parent($block ) } @clones ;
51
-
52
51
$block -> _elements(\@clones );
53
52
$block -> attributes( $self -> attributes );
54
53
$block -> tag( $self -> tag );
@@ -58,21 +57,47 @@ sub repeat {
58
57
if ( $self -> increment_field_names ) {
59
58
for my $field ( @{ $block -> get_all_elements } ) {
60
59
next unless $field -> is_field;
61
- my $name = $field -> name;
62
- if ( defined $name && $name =~ / 0/ ) {
63
- $name =~ s / 0/ $rep / ;
60
+
61
+ if ( defined ( my $name = $field -> name ) ) {
62
+ $field -> original_name($name );
63
+
64
+ $name .= " _$rep " ;
64
65
$field -> name($name );
65
66
}
66
67
}
67
68
}
68
69
70
+ _reparent_children( $block );
71
+
72
+ for my $field (@{ $block -> get_fields }) {
73
+ map { $_ -> parent($field ) }
74
+ @{ $field -> _deflators },
75
+ @{ $field -> _filters },
76
+ @{ $field -> _constraints },
77
+ @{ $field -> _inflators },
78
+ @{ $field -> _validators },
79
+ @{ $field -> _transformers };
80
+ }
81
+
69
82
push @return , $block ;
70
83
71
84
}
72
85
73
86
return \@return ;
74
87
}
75
88
89
+ sub _reparent_children {
90
+ my $self = shift ;
91
+
92
+ return if $self -> is_field;
93
+
94
+ for my $child (@{ $self -> get_elements }) {
95
+ $child -> parent( $self );
96
+
97
+ _reparent_children( $child );
98
+ }
99
+ }
100
+
76
101
sub process {
77
102
my ($self ) = @_ ;
78
103
0 commit comments