HTML-Calendar-Monthly

 view release on metacpan or  search on metacpan

META.yml  view on Meta::CPAN

---
name: HTML-Calendar-Monthly
version: 0.03
author:
  - 'Johan Vromans <jv@cpan.org>'
abstract: A very simple HTML calendar
license: perl
resources:
  license: ~
requires:
  Date::Simple: 0
build_requires:
  Test::More: 0
provides:
  HTML::Calendar::Monthly:
    file: lib/HTML/Calendar/Monthly.pm

README  view on Meta::CPAN

HTML::Calendar::Monthly

This is a very simple module which will make an HTML representation of
a given month. You can add links to individual days.

Yes, the inspiration for this came out of me looking at
HTML::Calendar::Simple, and thinking 'Hmmm. A bit too complicated for
what I want. I know, I will write a simplified version.' So I did.

Along with the module comes a flexible program to generate monthly
calendars for inclusion in web sites.

INSTALLATION

To install this module, run the following commands:

	perl Build.PL
	./Build
	./Build test
	./Build install

lib/HTML/Calendar/Monthly.pm  view on Meta::CPAN

package HTML::Calendar::Monthly;

# Monthly.pm -- A very simple HTML calendar
# RCS Info        : $Id: Monthly.pm,v 1.4 2009/06/25 09:18:25 jv Exp $
# Author          : Johan Vromans
# Created On      : Thu Apr 30 22:13:00 2009
# Last Modified By: Johan Vromans
# Last Modified On: Thu Jun 25 11:18:16 2009
# Update Count    : 4
# Status          : Unknown, Use with caution!

use strict;
use warnings;

our $VERSION = "0.03";

=head1 NAME

HTML::Calendar::Monthly - A very simple HTML calendar

=head1 SYNOPSIS

  use HTML::Calendar::Monthly;

  my $cal = HTML::Calendar::Monthly->new; # This month, this year
     $cal = HTML::Calendar::Monthly->new({ 'month' => $month }); # This year
     $cal = HTML::Calendar::Monthly->new({ 'month' => $month,
                                              'year'  => $year});

  my $month = $cal->month;
  my $year  = $cal->year;

  # Add a link for a day.
  $cal->add_link( $day, $link );

  # Get HTML representation.
  my $html = $cal->calendar_month;

=head1 DESCRIPTION

This is a very simple module which will make an HTML representation of
a given month. You can add links to individual days.

Yes, the inspiration for this came out of me looking at
HTML::Calendar::Simple, and thinking 'Hmmm. A bit too complicated for
what I want. I know, I will write a simplified version.' So I did.

lib/HTML/Calendar/Monthly.pm  view on Meta::CPAN

This will return the numerical value of the month.

  my $month = $cal->month_name;

This will return the name of the month.

=head2 year

  my $year = $cal->year;

This will return the four-digit year of the calendar

=cut

sub month      { $_[0]->{month}            } # month in numerical format
sub month_name { $months[$_[0]->{month}-1 ]} # month name
sub year       { $_[0]->{year}             } # year in YYYY form
sub _the_month { @{ $_[0]->{the_month} }   } # this is the list of hashrefs.

=head2 add_link

lib/HTML/Calendar/Monthly.pm  view on Meta::CPAN

	      . "</td>";
    }
    else {
	return
	  "<td class='hc_date'>"
	    . $ref->{date}->day
	      . "</td>";
    }
}

=head2 calendar_month

  my $html = $cal->calendar_month;

This will return an html string of the calendar month.

=cut

