CGI-ProgressBar
view release on metacpan or search on metacpan
FUNCTION/METHOD update_progress_bar
Updates the progress bar.
FUNCTION/METHOD hide_progress_bar
Hides the progress bar.
CSS STYLE CLASS EMPLOYED
You can add CSS to be output into the page body (ugh) in the "mycss"
field. Bear in mind that the width and height settings are
programatically assigned.
pblib_bar
A "DIV" containing the whole progress bar, including any accessories
(such as the label). The only attribute used by this module is "width",
which is set dynamically. The rest is up to you. A good start is:
padding: 2 px;
border: solid black 1px;
text-align: center;
pblib_block_off, pblib_block_on
An individual block within the status bar. The following attributes are
set dynamically: "width", "height", "margin-right".
pblib_number
Formatting for the "label" text (part of which is actually an "input
type='text'" element. "border" and "text-align" are used here, and the
whole appears centred within a "table".
BUGS, CAVEATS, TODO
One bar per page
This may change.
Parameter passing doesn't match CGI.pm
But it will in the next release if you ask me for it.
"colors" not implimented
I'd like to see here something like the "Tk::ProgressBar::colors";
not because I've ever used it, but because it might be cool.
Horizontal orientation only
You can get around this by adjusting the CSS, but you'd rather not.
And even if you did, the use of "-label" might not look very nice
unless you did something quite fancy. So the next version (or so)
will support an "-orientation" option.
Inline CSS and JS
Because it's easiest for me. I suppose some kind of over-loading of
the "CGI::start_html" would be possible, but then I'd have to check
it, and maybe update it, every time CGI.pm was updated, which I
don't fancy.
CGI UPLOAD HOOK
I'm not convinced it works yet, even in CGI.pm verion 3.15.
If anyone knows otherwise, please mail me: I have spent an hour on
the below, and it seems that the hook is called more times than
necessary....
PROCESS
The script has to both upload and process a file.
The hook script is called when the object is constructed, thus
before any headers can be output. There the hook needs to output its
own headers, and we only output headers for the 'select file' page
when the hook has not been called.
The first tiem the hook is called, then, it outputs HTTP headers and
begins the page. This is fine.
The next time it is called, it outputs the JS call to update the
progress bar. This is fine.
The problem is that the hook seems to be called many more times than
necessary.
SOURCE
#!/usr/local/bin/perl
use warnings;
use strict;
use CGI::ProgressBar qw/:standard/;
$| = 1; # Do not buffer output
my $data;
my $hook_called;
my $cgi = CGI->new(\&bar_hook, $data);
if (not $hook_called){
print $cgi->header,
$cgi->start_html( -title=>'A Simple Example', ),
$cgi->h1('Simple Upload-hook Example');
}
print $cgi->start_form( -enctype=>'application/x-www-form-urlencoded'),
$cgi->filefield( 'uploaded_file'),
$cgi->submit,
$cgi->end_form,p;
if ($cgi->param('uploaded_file')){
print 'uploaded_file: '.param('uploaded_file');
}
sub bar_hook {
my ($filename, $buffer, $bytes, $data) = @_;
if (not $hook_called){
print header,
start_html( -title=>'Simple Upload-hook Example', ),
h1('Uploading'),
p(
"Have to read <var>$ENV{CONTENT_LENGTH}</var> in blocks of <var>$bytes</var>, total blocks should be ",
($ENV{CONTENT_LENGTH}/$bytes)
),
progress_bar( -from=>1, -to=>($ENV{CONTENT_LENGTH}/$bytes), -debug=>1 );
$hook_called = 1;
} else {
# Called every $bytes, I would have thought.
# But calls seem to go on much longer than $ENV{CONTENT_LENGTH} led me to believe they ought:
print update_progress_bar;
print "$ENV{CONTENT_LENGTH} ... $total_bytes ... $hook_called ... div="
.($hook_called/$total_bytes)
."<br>"
}
sleep 1;
$hook_called += $total_bytes;
}
print $cgi->hide_progress_bar;
if ($hook_called){
print p('All done after '.$hook_called.' calls');
}
print $cgi->end_html;
exit;
AUTHOR
Lee Goddard "lgoddard -in- cpan -dat- org", "cpan -ut- leegoddard -dut-
net"
COPYRIGHT
Copyright (C) Lee Goddard, 2002, 2003, 2005. All Rights Reserved. This
software is made available under the same terms as Perl itself. You may
use and redistribute this software under the same terms as Perl itself.
KEYWORDS
HTML, CGI, progress bar, widget
SEE ALSO
perl. CGI, Tk::ProgressBar,
MODIFICATIONS
25 March 2004: Updated the POD.
16 December 2005: Updated the default styles.
( run in 0.871 second using v1.01-cache-2.11-cpan-b16cb0d3907 )