X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FReaction%2FUI%2FWidget%2FField.pm;h=7e5fcd3599987c85d6525b4a32ffea1b8e2e1327;hb=f9b32c83550e273bec97c9be5b63079addd4846b;hp=13276c2d86ca115bd12efcaa18318e4bb95e55d3;hpb=12d063c6e5146fcdddea0b228b9a293e5df76a42;p=catagits%2FReaction.git diff --git a/lib/Reaction/UI/Widget/Field.pm b/lib/Reaction/UI/Widget/Field.pm index 13276c2..7e5fcd3 100644 --- a/lib/Reaction/UI/Widget/Field.pm +++ b/lib/Reaction/UI/Widget/Field.pm @@ -2,75 +2,142 @@ package Reaction::UI::Widget::Field; use Reaction::UI::WidgetClass; -class Field, which { +use namespace::clean -except => [ qw(meta) ]; - has id => (isa => 'Str', is => 'ro', lazy_build => 1); - has name => (isa => 'Str', is => 'ro', lazy_build => 1); - implements _build_id => as { shift->viewport->event_id_for('value'); }; - implements _build_name => as { shift->viewport->event_id_for('value'); }; - - fragment widget [qw/label field message/ - => { id => func('self', 'id'), - name => func('self', 'name'), } - ]; - - fragment field [ string { $_{viewport}->value }, ]; - - fragment label [ string { $_{viewport}->label }, ]; - fragment message [ string { $_{viewport}->message }, ]; +before fragment widget { + if ($_{viewport}->can('value_string')) { + arg 'field_value' => $_{viewport}->value_string; + } else { + arg 'field_value' => ''; #$_{viewport}->value; + } +}; +implements fragment label_fragment { + if (my $label = $_{viewport}->label) { + arg label => localized $label; + render 'label'; + } }; +__PACKAGE__->meta->make_immutable; + 1; __END__; =head1 NAME -Reaction::UI::Widget::Field +Reaction::UI::Widget::Field - A simple labelled text field =head1 DESCRIPTION -=head1 ATTRIBUTES +This widget renders a simple labelled text field. -=head2 id +=head1 FRAGMENTS -Str, lazy builds. +=head2 widget -=head2 name +Sets the C argument either to the result of the C +method on the viewport, or to an empty string if the viewport does not support +the method. -Str, lazy builds. +=head2 label_fragment -=head1 METHODS +Will set the C