aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/Reaction/Types/File.pm2
-rw-r--r--lib/Reaction/UI/ViewPort/Action.pm10
-rw-r--r--lib/Reaction/UI/ViewPort/Field/File.pm3
-rw-r--r--lib/Reaction/UI/ViewPort/Field/Mutable/File.pm24
-rw-r--r--lib/Reaction/UI/Widget/Field/Image.pm18
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;