/[Frey]/trunk/lib/Frey/Web/Button.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /trunk/lib/Frey/Web/Button.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 97 - (hide annotations)
Fri Jul 11 13:11:36 2008 UTC (15 years, 9 months ago) by dpavlin
File size: 2204 byte(s)
Frey::Web::Field is now our main class for web fields (with Coro support)
1 dpavlin 96 package Frey::Web::Button;
2    
3     our $VERSION = '0.01';
4    
5     =head1 NAME
6    
7     Frey::Web::Button - render buttons with continuations
8    
9     =head1 SYNOPSIS
10    
11     extends 'Frey::Web::Button';
12    
13     =head1 DESCRIPTION
14    
15     Don't quite know what this will be yet.
16    
17     =cut
18    
19     use Data::Dump qw/dump/;
20     use Moose;
21 dpavlin 97 with 'Frey::Web::Field';
22 dpavlin 96
23     # List of callbacks, buttons for now
24     has callback => ( is => 'rw', default => sub {{}} );
25     has callback_order => ( is => 'rw', isa => 'ArrayRef', default => sub { [] });
26    
27     sub set_from_hash {
28     my ($self, $f) = @_;
29     my %attrmap = %{ $self->meta->get_attribute_map };
30     my $hash;
31     while( my ($name, $attr) = each %attrmap ) {
32     my $field_name = $self->field_name($name);
33     if(defined $f->{$field_name}) {
34     my $writer = $attr->get_write_method;
35     $self->$writer($f->{$field_name});
36     $hash->{ $name } = $f->{$field_name};
37     }
38     }
39     warn "# set_from_hash ", $self->uuid," produced hash = ",dump( $hash ) if $hash;
40     return $hash;
41     }
42    
43     sub add_button {
44     my ($self, $name, $callback) = @_;
45     $self->callback->{$name} = $callback;
46     push @{ $self->callback_order }, $name;
47     warn "## callback_order = ",dump( $self->callback_order );
48     }
49    
50     sub remove_button {
51     my ( $self, $name ) = @_;
52     delete( $self->callback->{$name} );
53     my @order = grep { !/^\Q$name\E$/ } @{ $self->callback_order };
54     warn "# remove_button $name order = ",dump( @order );
55     $self->callback_order( \@order );
56     }
57    
58     sub rename_button {
59     my ( $self, $from, $to ) = @_;
60     $self->callback->{$to} = delete( $self->callback->{$from} );
61     my @order = ( map { s/^\Q$from\E$/$to/; $_ } @{ $self->callback_order } );
62     warn "# rename_button $from => $to order = ",dump( @order );
63     $self->callback_order( \@order );
64     }
65    
66     sub render_buttons {
67     my ($self) = @_;
68     my $out = '';
69     foreach my $name ( @{ $self->callback_order } ) {
70     my $btn_name = $self->field_name($name);
71     $out .= qq{
72     <input type="submit" name="@{[$btn_name]}" value="$name">
73     };
74     }
75     return $out;
76     }
77    
78     sub exec_buttons {
79     my ($self, $f) = @_;
80     foreach my $name (keys %{$self->callback}) {
81     my $btn_name = $self->field_name($name);
82     if($f->{$btn_name}) {
83     $self->callback->{$name}->($f);
84     }
85     }
86     }
87    
88     =head1 SEE ALSO
89    
90     L<Continuity::Widget> on which is this based.
91    
92     =cut
93    
94     1;
95    

  ViewVC Help
Powered by ViewVC 1.1.26