implements 'BUILD' => as {
my ($self, $args) = @_;
my @path = @{$args->{search_path}||[]};
- confess "No view object provided" unless $args->{view};
confess "No skin object provided" unless $args->{skin};
+ confess "No top skin object provided" unless $args->{top_skin};
$self->_load_file($self->source_file, $args);
unless ($self->has_widget_class) {
- $self->widget_class($args->{view}->widget_class_for($self));
+ $self->widget_class($args->{skin}->widget_class_for($self));
}
};
$layouts->{$fname} = $text;
} elsif ($data =~ /^extends (\S+)/) {
my $super_name = $1;
- $self->super($build_args->{skin}->create_layout_set($super_name))
+ my $skin;
+ if ($super_name eq 'NEXT') {
+ confess "No next skin and layout extends NEXT"
+ unless $build_args->{next_skin};
+ $skin = $build_args->{next_skin};
+ $super_name = $self->name;
+ } else {
+ $skin = $build_args->{top_skin};
+ }
+ $self->super($skin->create_layout_set($super_name));
} elsif ($data =~ /^widget (\S+)/) {
my $widget_type = $1;
$self->widget_type($1);
} elsif ($data =~ /^cut/) {
# no-op
} else {
- confess "Unparseable directive ${data}";
+ confess "Unparseable directive ${data} in ${file}";
}
}
};