9 |
|
|
10 |
use Moose; |
use Moose; |
11 |
|
|
12 |
extends 'Continuity::Widget'; |
#extends 'Continuity::Widget'; |
13 |
|
extends 'Frey::Web::Button'; |
14 |
#with 'BonusTypes'; |
#with 'BonusTypes'; |
15 |
|
|
16 |
|
has _render_as => ( is => 'rw', isa => 'Str', required => 1, default => 'view' ); |
17 |
|
|
18 |
|
sub render_iterator { |
19 |
|
confess "BACKWARD INCOMATIBLE CHANGE: render_iterator works ONLY with 2 params!" unless $#_ == 1; |
20 |
|
my ($self, $iterator) = @_; |
21 |
|
my %attrmap = %{ $self->meta->get_attribute_map }; |
22 |
|
my $out; |
23 |
|
while( my ($name, $attr) = each %attrmap ) { |
24 |
|
my $reader = $attr->get_read_method; |
25 |
|
my $val = $self->$reader || ''; |
26 |
|
my $field_name = $self->field_name($name); |
27 |
|
$out .= $iterator->( $name, $field_name, $attr->label, $val ) || ''; # || '' to shut warnings |
28 |
|
} |
29 |
|
return $out; |
30 |
|
} |
31 |
|
|
32 |
sub edit_delete_buttons { |
sub edit_delete_buttons { |
33 |
my $self = shift; |
my $self = shift; |
34 |
|
|
40 |
my $out = $self->render_edit; |
my $out = $self->render_edit; |
41 |
my $f = $self->next($out); |
my $f = $self->next($out); |
42 |
my $hash = $self->set_from_hash($f); |
my $hash = $self->set_from_hash($f); |
43 |
#warn "# Edit/Save hash = ",dump( $hash ); |
warn "# Edit/Save hash = ",dump( $hash ); |
44 |
$self->_fey->update( %$hash ) if $hash; |
$self->_fey->update( %$hash ) if $hash; |
45 |
$self->rename_button( 'Save' => 'Edit' ); |
$self->rename_button( 'Save' => 'Edit' ); |
46 |
$self->delete_button; |
$self->delete_button; |
54 |
print STDERR "delete ID @{[$self->id]}!\n"; |
print STDERR "delete ID @{[$self->id]}!\n"; |
55 |
$self->_fey->delete; |
$self->_fey->delete; |
56 |
$self->next("Deleted id @{[$self->id]}!"); |
$self->next("Deleted id @{[$self->id]}!"); |
57 |
$self->render_as( 'deleted' ); |
$self->_render_as( 'deleted' ); |
58 |
Strix::Schema->ClearObjectCaches(); # XXX important! |
Strix::Schema->ClearObjectCaches(); # XXX important! |
59 |
}); |
}); |
60 |
} |
} |
73 |
$self->_fey( $u ); |
$self->_fey( $u ); |
74 |
# put ID in widget, so that it know it's not new |
# put ID in widget, so that it know it's not new |
75 |
$self->id( $u->id ); |
$self->id( $u->id ); |
76 |
$self->render_as( 'view' ); |
$self->_render_as( 'view' ); |
77 |
$self->edit_delete_buttons; |
$self->edit_delete_buttons; |
78 |
$self->remove_button( 'Add' ); |
$self->remove_button( 'Add' ); |
79 |
}); |
}); |
85 |
|
|
86 |
while(1) { |
while(1) { |
87 |
my $out; |
my $out; |
88 |
if ( $self->render_as eq 'edit' ) { |
if ( $self->_render_as eq 'edit' ) { |
89 |
$out .= $self->render_edit; |
$out .= $self->render_edit; |
90 |
} elsif ( $self->render_as eq 'view' ) { |
} elsif ( $self->_render_as eq 'view' ) { |
91 |
$out .= $self->render_view; |
$out .= $self->render_view; |
92 |
} else { |
} else { |
93 |
warn "no renderer ",dump( $self->render_as ), " skipping..."; |
warn "no renderer ",dump( $self->_render_as ), " skipping..."; |
94 |
} |
} |
95 |
|
|
96 |
warn $@ if $@; |
warn $@ if $@; |
117 |
</tr> |
</tr> |
118 |
| if $self->_layout eq 'table'; |
| if $self->_layout eq 'table'; |
119 |
return qq| |
return qq| |
120 |
|
<td class="field"> |
121 |
|
<input type=text id="$field_name" name="$field_name" value="$val"> |
122 |
|
</td> |
123 |
|
| if $self->_layout eq 'columns'; |
124 |
|
return qq| |
125 |
<div class=fieldholder> |
<div class=fieldholder> |
126 |
<label for="$field_name">$label</label> |
<label for="$field_name">$label</label> |
127 |
<div class=field> |
<div class=field> |
130 |
</div> |
</div> |
131 |
|; |
|; |
132 |
}); |
}); |
133 |
|
|
134 |
|
return qq|<tr class="editform">$out<td>| . $self->render_buttons . qq|</td></tr>| if $self->_layout eq 'columns'; |
135 |
|
|
136 |
$self->render_wrapper_class( $out, 'editform' ); |
$self->render_wrapper_class( $out, 'editform' ); |
137 |
} |
} |
138 |
|
|
144 |
my ( $name, $field_name, $label, $val ) = @_; |
my ( $name, $field_name, $label, $val ) = @_; |
145 |
return if $name =~ /^_/; |
return if $name =~ /^_/; |
146 |
return qq|<tr><td>$label</td><td>$val</td></tr>| if $self->_layout eq 'table'; |
return qq|<tr><td>$label</td><td>$val</td></tr>| if $self->_layout eq 'table'; |
147 |
|
return qq|<td>$val</td>| if $self->_layout eq 'columns'; |
148 |
return qq| |
return qq| |
149 |
<div class=fieldholder> |
<div class=fieldholder> |
150 |
<div class=label>$label</div> |
<div class=label>$label</div> |
153 |
</div> |
</div> |
154 |
|; |
|; |
155 |
}); |
}); |
156 |
|
return qq|<tr>$out<td>| . $self->render_buttons . qq|</td></tr>| if $self->_layout eq 'columns'; |
157 |
$self->render_wrapper_class( $out, 'view' ); |
$self->render_wrapper_class( $out, 'view' ); |
158 |
} |
} |
159 |
|
|
195 |
|
|
196 |
use Moose::Util::TypeConstraints; |
use Moose::Util::TypeConstraints; |
197 |
|
|
198 |
enum 'Layouts' => qw( div table ); |
enum 'Layouts' => qw( div table columns ); |
199 |
|
|
200 |
has _layout => ( |
has _layout => ( |
201 |
is => 'rw', |
is => 'rw', |