From: matthewt Date: Mon, 26 Nov 2007 20:44:56 +0000 (+0000) Subject: ObjectView converted X-Git-Tag: v0.002000~465^2~2 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=d7b00a506917b0fc21c7781985ea65293870fbbc;p=catagits%2FReaction.git ObjectView converted --- diff --git a/lib/Reaction/UI/RenderingContext/TT.pm b/lib/Reaction/UI/RenderingContext/TT.pm index e925ff6..8308c0c 100644 --- a/lib/Reaction/UI/RenderingContext/TT.pm +++ b/lib/Reaction/UI/RenderingContext/TT.pm @@ -62,21 +62,6 @@ class TT is RenderingContext, which { } grep { !/^_/ } keys %$args }; - # if there's an _ key that's our current topic (decalarative syntax - # sees $_ as $_{_}) so build an iterator around it. - - # There's possibly a case for making everything an iterator but I think - # any fragment should only have a single multiple arg - - # we also create a 'pos' shortcut to content.pos for brevity - - if (my $topic = $args->{_}) { - my $iter = $self->iter_class->new( - $topic, $self - ); - $tt_args->{content} = $iter; - $tt_args->{pos} = sub { $iter->pos }; - } $body .= $lset->tt_view->include($fname, $tt_args); #warn "rendered ${fname}, body length now ".length($body)."\n"; }; diff --git a/lib/Reaction/UI/ViewPort/DisplayField.pm b/lib/Reaction/UI/ViewPort/DisplayField.pm index b8269dc..3ef48af 100644 --- a/lib/Reaction/UI/ViewPort/DisplayField.pm +++ b/lib/Reaction/UI/ViewPort/DisplayField.pm @@ -44,6 +44,8 @@ class DisplayField is 'Reaction::UI::ViewPort', which { return ''; }; + implements 'value_string' => as { shift->value }; + }; 1; diff --git a/lib/Reaction/UI/Widget/DisplayField.pm b/lib/Reaction/UI/Widget/DisplayField.pm index a688c28..d881025 100644 --- a/lib/Reaction/UI/Widget/DisplayField.pm +++ b/lib/Reaction/UI/Widget/DisplayField.pm @@ -3,9 +3,12 @@ package Reaction::UI::Widget::DisplayField; use Reaction::UI::WidgetClass; class DisplayField, which { - fragment widget [ qw/label value/ ]; - fragment label [ string { $_{viewport}->label } ]; - fragment value [ string { $_{viewport}->value } ]; + + before fragment widget { + arg label => $_{viewport}->label; + arg value => $_{viewport}->value_string; + }; + }; 1; diff --git a/lib/Reaction/UI/Widget/DisplayField/Boolean.pm b/lib/Reaction/UI/Widget/DisplayField/Boolean.pm index 82f3b22..76ba41f 100644 --- a/lib/Reaction/UI/Widget/DisplayField/Boolean.pm +++ b/lib/Reaction/UI/Widget/DisplayField/Boolean.pm @@ -3,7 +3,7 @@ package Reaction::UI::Widget::DisplayField::Boolean; use Reaction::UI::WidgetClass; class Boolean is 'Reaction::UI::Widget::DisplayField', which { - fragment value [ string { $_{viewport}->value_string } ]; + }; 1; diff --git a/lib/Reaction/UI/Widget/DisplayField/Collection.pm b/lib/Reaction/UI/Widget/DisplayField/Collection.pm index bcac990..40bedd3 100644 --- a/lib/Reaction/UI/Widget/DisplayField/Collection.pm +++ b/lib/Reaction/UI/Widget/DisplayField/Collection.pm @@ -3,10 +3,19 @@ package Reaction::UI::Widget::DisplayField::Collection; use Reaction::UI::WidgetClass; class Collection, which { - fragment widget [ qw/label list/ ]; - fragment label [ string { $_{viewport}->label } ]; - fragment list [ item => over func('viewport', 'value_names') ]; - fragment item [ string { $_ } ]; + + before fragment widget { + arg 'label' => $_{viewport}->label; + }; + + implements fragment list { + render 'item' => over $_{viewport}->value_names; + }; + + implements fragment item { + arg 'name' => $_; + }; + }; 1; diff --git a/lib/Reaction/UI/Widget/DisplayField/DateTime.pm b/lib/Reaction/UI/Widget/DisplayField/DateTime.pm index 8f44d9e..35b2651 100644 --- a/lib/Reaction/UI/Widget/DisplayField/DateTime.pm +++ b/lib/Reaction/UI/Widget/DisplayField/DateTime.pm @@ -3,7 +3,7 @@ package Reaction::UI::Widget::DisplayField::DateTime; use Reaction::UI::WidgetClass; class DateTime is 'Reaction::UI::Widget::DisplayField', which { - fragment value [ string { $_{viewport}->value_string } ]; + }; 1; diff --git a/lib/Reaction/UI/Widget/DisplayField/RelatedObject.pm b/lib/Reaction/UI/Widget/DisplayField/RelatedObject.pm index a477ef7..f6aef23 100644 --- a/lib/Reaction/UI/Widget/DisplayField/RelatedObject.pm +++ b/lib/Reaction/UI/Widget/DisplayField/RelatedObject.pm @@ -3,7 +3,7 @@ package Reaction::UI::Widget::DisplayField::RelatedObject; use Reaction::UI::WidgetClass; class RelatedObject is 'Reaction::UI::Widget::DisplayField', which { - fragment value [ string { $_{viewport}->value_string } ]; + }; 1; diff --git a/lib/Reaction/UI/Widget/ObjectView.pm b/lib/Reaction/UI/Widget/ObjectView.pm index 6da4c34..a3455ba 100644 --- a/lib/Reaction/UI/Widget/ObjectView.pm +++ b/lib/Reaction/UI/Widget/ObjectView.pm @@ -3,9 +3,15 @@ package Reaction::UI::Widget::ObjectView; use Reaction::UI::WidgetClass; class ObjectView, which { - fragment widget [ 'field_list' ]; - fragment field_list [ field => over func('viewport', 'ordered_fields') ]; - fragment field [ 'viewport' ]; + + implements fragment field_list { + render field => over $_{viewport}->ordered_fields; + }; + + implements fragment field { + render 'viewport'; + }; + }; 1; diff --git a/lib/Reaction/UI/WidgetClass.pm b/lib/Reaction/UI/WidgetClass.pm index beebe41..ac6feaf 100644 --- a/lib/Reaction/UI/WidgetClass.pm +++ b/lib/Reaction/UI/WidgetClass.pm @@ -85,7 +85,7 @@ class WidgetClass, which { implements handle_fragment => as { my ($self, $name, $proto, $code) = @_; -warn ($self, $name, $code); +#warn ($self, $name, $code); return ("_fragment_${name}" => $self->wrap_as_fragment($code)); }; @@ -102,6 +102,7 @@ warn ($self, $name, $code); local $current_widget = $_[0]; local $do_render = $_[1]; local *_ = \%{$_[2]}; + local $_ = $_[2]->{_}; local $new_args = $_[3]; $code->(@_); }; diff --git a/share/skin/default/layout/display_field/boolean.tt b/share/skin/default/layout/display_field/boolean.tt index 74e02e4..d531087 100644 --- a/share/skin/default/layout/display_field/boolean.tt +++ b/share/skin/default/layout/display_field/boolean.tt @@ -1,13 +1,14 @@ =for layout widget -[% content %] +[% label_layout %] +[% value_layout %] -=for layout label +=for layout label_layout - [% content | html %]: + [% label %]: -=for layout value +=for layout value_layout -[% content | html %] +[% value %] -=cut \ No newline at end of file +=cut diff --git a/share/skin/default/layout/display_field/collection.tt b/share/skin/default/layout/display_field/collection.tt index 3bc65a9..47244e7 100644 --- a/share/skin/default/layout/display_field/collection.tt +++ b/share/skin/default/layout/display_field/collection.tt @@ -1,20 +1,20 @@ =for layout widget -[% label %] +[% label_box %] [% list %] -=for layout label +=for layout label_box - [% content | html %]: + [% label %]: =for layout list =for layout item -
  • [% content | html %]
  • +
  • [% name %]
  • =cut diff --git a/share/skin/default/layout/display_field/date_time.tt b/share/skin/default/layout/display_field/date_time.tt index 1fcad1a..d531087 100644 --- a/share/skin/default/layout/display_field/date_time.tt +++ b/share/skin/default/layout/display_field/date_time.tt @@ -1,13 +1,14 @@ =for layout widget -[% content %] +[% label_layout %] +[% value_layout %] -=for layout label +=for layout label_layout - [% content | html %]: + [% label %]: -=for layout value +=for layout value_layout -[% content | html %] +[% value %] =cut diff --git a/share/skin/default/layout/display_field/number.tt b/share/skin/default/layout/display_field/number.tt index 1fcad1a..d531087 100644 --- a/share/skin/default/layout/display_field/number.tt +++ b/share/skin/default/layout/display_field/number.tt @@ -1,13 +1,14 @@ =for layout widget -[% content %] +[% label_layout %] +[% value_layout %] -=for layout label +=for layout label_layout - [% content | html %]: + [% label %]: -=for layout value +=for layout value_layout -[% content | html %] +[% value %] =cut diff --git a/share/skin/default/layout/display_field/related_object.tt b/share/skin/default/layout/display_field/related_object.tt index 1fcad1a..d531087 100644 --- a/share/skin/default/layout/display_field/related_object.tt +++ b/share/skin/default/layout/display_field/related_object.tt @@ -1,13 +1,14 @@ =for layout widget -[% content %] +[% label_layout %] +[% value_layout %] -=for layout label +=for layout label_layout - [% content | html %]: + [% label %]: -=for layout value +=for layout value_layout -[% content | html %] +[% value %] =cut diff --git a/share/skin/default/layout/display_field/string.tt b/share/skin/default/layout/display_field/string.tt index 831cad4..d531087 100644 --- a/share/skin/default/layout/display_field/string.tt +++ b/share/skin/default/layout/display_field/string.tt @@ -1,13 +1,14 @@ =for layout widget -[% content %] +[% label_layout %] +[% value_layout %] -=for layout label +=for layout label_layout - [% content | html %]: + [% label %]: -=for layout value +=for layout value_layout -[% content | html %] +[% value %] -=cut \ No newline at end of file +=cut diff --git a/share/skin/default/layout/display_field/text.tt b/share/skin/default/layout/display_field/text.tt index 831cad4..d531087 100644 --- a/share/skin/default/layout/display_field/text.tt +++ b/share/skin/default/layout/display_field/text.tt @@ -1,13 +1,14 @@ =for layout widget -[% content %] +[% label_layout %] +[% value_layout %] -=for layout label +=for layout label_layout - [% content | html %]: + [% label %]: -=for layout value +=for layout value_layout -[% content | html %] +[% value %] -=cut \ No newline at end of file +=cut diff --git a/share/skin/default/layout/object_view.tt b/share/skin/default/layout/object_view.tt index 55b15bf..cec7b4d 100644 --- a/share/skin/default/layout/object_view.tt +++ b/share/skin/default/layout/object_view.tt @@ -2,14 +2,8 @@ [% field_list %] -=for layout field_list - -

    [% content %]

    - -=cut - =for layout field - [% content %]
    + [% call_next %]
    =cut