summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOz N Tiram <oz.tiram@gmail.com>2017-06-06 09:35:59 (GMT)
committerWalter Dörwald <walter@livinglogic.de>2017-06-06 09:35:59 (GMT)
commit8b7a4cc40e9b2f34da94efb75b158da762624015 (patch)
tree5dd313ea843dbb65f0dd5702b61c5feafb43e5a6
parent167e0fc211c06df52aff1a81f513763374cb4f88 (diff)
downloadcpython-8b7a4cc40e9b2f34da94efb75b158da762624015.zip
cpython-8b7a4cc40e9b2f34da94efb75b158da762624015.tar.gz
cpython-8b7a4cc40e9b2f34da94efb75b158da762624015.tar.bz2
bpo-30095: Make CSS classes used by calendar.HTMLCalendar customizable (GH-1439)
Several class attributes have been added to calendar.HTMLCalendar that allow customization of the CSS classes used in the resulting HTML. This can be done by subclasses HTMLCalendar and overwriting those class attributes (Patch by Oz Tiram).
-rw-r--r--Doc/library/calendar.rst81
-rw-r--r--Doc/whatsnew/3.7.rst23
-rw-r--r--Lib/calendar.py36
-rw-r--r--Lib/test/test_calendar.py108
-rw-r--r--Misc/ACKS1
5 files changed, 205 insertions, 44 deletions
diff --git a/Doc/library/calendar.rst b/Doc/library/calendar.rst
index 41e9e28..a415b47 100644
--- a/Doc/library/calendar.rst
+++ b/Doc/library/calendar.rst
@@ -147,7 +147,7 @@ it's the base calendar for all computations.
This class can be used to generate HTML calendars.
- :class:`HTMLCalendar` instances have the following methods:
+ :class:`!HTMLCalendar` instances have the following methods:
.. method:: formatmonth(theyear, themonth, withyear=True)
@@ -171,6 +171,85 @@ it's the base calendar for all computations.
output (defaulting to the system default encoding).
+ :class:`!HTMLCalendar` has the following attributes you can override to
+ customize the CSS classes used by the calendar:
+
+ .. attribute:: cssclasses
+
+ A list of CSS classes used for each weekday. The default class list is::
+
+ cssclasses = ["mon", "tue", "wed", "thu", "fri", "sat", "sun"]
+
+ more styles can be added for each day::
+
+ cssclasses = ["mon text-bold", "tue", "wed", "thu", "fri", "sat", "sun red"]
+
+ Note that the length of this list must be seven items.
+
+
+ .. attribute:: cssclass_noday
+
+ The CSS class for a weekday occurring in the previous or coming month.
+
+ .. versionadded:: 3.7
+
+
+ .. attribute:: cssclasses_weekday_head
+
+ A list of CSS classes used for weekday names in the header row.
+ The default is the same as :attr:`cssclasses`.
+
+ .. versionadded:: 3.7
+
+
+ .. attribute:: cssclass_month_head
+
+ The month's head CSS class (used by :meth:`formatmonthname`).
+ The default value is ``"month"``.
+
+ .. versionadded:: 3.7
+
+
+ .. attribute:: cssclass_month
+
+ The CSS class for the whole month's table (used by :meth:`formatmonth`).
+ The default value is ``"month"``.
+
+ .. versionadded:: 3.7
+
+
+ .. attribute:: cssclass_year
+
+ The CSS class for the whole year's table of tables (used by
+ :meth:`formatyear`). The default value is ``"year"``.
+
+ .. versionadded:: 3.7
+
+
+ .. attribute:: cssclass_year_head
+
+ The CSS class for the table head for the whole year (used by
+ :meth:`formatyear`). The default value is ``"year"``.
+
+ .. versionadded:: 3.7
+
+
+ Note that although the naming for the above described class attributes is
+ singular (e.g. ``cssclass_month`` ``cssclass_noday``), one can replace the
+ single CSS class with a space separated list of CSS classes, for example::
+
+ "text-bold text-red"
+
+ Here is an example how :class:`!HTMLCalendar` can be customized::
+
+ class CustomHTMLCal(calendar.HTMLCalendar):
+ cssclasses = [style + " text-nowrap" for style in
+ calendar.HTMLCalendar.cssclasses]
+ cssclass_month_head = "text-center month-head"
+ cssclass_month = "text-center month"
+ cssclass_year = "text-italic lead"
+
+
.. class:: LocaleTextCalendar(firstweekday=0, locale=None)
This subclass of :class:`TextCalendar` can be passed a locale name in the
diff --git a/Doc/whatsnew/3.7.rst b/Doc/whatsnew/3.7.rst
index 761c85f..602db8c 100644
--- a/Doc/whatsnew/3.7.rst
+++ b/Doc/whatsnew/3.7.rst
@@ -103,13 +103,6 @@ New Modules
Improved Modules
================
-cgi
----
-
-:func:`~cgi.parse_multipart` returns the same results as
-:class:`~FieldStorage` : for non-file fields, the value associated to a key
-is a list of strings, not bytes.
-(Contributed by Pierre Quentel in :issue:`29979`.)
binascii
--------
@@ -118,6 +111,22 @@ The :func:`~binascii.b2a_uu` function now accepts an optional *backtick*
keyword argument. When it's true, zeros are represented by ``'`'``
instead of spaces. (Contributed by Xiang Zhang in :issue:`30103`.)
+
+calendar
+--------
+
+The :class:`~calendar.HTMLCalendar` has added new class attribute which ease the
+customisation the CSS classes in the produced HTML calendar.
+(Contributed by Oz Tiram in :issue:`30095`.)
+
+cgi
+---
+
+:func:`~cgi.parse_multipart` returns the same results as
+:class:`~FieldStorage` : for non-file fields, the value associated to a key
+is a list of strings, not bytes.
+(Contributed by Pierre Quentel in :issue:`29979`.)
+
contextlib
----------
diff --git a/Lib/calendar.py b/Lib/calendar.py
index 28ac56f..0218e2d 100644
--- a/Lib/calendar.py
+++ b/Lib/calendar.py
@@ -382,12 +382,31 @@ class HTMLCalendar(Calendar):
# CSS classes for the day <td>s
cssclasses = ["mon", "tue", "wed", "thu", "fri", "sat", "sun"]
+ # CSS classes for the day <th>s
+ cssclasses_weekday_head = cssclasses
+
+ # CSS class for the days before and after current month
+ cssclass_noday = "noday"
+
+ # CSS class for the month's head
+ cssclass_month_head = "month"
+
+ # CSS class for the month
+ cssclass_month = "month"
+
+ # CSS class for the year's table head
+ cssclass_year_head = "year"
+
+ # CSS class for the whole year table
+ cssclass_year = "year"
+
def formatday(self, day, weekday):
"""
Return a day as a table cell.
"""
if day == 0:
- return '<td class="noday">&nbsp;</td>' # day outside month
+ # day outside month
+ return '<td class="%s">&nbsp;</td>' % self.cssclass_noday
else:
return '<td class="%s">%d</td>' % (self.cssclasses[weekday], day)
@@ -402,7 +421,8 @@ class HTMLCalendar(Calendar):
"""
Return a weekday name as a table header.
"""
- return '<th class="%s">%s</th>' % (self.cssclasses[day], day_abbr[day])
+ return '<th class="%s">%s</th>' % (
+ self.cssclasses_weekday_head[day], day_abbr[day])
def formatweekheader(self):
"""
@@ -419,7 +439,8 @@ class HTMLCalendar(Calendar):
s = '%s %s' % (month_name[themonth], theyear)
else:
s = '%s' % month_name[themonth]
- return '<tr><th colspan="7" class="month">%s</th></tr>' % s
+ return '<tr><th colspan="7" class="%s">%s</th></tr>' % (
+ self.cssclass_month_head, s)
def formatmonth(self, theyear, themonth, withyear=True):
"""
@@ -427,7 +448,8 @@ class HTMLCalendar(Calendar):
"""
v = []
a = v.append
- a('<table border="0" cellpadding="0" cellspacing="0" class="month">')
+ a('<table border="0" cellpadding="0" cellspacing="0" class="%s">' % (
+ self.cssclass_month))
a('\n')
a(self.formatmonthname(theyear, themonth, withyear=withyear))
a('\n')
@@ -447,9 +469,11 @@ class HTMLCalendar(Calendar):
v = []
a = v.append
width = max(width, 1)
- a('<table border="0" cellpadding="0" cellspacing="0" class="year">')
+ a('<table border="0" cellpadding="0" cellspacing="0" class="%s">' %
+ self.cssclass_year)
a('\n')
- a('<tr><th colspan="%d" class="year">%s</th></tr>' % (width, theyear))
+ a('<tr><th colspan="%d" class="%s">%s</th></tr>' % (
+ width, self.cssclass_year_head, theyear))
for i in range(January, January+12, width):
# months in this row
months = range(i, min(i+width, 13))
diff --git a/Lib/test/test_calendar.py b/Lib/test/test_calendar.py
index bd57653..c777f64 100644
--- a/Lib/test/test_calendar.py
+++ b/Lib/test/test_calendar.py
@@ -57,19 +57,22 @@ Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su
25 26 27 28 29 30 31 29 30 27 28 29 30 31
"""
+
+default_format = dict(year="year", month="month", encoding="ascii")
+
result_2004_html = """\
-<?xml version="1.0" encoding="%(e)s"?>
+<?xml version="1.0" encoding="{encoding}"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
-<meta http-equiv="Content-Type" content="text/html; charset=%(e)s" />
+<meta http-equiv="Content-Type" content="text/html; charset={encoding}" />
<link rel="stylesheet" type="text/css" href="calendar.css" />
<title>Calendar for 2004</title>
</head>
<body>
-<table border="0" cellpadding="0" cellspacing="0" class="year">
-<tr><th colspan="3" class="year">2004</th></tr><tr><td><table border="0" cellpadding="0" cellspacing="0" class="month">
-<tr><th colspan="7" class="month">January</th></tr>
+<table border="0" cellpadding="0" cellspacing="0" class="{year}">
+<tr><th colspan="3" class="{year}">2004</th></tr><tr><td><table border="0" cellpadding="0" cellspacing="0" class="{month}">
+<tr><th colspan="7" class="{month}">January</th></tr>
<tr><th class="mon">Mon</th><th class="tue">Tue</th><th class="wed">Wed</th><th class="thu">Thu</th><th class="fri">Fri</th><th class="sat">Sat</th><th class="sun">Sun</th></tr>
<tr><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="thu">1</td><td class="fri">2</td><td class="sat">3</td><td class="sun">4</td></tr>
<tr><td class="mon">5</td><td class="tue">6</td><td class="wed">7</td><td class="thu">8</td><td class="fri">9</td><td class="sat">10</td><td class="sun">11</td></tr>
@@ -77,8 +80,8 @@ result_2004_html = """\
<tr><td class="mon">19</td><td class="tue">20</td><td class="wed">21</td><td class="thu">22</td><td class="fri">23</td><td class="sat">24</td><td class="sun">25</td></tr>
<tr><td class="mon">26</td><td class="tue">27</td><td class="wed">28</td><td class="thu">29</td><td class="fri">30</td><td class="sat">31</td><td class="noday">&nbsp;</td></tr>
</table>
-</td><td><table border="0" cellpadding="0" cellspacing="0" class="month">
-<tr><th colspan="7" class="month">February</th></tr>
+</td><td><table border="0" cellpadding="0" cellspacing="0" class="{month}">
+<tr><th colspan="7" class="{month}">February</th></tr>
<tr><th class="mon">Mon</th><th class="tue">Tue</th><th class="wed">Wed</th><th class="thu">Thu</th><th class="fri">Fri</th><th class="sat">Sat</th><th class="sun">Sun</th></tr>
<tr><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="sun">1</td></tr>
<tr><td class="mon">2</td><td class="tue">3</td><td class="wed">4</td><td class="thu">5</td><td class="fri">6</td><td class="sat">7</td><td class="sun">8</td></tr>
@@ -86,8 +89,8 @@ result_2004_html = """\
<tr><td class="mon">16</td><td class="tue">17</td><td class="wed">18</td><td class="thu">19</td><td class="fri">20</td><td class="sat">21</td><td class="sun">22</td></tr>
<tr><td class="mon">23</td><td class="tue">24</td><td class="wed">25</td><td class="thu">26</td><td class="fri">27</td><td class="sat">28</td><td class="sun">29</td></tr>
</table>
-</td><td><table border="0" cellpadding="0" cellspacing="0" class="month">
-<tr><th colspan="7" class="month">March</th></tr>
+</td><td><table border="0" cellpadding="0" cellspacing="0" class="{month}">
+<tr><th colspan="7" class="{month}">March</th></tr>
<tr><th class="mon">Mon</th><th class="tue">Tue</th><th class="wed">Wed</th><th class="thu">Thu</th><th class="fri">Fri</th><th class="sat">Sat</th><th class="sun">Sun</th></tr>
<tr><td class="mon">1</td><td class="tue">2</td><td class="wed">3</td><td class="thu">4</td><td class="fri">5</td><td class="sat">6</td><td class="sun">7</td></tr>
<tr><td class="mon">8</td><td class="tue">9</td><td class="wed">10</td><td class="thu">11</td><td class="fri">12</td><td class="sat">13</td><td class="sun">14</td></tr>
@@ -95,8 +98,8 @@ result_2004_html = """\
<tr><td class="mon">22</td><td class="tue">23</td><td class="wed">24</td><td class="thu">25</td><td class="fri">26</td><td class="sat">27</td><td class="sun">28</td></tr>
<tr><td class="mon">29</td><td class="tue">30</td><td class="wed">31</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td></tr>
</table>
-</td></tr><tr><td><table border="0" cellpadding="0" cellspacing="0" class="month">
-<tr><th colspan="7" class="month">April</th></tr>
+</td></tr><tr><td><table border="0" cellpadding="0" cellspacing="0" class="{month}">
+<tr><th colspan="7" class="{month}">April</th></tr>
<tr><th class="mon">Mon</th><th class="tue">Tue</th><th class="wed">Wed</th><th class="thu">Thu</th><th class="fri">Fri</th><th class="sat">Sat</th><th class="sun">Sun</th></tr>
<tr><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="thu">1</td><td class="fri">2</td><td class="sat">3</td><td class="sun">4</td></tr>
<tr><td class="mon">5</td><td class="tue">6</td><td class="wed">7</td><td class="thu">8</td><td class="fri">9</td><td class="sat">10</td><td class="sun">11</td></tr>
@@ -104,8 +107,8 @@ result_2004_html = """\
<tr><td class="mon">19</td><td class="tue">20</td><td class="wed">21</td><td class="thu">22</td><td class="fri">23</td><td class="sat">24</td><td class="sun">25</td></tr>
<tr><td class="mon">26</td><td class="tue">27</td><td class="wed">28</td><td class="thu">29</td><td class="fri">30</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td></tr>
</table>
-</td><td><table border="0" cellpadding="0" cellspacing="0" class="month">
-<tr><th colspan="7" class="month">May</th></tr>
+</td><td><table border="0" cellpadding="0" cellspacing="0" class="{month}">
+<tr><th colspan="7" class="{month}">May</th></tr>
<tr><th class="mon">Mon</th><th class="tue">Tue</th><th class="wed">Wed</th><th class="thu">Thu</th><th class="fri">Fri</th><th class="sat">Sat</th><th class="sun">Sun</th></tr>
<tr><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="sat">1</td><td class="sun">2</td></tr>
<tr><td class="mon">3</td><td class="tue">4</td><td class="wed">5</td><td class="thu">6</td><td class="fri">7</td><td class="sat">8</td><td class="sun">9</td></tr>
@@ -114,8 +117,8 @@ result_2004_html = """\
<tr><td class="mon">24</td><td class="tue">25</td><td class="wed">26</td><td class="thu">27</td><td class="fri">28</td><td class="sat">29</td><td class="sun">30</td></tr>
<tr><td class="mon">31</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td></tr>
</table>
-</td><td><table border="0" cellpadding="0" cellspacing="0" class="month">
-<tr><th colspan="7" class="month">June</th></tr>
+</td><td><table border="0" cellpadding="0" cellspacing="0" class="{month}">
+<tr><th colspan="7" class="{month}">June</th></tr>
<tr><th class="mon">Mon</th><th class="tue">Tue</th><th class="wed">Wed</th><th class="thu">Thu</th><th class="fri">Fri</th><th class="sat">Sat</th><th class="sun">Sun</th></tr>
<tr><td class="noday">&nbsp;</td><td class="tue">1</td><td class="wed">2</td><td class="thu">3</td><td class="fri">4</td><td class="sat">5</td><td class="sun">6</td></tr>
<tr><td class="mon">7</td><td class="tue">8</td><td class="wed">9</td><td class="thu">10</td><td class="fri">11</td><td class="sat">12</td><td class="sun">13</td></tr>
@@ -123,8 +126,8 @@ result_2004_html = """\
<tr><td class="mon">21</td><td class="tue">22</td><td class="wed">23</td><td class="thu">24</td><td class="fri">25</td><td class="sat">26</td><td class="sun">27</td></tr>
<tr><td class="mon">28</td><td class="tue">29</td><td class="wed">30</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td></tr>
</table>
-</td></tr><tr><td><table border="0" cellpadding="0" cellspacing="0" class="month">
-<tr><th colspan="7" class="month">July</th></tr>
+</td></tr><tr><td><table border="0" cellpadding="0" cellspacing="0" class="{month}">
+<tr><th colspan="7" class="{month}">July</th></tr>
<tr><th class="mon">Mon</th><th class="tue">Tue</th><th class="wed">Wed</th><th class="thu">Thu</th><th class="fri">Fri</th><th class="sat">Sat</th><th class="sun">Sun</th></tr>
<tr><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="thu">1</td><td class="fri">2</td><td class="sat">3</td><td class="sun">4</td></tr>
<tr><td class="mon">5</td><td class="tue">6</td><td class="wed">7</td><td class="thu">8</td><td class="fri">9</td><td class="sat">10</td><td class="sun">11</td></tr>
@@ -132,8 +135,8 @@ result_2004_html = """\
<tr><td class="mon">19</td><td class="tue">20</td><td class="wed">21</td><td class="thu">22</td><td class="fri">23</td><td class="sat">24</td><td class="sun">25</td></tr>
<tr><td class="mon">26</td><td class="tue">27</td><td class="wed">28</td><td class="thu">29</td><td class="fri">30</td><td class="sat">31</td><td class="noday">&nbsp;</td></tr>
</table>
-</td><td><table border="0" cellpadding="0" cellspacing="0" class="month">
-<tr><th colspan="7" class="month">August</th></tr>
+</td><td><table border="0" cellpadding="0" cellspacing="0" class="{month}">
+<tr><th colspan="7" class="{month}">August</th></tr>
<tr><th class="mon">Mon</th><th class="tue">Tue</th><th class="wed">Wed</th><th class="thu">Thu</th><th class="fri">Fri</th><th class="sat">Sat</th><th class="sun">Sun</th></tr>
<tr><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="sun">1</td></tr>
<tr><td class="mon">2</td><td class="tue">3</td><td class="wed">4</td><td class="thu">5</td><td class="fri">6</td><td class="sat">7</td><td class="sun">8</td></tr>
@@ -142,8 +145,8 @@ result_2004_html = """\
<tr><td class="mon">23</td><td class="tue">24</td><td class="wed">25</td><td class="thu">26</td><td class="fri">27</td><td class="sat">28</td><td class="sun">29</td></tr>
<tr><td class="mon">30</td><td class="tue">31</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td></tr>
</table>
-</td><td><table border="0" cellpadding="0" cellspacing="0" class="month">
-<tr><th colspan="7" class="month">September</th></tr>
+</td><td><table border="0" cellpadding="0" cellspacing="0" class="{month}">
+<tr><th colspan="7" class="{month}">September</th></tr>
<tr><th class="mon">Mon</th><th class="tue">Tue</th><th class="wed">Wed</th><th class="thu">Thu</th><th class="fri">Fri</th><th class="sat">Sat</th><th class="sun">Sun</th></tr>
<tr><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="wed">1</td><td class="thu">2</td><td class="fri">3</td><td class="sat">4</td><td class="sun">5</td></tr>
<tr><td class="mon">6</td><td class="tue">7</td><td class="wed">8</td><td class="thu">9</td><td class="fri">10</td><td class="sat">11</td><td class="sun">12</td></tr>
@@ -151,8 +154,8 @@ result_2004_html = """\
<tr><td class="mon">20</td><td class="tue">21</td><td class="wed">22</td><td class="thu">23</td><td class="fri">24</td><td class="sat">25</td><td class="sun">26</td></tr>
<tr><td class="mon">27</td><td class="tue">28</td><td class="wed">29</td><td class="thu">30</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td></tr>
</table>
-</td></tr><tr><td><table border="0" cellpadding="0" cellspacing="0" class="month">
-<tr><th colspan="7" class="month">October</th></tr>
+</td></tr><tr><td><table border="0" cellpadding="0" cellspacing="0" class="{month}">
+<tr><th colspan="7" class="{month}">October</th></tr>
<tr><th class="mon">Mon</th><th class="tue">Tue</th><th class="wed">Wed</th><th class="thu">Thu</th><th class="fri">Fri</th><th class="sat">Sat</th><th class="sun">Sun</th></tr>
<tr><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="fri">1</td><td class="sat">2</td><td class="sun">3</td></tr>
<tr><td class="mon">4</td><td class="tue">5</td><td class="wed">6</td><td class="thu">7</td><td class="fri">8</td><td class="sat">9</td><td class="sun">10</td></tr>
@@ -160,8 +163,8 @@ result_2004_html = """\
<tr><td class="mon">18</td><td class="tue">19</td><td class="wed">20</td><td class="thu">21</td><td class="fri">22</td><td class="sat">23</td><td class="sun">24</td></tr>
<tr><td class="mon">25</td><td class="tue">26</td><td class="wed">27</td><td class="thu">28</td><td class="fri">29</td><td class="sat">30</td><td class="sun">31</td></tr>
</table>
-</td><td><table border="0" cellpadding="0" cellspacing="0" class="month">
-<tr><th colspan="7" class="month">November</th></tr>
+</td><td><table border="0" cellpadding="0" cellspacing="0" class="{month}">
+<tr><th colspan="7" class="{month}">November</th></tr>
<tr><th class="mon">Mon</th><th class="tue">Tue</th><th class="wed">Wed</th><th class="thu">Thu</th><th class="fri">Fri</th><th class="sat">Sat</th><th class="sun">Sun</th></tr>
<tr><td class="mon">1</td><td class="tue">2</td><td class="wed">3</td><td class="thu">4</td><td class="fri">5</td><td class="sat">6</td><td class="sun">7</td></tr>
<tr><td class="mon">8</td><td class="tue">9</td><td class="wed">10</td><td class="thu">11</td><td class="fri">12</td><td class="sat">13</td><td class="sun">14</td></tr>
@@ -169,8 +172,8 @@ result_2004_html = """\
<tr><td class="mon">22</td><td class="tue">23</td><td class="wed">24</td><td class="thu">25</td><td class="fri">26</td><td class="sat">27</td><td class="sun">28</td></tr>
<tr><td class="mon">29</td><td class="tue">30</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td></tr>
</table>
-</td><td><table border="0" cellpadding="0" cellspacing="0" class="month">
-<tr><th colspan="7" class="month">December</th></tr>
+</td><td><table border="0" cellpadding="0" cellspacing="0" class="{month}">
+<tr><th colspan="7" class="{month}">December</th></tr>
<tr><th class="mon">Mon</th><th class="tue">Tue</th><th class="wed">Wed</th><th class="thu">Thu</th><th class="fri">Fri</th><th class="sat">Sat</th><th class="sun">Sun</th></tr>
<tr><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="wed">1</td><td class="thu">2</td><td class="fri">3</td><td class="sat">4</td><td class="sun">5</td></tr>
<tr><td class="mon">6</td><td class="tue">7</td><td class="wed">8</td><td class="thu">9</td><td class="fri">10</td><td class="sat">11</td><td class="sun">12</td></tr>
@@ -327,9 +330,12 @@ class OutputTestCase(unittest.TestCase):
def check_htmlcalendar_encoding(self, req, res):
cal = calendar.HTMLCalendar()
+ format_ = default_format.copy()
+ format_["encoding"] = req or 'utf-8'
+ output = cal.formatyearpage(2004, encoding=req)
self.assertEqual(
- cal.formatyearpage(2004, encoding=req),
- (result_2004_html % {'e': res}).encode(res)
+ output,
+ result_2004_html.format(**format_).encode(res)
)
def test_output(self):
@@ -825,7 +831,7 @@ class CommandLineTestCase(unittest.TestCase):
def test_html_output_year_encoding(self):
stdout = self.run_ok('-t', 'html', '--encoding', 'ascii', '2004')
self.assertEqual(stdout,
- (result_2004_html % {'e': 'ascii'}).encode('ascii'))
+ result_2004_html.format(**default_format).encode('ascii'))
def test_html_output_year_css(self):
self.assertFailure('-t', 'html', '-c')
@@ -844,5 +850,47 @@ class MiscTestCase(unittest.TestCase):
support.check__all__(self, calendar, blacklist=blacklist)
+class TestSubClassingCase(unittest.TestCase):
+
+ def setUp(self):
+
+ class CustomHTMLCal(calendar.HTMLCalendar):
+ cssclasses = [style + " text-nowrap" for style in
+ calendar.HTMLCalendar.cssclasses]
+ cssclasses_weekday_head = ["red", "blue", "green", "lilac",
+ "yellow", "orange", "pink"]
+ cssclass_month_head = "text-center month-head"
+ cssclass_month = "text-center month"
+ cssclass_year = "text-italic "
+ cssclass_year_head = "lead "
+
+ self.cal = CustomHTMLCal()
+
+ def test_formatmonthname(self):
+ self.assertIn('class="text-center month-head"',
+ self.cal.formatmonthname(2017, 5))
+
+ def test_formatmonth(self):
+ self.assertIn('class="text-center month"',
+ self.cal.formatmonth(2017, 5))
+
+ def test_formatweek(self):
+ weeks = self.cal.monthdays2calendar(2017, 5)
+ self.assertIn('class="wed text-nowrap"', self.cal.formatweek(weeks[0]))
+
+ def test_formatweek_head(self):
+ header = self.cal.formatweekheader()
+ for color in self.cal.cssclasses_weekday_head:
+ self.assertIn('<th class="%s">' % color, header)
+
+ def test_format_year(self):
+ self.assertIn(
+ ('<table border="0" cellpadding="0" cellspacing="0" class="%s">' %
+ self.cal.cssclass_year), self.cal.formatyear(2017))
+
+ def test_format_year_head(self):
+ self.assertIn('<tr><th colspan="%d" class="%s">%s</th></tr>' % (
+ 3, self.cal.cssclass_year_head, 2017), self.cal.formatyear(2017))
+
if __name__ == "__main__":
unittest.main()
diff --git a/Misc/ACKS b/Misc/ACKS
index 3000bc3..85d2fc6 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -1556,6 +1556,7 @@ Jeremy Thurgood
Eric Tiedemann
July Tikhonov
Tracy Tims
+Oz Tiram
Oren Tirosh
Tim Tisdall
Jason Tishler