/[Frey]/trunk/lib/Continuity/Widget.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/Continuity/Widget.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 69 - (hide annotations)
Wed Jul 9 15:45:59 2008 UTC (15 years, 9 months ago) by dpavlin
File size: 3560 byte(s)
include local copy of Continuity::Widget

$ darcs show repo
          Type: darcs
        Format: darcs-1.0
          Root: /rest/cvs/Continuity-Widget
      Pristine: PlainPristine "_darcs/pristine"
         Cache: thisrepo:/rest/cvs/Continuity-Widget
Default Remote: http://thelackthereof.org/projects/perl/Continuity-Widget
   Num Patches: 29

1 dpavlin 69 package Continuity::Widget;
2    
3     our $VERSION = '0.01';
4    
5     =head1 NAME
6    
7     Continuity::Widget - Handy Moose-based Widget Thingie for Continuity Apps
8    
9     =head1 SYNOPSIS
10    
11     use Continuity::Widget;
12    
13     =head1 DESCRIPTION
14    
15     Don't quite know what this will be yet.
16    
17     =cut
18    
19     use Data::UUID;
20     use Moose;
21     with 'Continuity::Coro::Moose';
22    
23     # List of callbacks, buttons for now
24     has callback => ( is => 'rw', default => sub {{}} );
25    
26     has renderer => ( is => 'rw', isa => 'HashRef', 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     # This renders an input form. Need to make the renderer selection dynamic
41     sub render_edit {
42     my ($self) = @_;
43     my $out = '<div class="editform">';
44     my %attrmap = %{ $self->meta->get_attribute_map };
45     while( my ($name, $attr) = each %attrmap ) {
46     my $reader = $attr->get_read_method;
47     my $val = $self->$reader || '';
48     my $field_name = $self->field_name($name);
49     $out .= qq|
50     <div class=fieldholder>
51     <div class=label> @{[$attr->label]} </div>
52     <div class=field>
53     <input type=text id="$field_name" name="$field_name" value="@{[$val]}">
54     </div>
55     </div>
56     |;
57     }
58     $out .= $self->render_buttons;
59     $out .= '</div>';
60     return $out;
61     }
62    
63     sub render_view {
64     my ($self) = @_;
65     my $out = '<div class="view">';
66     my %attrmap = %{ $self->meta->get_attribute_map };
67     while( my ($name, $attr) = each %attrmap ) {
68     my $reader = $attr->get_read_method;
69     my $val = $self->$reader || '';
70     my $field_name = $self->field_name($name);
71     $out .= qq|
72     <div class=fieldholder>
73     <div class=label> @{[$attr->label]} </div>
74     <div class=field>
75     @{[$val]}
76     </div>
77     </div>
78     |;
79     }
80     $out .= $self->render_buttons;
81     $out .= '</div>';
82     return $out;
83     }
84    
85     sub set_from_hash {
86     my ($self, $f) = @_;
87     my %attrmap = %{ $self->meta->get_attribute_map };
88     while( my ($name, $attr) = each %attrmap ) {
89     my $field_name = $self->field_name($name);
90     if(defined $f->{$field_name}) {
91     my $writer = $attr->get_write_method;
92     $self->$writer($f->{$field_name});
93     }
94     }
95     }
96    
97     sub add_button {
98     my ($self, $name, $callback) = @_;
99     $self->callback->{$name} = $callback;
100     }
101    
102     sub render_buttons {
103     my ($self) = @_;
104     my $out = '';
105     foreach my $name (keys %{$self->callback}) {
106     my $btn_name = $self->field_name($name);
107     $out .= qq{
108     <br>
109     <input type="submit" name="@{[$btn_name]}" value="$name">
110     };
111     }
112     return $out;
113     }
114    
115     sub exec_buttons {
116     my ($self, $f) = @_;
117     foreach my $name (keys %{$self->callback}) {
118     my $btn_name = $self->field_name($name);
119     if($f->{$btn_name}) {
120     $self->callback->{$name}->($f);
121     }
122     }
123     }
124    
125     sub main {
126     my ($self) = @_;
127     $self->renderer->{view} = \&render_view;
128     $self->renderer->{edit} = \&render_edit;
129     while(1) {
130     my $out = $self->renderer->{view}->($self);
131     my $f = $self->next($out);
132     $self->set_from_hash($f);
133     $self->exec_buttons($f);
134     }
135     }
136    
137     =head1 SEE ALSO
138    
139     L<Continuity>, http://continuity.tlt42.org/
140    
141     =head1 AUTHOR
142    
143     awwaiid, E<lt>awwaiid@thelackthereof.orgE<gt>, L<http://thelackthereof.org/>
144    
145     =head1 COPYRIGHT AND LICENSE
146    
147     Copyright (C) 2008 by Brock Wilcox
148    
149     This library is free software; you can redistribute it and/or modify
150     it under the same terms as Perl itself, either Perl version 5.10.0 or,
151     at your option, any later version of Perl 5 you may have available.
152    
153     =cut
154    
155     1;
156    

  ViewVC Help
Powered by ViewVC 1.1.26