NAME

HTML::Make::Calendar - Make an HTML calendar

SYNOPSIS

use HTML::Make::Calendar;

VERSION

This documents version 0.00_03 of HTML-Make-Calendar corresponding to git commit c13aa0b8419c9326a2df771db8886ad57775a000 released on Sun Jan 10 23:44:32 2021 +0900.

DESCRIPTION

This module constructs HTML calendars.

FUNCTIONS

calendar

my $out = calendar (year => 2010, month => 10);

Make the calendar. The return value is an HTML::Make object. To get the actual HTML, call its text method:

use utf8;
use FindBin '$Bin';
use HTML::Make::Calendar 'calendar';
my $out = calendar (year => 2021, month => 1);
print $out->text ();

The output HTML looks like this:

January 2021
Mo Tu We Th Fr Sa Su
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

(This example is included as calendar.pl in the distribution.)

The possible arguments are

cdata

Callback data, see "dayc".

dayc

Day callback. If this is omitted, a default element is added. The day callback is called with three arguments, first "cdata", second the date as a hash reference with arguments year, month and dom (day of month, a number from 1 to 31), and third the HTML element to attach the return value to, representing the cell of the calendar.

&{$dayc} ($cdata, {year => 2020, month => 12, day => 21}, $td);

where $td is an HTML::Make object.

first

The first day of the week. The default is 1 for Monday. Specify 7 to start on Sunday:

use HTML::Make::Calendar 'calendar';
my $cal = calendar (first => 7);
print $cal->text ();

The output HTML looks like this:

January 2021
Su Mo Tu We Th Fr Sa
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

(This example is included as first.pl in the distribution.)

Any other day of the week may also be used, for example specify 3 to start the weeks on Wednesdays.

month

The month, as a number from 1 to 12. If the month is omitted, the current month is used as given by "Today" in Date::Calc.

year

The year, as a four-digit number like 2020. If the year is omitted, the current year is used, as given by "Today" in Date::Calc.

Daily menu

This example demonstrates the use of "dayc" and "cdata".

use utf8;
use FindBin '$Bin';
use HTML::Make::Calendar 'calendar';
my @food = split '', '🍇🍈🍉🍊🍋🍌🍍🥭🍎🍏🍐🍑🍒🍓🥝🍅🥝🍅🥒🥬🥦🧄🧅🍄🥜🌰';
my $cal = calendar (cdata => \@food, dayc => \&add_food);
print $cal->text ();
exit;

sub add_food
{
    my ($food, $date, $element) = @_;
    my $today = $food->[int (rand (@$food))];
    $element->push ('span', text => "$date->{dom} $today");
}

The output HTML looks like this:

January 2021
Mo Tu We Th Fr Sa Su
1 🥝 2 🌰 3 🥭
4 🍐 5 🍇 6 🧅 7 🍋 8 🥒 9 🌰 10 🥬
11 🍑 12 🍇 13 🍌 14 🥝 15 🍒 16 🥒 17 🍉
18 🍊 19 🍋 20 🍌 21 🍍 22 🍉 23 🍊 24 🍓
25 🍇 26 🍑 27 🍐 28 🥦 29 🌰 30 🧄 31 🍇

(This example is included as menu.pl in the distribution.)

Phases of the moon

This example demonstrates the use of "dayc" and "cdata" by adding the phase of the moon to your calendar. It requires Astro::MoonPhase (not included with this distribution).

use utf8;
use HTML::Make::Calendar 'calendar';
use Astro::MoonPhase;
use Date::Calc 'Date_to_Time';
my @moons = qw!🌑 🌒 🌓 🌔 🌕 🌖 🌗 🌘!;
my $cal = calendar (dayc => \&daymoon, cdata => \@moons);
print $cal->text ();
exit;

sub daymoon
{
    my ($moons, $date, $element) = @_;
    my $epochtime = Date_to_Time ($date->{year}, $date->{month},
                                  $date->{dom}, 0, 0, 0);
    my ($phase) = phase ($epochtime);
    my $text = $moons->[int (8*$phase)] . " <b>$date->{dom}</b>";
    $element->add_text ($text);
}

The output HTML looks like this:

January 2021
Mo Tu We Th Fr Sa Su
🌕 1 🌕 2 🌖 3
🌖 4 🌖 5 🌖 6 🌗 7 🌗 8 🌗 9 🌘 10
🌘 11 🌘 12 🌘 13 🌑 14 🌑 15 🌑 16 🌒 17
🌒 18 🌒 19 🌒 20 🌓 21 🌓 22 🌓 23 🌓 24
🌓 25 🌔 26 🌔 27 🌔 28 🌕 29 🌕 30 🌕 31

(This example is included as moon.pl in the distribution.)

CSS STYLES

The elements of the calendar have the following CSS default style names:

DEPENDENCIES

Date::Calc

Date::Calc supplies the date information for the calendar.

HTML::Make

HTML::Make is used to generate the HTML for the calendar.

SCRIPT

See html-cal in the distribution.

SEE ALSO

Other CPAN modules

Calendar::List
Calendar::Schedule
Calendar::Simple
Date::Calendar

Includes a script cal2html for making HTML.

HTML::Calendar::Monthly

Fork of "HTML::Calendar::Simple". The documentation is largely copy-pasted from that with some alterations.

HTML::Calendar::Simple
HTML::CalendarMonth
HTML::CalendarMonthSimple
SVG::Calendar

Other HTML calendar generators

Python

The defaults of HTML calendar are somewhat based on Python's calendar.HTMLCalendar.

AUTHOR

Ben Bullock, <bkb@cpan.org>

COPYRIGHT & LICENCE

This package and associated files are copyright (C) 2021 Ben Bullock.

You can use, copy, modify and redistribute this package and associated files under the Perl Artistic Licence or the GNU General Public Licence.