/[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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 145 - (show annotations)
Wed Jul 16 21:19:53 2008 UTC (15 years, 8 months ago) by dpavlin
File size: 1767 byte(s)
better type checking
1 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 with '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::Role;
21
22 # List of callbacks, buttons for now
23 has callback => ( is => 'rw', isa => 'HashRef[CodeRef]', default => sub {{}} );
24 has callback_order => ( is => 'rw', isa => 'ArrayRef', default => sub { [] });
25
26 sub add_button {
27 my ($self, $name, $callback) = @_;
28 $self->callback->{$name} = $callback;
29 push @{ $self->callback_order }, $name;
30 warn "## callback_order = ",dump( $self->callback_order ) if $self->debug;
31 }
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 ) if $self->debug;
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 ) if $self->debug;
46 $self->callback_order( \@order );
47 }
48
49 sub render_callbacks {
50 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 }
58
59 sub exec_callbacks {
60 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 }
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