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

Contents of /trunk/lib/Continuity/Widget.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 69 - (show 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 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