move constant delcarations into class {} block to make conversion cleaner
[catagits/Reaction.git] / lib / Reaction / UI / Widget.pm
index 2c7e00c..3a9bc5c 100644 (file)
@@ -7,6 +7,9 @@ use aliased 'Reaction::UI::LayoutSet';
 
 class Widget which {
 
+  sub DEBUG_FRAGMENTS () { $ENV{REACTION_UI_WIDGET_DEBUG_FRAGMENTS} }
+  sub DEBUG_LAYOUTS () { $ENV{REACTION_UI_WIDGET_DEBUG_LAYOUTS} }
+
   has 'view' => (isa => View, is => 'ro', required => 1);
   has 'layout_set' => (isa => LayoutSet, is => 'ro', required => 1);
   has 'fragment_names' => (is => 'ro', lazy_build => 1);
@@ -25,7 +28,13 @@ class Widget which {
   implements 'render' => as {
     my ($self, $fragment_name, $rctx, $passed_args) = @_;
     confess "\$passed_args not hashref" unless ref($passed_args) eq 'HASH';
-#warn "Render: ${fragment_name} for ${self}";
+    if (DEBUG_FRAGMENTS) {
+      my $vp = $passed_args->{viewport};
+      $self->view->app->log->debug(
+        "Rendering fragment ${fragment_name} for ".ref($self)
+        ." for VP ${vp} at ".$vp->location
+      );
+    }
     my $args = { self => $self, %$passed_args };
     my $new_args = { %$args };
     my $render_tree = $self->_render_dispatch_order(
@@ -54,6 +63,11 @@ class Widget which {
                  || $layout_order[0][0]->isa($package)) {
             my $new_curr = [];
             my @l = @{shift(@layout_order)};
+            if (DEBUG_LAYOUTS) {
+              $self->view->app->log->debug(
+                "Layout ${fragment_name} in ${\$l[1]->name} from ${\$l[1]->source_file}"
+              );
+            }
             push(@$render_curr, [ -layout, $l[1], $fragment_name, $new_curr ]);
             push(@render_stack, $new_curr);
             push(@wclass_stack, $l[0]);
@@ -75,6 +89,11 @@ class Widget which {
     # if we had no fragment method or if we still have layouts left
     if (@layout_order) {
       while (my $l = shift(@layout_order)) {
+        if (DEBUG_LAYOUTS) {
+          $self->view->app->log->debug(
+            "Layout ${fragment_name} in ${\$l->[1]->name} from ${\$l->[1]->source_file}"
+          );
+        }
         push(@$render_deep, [
           -layout => $l->[1], $fragment_name, ($render_deep = [])
         ]);
@@ -98,6 +117,7 @@ class Widget which {
     my ($self, $do_render, $args, $new_args) = @_;
     my $vp = $args->{'_'};
     my ($widget, $merge_args) = $self->view->render_viewport_args($vp);
+    $merge_args->{outer} = { %$new_args };
     delete @{$new_args}{keys %$new_args}; # fresh start
     @{$new_args}{keys %$merge_args} = values %$merge_args;
     $do_render->(Widget, $widget, 'widget');