/[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 96 - (hide annotations)
Fri Jul 11 12:47:50 2008 UTC (15 years, 9 months ago) by dpavlin
File size: 2455 byte(s)
refactoring to create own Continuity::Widget [0.08]

this is incremental step, and it will change along the way...
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 Data::UUID;
21     use Moose;
22     with 'Frey::Web::Coro';
23    
24     # List of callbacks, buttons for now
25     has callback => ( is => 'rw', default => sub {{}} );
26     has callback_order => ( is => 'rw', isa => 'ArrayRef', default => sub { [] });
27    
28     has 'uuid' => (
29     is => 'ro',
30     isa => 'Str',
31     default => sub { Data::UUID->new->create_str }
32     );
33    
34     # Given a name generate a unique field ID
35     sub field_name {
36     my ($self, $name) = @_;
37     return $self->uuid . '-' . $name;
38     }
39    
40     sub set_from_hash {
41     my ($self, $f) = @_;
42     my %attrmap = %{ $self->meta->get_attribute_map };
43     my $hash;
44     while( my ($name, $attr) = each %attrmap ) {
45     my $field_name = $self->field_name($name);
46     if(defined $f->{$field_name}) {
47     my $writer = $attr->get_write_method;
48     $self->$writer($f->{$field_name});
49     $hash->{ $name } = $f->{$field_name};
50     }
51     }
52     warn "# set_from_hash ", $self->uuid," produced hash = ",dump( $hash ) if $hash;
53     return $hash;
54     }
55    
56     sub add_button {
57     my ($self, $name, $callback) = @_;
58     $self->callback->{$name} = $callback;
59     push @{ $self->callback_order }, $name;
60     warn "## callback_order = ",dump( $self->callback_order );
61     }
62    
63     sub remove_button {
64     my ( $self, $name ) = @_;
65     delete( $self->callback->{$name} );
66     my @order = grep { !/^\Q$name\E$/ } @{ $self->callback_order };
67     warn "# remove_button $name order = ",dump( @order );
68     $self->callback_order( \@order );
69     }
70    
71     sub rename_button {
72     my ( $self, $from, $to ) = @_;
73     $self->callback->{$to} = delete( $self->callback->{$from} );
74     my @order = ( map { s/^\Q$from\E$/$to/; $_ } @{ $self->callback_order } );
75     warn "# rename_button $from => $to order = ",dump( @order );
76     $self->callback_order( \@order );
77     }
78    
79     sub render_buttons {
80     my ($self) = @_;
81     my $out = '';
82     foreach my $name ( @{ $self->callback_order } ) {
83     my $btn_name = $self->field_name($name);
84     $out .= qq{
85     <input type="submit" name="@{[$btn_name]}" value="$name">
86     };
87     }
88     return $out;
89     }
90    
91     sub exec_buttons {
92     my ($self, $f) = @_;
93     foreach my $name (keys %{$self->callback}) {
94     my $btn_name = $self->field_name($name);
95     if($f->{$btn_name}) {
96     $self->callback->{$name}->($f);
97     }
98     }
99     }
100    
101     =head1 SEE ALSO
102    
103     L<Continuity::Widget> on which is this based.
104    
105     =cut
106    
107     1;
108    

  ViewVC Help
Powered by ViewVC 1.1.26