aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgroditi <groditi@03d0b0b2-0e1a-0410-a411-fdb2f4bd65d7>2009-07-11 22:59:02 +0000
committergroditi <groditi@03d0b0b2-0e1a-0410-a411-fdb2f4bd65d7>2009-07-11 22:59:02 +0000
commit4ad1eed3fe0f8a90080c63ec474e4634376f0f95 (patch)
tree16415e2857b59d155b63b1c6b7ff8ba39be7a7da
parentb5a45848e42a559b828c46167f98c507a3ac8fc3 (diff)
downloadreaction-4ad1eed3fe0f8a90080c63ec474e4634376f0f95.tar.gz
reaction-4ad1eed3fe0f8a90080c63ec474e4634376f0f95.zip
wire layout_args, which was somehow never connected to the mix
-rw-r--r--Changes1
-rw-r--r--lib/ComponentUI/Controller/Root.pm11
-rw-r--r--lib/ComponentUI/UI/Widget/Index.pm15
-rw-r--r--lib/Reaction/UI/View.pm3
-rw-r--r--lib/Reaction/UI/ViewPort.pm10
-rw-r--r--share/skin/componentui/layout/index.tt6
-rw-r--r--share/skin/defaults.conf1
7 files changed, 43 insertions, 4 deletions
diff --git a/Changes b/Changes
index 01d8ba4..e2e42f2 100644
--- a/Changes
+++ b/Changes
@@ -10,6 +10,7 @@ Revision history for Reaction
- Adapt widget and layout to changes
- Add example of explicitly stating action to ComponentUI
- Don't override custom location in push_viewport
+ - Wire layout_args, which was forgotten + example of how to use it
0.002000 - 29 Apr 2008
- Update CheckUniques role to use around instead of overrides
- Stop using ACCEPT_CONTEXT, use InstancePerContext instead
diff --git a/lib/ComponentUI/Controller/Root.pm b/lib/ComponentUI/Controller/Root.pm
index e0935d9..9a2017f 100644
--- a/lib/ComponentUI/Controller/Root.pm
+++ b/lib/ComponentUI/Controller/Root.pm
@@ -33,7 +33,16 @@ sub base :Chained('/') :PathPart('') :CaptureArgs(0) {
sub root :Chained('base') :PathPart('') :Args(0) {
my ($self, $c) = @_;
- $self->push_viewport(ViewPort, layout => 'index');
+ $self->push_viewport(
+ ViewPort, (
+ layout => 'index',
+ layout_args => {
+ user_agent => $c->request->user_agent,
+ message_to_layout => 'I hate programming.',
+ },
+ ),
+ );
+ $c->log->debug('remote', $c->request->remote_user );
}
sub bye :Chained('base') :PathPart('bye') :Args(0) {
diff --git a/lib/ComponentUI/UI/Widget/Index.pm b/lib/ComponentUI/UI/Widget/Index.pm
new file mode 100644
index 0000000..5421d7d
--- /dev/null
+++ b/lib/ComponentUI/UI/Widget/Index.pm
@@ -0,0 +1,15 @@
+package ComponentUI::UI::Widget::Index;
+
+use Reaction::UI::WidgetClass;
+use namespace::clean -except => [ qw(meta) ];
+
+after fragment widget {
+ $_{viewport}->ctx->log->debug('widget');
+ arg message_to_layout => $_{layout_message};
+};
+
+__PACKAGE__->meta->make_immutable;
+
+1;
+
+__END__
diff --git a/lib/Reaction/UI/View.pm b/lib/Reaction/UI/View.pm
index bdd04a2..f81929d 100644
--- a/lib/Reaction/UI/View.pm
+++ b/lib/Reaction/UI/View.pm
@@ -65,7 +65,8 @@ sub render_viewport_args {
my ($self, $vp) = @_;
my $layout_set = $self->layout_set_for($vp);
my $widget = $self->widget_for($vp, $layout_set);
- return ($widget, { viewport => $vp });
+ my %layout_args = (%{ $vp->layout_args }, viewport => $vp);
+ return ($widget, \%layout_args);
};
sub widget_for {
my ($self, $vp, $layout_set) = @_;
diff --git a/lib/Reaction/UI/ViewPort.pm b/lib/Reaction/UI/ViewPort.pm
index c86c793..ed9722e 100644
--- a/lib/Reaction/UI/ViewPort.pm
+++ b/lib/Reaction/UI/ViewPort.pm
@@ -250,6 +250,16 @@ The layout attribute can either be specifically passed when calling
C<push_viewport>, or it will be determined using the last part of the
ViewPorts classname.
+=item layout_args
+
+This read-only hashref attribute will pass all it's keys as variables to the
+layout at render time. They should be accessible from both the layout templates
+and the widget, if applicable, through the C<%_> hash.
+
+ $controller->push_viewport(VPName, layout => 'foo', layout_args => { bar => 'bar'});
+ $_{bar} #in widget
+ [% bar %] in template
+
=item column_order
This is generally used by more specialised ViewPorts such as the
diff --git a/share/skin/componentui/layout/index.tt b/share/skin/componentui/layout/index.tt
index 9a9bc9c..787d850 100644
--- a/share/skin/componentui/layout/index.tt
+++ b/share/skin/componentui/layout/index.tt
@@ -1,5 +1,7 @@
+=widget Index
+
=for layout widget
-<p>I hate programming.</p>
+<p> [% user_agent %] sucks. [% message_to_layout %]</p>
-=cut \ No newline at end of file
+=cut
diff --git a/share/skin/defaults.conf b/share/skin/defaults.conf
index b7d630e..509e1b1 100644
--- a/share/skin/defaults.conf
+++ b/share/skin/defaults.conf
@@ -1 +1,2 @@
+widget_search_path ComponentUI::UI::Widget
widget_search_path Reaction::UI::Widget