sub calendar_month {
    my $self = shift;
    my @seq  = $self->_the_month;
    my $cal  = "<table class='hc_month'>\n"
               . "  <tr>\n"
               . join("\n", map { "    <th>$_</th>" } @days )
               . "  </tr>\n";
    while ( @seq ) {
	my @week_row = splice( @seq, 0, DAYS_IN_WEEK );
	$#week_row = DAYS_IN_WEEK - 1;
	$cal .= "  <tr>\n"

script/hcgen  view on Meta::CPAN

my $data = "";

foreach ( @files ) {
    my ( $y, $m, $d, $file ) = @$_;
    if ( sprintf("%04d%02d", $y, $m) ne $this ) {
	if ( $cal ) {
	    $data .= "<div class='hc'>\n";
	    $data .= $cal->build_title($title_format) . "\n"
	      if $needhdr >= 0;
	    $needhdr++;
	    $data .= $cal->calendar_month;
	    $data .= "</div>\n";
	}
	$cal = HTML::Calendar::Monthly->new
	  ({ 'month' => $m, year => $y });
	$this = sprintf("%04d%02d", $y, $m);
    }
    $cal->add_link( $d, $linkpfx.$file );
}

if ( $cal ) {
    $data .= "<div class='hc'>\n";
    $data .= $cal->build_title . "\n" if $needhdr > 0;
    $data .= $cal->calendar_month;
    $data .= "</div>\n";
}

if ( $output ) {
    if ( update_if_needed($output, $data) ) {
	warn("$output: written\n");
    }
    else {
	warn("$output: not modified\n");
    }

script/hcgen  view on Meta::CPAN

	$pod2usage->(VERBOSE => 2) if $man;
    }
}

__END__

################ Documentation ################

=head1 NAME

hcgen - generate simple HTML month calendar

=head1 SYNOPSIS

hcgen [options] [dir]

 Options:
   --output=XXX		output file (see below)
   --reverse		output months in reverse order
   --[no]title		do [not] provide a title (see below)
   --format=XXX		title format

script/hcgen  view on Meta::CPAN

   --help		brief help message
   --man                full documentation
   --verbose		verbose information

=head1 OPTIONS

=over 8

=item B<--output=>I<XXX>

Write the generated calendars to this file. If the file exists, and
contains the same calendar, it will not be modified so it is useful as
a make target.

=item B<--reverse>

Generate the calendars in reverse order, e.g., newest month first.

=item B<--title> B<--notitle>

Request titles above the generated calendars. With B<--title>, titles
are always provided. With B<--notitle>, titles are never provided.
Default is to only provide titles when more than one calendar is
generated.

=item B<--format=>I<XXX>

The format for the titles. It may contain the following substitutions:

  %m       the name of the month, e.g., april
  %M       same, titlecased, e.g., April
  %y  %Y   the year, e.g., 2009

script/hcgen  view on Meta::CPAN

  <p class='hc_title'>...</p>

Default format is C<< "%M %Y" >>.

=item B<--prefix=>I<XXX>

A prefix to add to the generated day links.

=item B<--force=>I<YYYYMM>

Force the generation of a calendar for this year/month, even if there
are no files.

=item B<--filter=>I<YYYYMM>

Process only files for the given year/month.

This option may occur multiple times.

=item B<--help>

script/hcgen  view on Meta::CPAN

documents) with names formatted as C<< YYYYMMDD.html >>.

Default is to process the current directory.

=back

=head1 DESCRIPTION

B<hcgen> will read the given directory and build a list of all files
that obey the name format C<< YYYYMMDD.html >>. This list will
determine the years and months for which calendars must be generated.

Each calendar consists of a table of 7 colums. The first row
contains short day names. The other cells contain the date numbers,
possibly with a link to a corresponding HTML document.

=head1 CSS CLASSES

The table can be completely formatted with CSS style sheets.
The CSS classes are shown in the following output excerpt.

  <div class='hc'>
  <p class='hc_title'>February 2009</p>

script/hcgen  view on Meta::CPAN

    text-decoration: none;
    font-weight: bold;
  }
  .hc_empty {
    background: #e0e0e0;
  }

=head1 BUGS

The program and its associated module, L<HTML::Calendar::Monthly>
are currently hard-wired to generate dutch calendars.

=head1 SEE ALSO

L<HTML::Calendar::Monthly>

=head1 AUTHOR

Johan Vromans E<lt>jvromans@squirrel.nlE<gt>

=cut

t/01-basic.t  view on Meta::CPAN

#! perl

use strict;
use warnings;
use Test::More tests => 1;
use HTML::Calendar::Monthly;

my $cal = HTML::Calendar::Monthly->new( { year => 2009, month => 4 });

my $ref = do { local $/; <DATA> };
is( $cal->calendar_month, $ref, "empty calendar");

__END__
<table class='hc_month'>
  <tr>
    <th>Ma</th>
    <th>Di</th>
    <th>Wo</th>
    <th>Do</th>
    <th>Vr</th>
    <th>Za</th>

t/02-links.t  view on Meta::CPAN

use warnings;
use Test::More tests => 1;
use HTML::Calendar::Monthly;

my $cal = HTML::Calendar::Monthly->new( { year => 2009, month => 4 });

$cal->add_link( 5, "foo.html" );
$cal->add_link( 15, "bar.html" );

my $ref = do { local $/; <DATA> };
is( $cal->calendar_month, $ref, "empty calendar");

__END__
<table class='hc_month'>
  <tr>
    <th>Ma</th>
    <th>Di</th>
    <th>Wo</th>
    <th>Do</th>
    <th>Vr</th>
    <th>Za</th>



( run in 0.454 second using v1.01-cache-2.11-cpan-5dc5da66d9d )