File Coverage

CGI/AppBuilder/Frame.pm
Criterion Covered Total %
statement 16 18 88.8
branch n/a
condition n/a
subroutine 6 6 100.0
pod n/a
total 22 24 91.6


line stmt bran cond sub pod time code
1             package CGI::AppBuilder::Frame;
2              
3             # Perl standard modules
4 1     1   28236 use strict;
  1         2  
  1         48  
5 1     1   6 use warnings;
  1         2  
  1         32  
6 1     1   3317 use Getopt::Std;
  1         59  
  1         74  
7 1     1   948 use POSIX qw(strftime);
  1         9421  
  1         8  
8 1     1   1492 use Carp;
  1         3  
  1         178  
9              
10             our $VERSION = 0.10;
11             require Exporter;
12             our @ISA = qw(Exporter CGI::AppBuilder);
13             our @EXPORT = qw();
14             our @EXPORT_OK = qw(frame_set frameset
15             );
16             our %EXPORT_TAGS = (
17             frame => [qw(frame_set frameset)],
18             all => [@EXPORT_OK]
19             );
20              
21 1     1   1970 use CGI::AppBuilder;
  0            
  0            
22             use CGI::AppBuilder::Message qw(:all);
23             use CGI::AppBuilder::Table qw(:all);
24              
25             =head1 NAME
26              
27             CGI::AppBuilder::Frame - Configuration initializer
28              
29             =head1 SYNOPSIS
30              
31             use CGI::AppBuilder::Frame;
32              
33             my $ab = CGI::AppBuilder::Frame->new(
34             'ifn', 'my_init.cfg', 'opt', 'vhS:a:');
35             my ($q, $ar, $ar_log) = $ab->start_app($0, \%ARGV);
36             print $ab->disp_form($q, $ar);
37              
38             =head1 DESCRIPTION
39              
40             This class provides methods for reading and parsing configuration
41             files.
42              
43             =cut
44              
45             =head2 new (ifn => 'file.cfg', opt => 'hvS:')
46              
47             This is a inherited method from CGI::AppBuilder. See the same method
48             in CGI::AppBuilder for more details.
49              
50             =cut
51              
52             sub new {
53             my ($s, %args) = @_;
54             return $s->SUPER::new(%args);
55             }
56              
57             =head2 frame_set ($fr, $pr)
58              
59             Input variables:
60              
61             $fr - frame set definiton array reference. The $fr contains two
62             elements [$hr, $ar]:
63             $hr - a hash ref containing the frame set attributes
64             $ar - a array ref containing hash references defining each
65             frames in the frame set.
66             $pr - tag attribute array ref. It contains three elements:
67             class - CSS class name
68             attr - attribute string such as 'width=5 onChange=js_func'
69             hr - hash ref with key and value pairs. This will be obtained
70             from $fr for each frame set and frame.
71             pretty - whether to add line breaks
72              
73             Variables used or methods called:
74              
75             CGI::AppBuilder::Table
76             html_tag - generate HTML tags
77             CGI::AppBuilder::Message
78             echo_msg - display message
79              
80             How to use:
81              
82             The following shows how to define the frame array ($fr):
83              
84             +-+----+ The following defines the left layout:
85             | | T |
86             | +----+ [{cols=>"150,*"},[
87             | | | {src=>"left.htm",name=>"L"},
88             |L| C | [{rows=>"100,*,50"},[
89             | | | {src=>"top.htm",name=>"T"},
90             | |----| {src=>"main.htm",name=>"C"},
91             | | B | {src=>"bottom.htm",name=>"B"}]]]
92             +-+----+ ]
93              
94             In YAML, here is how it looks like:
95              
96             ---
97             cols: 150,\*
98             - src: left.htm
99             name: L
100             - rows: 100,\*,50
101             - src: top.htm
102             name: T
103             - src: main.htm
104             name: C
105             - src: bottom.htm
106             name: B
107             ...
108              
109             +-+------+ The following defines the left layout:
110             | | T |
111             | +----+-+ [{cols=>"150,*"},[
112             | | | | {src=>"left.htm",name=>"L"},
113             |L| C |R| [{rows=>"100,*,50"},[
114             | | | | {src=>"top.htm",name=>"T"},
115             | | | | [{cols=>"*,100"},[
116             | |----+-+ {src=>"main.htm",name=>"C"},
117             | | | {src=>"right.htm",name=>"R"}] ] ],
118             | | B | {src=>"bottom.htm",name=>"B"}]]
119             +-+----+-+ ]
120              
121             In YAML, here is how it looks like:
122              
123             ---
124             cols: 150,\*
125             - src: left.htm
126             name: L
127             - rows: 100,\*,50
128             - src: top.htm
129             name: T
130             - cols: \*,100
131             - src: main.htm
132             name: C
133             - src: right.htm
134             name: R
135             - src: bottom.htm
136             name: B
137             ...
138              
139             Here is the testing codes:
140              
141             my $fr = [{cols=>"150,*"},[
142             {src=>"left.htm",name=>"L"},
143             [{rows=>"100,*,50"},[
144             {src=>"top.htm",name=>"T"},
145             {src=>"main.htm",name=>"C"},
146             {src=>"bottom.htm",name=>"B"}]
147             ]]
148             ];
149             my $pr = {pretty=>1};
150             print $obj->frame_set($fr,$pr);
151             # the following is the result:
152              
153            
154            
155            
156            
157            
158            
159            
160            
161              
162             $pr->{_frameset_count} = 0; # reset frame set counter
163             my $f2 = [ {cols=>"150,*"},[
164             {src=>"left.htm",name=>"L"},
165             [{rows=>"100,*,50"},[
166             {src=>"top.htm",name=>"T"},
167             [{cols=>"*,100"},[
168             {src=>"main.htm",name=>"C"},
169             {src=>"right.htm",name=>"R"}]
170             ],
171             {src=>"bottom.htm",name=>"B"}]
172             ]]
173             ];
174             print $obj->frame_set($f2,$pr);
175             # the following is the result:
176              
177            
178            
179            
180            
181            
182            
183            
184            
185            
186            
187            
188              
189             Return: HTML codes.
190              
191             This method generates HTML codes based on the information provided.
192             This method is also called frameset.
193              
194             =cut
195              
196             sub frameset {
197             my $s = shift;
198             return $s->frame_set(@_);
199             }
200              
201             sub frame_set {
202             my $s = shift;
203             my ($fr, $pr) = @_;
204             $s->echo_msg("Frame set is not in ARRAY",1)
205             if $fr && $fr !~ /ARRAY/;
206             return if $fr && $fr !~ /ARRAY/;
207             $pr = {} if ! defined($pr) || ! $pr;
208             my ($p, $v) = (@$fr);
209             $s->echo_msg("Frame set attribute is not defined.", 2)
210             if ref($p) !~ /HASH/;
211             $pr->{hr} = $p;
212             ++$pr->{_frameset_count};
213             my ($t,$idt) = ("", " ");
214             $t .= $idt x ($pr->{_frameset_count}-1) if $pr->{_frameset_count}>1;
215             $t .= $s->html_tag('frameset',$pr);
216             # $t .= "\n" if exists $pr->{pretty} && $pr->{pretty};
217             foreach my $k (@$v) {
218             $pr->{hr} = $k;
219             if (ref($k) =~ /ARRAY/) {
220             $t .= $s->frame_set($k,$pr);
221             --$pr->{_frameset_count};
222             next;
223             }
224             $s->echo_msg("Frame attribute is not defined.", 2)
225             if ref($k) !~ /HASH/;
226             $t .= $idt x $pr->{_frameset_count};
227             $t .= $s->html_tag('frame',$pr);
228             }
229             if ($pr->{_frameset_count} > 1) {
230             $t .= ($idt x ($pr->{_frameset_count}-1)) . "\n";
231             } else {
232             $t .= "\n";
233             }
234             return $t;
235             }
236              
237             1;
238              
239             =head1 HISTORY
240              
241             =over 4
242              
243             =item * Version 0.10
244              
245             This version includes the frame_set method.
246              
247             =item * Version 0.20
248              
249             =cut
250              
251             =head1 SEE ALSO (some of docs that I check often)
252              
253             Oracle::Loader, Oracle::Trigger, CGI::Getopt, File::Xcopy,
254             CGI::AppBuilder, CGI::AppBuilder::Message, CGI::AppBuilder::Log,
255             CGI::AppBuilder::Config, etc.
256              
257             =head1 AUTHOR
258              
259             Copyright (c) 2005 Hanming Tu. All rights reserved.
260              
261             This package is free software and is provided "as is" without express
262             or implied warranty. It may be used, redistributed and/or modified
263             under the terms of the Perl Artistic License (see
264             http://www.perl.com/perl/misc/Artistic.html)
265              
266             =cut
267