HTML::Spry::DataSet - Generate HTML Table Data Set files for the Spry Javascript toolkit


HTML-Spry-DataSet documentation Contained in the HTML-Spry-DataSet distribution.

Index


Code Index:

NAME

Top

HTML::Spry::DataSet - Generate HTML Table Data Set files for the Spry Javascript toolkit

SYNOPSIS

Top

  # Create the object
  my $dataset = HTML::Spry::DataSet->new;

  # Add the tables to the object
  $dataset->add( 'heavy100',
      [ 'Rank', 'Dependencies', 'Author',   'Distribution'           ],
      [ '1',    '748',          'APOCAL',   'Task-POE-All'           ],
      [ '2',    '276',          'MRAMBERG', 'MojoMojo-Formatter-RSS' ],
      ...
  );

  # Write out to the HTML file
  $dataset->write('dataset.html');

DESCRIPTION

Top

Spry is a JavaScript framework produced by Adobe. The following is taken from their website.

"The Spry framework for Ajax is a JavaScript library that provides easy-to-use yet powerful Ajax functionality that allows designers to build pages that provide a richer experience for their users.

It is designed to take the complexity out of Ajax and allow designers to easily create Web 2.0 pages."

This package is used to generate simple HTML-formatted data sets that are consumable by Spry DataSet objects, for use in generating various dynamic JavaScript-driven page elements, such as dynamic tables, reports and so on.

The SYNOPSIS section covers pretty much everything you need to know about using HTML::Spry::DataSet. All methods throw an exception on error.

SUPPORT

Top

Bugs should be reported via the CPAN bug tracker at

http://rt.cpan.org/NoAuth/ReportBug.html?Queue=HTML-Spry-DataSet

For other issues, or commercial enhancement or support, contact the author.

AUTHORS

Top

Adam Kennedy <adamk@cpan.org>

COPYRIGHT

Top


HTML-Spry-DataSet documentation Contained in the HTML-Spry-DataSet distribution.
package HTML::Spry::DataSet;

use 5.008005;
use strict;
use Carp         ();
use CGI          ();
use IO::File     ();
use Params::Util qw{ _IDENTIFIER _ARRAY _STRING };

our $VERSION = '0.01';

sub new {
	my $class = shift;
	my $self  = bless { }, $class;
	return $self;
}

sub add {
	my $self = shift;

	# Check the dataset name
	my $name = shift;
	unless ( _IDENTIFIER($name) ) {
		Carp::croak("Missing or invalid dataset identifier");
	}
	if ( $self->{$name} ) {
		Carp::croak("The dataset '$name' already exists");
	}

	# Check the records
	my $rowid = 0;
	foreach my $row ( @_ ) {
		unless ( _ARRAY($row) ) {
			Carp::croak("Row $rowid in dataset $name is not an ARRAY reference");
		}
		if ( scalar grep { not defined _STRING($_) } @$row ) {
			Carp::croak("Row $rowid in dataset $name contained a non-SCALAR column");
		}
		$rowid++;
	}

	# Add the dataset
	$self->{$name} = [ @_ ];

	return 1;
}

sub write {
	my $self = shift;

	# Open the file
	my $file = shift;
	my $html  = IO::File->new( $file, "w" );
	unless ( defined $html ) {
		Carp::croak("Failed to open '$file' for write");
	}

	# Write the file
	$html->say('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">');
	$html->say('<html>');
	$html->say('<head>');
	$html->say('<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />');
	$html->say('</head>');
	$html->say('<body>');
	foreach my $id ( sort keys %$self ) {
		$html->say("<table id='$id'>");
		foreach my $row ( @{ $self->{$id} } ) {
			$html->say('  <tr>');
			foreach my $cell ( @$row ) {
				my $text = CGI::escapeHTML($cell);
				$html->say("    <td>$text</td>");
			}
			$html->say('  </tr>');
		}
		$html->say('</table>');
	}
	$html->say('</body>');
	$html->say('</html>');

	# Clean up
	$html->close;

	return 1;
}

1;