webgui/lib/WebGUI/ProgressBar.pm
2009-06-18 22:36:42 +00:00

165 lines
3.4 KiB
Perl

package WebGUI::ProgressBar;
=head1 LEGAL
-------------------------------------------------------------------
WebGUI is Copyright 2001-2009 Plain Black Corporation.
-------------------------------------------------------------------
Please read the legal notices (docs/legal.txt) and the license
(docs/license.txt) that came with this distribution before using
this software.
-------------------------------------------------------------------
http://www.plainblack.com info@plainblack.com
-------------------------------------------------------------------
=cut
use strict;
=head1 NAME
Package WebGUI::ProgressBar
=head1 DESCRIPTION
Render a progress bar for the user inside a nice style.
=head1 SYNOPSIS
use WebGUI::ProgressBar;
my $pb = WebGUI::ProgressBar->new($session);
$pb->start($title, $iconUrl);
$pb->update($message);
$pb->finish($redirectUrl);
=head1 METHODS
These methods are available from this class:
=cut
#-------------------------------------------------------------------
=head2 new ( session )
Constructor.
=head3 session
A reference to the current session.
=cut
sub new {
my $class = shift;
my $session = shift;
my $recordCount = shift;
my $self = {};
$self->{_session} = $session;
$self->{_counter} = 1;
bless $self, $class;
return $self;
}
#-------------------------------------------------------------------
=head2 finish ( $url )
Redirects the user out of the status page.
=head3 $url
The URL to send the user to.
=cut
sub finish {
my $self = shift;
my $url = shift;
my $text = sprintf(<<EOJS, $url);
<script>
parent.location.href='%s';
</script>
EOJS
$self->session->output->print($text . $self->{_foot});
return 'redirect';
}
#-------------------------------------------------------------------
=head2 session ( )
Returns a reference to the current session.
=cut
sub session {
my $self = shift;
return $self->{_session};
}
#-------------------------------------------------------------------
=head2 start ( title, icon )
Returns a templated progress bar implemented in CSS and JS.
=head3 title
A title to display above the progress bar.
=head3 icon
The url to the icon you want to display.
=cut
sub start {
my ($self, $title, $icon) = @_;
$self->session->http->setCacheControl("none");
my %var = (
title => $title,
icon => $icon
);
my $template = WebGUI::Asset::Template->new($self->session, 'YP9WaMPJHvCJl-YwrLVcPw');
my $output = $self->session->style->process($template->process(\%var).'~~~', "PBtmpl0000000000000137");
my ($head, $foot) = split '~~~', $output;
$self->session->http->sendHeader;
$self->session->output->print($head);
$self->{_foot} = $foot;
return '';
}
#-------------------------------------------------------------------
=head2 update ( $message )
Sends a message and increments the status bar.
=head3 $message
A message to be displayed in the status bar.
=cut
sub update {
my $self = shift;
my $message = shift; ##JS string escaping?
$self->session->log->preventDebugOutput;
$self->{_counter} += 1;
my $text = sprintf(<<EOJS, $self->{_counter}, $message);
<script>
document.getElementById("progressMeter").style.width='%dpx';
document.getElementById("progressStatus").innerHTML='%s';
</script>
EOJS
$self->session->output->print($text);
if ($self->{_counter} > 600) {
$self->{_counter} = 1;
}
return '';
}
1;