/[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 96 - (show 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 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