Calendar Plugin

Show a monthly calendar with highlighted events


The CalendarPlugin handles the %CALENDAR% variable which inserts a monthly calendar in the page. Multiple topics can be specified as the source of the events, and these can be in any web. The calendar marks dates corresponding to the events.

Note: This Plugin does not observe topic permissions.

Syntax Rules

You type you get
%CALENDAR% a monthly calendar for the current month/year, with events taken from the current topic
%CALENDAR{<attributes>}% is the full syntax

Attributes recognized

Attribute Meaning Default
year="yyyy" The year Current year
year="+yy" or "-yy" Relative year Current year
month="mm" The month Current month
month="+mm" or "-mm" relative month Current month
gmtoffset="+/-hh" Timezone expressed as number of hours offset from GMT Server timezone
topic="TopicName" Topic containing events The topic containing the tag
topic="Web.TopicName1, Web.TopicName2" Topics containing events The topics containing the tags
web="Webname" Web containing the event topic The current web
lang="language" Language: First few characters of "English", "Fran�ais", "Deutsch", "Espa�ol", "Portugu�s", "Nederlands", "Italiano", "Norsk", "Svenska", "Dansk", "suomi", "Magyar", "Polski "English"
daynames="Mon¦Tue¦..." Custom day names "Monday¦Tuesday¦Wednesday¦Thursday¦
header="..." Text at the top of the calendar; use $m for current month, $y for year Current month and year
weekstartsonmonday="1" or "0" Flag to start week on Monday "0" (Sunday)
showdatenumbers="0" Show day numbers 1...31 in date cells. Note that showdatenumbers=1 means that HTML::CalendarMonthSimple will add the date numbers to the cells. If showdatenumbers=0, then the plugin adds the date numbers. The result of this is that a calendar will always show the date numbers. "0" (except with aslist="1", see below)
showweekdayheaders="1" Show the weekday headers "0"
weekdayheadersbig="0" If enabled, show weekday headers in bold cell headings "1"
cellalignment="left" Horizontal cell alignment of day cells: "left", "center", "right", "justify", "char" "center"
vcellalignment="middle" Vertical cell alignment of day cells: "top", "middle", "bottom", "baseline" "top"
cellheight="n" Height in pixels of each cell in the calendar Minimum height needed
format="..." How to highlight a date See Event Formatting below
width="n" or "n%" Width of calendar table in pixels or percent Minimum width needed
sharpborders="n" If set to 1, this gives very crisp edges between the table cells. If set to 0 standard HTML cells are used. "1"
border="n" Border width of calendar table. (sharpborders="0" required) "1"
cellspacing="n" Spacing of calendar cells. (sharpborders="0" required) "0"
cellpadding="n" Padding of calendar cells. (sharpborders="0" required) "3"
nowrap="1" or "0" Prevent cell content from wrapping "0"
bgcolor="#nnnn" Default background color of all cells unless redefined by other color settings below (use an HTML color-code like "#000000" as defined in StandardColors) white
contentcolor="#nnnn" Default content color of all cells unless redefined black
headercolor="#nnnn" Background color of the Month+Year header The web bgcolor
headercontentcolor="#nnnn" Content color of the Month+Year header contentcolor setting
weekdayheadercolor="#nnnn" Background color of weekdays' headers bgcolor setting
Content color of weekdays' headers contentcolor setting
weekendheadercolor="#nnnn" Background color of weekends' headers bgcolor setting
Content color of weekends' headers contentcolor setting
weekdaycolor="#nnnn" Background color of weekday cells bgcolor setting
weekdaycontentcolor="#nnnn" Content color of weekday cells contentcolor setting
weekendcolor="#nnnn" Background of weekend cells light gray
weekendcontentcolor="#nnnn" Content color of weekend cells contentcolor setting
todaycolor="#nnnn" Background of today's cell The web bgcolor
todaycontentcolor="#nnnn" Content color of today's cell contentcolor setting
and other attributes of HTML::CalendarMonthSimple
aslist Controls whether events displayed in calendar style (aslist=0) or list style (aslist=1). Note that specifying aslist=1 forces showdatenumbers=1. This is done to ensure that the date number is formatted according to datenumberformat and that only the days that have an event are listed. 0
days Specifies how many days of calendar data to list. Only valid if aslist=1. 1
months Specifies how many months of calendars to display. Only valid if aslist=0. 1
datenumberformat Specifies formatting for the date number in each cell. The formatting codes accepted are the same as those for the %GMTIME% variable. '$day' (if aslist=0)
' * $day $mon $year' (if aslist=1)
todaydatenumberformat Specifies formatting for the date number for the current day (today) in the calendar. The formatting codes accepted are the same as those for the %GMTIME% variable. datenumberformat
multidayformat Specifies formatting of the description for multi-day events. See Multi-Day Event Formatting for details. $description

