diff options
-rw-r--r-- | lib/Reaction/Types/File.pm | 2 | ||||
-rw-r--r-- | lib/Reaction/UI/ViewPort/Action.pm | 10 | ||||
-rw-r--r-- | lib/Reaction/UI/ViewPort/Field/File.pm | 3 | ||||
-rw-r--r-- | lib/Reaction/UI/ViewPort/Field/Mutable/File.pm | 24 | ||||
-rw-r--r-- | lib/Reaction/UI/Widget/Field/Image.pm | 18 |
5 files changed, 51 insertions, 6 deletions
diff --git a/lib/Reaction/Types/File.pm b/lib/Reaction/Types/File.pm index d12408c..4b4efa8 100644 --- a/lib/Reaction/Types/File.pm +++ b/lib/Reaction/Types/File.pm @@ -1,7 +1,7 @@ package Reaction::Types::File; use MooseX::Types - -declare => [qw/File/]; + -declare => [qw/File Upload/]; use MooseX::Types::Moose 'Object'; use Catalyst::Request::Upload; diff --git a/lib/Reaction/UI/ViewPort/Action.pm b/lib/Reaction/UI/ViewPort/Action.pm index 8d57717..20ae4ea 100644 --- a/lib/Reaction/UI/ViewPort/Action.pm +++ b/lib/Reaction/UI/ViewPort/Action.pm @@ -13,7 +13,7 @@ use aliased 'Reaction::UI::ViewPort::Field::Mutable::DateTime'; use aliased 'Reaction::UI::ViewPort::Field::Mutable::ChooseOne'; use aliased 'Reaction::UI::ViewPort::Field::Mutable::ChooseMany'; -#use aliased 'Reaction::UI::ViewPort::Field::Mutable::File'; +use aliased 'Reaction::UI::ViewPort::Field::Mutable::File'; #use aliased 'Reaction::UI::ViewPort::Field::Mutable::TimeRange'; class Action is 'Reaction::UI::ViewPort::Object', which { @@ -126,10 +126,10 @@ class Action is 'Reaction::UI::ViewPort::Object', which { $self->_build_simple_field(attribute => $attr, class => String, %$args); }; - #implements _build_fields_for_type_File => as { - # my ($self, $attr, $args) = @_; - # $self->_build_simple_field(attribute => $attr, class => File, %$args); - #}; + implements _build_fields_for_type_File => as { + my ($self, $attr, $args) = @_; + $self->_build_simple_field(attribute => $attr, class => File, %$args); + }; implements _build_fields_for_type_Str => as { my ($self, $attr, $args) = @_; diff --git a/lib/Reaction/UI/ViewPort/Field/File.pm b/lib/Reaction/UI/ViewPort/Field/File.pm index d55091c..86f1308 100644 --- a/lib/Reaction/UI/ViewPort/Field/File.pm +++ b/lib/Reaction/UI/ViewPort/Field/File.pm @@ -1,9 +1,12 @@ package Reaction::UI::ViewPort::Field::File; use Reaction::Class; +use Reaction::Types::File; class File is 'Reaction::UI::ViewPort::Field', which { + has '+value' => (isa => 'File'); + has uri => ( is => 'rw', lazy_build => 1); has action => (isa => 'CodeRef', is => 'rw', required => 1); diff --git a/lib/Reaction/UI/ViewPort/Field/Mutable/File.pm b/lib/Reaction/UI/ViewPort/Field/Mutable/File.pm new file mode 100644 index 0000000..f7d391f --- /dev/null +++ b/lib/Reaction/UI/ViewPort/Field/Mutable/File.pm @@ -0,0 +1,24 @@ +package Reaction::UI::ViewPort::Field::Mutable::File; + +use Reaction::Class; +use Reaction::Types::File; + +class File is 'Reaction::UI::ViewPort::Field', which { + does 'Reaction::UI::ViewPort::Field::Role::Mutable'; + + has '+value' => (isa => 'Upload'); + + override apply_our_events => sub { + my ($self, $ctx, $events) = @_; + my $value_key = join(':', $self->location, 'value'); + if (my $upload = $ctx->req->upload($value_key)) { + local $events->{$value_key} = $upload; + return super(); + } else { + return super(); + } + }; + +}; + +1; diff --git a/lib/Reaction/UI/Widget/Field/Image.pm b/lib/Reaction/UI/Widget/Field/Image.pm new file mode 100644 index 0000000..1759d98 --- /dev/null +++ b/lib/Reaction/UI/Widget/Field/Image.pm @@ -0,0 +1,18 @@ +package Reaction::UI::Widget::Field::Image; + +use Reaction::UI::WidgetClass; + +class Image is 'Reaction::UI::Widget::Field', which { + + implements fragment image { + if($_{viewport}->value_string) { + arg uri => $_{viewport}->uri; + render 'has_image'; + } else { + render 'no_image'; + } + }; + +}; + +1; |