1 |
dpavlin |
149 |
package Frey::Web::Editable; |
2 |
|
|
use Moose; |
3 |
|
|
extends 'Frey'; |
4 |
|
|
with 'Frey::Web::Field'; |
5 |
|
|
|
6 |
|
|
use Moose::Util::TypeConstraints; |
7 |
|
|
use Data::Dump qw/dump/; |
8 |
|
|
|
9 |
|
|
enum 'Render_as' => qw( view edit none ); |
10 |
|
|
has render_as => ( is => 'rw', isa => 'Render_as', required => 1, default => 'view' ); |
11 |
|
|
|
12 |
|
|
has name => ( |
13 |
|
|
is => 'rw', |
14 |
|
|
isa => 'Str', |
15 |
|
|
required => 1, |
16 |
|
|
); |
17 |
|
|
|
18 |
|
|
has value => ( |
19 |
|
|
is => 'rw', |
20 |
|
|
isa => 'Str', |
21 |
|
|
); |
22 |
|
|
|
23 |
|
|
has save_callback => ( |
24 |
|
|
is => 'rw', |
25 |
|
|
isa => 'CodeRef', |
26 |
|
|
default => sub { warn "## default save_callback ",dump( @_ ) }, |
27 |
|
|
); |
28 |
|
|
|
29 |
|
|
sub set_from_hash { |
30 |
|
|
my ($self, $f) = @_; |
31 |
|
|
|
32 |
|
|
my $name = $self->name; |
33 |
|
|
|
34 |
|
|
my $field_name = $self->field_name( $name ); |
35 |
|
|
if(defined $f->{$field_name}) { |
36 |
|
|
my $v = $f->{$field_name}; |
37 |
|
|
return unless $v ne $self->value; |
38 |
|
|
$self->value( $v ); |
39 |
|
|
warn "## set_from_hash $name = $v from $field_name"; |
40 |
|
|
$self->save_callback->( $self, $v ); |
41 |
|
|
warn "CHECK: $v == ", $self->value; |
42 |
|
|
} |
43 |
|
|
} |
44 |
|
|
|
45 |
|
|
sub main { |
46 |
|
|
my ( $self ) = @_; |
47 |
|
|
|
48 |
|
|
while ( 1 ) { |
49 |
|
|
my ( $f_uuid, $f_val ) = ( $self->field_name( $self->name ) , $self->value ); |
50 |
|
|
warn "# editable ",$self->uuid, " ", $self->name, " ", $self->value if $self->debug; |
51 |
|
|
|
52 |
|
|
my $out; |
53 |
|
|
if ( $self->render_as eq 'edit' ) { |
54 |
|
|
$out .= qq|<input type="text" name="$f_uuid" value="$f_val">|; |
55 |
|
|
} elsif ( $self->render_as eq 'view' ) { |
56 |
|
|
$out .= qq|$f_val|; |
57 |
|
|
} else { |
58 |
|
|
warn "no renderer ",dump( $self->render_as ), " skipping..."; |
59 |
|
|
} |
60 |
|
|
|
61 |
|
|
warn $@ if $@; |
62 |
|
|
# warn ">>> editable $f_uuid $f_val ",length($out)," bytes\n"; |
63 |
|
|
my $f = $self->next($out); |
64 |
|
|
$self->set_from_hash($f); |
65 |
|
|
# $self->exec_callbacks($f); # Buttons |
66 |
|
|
} |
67 |
|
|
}; |
68 |
|
|
|
69 |
|
|
1; |