Event Syntax

Events are defined by bullets with the following syntax:

Event type Syntax Example
Single:    * yyyy-mm-dd - description 2002-12-09 - Expo ISO island
   * dd MMM yyyy - description 09 Dec 2002 - Expo
Interval:    * yyyy-mm-dd - yyyy-mm-dd - description 2002-02-02 - 2002-02-04 - Vacation ISO land
   * dd MMM yyyy - dd MMM yyyy - description 02 Feb 2002 - 04 Feb 2002 - Vacation
Yearly:    * mm-dd - description
   * dd MMM - description
07-05 - Every 5th of June
05 Jun - Every 5th of June
   * w DDD MMM - description 2 Tue Mar - Every 2nd Tuesday of March
   * L DDD MMM - description L Mon May - The last Monday of May
   * A yyyy-mm-dd - description
   * A dd MMM yyyy - description
A 1969-07-20 - First moon landing
A 20 Jul 1969 - First moon landing
This style will mark anniversaries of an event that occurred on the given date. The description will have " (x)" appended to it, where "x" indicates how many years since the occurence of the first date. The first date is not annotated.
Monthly:    * w DDD - description 1 Fri - Every 1st Friday of the month
   * L DDD - description L Mon - The last Monday of each month
   * dd - description 14 - The 14th of every month
Weekly:    * E DDD - description E Wed - Every Wednesday
   * E DDD yyyy-mm-dd - description
   * E DDD dd MMM yyyy - description
E 2005-01-27 - Every Wednesday Starting 27 Jan 2005
   * E DDD yyyy-mm-dd - yyyy-mm-dd - description
   * E DDD dd MMM yyyy - dd MMM yyyy - description
E Wed 2005-01-01 - 2005-01-27 - Every Wednesday from 1 Jan 2005 through 27 Jan 2005 (inclusive)
Periodic:    * En yyyy-mm-dd - description
   * En dd MMM yyyy - description
E3 2002-12-02 - Every three days starting 02 Dec 2002
   * En yyyy-mm-dd - yyyy-mm-dd - description
   * En dd MMM yyyy - dd MMM yyyy - description
E3 2005-04-12 - 2005-12-31 - Every three days from 12 Apr 2005 through 31 Dec 2005 (inclusive)
Exception: Insert the following between the above syntax and the description:
X { yyyy-mm-dd, yyyy-mm-dd - yyyy-mm-dd }
X { dd MMM yyyy, dd MMM yyyy - dd MMM yyyy }
1 Fri X { 2002-12-01, 2002-12-06 - 2002-12-14 } - Every first Friday except on the 01 Dec 2002 and between 06 Dec 2002 and 14 Dec 2002

Event formatting

For a table-style calendar, each day which has one or more events will have a list of the descriptions of those events. Each event description will be set in a small font. In other words, format is:

$old<br /><small>$description</small>

For a list-style calendar, if an event falls in the selected time period, then it is displayed (by default) as a bullet item with the date as dd Mmm yyyy In other words, datenumberformat is:

   * $day $mon $year
and format is:
$old - $description

This displays the events in a form very similar to that in which they are specified (although specific to a particular date).

Multi-Day Event Formatting

The multidayformat option allows the description of each day of a multiday event to be displayed differently. This could be used to visually or textually annotate the description to indicate continuance from or to other days.

The option consists of a comma separated list of formats for each type of day in a multiday event:

first, middle, last, middle-unseen, last-unseen


  • first is the format used when the first day of the event is displayed
  • middle is the format used when the day being displayed is not the first or last day
  • last is the format used when the last day of the event is displayed
  • middle-unseen is the format used when the day being displayed is not the first or last day of the event, but the preceding days of the event have not been displayed. For example, if an event runs from 29 Apr to 2 May and a May calendar is being displayed, then this format would be used for 1 May.
  • last-unseen is the format used when the day being displayed is the last day of the event, but the preceding days of the event have not been displayed. For example, if an event runs from 29 Apr to 1 May and a May calendar is being displayed, then this format would be used for 1 May. Note that in the previous example (event from 29 Apr to 2 May), this format would not be used for a May calendar because the event was "seen" on 1 May; so, the last format would be used for 2 May.

