re-added "field is required" messages
[catagits/Reaction.git] / lib / Reaction / UI / Widget / Field / Mutable.pm
index 6e6674c..1364b39 100644 (file)
@@ -2,40 +2,47 @@ package Reaction::UI::Widget::Field::Mutable;
 
 use Reaction::UI::WidgetClass;
 
-class Mutable is 'Reaction::UI::Widget::Field', which {
-
-   before fragment widget {
-     arg 'field_id' => event_id 'value_string';
-     arg 'field_name' => event_id 'value_string' unless defined $_{field_name};
-     arg 'field_type' => 'text';
-     arg 'field_class' => "action-field " . $_{viewport}->name;
-
-     # these two are to fire force_events in viewports
-     # where you can end up without an event for e.g.
-     # HTML checkbox fields
-
-     arg 'exists_event' => event_id 'exists';
-     arg 'exists_value' => 1;
-   };
-
-   implements fragment message_fragment {
-     if (my $message = $_{viewport}->message) {
-       arg message => $message;
-       render 'message';
-     }
-   };
-
-   implements fragment field_is_required {
-     my $model = $_{viewport}->model;
-     my $attr  = $_{viewport}->attribute;
-     if ( $model->attribute_is_required($attr) ) {
-         render 'field_is_required_yes';
-     } else {
-         render 'field_is_required_no';
-     }
-   };
-
-};
+use namespace::clean -except => [ qw(meta) ];
+extends 'Reaction::UI::Widget::Field';
+
+
+
+ before fragment widget {
+   arg 'field_id' => event_id 'value_string';
+   arg 'field_name' => event_id 'value_string' unless defined $_{field_name};
+   arg 'field_type' => 'text';
+   arg 'field_class' => "action-field " . $_{viewport}->name;
+
+   # these two are to fire force_events in viewports
+   # where you can end up without an event for e.g.
+   # HTML checkbox fields
+
+   arg 'exists_event' => event_id 'exists';
+   arg 'exists_value' => 1;
+ };
+
+ implements fragment message_fragment {
+   my $vp = $_{viewport};
+   my $message = $_{viewport}->message;
+   $message ||= $vp->name.' is required'
+     if $vp->value_is_required && !$vp->value_string;
+   if ($message) {
+     arg message => localized $message;
+     render 'message';
+   }
+ };
+
+ implements fragment field_is_required {
+   my $vp = $_{viewport};
+   if ( $vp->value_is_required && !$vp->value_string ) {
+       render 'field_is_required_yes';
+   } else {
+       render 'field_is_required_no';
+   }
+ };
+
+__PACKAGE__->meta->make_immutable;
+
 
 1;