rework skin path handling
[catagits/Reaction.git] / lib / Reaction / UI / Widget.pm
index a5171d1..2c7e00c 100644 (file)
@@ -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;
   };