File Coverage

blib/lib/WML/Card.pm
Criterion Covered Total %
statement 25 123 20.3
branch 2 26 7.6
condition 1 12 8.3
subroutine 5 16 31.2
pod 11 12 91.6
total 44 189 23.2


line stmt bran cond sub pod time code
1             package WML::Card;
2              
3 1     1   9662 use strict;
  1         3  
  1         52  
4 1     1   10811 use Data::Dumper;
  1         59798  
  1         104  
5 1     1   46 use vars qw($VERSION);
  1         13  
  1         9317  
6              
7             $VERSION = '0.02';
8              
9             my $pt = [
10             { 'ua' => '7110', 'ot' => 'WML::Card::7110' },
11             { 'ua' => '7160', 'ot' => 'WML::Card::7110' },
12             { 'ua' => 'wapsilon', 'ot' => 'WML::Card::7110' },
13             { 'ua' => 'motorola', 'ot' => 'WML::Card::UP' },
14             { 'ua' => 'up', 'ot' => 'WML::Card::UP' },
15             { 'ua' => 'wapman', 'ot' => 'WML::Card::Palm' },
16             { 'ua' => 'ezwapbrowser', 'ot' => 'WML::Card::Palm' },
17             { 'ua' => 'nokia-wap-toolkit', 'ot' => 'WML::Card' },
18             ];
19              
20              
21             sub guess {
22 1     1 1 46 shift;
23 1         2 my $id = shift;
24 1         2 my $title =shift;
25 1   33     8 my $ua = shift || $ENV{'HTTP_USER_AGENT'};
26 1         3 my $ot = 'WML::Card';
27 1         4 for my $p (@$pt) {
28 5 100       72 if ($ua =~ /$p->{'ua'}/i) {
29 1         5 $ot = $p->{'ot'};
30 1         3 last;
31             }
32             }
33 1         108 eval "require $ot";
34            
35             # if ($@) { ...
36             # } else { ...
37             # }
38              
39 1         16 my $ob = new $ot($id, $title);
40 1         4 return $ob;
41             }
42              
43             sub new {
44 1     1 0 3 my $cl = shift;
45 1         3 my ($_id, $_title) = @_;
46 1         7 my $hr = {
47             '_id' => $_id,
48             '_title' => $_title,
49             '_do'=> undef,
50             '_body'=> undef,
51             '_next'=> 'Ver más',
52             };
53 1         6 return bless $hr, $cl;
54             }
55              
56              
57             sub buttons{
58 0     0 1   my $self =shift;
59 0           my ($label, $type, $task, $href) = @_;
60 0           $self->{'_do'} .= << "EOF";
61            
62             EOF
63              
64 0 0         $self->{'_do'} .= $task eq 'prev' ? '' : "";
65 0           $self->{'_do'} .= '';
66             }
67              
68             sub table{
69 0     0 1   my $self = shift;
70 0           my ($data, $title, $offset, $pager, @headers) = @_;
71 0           my $texto;
72             my $i;
73 0           my $total = scalar @{$data};
  0            
74            
75 0           $self->{'_body'}.= "

$title";

76 0           $self->{'_body'}.= ""; '; "; '; "; "; ';
77            
78             #Header
79 0 0         if (scalar @headers) {
80 0           $self->{'_body'}.= '
 
81 0           for ($i=0; $i < 2; $i++) {
82 0           $self->{'_body'}.= '';
83 0           $texto = $self->_format_text($headers[$i]);
84 0           $self->{'_body'}.= "$texto
85             }
86 0           $self->{'_body'}.= '
87             }
88              
89             #Datos
90 0   0       for ($i=($offset * $pager); (($i < ($offset * $pager + $pager)) && ($i < $total));$i++) {
91 0           $self->{'_body'}.= "
 
92 0           for (my $j; $j < 2 ; $j++) {
93 0           $self->{'_body'}.= "";
94 0           $texto = $self->_format_text($data->[$i][$j]);
95 0           $self->{'_body'}.= "$texto
96             }
97 0           $self->{'_body'}.= '
98             }
99 0           $self->{'_body'}.= "

";
100 0           $offset++;
101            
102 0 0         if ($i < $total){
103 0           my $next =$self->_format_text($self->{'_next'});
104 0           $ENV{'QUERY_STRING'} =~ s/^(o=\d[&]?)//;
105 0 0         my $href = length $ENV{'QUERY_STRING'}> 0 ? "?o=$offset&$ENV{'QUERY_STRING'}" : "?o=$offset";
106 0           $href =~ s/\&/\&/gs;
107 0           $self->{'_body'}.= << "EOF";
108            

$next

109             EOF
110             }
111             }
112              
113             sub link_list{
114 0     0 1   my $self = shift;
115 0           my ($name, $listtitle, $offset, $pager, $data, $align) = @_;
116 0 0         $align = defined $align ? $align : 'left';
117 0           $self->{'_body'}.= "

";

118 0 0         $self->{'_body'}.= sprintf ("%s", $self->_format_text($listtitle)) if defined $listtitle;
119 0           $name = $self->_format_text($name);
120 0           $self->{'_body'}.= "
121              
122 0           my $total = scalar @{$data};
  0            
123 0           my $i;
124 0   0       for ($i= ($offset * $pager);
  0            
125             ($i < ($offset * $pager + $pager) && ($i < scalar @{$data}));
126             $i++) {
127 0           my $opt = $self->_format_text($data->[$i][$0]);
128 0           $self->{'_body'}.= "\n";
129             }
130 0           $offset++;
131 0 0         if ($i < $total){
132 0           my $next =$self->_format_text($self->{'_next'});
133 0           $ENV{'QUERY_STRING'} =~ s/^(o=\d[&]?)//;
134 0 0         my $href = length $ENV{'QUERY_STRING'}> 0 ? "?o=$offset&$ENV{'QUERY_STRING'}" : "?o=$offset";
135 0           $href =~ s/\&/\&/gs;
136 0           $self->{'_body'}.= << "EOF";
137            
138             EOF
139             }
140              
141 0           $self->{'_body'}.= << 'EOF';
142            
143            

144             EOF
145             };
146              
147              
148             sub value_list{
149 0     0 1   my $self = shift;
150 0           my ($name, $listtitle, $offset,$pager,$data) = @_;
151 0           $self->{'_body'}.= '

';

152 0 0         $self->{'_body'}.= sprintf ("%s", $self->_format_text($listtitle)) if defined $listtitle;
153 0           $name = $self->_format_text($name);
154 0           $self->{'_body'}.= "
155              
156 0           my $total = scalar @{$data};
  0            
157 0   0       for (my $i= ($offset * $pager);
158             ($i < ($offset * $pager + $pager) && ($i < $total));
159             $i++) {
160 0           my $opt = $self->_format_text($data->[$i][$0]);
161 0           $self->{'_body'}.= "\n";
162             }
163 0           $self->{'_body'}.= << "EOF";
164            
165            

166             EOF
167             };
168              
169             sub print{
170 0     0 1   my $self = shift;
171 0           $self->{'_title'} = $self->_format_text($self->{'_title'});
172 0           print << "EOF";
173            
174             $self->{'_do'}
175             $self->{'_body'}
176            
177             EOF
178             };
179              
180             sub info{
181 0     0 1   my $self = shift;
182 0           my $content = shift;
183 0           $content = $self->_format_text($content);
184 0           $content =~ s/\n/\n/gs;
185 0           $content = "

$content

";
186 0           $content =~ s/\n<\/p>/<\/p>/;
187 0           $self->{'_body'} .= $content;
188             };
189              
190             sub img{
191 0     0 1   my $self = shift;
192 0           my ($file, $alt) = @_;
193 0           $self->{'_body'} .= << "EOF";
194            

195             $alt
196            

197             EOF
198             }
199              
200             sub input{
201 0     0 1   my $self = shift;
202 0           my ($label, $text, $name, $format, $type, $size, $target, $arg) = @_;
203 0 0         $target = defined $arg ? "$target?$arg&$name=\$($name)" : "$target?$name=\$($name)";
204 0 0         $format = " format=\"$size$format\"" if defined $format;
205 0 0         $size = " size=\"$size\"" if defined $size ;
206 0           $self->{'_body'} .= << "EOF";
207            
208            
209            
210            

211             $text
212            
213             $label
214            

215             EOF
216             }
217              
218             sub link{
219 0     0 1   my $self = shift;
220 0           my ($target, $text) = @_;
221 0           $self->{'_body'} .= << "EOF";
222            

$text

223             EOF
224             }
225              
226              
227             sub br{
228 0     0 1   my $self = shift;
229 0           $self->{'_body'} .= '
';
230             }
231              
232             sub _format_text {
233 0     0     my $self = shift;
234 0           my $txt = shift;
235 0           $txt =~ s/([^\w\s])/sprintf '&#%03d;', ord($1)/eg;
  0            
236 0           $txt =~ s/\r//g;
237 0           $txt;
238             }
239              
240              
241             1;
242              
243             =head1 NAME
244              
245             WML::Card - Perl extension for builiding WML Cards according to the browser being used.
246              
247             =head1 SYNOPSIS
248              
249             use WML::Card;
250              
251             my $options= [
252             ['Option 1', 'http://...'],
253             ['Option 2', 'http://...'],
254             ];
255              
256             my $c = WML::Card->guess('index','Wap Site');
257             $c->link_list('indice', undef, 0, $options, $options);
258             $c->print;
259              
260             =head1 DESCRIPTION
261              
262             This perl library simplifies the creation of WML cards on the fly. It produces
263             the most suitable wml code for the browser requesting the card. In this way the
264             one building the cards does not have to worry about the differences in how each
265             wap browser displays the wml code. In combination wht WML::Deck it provides
266             functionality to build WAP applications.
267              
268             =head2 Methods
269              
270             =over 4
271              
272             =item $card = WML::Card->guess( $id, $title, [$user_agent] );
273              
274             This class method constructs a new WML::Card object. The first argument defines
275             the WML card's id and the second argument its title. The if the third argument is
276             not defined, the value is obtained from $ENV{'HTTP_USER_AGENT'}.
277              
278              
279             =item $c->buttons($label, $type, $task, $href)
280              
281              
282             =item $c->table ($data, $title, $offset, $pager, @headers)
283              
284             =item $c->link_list($name, $listtitle, $offset, $pager, $data, $align)
285              
286             =item $c->value_list($name, $listtitle, $offset,$pager,$data)
287              
288             The variable $data is an array reference like:
289             my $menu_items= [
290             ['Option 1', 'http://...'],
291             ['Option 2', 'http://...'],
292             ];
293              
294             The variable $pager is the number of items wanted to be displayed in each card.
295              
296             =item $c->print
297              
298             =item $c->info($content)
299              
300             =item $c->img($file, $alt)
301              
302             =item $c->input($label, $text, $name, $format, $type, $size, $target, $arg);
303              
304             =item $c->link($target, $text);
305              
306             =item $c->br
307              
308             =head1 AUTHOR
309              
310             Mariana Alvaro mariana@alvaro.com.ar
311              
312             Copyright 2000 Mariana Alvaro. All rights reserved.
313             This library is free software; you can redistribute it and/or
314             modify it under the same terms as Perl itself.
315              
316             =head1 SEE ALSO
317              
318             WML::Deck
319              
320             =cut