Within each format, date information for the current day can be substituted using the same format codes as accepted by %GMTIME%. An extension to these codes allows the date of the first and/or last day of the event to also be rendered.

  • $first(format) will render the first date of the event according to format, where format is, again, a string of codes acceptable to %GMTIME%.
  • $last(format) will render the last date of the event in the way just described for $first()

Missing formats will be filled in as follows:

  • middle will be set to first
  • last will be set to middle
  • middle-unseen will be set to middle
  • last-unseen will be set to last

Missing formats are different from empty formats. For example,

multidayformat="$description (until $last($day $month)),,"

specifies an empty format for middle and last. The result of this is that only the first day will be shown. Note that since an unspecified middle-unseen is set from the (empty) middle format, an event that begins prior to the calendar being displayed but ending in the current calendar will not be displayed. In contrast, multidayformat="$description" will simply display the description for each day of the event; all days (within the scope of the calendar) will be displayed.

The default format is to simply display the description of the event.


You type:You get:If correctly installed:
A list of Events is just a bullet list like this:
  • 2 Feb - Andrea's birthday
  • A 7 Mar 1966 - Nicoletta's birthday
  • 29 May 1996 - Maria Teresa is born!
  • 29 Sep 1998 - Davide is born!

%CALENDAR{month="2" year="2002" bgcolor="cyan"}% %CALENDAR{month="3" year="2002" showweekdayheaders="1"}%

February 2002
          01 02
Andrea's birthday
03 04 05 06 07 08 09
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28    

March 2002
Sunday Monday Tuesday Wednesday Thursday Friday Saturday
          01 02
03 04 05 06 07
Nicoletta's birthday (36)
08 09
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

February 2002
          01 02
Andrea's birthday
03 04 05 06 07 08 09
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28    

March 2002
Sunday Monday Tuesday Wednesday Thursday Friday Saturday
          01 02
03 04 05 06 07
Nicoletta's birthday (36)
08 09
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

Plugin Settings

Plugin settings are stored as preferences variables. To reference a plugin setting write %<plugin>_<setting>%, i.e. %CALENDARPLUGIN_SHORTDESCRIPTION%

  • One line description, is shown in the TextFormattingRules topic:
    • Set SHORTDESCRIPTION = Show a monthly calendar with highlighted events

  • Debug plugin: (See output in data/debug.txt)
    • Set DEBUG = 0

  • How the cell content is formatted
      * #Set FORMAT = $old<br /><small>$description</small>
  • Note: You can add settings of any of the recognized attributes (in upper case like SHOWWEEKDAYHEADERS). Examples are shown below:
    • #Set CELLALIGNMENT = center
    • #Set VCELLALIGNMENT = center
    • #Set WIDTH = 100%
    • #Set GMTOFFSET = +10

Plugin Installation Instructions

