added Field::mutable::File
edenc [Mon, 4 Feb 2008 18:07:25 +0000 (18:07 +0000)]
lib/Reaction/Types/File.pm
lib/Reaction/UI/ViewPort/Action.pm
lib/Reaction/UI/ViewPort/Field/File.pm
lib/Reaction/UI/ViewPort/Field/Mutable/File.pm [new file with mode: 0644]
lib/Reaction/UI/Widget/Field/Image.pm [new file with mode: 0644]

index d12408c..4b4efa8 100644 (file)
@@ -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;
index 8d57717..20ae4ea 100644 (file)
@@ -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) = @_;
index d55091c..86f1308 100644 (file)
@@ -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 (file)
index 0000000..f7d391f
--- /dev/null
@@ -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 (file)
index 0000000..1759d98
--- /dev/null
@@ -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;