X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FReaction%2FUI%2FWidget.pm;h=2c7e00c2192ab2e825e66f8cc765de8694436dbf;hb=8b498574c015710a13644328549b298cef385f74;hp=a5171d103f5489e2f5a1a2180367475175e595f8;hpb=f2fef590a7283ea919bdaa51bac9d433e8785a09;p=catagits%2FReaction.git diff --git a/lib/Reaction/UI/Widget.pm b/lib/Reaction/UI/Widget.pm index a5171d1..2c7e00c 100644 --- a/lib/Reaction/UI/Widget.pm +++ b/lib/Reaction/UI/Widget.pm @@ -34,13 +34,18 @@ class Widget which { $rctx->dispatch($render_tree, $new_args); }; + implements '_method_for_fragment_name' => as { + my ($self, $fragment_name) = @_; + return $self->can("_fragment_${fragment_name}"); + }; + implements '_render_dispatch_order' => as { my ($self, $fragment_name, $args, $new_args) = @_; my @render_stack = (my $render_deep = (my $render_curr = [])); my @layout_order = $self->layout_set->widget_order_for($fragment_name); - if (my $f_meth = $self->can("_fragment_${fragment_name}")) { + if (my $f_meth = $self->_method_for_fragment_name($fragment_name)) { my @wclass_stack; my $do_render = sub { my $package = shift; @@ -93,6 +98,7 @@ class Widget which { my ($self, $do_render, $args, $new_args) = @_; my $vp = $args->{'_'}; my ($widget, $merge_args) = $self->view->render_viewport_args($vp); + delete @{$new_args}{keys %$new_args}; # fresh start @{$new_args}{keys %$merge_args} = values %$merge_args; $do_render->(Widget, $widget, 'widget'); }; @@ -100,6 +106,7 @@ class Widget which { implements '_fragment_widget' => as { my ($self, $do_render, $args, $new_args) = @_; my $merge = $self->basic_layout_args; +#warn "Merge: ".join(', ', keys %$merge)." into: ".join(', ', keys %$new_args); delete @{$merge}{keys %$new_args}; # nuke 'self' and 'viewport' @{$new_args}{keys %$merge} = values %$merge; };