/[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 129 - (hide annotations)
Mon Jul 14 23:44:18 2008 UTC (15 years, 9 months ago) by dpavlin
File size: 1710 byte(s)
refactor to generalize callbacks a bit
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 dpavlin 129 with 'Frey::Web::Button';
12 dpavlin 96
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 dpavlin 129 use Moose::Role;
21 dpavlin 96
22     # List of callbacks, buttons for now
23 dpavlin 129 has callback => ( is => 'rw', isa => 'HashRef', default => sub {{}} );
24 dpavlin 96 has callback_order => ( is => 'rw', isa => 'ArrayRef', default => sub { [] });
25    
26     sub add_button {
27 dpavlin 98 my ($self, $name, $callback) = @_;
28     $self->callback->{$name} = $callback;
29     push @{ $self->callback_order }, $name;
30     warn "## callback_order = ",dump( $self->callback_order );
31 dpavlin 96 }
32    
33     sub remove_button {
34     my ( $self, $name ) = @_;
35     delete( $self->callback->{$name} );
36     my @order = grep { !/^\Q$name\E$/ } @{ $self->callback_order };
37     warn "# remove_button $name order = ",dump( @order );
38     $self->callback_order( \@order );
39     }
40    
41     sub rename_button {
42     my ( $self, $from, $to ) = @_;
43     $self->callback->{$to} = delete( $self->callback->{$from} );
44     my @order = ( map { s/^\Q$from\E$/$to/; $_ } @{ $self->callback_order } );
45     warn "# rename_button $from => $to order = ",dump( @order );
46     $self->callback_order( \@order );
47     }
48    
49 dpavlin 129 sub render_callbacks {
50 dpavlin 98 my ($self) = @_;
51     my $out = '';
52     foreach my $name ( @{ $self->callback_order } ) {
53     my $btn_name = $self->field_name($name);
54     $out .= qq|<input type="submit" name="@{[$btn_name]}" value="$name">|;
55     }
56     return $out;
57 dpavlin 96 }
58    
59 dpavlin 129 sub exec_callbacks {
60 dpavlin 98 my ($self, $f) = @_;
61     foreach my $name (keys %{$self->callback}) {
62     my $btn_name = $self->field_name($name);
63     if($f->{$btn_name}) {
64     $self->callback->{$name}->($f);
65     }
66     }
67 dpavlin 96 }
68    
69     =head1 SEE ALSO
70    
71     L<Continuity::Widget> on which is this based.
72    
73     =cut
74    
75     1;
76    

  ViewVC Help
Powered by ViewVC 1.1.26