Note: You do not need to install anything on the browser to use this plugin. The following instructions are for the administrator who installs the plugin on the server where TWiki is running.

  • For an automated installation, run the configure script and follow "Find More Extensions" in the in the Extensions section.

  • Or, follow these manual installation steps:
    • Download the ZIP file from the Plugins web (see below)
    • The Plugin uses the HTML::CalendarMonthSimple and Date::Calc CPAN packages (see
    • Install Date::Calc
    • Install HTML::CalendarMonthSimple
    • To avoid an annoying log message, change line 272 of v1.25 by adding the section marked in RED :
      if ($self->year = = $todayyear && $self->month = = $todaymonth %RED% && defined $thisday %ENDCOLOR% && $thisday = = $todaydate)
      • For earlier or later versions where the line number may be different, search for todayyear. It currently (v1.22-v1.25) only appears twice: once to declare and set it, once to use it. On the line that uses it, add the && defined $thisday as shown above. -- TWiki:Main.AngusRogerson - 16 Aug 2004
    • Unzip in your twiki installation directory. Content:
      File: Description:
      data/TWiki/CalendarPlugin.txt Plugin topic
      lib/TWiki/Plugins/ Plugin Perl module
      pub/TWiki/CalendarPlugin/exclam.gif Image file

  • Visit configure in your TWiki installation, and enable the plugin in the {Plugins} section.
  • Test if the installation was successful:
    • You should see two calendars near the Event list above and a current month calendar below:
September 2017
          01 02
03 04 05 06 07 08 09
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

Plugin Info

Plugin Author: TWiki:Main.AndreaSterbini, TWiki:Main.PeterThoeny, TWiki:Main.NathanKerr, TWiki:Main.DavidBright, TWiki:Main.DanielRohde, TWiki:Main.
Copyright: © 2001 TWiki:Main.AndreaSterbini
© 2002-2011 TWiki:Main.PeterThoeny
© 2002-2011 TWiki:TWiki.TWikiContributor
License: GPL (GNU General Public License)
Plugin Version: 2011-02-18
Change History:  
2011-02-18: TWikibug:Item6650: Add cellspacing, cellpadding parameters; fix sharpborders="0" issue -- TWiki:Main.PeterThoeny
2011-02-17: TWikibug:Item6649: Support anniversary, yearly, weekly and periodic events with ISO date format -- TWiki:Main.PeterThoeny
2011-02-16: TWikibug:Item6649: Support exceptions with ISO date format -- TWiki:Main.PeterThoeny
2011-02-15: TWikibug:Item6649: Support calendar events with ISO date format, such as 2011-02-15 -- TWiki:Main.PeterThoeny
V1.020: TWiki:Main.DavidBright: Bug fix from TWiki:Main.MarcLangheinrich for multiday events that were not properly displayed because the first day occurred in the current month, but before the first day included in the list.
V1.019: TWiki:Main.DavidBright: Added support for monthly repeaters specified as "L Fri" (last Friday in all months).
V1.018: TWiki:Main.DavidBright: Added capability to display multiple months in one call, display events in a list, and provided for more extensive formatting of date and description of events.
V1.017: TWiki:Main.DanielRohde: Added start and end date support for periodic repeaters; Added initlang patch by TWiki:Main.JensKloecker; Changed 'my' to 'local' so exceptions working again; Removed fetchxmap debug message; Fixed illegal date bug; Allowed month abbreviations in month attribute
V1.016: TWiki:Main/DavidBright: Added support for anniversary events; changed "our" to "my" in module to support perl versions prior to 5.6.0
V1.015: TWiki:Main.PatriceFournier: Added back support for preview showing unsaved events; Two loop fixes from TWiki:Main.DanielRohde
V1.014: TWiki:Main.NathanKerr: Added start and end date support for weekly repeaters
V1.013: TWiki:Main.MartinCleaver: Added multiple topic=web.topic parameters
V1.012: TWiki:Main/PeterThoeny: Added missing doc of gmtoffset parameter (was deleted in V1.011)
V1.011: TWiki:Main/PeterThoeny: Fixed deep recursion bug; preview shows now unsaved events; performance and resource improvements; documented most of HTML::CalendarMonthSimple attributes; TWiki:Main/PaulineCheung: Fixed uninitialized value in join
V1.010: TWiki:Main/DanBoitnott: Fixed variable conflict in timezone code
V1.009: TWiki:Main/DanBoitnott: Added ability to have event topics in other webs
V1.008: TWiki:Main/AnthonPang: Added daynames attribute; TWiki:Main/JensKloecker: Added lang attribute; TWiki:Main/DanBoitnott: Added yearly, monthly, weekly, and periodic events and exceptions
V1.006: TWiki:Main/DanBoitnott: Added monthly date support
V1.005: TWiki:Main/AkimDemaille: handle date intervals (thanks!)
V1.004: uses only HTML::CalendarMonthSimple, ISO dates, all possible settings, fixed month bug
V1.003: introducing HTML::CalendarMonthSimple
V1.002: TWiki:Main/ChristianSchultze: highlight today, relative month/year and debugging (thanks!)
V1.001: delayed load of used packages
V1.000: first release using only HTML::CalendarMonth
TWiki Dependency: $TWiki::Plugins::VERSION 1.010
CPAN Dependencies: CPAN:HTML::CalendarMonthSimple >= v1.23, CPAN:Date::Calc
Other Dependencies: none
Perl Version: 5.000 and up
TWiki:Plugins/Benchmark: GoodStyle 95%, FormattedSearch 97%, CalendarPlugin 88% with installed Plugin
Plugin Home:

Related Topics: TWikiPreferences, TWikiPlugins

Topic attachments
I Attachment Action Size Date Who Comment
Gifgif exclam.gif manage 0.1 K 2011-02-18 - 08:09 TWikiAdminUser Saved by install script
Topic revision: r8 - 2011-03-01 - TWikiAdminUser
This site is powered by the TWiki collaboration platformCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback
Note: Please contribute updates to this topic on at TWiki:TWiki.CalendarPlugin