73b14e31a005ff011a5c138f705c04436f451a02
[catagits/Reaction.git] / lib / Reaction / UI / Widget / Field / Mutable.pm
1 package Reaction::UI::Widget::Field::Mutable;
2
3 use Reaction::UI::WidgetClass;
4
5 use namespace::clean -except => [ qw(meta) ];
6 extends 'Reaction::UI::Widget::Field';
7
8
9
10  before fragment widget {
11    arg 'field_id' => event_id 'value_string';
12    arg 'field_name' => event_id 'value_string' unless defined $_{field_name};
13    arg 'field_type' => 'text';
14    arg 'field_class' => "action-field " . $_{viewport}->name;
15
16    # these two are to fire force_events in viewports
17    # where you can end up without an event for e.g.
18    # HTML checkbox fields
19
20    arg 'exists_event' => event_id 'exists';
21    arg 'exists_value' => 1;
22  };
23
24  implements fragment message_fragment {
25    my $vp = $_{viewport};
26    return unless $vp->has_message;
27    my $message = $vp->message;
28    if ($message) {
29      arg message => localized $message;
30      render 'message';
31    }
32  };
33
34  implements fragment field_is_required {
35    my $vp = $_{viewport};
36    if ( $vp->value_is_required && !$vp->value_string ) {
37        render 'field_is_required_yes';
38    } else {
39        render 'field_is_required_no';
40    }
41  };
42
43 __PACKAGE__->meta->make_immutable;
44
45
46 1;
47
48 __END__;