Cleanup work to make NarrativeWeb and WebCal. With this they should

produce webpages similar to grams 3.x, but under the hood there are a
lot of changes. There are new and improved CSS files and images. And
these are shares between NarrativeWeb and WebCal.
  *** Many thanks to Jason and Rob. ***


svn: r11180
This commit is contained in:
Kees Bakker 2008-10-21 18:57:42 +00:00
parent e08fee7d29
commit 0ead404135
23 changed files with 8963 additions and 2845 deletions

View File

@ -12,6 +12,12 @@ dist_pkgdata_DATA = \
system_filters.xml \ system_filters.xml \
tips.xml\ tips.xml\
lds.xml\ lds.xml\
Web_Basic-Ash.css\
Web_Basic-Cypress.css\
Web_Basic-Lilac.css\
Web_Basic-Peach.css\
Web_Basic-Spruce.css\
Web_Mainz.css\
Web_Evergreen.css\ Web_Evergreen.css\
Web_Nebraska.css\ Web_Nebraska.css\
Web_Print-Default.css\ Web_Print-Default.css\

1114
src/data/Web_Basic-Ash.css Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

1114
src/data/Web_Basic-Lilac.css Normal file

File diff suppressed because it is too large Load Diff

1113
src/data/Web_Basic-Peach.css Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -203,10 +203,10 @@ a:hover {
*/ */
#header { #header {
width:100%; width:100%;
height:1cm; height:2cm;
padding:0 0 .9em 0; padding:0;
margin:0; margin:0;
background-color:#139400; background-color:#22822A;
border-top:solid 4px #D30; border-top:solid 4px #D30;
border-bottom:solid 2px #D30; border-bottom:solid 2px #D30;
} }
@ -253,10 +253,13 @@ p#user_header {
*/ */
#navigation { #navigation {
width:100%; width:100%;
height:35px; height:30px;
list-style-type:none; list-style-type:none;
text-align:center; text-align:center;
vertical-align:middle; vertical-align:middle;
font-size:10px;
margin:0;
padding:0;
background-color:#6AF364; background-color:#6AF364;
border-top:solid 4px #D30; border-top:solid 4px #D30;
border-bottom:solid 4px #D30; border-bottom:solid 4px #D30;
@ -265,6 +268,8 @@ p#user_header {
display:inline; display:inline;
width:2em; width:2em;
text-align:center; text-align:center;
font-size:10px;
padding:0;
margin:0; margin:0;
} }
#navigation ul li a { #navigation ul li a {
@ -281,12 +286,13 @@ p#user_header {
#navigation ul li#CurrentSection a { #navigation ul li#CurrentSection a {
border-right:solid 2px #D30; border-right:solid 2px #D30;
border-left:solid 2px #D30; border-left:solid 2px #D30;
border-top:solid 2px #D30; bborder-top:solid 4px #D30;
border-bottom:solid 2px #FAFAFA; border-bottom:solid 1px #FAFAFA;
font-family:Georgia, serif; font-family:Georgia, serif;
font-weight:bold; font-weight:bold;
font-style:italic; font-style:italic;
font-size:16px; font-size:16px;
padding:4px;
text-decoration:none; text-decoration:none;
background-color:#FAFAFA; background-color:#FAFAFA;
color:#426E40; color:#426E40;
@ -335,7 +341,7 @@ p#user_header {
color:#FAFAFA; color:#FAFAFA;
border:solid 1px #6AF364; border:solid 1px #6AF364;
} }
.calendar tbody tr.week5, .calendar tbody tr.week6 { .week3, .week4, .week5 {
border-bottom:solid 1px #000; border-bottom:solid 1px #000;
} }
.calendar tbody tr td { .calendar tbody tr td {
@ -413,8 +419,6 @@ p#user_header {
.highlight div.date { .highlight div.date {
background-color:#1E90FF; background-color:#1E90FF;
color:#FAFAFA; color:#FAFAFA;
font-weight:bold;
font-style:italic;
} }
/* /*
@ -1286,6 +1290,7 @@ div#pedigree {
height:1.5cm; height:1.5cm;
background-color:#139400; background-color:#139400;
color:#FAFAFA; color:#FAFAFA;
font-size:14px;
margin:0; margin:0;
padding:0; padding:0;
clear:both; clear:both;
@ -1298,15 +1303,14 @@ div#pedigree {
} }
#footer a:hover { #footer a:hover {
text-decoration:none; text-decoration:none;
background-color:#228B22; background-color:#426E40;
} }
#footer img { #footer img {
border:0; border:0;
margin:0; margin:0;
float:center; background:none;
} }
#footer p#createdate { #footer p#createdate {
font-size:.8em;
float:left; float:left;
width:40%; width:40%;
text-align:left; text-align:left;

1088
src/data/Web_Mainz.css Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -113,7 +113,7 @@ h4 {
color:#C47170; color:#C47170;
margin:0; margin:0;
padding:.2em 0 .2em 20px; padding:.2em 0 .2em 20px;
background-color:#FFF; background-color:#FAFAFA;
border-bottom:solid 1px #F33; border-bottom:solid 1px #F33;
} }
h5, h6 { h5, h6 {
@ -144,7 +144,7 @@ a {
} }
a:hover, a:active { a:hover, a:active {
background-color:#DD9091; background-color:#DD9091;
color:#FFF; color:#FAFAFA;
text-decoration:none; text-decoration:none;
} }
a:visited { a:visited {
@ -154,7 +154,7 @@ a:visited {
/* /*
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
Header/Navigation Styles Header Styles
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
*/ */
#header { #header {
@ -163,16 +163,14 @@ a:visited {
background-color:#D30; background-color:#D30;
height:2cm; height:2cm;
} }
#header h1 { #SiteTitle {
font-size:.7cm; font:italic .9cm #FAFAFA;
float:center; float:center;
text-align:center; text-align:center;
color:#FFF; color:#FAFAFA;
margin:0; margin:0 auto;
padding:0; padding:0;
}
#header h1#SiteTitle {
font-size:1cm;
} }
#header p { #header p {
font-weight:bold; font-weight:bold;
@ -185,19 +183,25 @@ a:visited {
float:right; float:right;
margin:10px; margin:10px;
padding:0; padding:0;
color:#FFF; color:#FAFAFA;
} }
#GRAMPSinfo a { #GRAMPSinfo a {
color:#FFF; color:#FAFAFA;
} }
.grampsid { .grampsid {
font:normal .8em/1.2em monospace; font:normal .8em/1.2em monospace;
color:#903; color:#903;
} }
/*
-------------------------------------------------------------------------------------------------
Navigation Elements
-------------------------------------------------------------------------------------------------
*/
#navigation { #navigation {
margin:0; margin:0;
padding:4px 0 0 0; background-color:#C1B398;
background-color:#F33;
} }
#navigation ul { #navigation ul {
list-style:none; list-style:none;
@ -219,25 +223,25 @@ a:visited {
font-weight:bold; font-weight:bold;
text-decoration:none; text-decoration:none;
margin:0; margin:0;
padding:5px 5px; padding:5px;
color:#FFF; color:#000;
} }
#navigation ul li a:hover { #navigation ul li a:hover {
background-color:#C47170; background-color:#C47170;
border-bottom:solid 1px #5D835F; COLOR:#fafafa;
} }
#navigation ul li#CurrentSection a { #navigation ul li#CurrentSection a {
padding-bottom:4px; font-size:16px;
border-top:solid 1px #F33; border-top:solid 1px #F33;
border-right:solid 1px #F6F2EE; border-right:solid 1px #F6F2EE;
border-left:solid 1px #F6F2EE; border-left:solid 1px #F6F2EE;
border-bottom:solid 1px #F6F2EE; border-bottom:solid 1px #F6F2EE;
background-color:#FFF; background-color:#FAFAFA;
color:#903; color:#903;
} }
#navigation ul li#CurrentSection a:hover { #navigation ul li#CurrentSection a:hover {
background-color:#000; background-color:#000;
color:#FFF; color:#FAFAFA;
} }
/* /*
@ -268,13 +272,13 @@ a:visited {
line-height:100%; line-height:100%;
text-transform:none; text-transform:none;
padding:.3em 0 .2em 0; padding:.3em 0 .2em 0;
background-color:#FFF; background-color:#FAFAFA;
color:#C47170; color:#C47170;
} }
.calendar thead tr th.weekend, .calendar thead tr th.weekday { .calendar thead tr th.weekend, .calendar thead tr th.weekday {
border:solid 1px #000; border:solid 1px #000;
background-color:#C47170; background-color:#C47170;
color:#FFF; color:#FAFAFA;
} }
.calendar thead tr th.saturday, .calendar thead tr th.sunday { } .calendar thead tr th.saturday, .calendar thead tr th.sunday { }
@ -287,31 +291,22 @@ a:visited {
border-color:#903; border-color:#903;
} }
.calendar tbody tr td.weekday { .calendar tbody tr td.weekday {
background-color:#FFF; background-color:#FAFAFA;
} }
.calendar tbody tr td.weekend { .calendar tbody tr td.weekend {
background-color:#F6F2EE; background-color:#CDEFAA;
} }
.calendar tbody tr td.saturday { .calendar tbody tr td.saturday {
border-right:solid 1px #903; border-right:solid 1px #000;
} }
.calendar tbody tr td.sunday { .calendar tbody tr td.sunday {
border-left:solid 1px #903; border-left:solid 1px #000;
} }
.calendar tbody tr td#emptyDays { .calendar tbody tr td#emptyDays {
background-color:#D3D3D3; background-color:#D3D3D3;
line-height:100%; line-height:100%;
border:solid 1px #903; border:solid 1px #903;
} }
.calendar tbody tr td:first-child {
border-left:none;
}
.calendar tbody tr:first-child td {
border-top:none;
}
.calendar tbody tr td:first-child, .calendar tbody tr td:last-child {
background-color:#F6F2EE;
}
.calendar tbody tr td ul { .calendar tbody tr td ul {
list-style:none; list-style:none;
font-family:sans-serif; font-family:sans-serif;
@ -324,10 +319,7 @@ a:visited {
width:92%; width:92%;
margin:0 4%; margin:0 4%;
padding:.2em 0 .3em 0; padding:.2em 0 .3em 0;
border-top:dashed 1px #C1B398; border-top:dashed 1px #000;
}
.calendar tbody tr td ul li:first-child {
border:none;
} }
.calendar tbody tr td ul li em { .calendar tbody tr td ul li em {
font-style:normal; font-style:normal;
@ -345,7 +337,7 @@ a:visited {
vertical-align:middle; vertical-align:middle;
font-size:.8em; font-size:.8em;
height:1cm; height:1cm;
color:#FFF; color:#FAFAFA;
} }
.date { .date {
float:right; float:right;
@ -354,19 +346,19 @@ a:visited {
font-size:1.2em; font-size:1.2em;
line-height:100%; line-height:100%;
text-align:center; text-align:center;
color:#FFF; color:#000;
margin:0 0 0 .5em; margin:0 0 0 .5em;
padding:.2em 0; padding:.2em 0;
background-color:#F33; background-color:#C1B900;
} }
.highlight div.date { .highlight div.date {
background-color:#1E90FF; background-color:#1E90FF;
color:#FFF; color:#FAFAFA;
} }
.next div.date, .previous div.date { .next span.date, .previous span.date {
background-color:#903; background-color:#903;
color:#FFF; color:#FAFAFA;
} }
/* /*
@ -460,12 +452,12 @@ table.surnamelist tbody tr td.ColumnSurname {
} }
table.surnamelist thead tr th.ColumnSurname { table.surnamelist thead tr th.ColumnSurname {
background-color:#DD9091; background-color:#DD9091;
color:#FFF; color:#FAFAFA;
padding:0; padding:0;
} }
table.surnamelist thead tr th.ColumnQuantity { table.surnamelist thead tr th.ColumnQuantity {
background-color:#DD9091; background-color:#DD9091;
color:#FFF; color:#FAFAFA;
width:40%; width:40%;
padding:0; padding:0;
} }
@ -475,14 +467,14 @@ table.infolist thead tr th.ColumnSurname a, table.infolist thead tr th.ColumnQua
} }
table#SortByName thead tr th.ColumnSurname a, table#SortByCount thead tr th.ColumnQuantity a { table#SortByName thead tr th.ColumnSurname a, table#SortByCount thead tr th.ColumnQuantity a {
background-color:#DD9091; background-color:#DD9091;
color:#FFF; color:#FAFAFA;
} }
table#SortByName thead tr th.ColumnSurname a:after, table#SortByCount thead tr th.ColumnQuantity a:after { table#SortByName thead tr th.ColumnSurname a:after, table#SortByCount thead tr th.ColumnQuantity a:after {
content:" ↓"; content:" ↓";
} }
table.infolist tbody tr td.ColumnSurname { table.infolist tbody tr td.ColumnSurname {
padding:0; padding:0;
background-color:#FFF; background-color:#FAFAFA;
} }
table.infolist tbody tr td.ColumnSurname a { table.infolist tbody tr td.ColumnSurname a {
padding:.1em 10px; padding:.1em 10px;
@ -529,7 +521,7 @@ table.surname thead tr th.ColumnParents, table.surname tbody tr td.ColumnParents
#Individuals table.individuallist tbody tr td a:hover { #Individuals table.individuallist tbody tr td a:hover {
background-color:#DD9091; background-color:#DD9091;
text-decoration:none; text-decoration:none;
color:#FFF; color:#FAFAFA;
} }
table.individuallist tbody tr td.ColumnSurname { table.individuallist tbody tr td.ColumnSurname {
background:none; background:none;
@ -540,7 +532,7 @@ table.individuallist tbody tr td.ColumnSurname a:hover, table.individuallist tbo
background:none; background:none;
} }
table.individuallist tbody tr td.ColumnName { table.individuallist tbody tr td.ColumnName {
background-color:#FFF; background-color:#FAFAFA;
padding:0; padding:0;
} }
table.individuallist tbody tr td.ColumnName a { table.individuallist tbody tr td.ColumnName a {
@ -607,7 +599,7 @@ table.individuallist tbody tr td.ColumnName a:hover { }
padding:.1em 10px .3em 10px; padding:.1em 10px .3em 10px;
} }
#Gallery table.infolist tbody tr td.ColumnName a:hover { #Gallery table.infolist tbody tr td.ColumnName a:hover {
color:#FFF; color:#FAFAFA;
} }
#GalleryNav { #GalleryNav {
font-size:.8em; font-size:.8em;
@ -618,12 +610,12 @@ table.individuallist tbody tr td.ColumnName a:hover { }
#GalleryNav a { #GalleryNav a {
font-weight:bold; font-weight:bold;
text-decoration:none; text-decoration:none;
background-color:#FFF; background-color:#FAFAFA;
border:solid 1px #DD909A; border:solid 1px #DD909A;
} }
#GalleryNav a:hover { #GalleryNav a:hover {
background-color:#DD9091; background-color:#DD9091;
color:#FFF; color:#FAFAFA;
} }
#GalleryNav a#Previous { #GalleryNav a#Previous {
padding:.4em .7em .3em .7em; padding:.4em .7em .3em .7em;
@ -663,7 +655,7 @@ table.individuallist tbody tr td.ColumnName a:hover { }
margin-top:1.5em; margin-top:1.5em;
margin-bottom:0; margin-bottom:0;
padding-bottom:0; padding-bottom:0;
background-color:#FFF; background-color:#FAFAFA;
border-style:solid; border-style:solid;
border-width:8px 0 0 0; border-width:8px 0 0 0;
border-color:#DD9091; border-color:#DD9091;
@ -698,7 +690,7 @@ table.individuallist tbody tr td.ColumnName a:hover { }
} }
#streetaddress { #streetaddress {
background-color:#208BAA; background-color:#208BAA;
color:#FFF; color:#FAFAFA;
width:85%; width:85%;
} }
#city:after { #city:after {
@ -975,7 +967,7 @@ div#sourcerefs ol li ol {
position:relative; position:relative;
z-index:10; z-index:10;
display:block; display:block;
color:#FFF; color:#FAFAFA;
text-align:center; text-align:center;
vertical-align:middle; vertical-align:middle;
text-decoration:none; text-decoration:none;
@ -993,7 +985,7 @@ div#sourcerefs ol li ol {
margin:5px; margin:5px;
width:160px; width:160px;
padding:5px 5px 7px 5px; padding:5px 5px 7px 5px;
color:#FFF; color:#FAFAFA;
} }
.boxbg div:hover { .boxbg div:hover {
position:relative; position:relative;
@ -1002,38 +994,38 @@ div#sourcerefs ol li ol {
width:210px; width:210px;
padding:10px 4px 12px 4px; padding:10px 4px 12px 4px;
background-color:#153282; background-color:#153282;
color:#FFF; color:#FAFAFA;
} }
.boxbg div a:hover { .boxbg div a:hover {
position:relative; position:relative;
z-index:999; z-index:999;
font-size:1em; font-size:1em;
width:210px; width:210px;
color:#FFF; color:#FAFAFA;
} }
.male { .male {
background-color:#1E90FF; background-color:#1E90FF;
color:#FFF; color:#FAFAFA;
} }
.male div { .male div {
background-color:#1e90ff; background-color:#1e90ff;
color:#FFF; color:#FAFAFA;
} }
.female { .female {
background-color:#F3C; background-color:#F3C;
color:#FFF; color:#FAFAFA;
} }
.female div { .female div {
background-color:#F3C; background-color:#F3C;
color:#FFF; color:#FAFAFA;
} }
.unknown { .unknown {
background-color:#000; background-color:#000;
color:#FFF; color:#FAFAFA;
} }
.unknown div { .unknown div {
background-color:#000; background-color:#000;
color:#FFF; color:#FAFAFA;
} }
.shadow { .shadow {
@ -1090,7 +1082,7 @@ div#sourcerefs ol li ol {
#footer p#copyright { #footer p#copyright {
margin:1em; margin:1em;
float:right; float:right;
color:#FFF; color:#FAFAFA;
} }
#footer p#copyright p { #footer p#copyright p {
margin:0; margin:0;
@ -1102,19 +1094,19 @@ div#sourcerefs ol li ol {
#footer p#createdate { #footer p#createdate {
float:left; float:left;
margin-left:10px; margin-left:10px;
color:#FFF; color:#FAFAFA;
} }
#footer p#createdate a { #footer p#createdate a {
color:#FFF; color:#FAFAFA;
text-decoration:none; text-decoration:none;
} }
#footer p#quality { #footer p#quality {
float:center; float:center;
text-align:center; text-align:center;
color:#FFF; color:#FAFAFA;
} }
#footer p#quality a { #footer p#quality a {
color:#FFF; color:#FAFAFA;
text-decoration:none; text-decoration:none;
} }
#footer p#quality img { #footer p#quality img {

File diff suppressed because it is too large Load Diff

View File

@ -70,10 +70,14 @@ dist_pkgdata_DATA = \
document.png\ document.png\
image-missing.png\ image-missing.png\
favicon.ico\ favicon.ico\
NWeb_Mainz_Bkgd.png\ Web_Mainz_Bkgd.png\
NWeb_Mainz_Header.png\ Web_Mainz_Header.png\
NWeb_Mainz_MidLight.png\ Web_Mainz_MidLight.png\
NWeb_Mainz_Mid.png\ Web_Mainz_Mid.png\
Web_Gender_Male.png\
Web_Gender_Female.png\
Web_Gender_MaleFFF.png\
Web_Gender_FemaleFFF.png\
arrow102.gif\ arrow102.gif\
arrow231.gif arrow231.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 457 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 436 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 454 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 449 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 334 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

View File

@ -6,6 +6,7 @@
# Copyright (C) 2007 Gary Burton <gary.burton@zen.co.uk> # Copyright (C) 2007 Gary Burton <gary.burton@zen.co.uk>
# Copyright (C) 2007-2008 Stephane Charette <stephanecharette@gmail.com> # Copyright (C) 2007-2008 Stephane Charette <stephanecharette@gmail.com>
# Copyright (C) 2008 Brian G. Matherly # Copyright (C) 2008 Brian G. Matherly
# Copyright (C) 2008 Jason M. Simanek <jason@bohemianalps.com>
# #
# This program is free software; you can redistribute it and/or modify # This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by # it under the terms of the GNU General Public License as published by
@ -114,9 +115,14 @@ _XOFFSET = 5
# stylesheets. # stylesheets.
_CSS_FILES = [ _CSS_FILES = [
# First is used as default selection. # First is used as default selection.
[_("Evergreen"), 'Web_Evergreen.css'], [_("Basic-Ash"), 'Web_Basic-Ash.css'],
[_("Nebraska"), 'Web_Nebraska.css'], [_("Basic-Cypress"), 'Web_Basic-Cypress.css'],
[_("Simply Red"), 'Web_Simply-Red.css'], [_("Basic-Lilac"), 'Web_Basic-Lilac.css'],
[_("Basic-Peach"), 'Web_Basic-Peach.css'],
[_("Basic-Spruce"), 'Web_Basic-Spruce.css'],
[_("Mainz"), 'Web_Mainz.css'],
[_("Nebraska"), 'Web_Nebraska.css'],
[_("Visually Impaired"), 'Web_Visually.css'],
[_("No style sheet"), ''], [_("No style sheet"), ''],
] ]
@ -359,10 +365,7 @@ class BasePage:
of.write('</head>\n\n') of.write('</head>\n\n')
of.write('<body id="NarrativeWeb">\n') # Terminated in write_footer() of.write('<body id="NarrativeWeb">\n') # Terminated in write_footer()
of.write(' <div id="header">\n') of.write('<div id="header">\n')
# FIXME. Do we want an empty GRAMPSinfo div below if no self.linkhome?
msg = ""
db = self.report.database db = self.report.database
if self.linkhome: if self.linkhome:
@ -370,26 +373,24 @@ class BasePage:
if home_person: if home_person:
home_person_url = self.report.build_url_fname_html(home_person.handle, 'ppl', self.up) home_person_url = self.report.build_url_fname_html(home_person.handle, 'ppl', self.up)
home_person_name = home_person.get_primary_name().get_regular_name() home_person_name = home_person.get_primary_name().get_regular_name()
msg = _('Created for <a href="%s">%s</a>') % (home_person_url, home_person_name)
of.write(' <div id="GRAMPSinfo">%s</div>\n' % msg) of.write('\t<h1 id="SiteTitle">%s</h1>\n' % html_escape(self.title_str))
of.write(' <h1 id="SiteTitle">%s</h1>\n' % html_escape(self.title_str))
header = self.report.options['headernote'] header = self.report.options['headernote']
if header: if header:
note = db.get_note_from_gramps_id(header) note = db.get_note_from_gramps_id(header)
of.write(' <p id="user_header">') of.write('\t<p id="user_header">')
of.write(note.get()) of.write(note.get())
of.write('</p>\n') of.write('</p>\n')
of.write('\t</div>\n') of.write('</div>\n\n')
# Begin Navigation Menu # Begin Navigation Menu
of.write(' <div id="navigation">\n') of.write('<div id="navigation">\n')
of.write(' <ul>\n') of.write('\t<ul>\n')
self.display_nav_links(of, title) self.display_nav_links(of, title)
of.write(' </ul>\n') of.write('\t</ul>\n')
of.write(' </div>\n') # End Navigation Menu of.write('</div>\n') # End Navigation Menu
divid = '' divid = ''
if content_divid: if content_divid:
@ -666,9 +667,12 @@ class BasePage:
of.write('\t</div>\n') of.write('\t</div>\n')
def person_link(self, of, url, name, gid=None, thumbnailUrl=None): def person_link(self, of, url, name, gid=None, thumbnailUrl=None):
of.write('<a href="%s">' % url) of.write('<a href="%s"' % url)
if not thumbnailUrl:
of.write(' class="noThumb"')
of.write('>')
if thumbnailUrl: if thumbnailUrl:
of.write('<img src="%s"><br />' % thumbnailUrl) of.write('<span class="thumbnail"><img src="%s" width="" height="" alt="Image of %s" /></span>' % (thumbnailUrl, name))
of.write('%s' % name) of.write('%s' % name)
if not self.noid and gid: if not self.noid and gid:
of.write('&nbsp;<span class="grampsid">[%s]</span>' % gid) of.write('&nbsp;<span class="grampsid">[%s]</span>' % gid)
@ -1772,16 +1776,16 @@ class IndividualPage(BasePage):
xoff = _XOFFSET+col*(_WIDTH+_HGAP) xoff = _XOFFSET+col*(_WIDTH+_HGAP)
sex = person.get_gender() sex = person.get_gender()
if sex == gen.lib.Person.MALE: if sex == gen.lib.Person.MALE:
divclass = "boxbg male" divclass = "male"
elif sex == gen.lib.Person.FEMALE: elif sex == gen.lib.Person.FEMALE:
divclass = "boxbg female" divclass = "female"
else: else:
divclass = "boxbg unknown" divclass = "unknown"
of.write('\t\t\t<div class="%s" style="top: %dpx; left: %dpx;">\n' % (divclass, top, xoff+1)) of.write('\t\t\t<div class="boxbg %s AncCol%s" style="top: %dpx; left: %dpx;">\n' % (divclass, col, top, xoff+1))
of.write('\t\t\t\t<div class="box">') of.write('\t\t\t\t')
if person.handle in self.ind_list: if person.handle in self.ind_list:
thumbnailUrl = None thumbnailUrl = None
if self.use_gallery and col < 3: if self.use_gallery and col < 5:
photolist = person.get_media_list() photolist = person.get_media_list()
if photolist: if photolist:
photo_handle = photolist[0].get_reference_handle() photo_handle = photolist[0].get_reference_handle()
@ -1795,8 +1799,7 @@ class IndividualPage(BasePage):
self.person_link(of, url, person_name, thumbnailUrl=thumbnailUrl) self.person_link(of, url, person_name, thumbnailUrl=thumbnailUrl)
else: else:
of.write(_nd.display(person)) of.write(_nd.display(person))
of.write('</div>\n') of.write('\n\t\t\t</div>\n')
of.write('\t\t\t</div>\n')
of.write('\t\t\t<div class="shadow" style="top: %dpx; left: %dpx;"></div>\n' % (top+_SHADOW, xoff+_SHADOW)) of.write('\t\t\t<div class="shadow" style="top: %dpx; left: %dpx;"></div>\n' % (top+_SHADOW, xoff+_SHADOW))
def extend_line(self, of, y0, x0): def extend_line(self, of, y0, x0):
@ -2012,8 +2015,10 @@ class IndividualPage(BasePage):
# table head # table head
of.write('\t\t\t<thead>\n') of.write('\t\t\t<thead>\n')
of.write('\t\t\t\t<tr>\n')
for h in (_('event|Type'), _('Date'), _('Place'), _('Description'), _('Notes')): for h in (_('event|Type'), _('Date'), _('Place'), _('Description'), _('Notes')):
of.write('\t\t\t\t<th>%s</th>' % h) of.write('\t\t\t\t\t<th>%s</th>\n' % h)
of.write('\t\t\t\t</tr>\n')
of.write('\t\t\t</thead>\n') of.write('\t\t\t</thead>\n')
of.write('\t\t\t<tbody>\n') of.write('\t\t\t<tbody>\n')
@ -2078,6 +2083,10 @@ class IndividualPage(BasePage):
done_first_note = False done_first_note = False
notelist = event.get_note_list() notelist = event.get_note_list()
notelist.extend(event_ref.get_note_list()) notelist.extend(event_ref.get_note_list())
if notelist:
of.write('\t\t\t\t\t\t<ol>\n')
else:
of.write('\t\t\t\t\t\t&nbsp;\n')
for notehandle in notelist: for notehandle in notelist:
note = db.get_note_from_handle(notehandle) note = db.get_note_from_handle(notehandle)
if note: if note:
@ -2088,11 +2097,9 @@ class IndividualPage(BasePage):
else: else:
# TODO. Decide what to do with multiline notes. # TODO. Decide what to do with multiline notes.
txt = u" ".join(note_text.split("\n")) txt = u" ".join(note_text.split("\n"))
if not done_first_note:
of.write('\t\t\t\t\t\t<ol>\n')
txt = txt or '&nbsp;' txt = txt or '&nbsp;'
of.write('\t\t\t\t\t\t\t<li>%s</li>\n' % txt) of.write('\t\t\t\t\t\t\t<li>%s</li>\n' % txt)
if done_first_note: if notelist:
of.write('\t\t\t\t\t\t</ol>\n') of.write('\t\t\t\t\t\t</ol>\n')
of.write('\t\t\t\t\t</td>\n') of.write('\t\t\t\t\t</td>\n')
@ -2497,9 +2504,9 @@ class IndividualPage(BasePage):
date = _dd.display(event.get_date_object()) date = _dd.display(event.get_date_object())
if date and place: if date and place:
text = _("%(date)s &nbsp; at &nbsp; %(place)s") % { 'date': date, 'place': place } text = _('%(date)s <span class="preposition">at</span> %(place)s') % { 'date': date, 'place': place }
elif place: elif place:
text = _("at &nbsp; %(place)s") % { 'place': place } text = _('<span class="preposition">at</span> %(place)s') % { 'place': place }
elif date: elif date:
text = date text = date
else: else:
@ -2704,10 +2711,10 @@ class NavWebReport(Report):
imgs = [] imgs = []
if self.css == "Web_Mainz.css": if self.css == "Web_Mainz.css":
# Copy Mainz Style Images # Copy Mainz Style Images
imgs += ["NWeb_Mainz_Bkgd.png", imgs += ["Web_Mainz_Bkgd.png",
"NWeb_Mainz_Header.png", "Web_Mainz_Header.png",
"NWeb_Mainz_Mid.png", "Web_Mainz_Mid.png",
"NWeb_Mainz_MidLight.png", "Web_Mainz_MidLight.png",
"document.png"] "document.png"]
# Copy the Creative Commons icon if the Creative Commons # Copy the Creative Commons icon if the Creative Commons
@ -2715,7 +2722,11 @@ class NavWebReport(Report):
if 0 < self.copyright < 7: if 0 < self.copyright < 7:
imgs += ["somerights20.gif"] imgs += ["somerights20.gif"]
imgs += ["favicon.ico"] imgs += ["favicon.ico",
"Web_Gender_Female.png",
"Web_Gender_FemaleFFF.png",
"Web_Gender_Male.png",
"Web_Gender_MaleFFF.png"]
for f in imgs: for f in imgs:
from_path = os.path.join(const.IMAGE_DIR, f) from_path = os.path.join(const.IMAGE_DIR, f)

View File

@ -103,10 +103,15 @@ _ARROW_GIF = "arrow102.gif"
# stylesheets. # stylesheets.
_CSS_FILES = [ _CSS_FILES = [
# First is used as default selection. # First is used as default selection.
[_("Evergreen"), 'Web_Evergreen.css'], [_("Basic-Ash"), 'Web_Basic-Ash.css'],
[_("Nebraska"), 'Web_Nebraska.css'], [_("Basic-Cypress"), 'Web_Basic-Cypress.css'],
[_("Simply Red"), 'Web_Simply-Red.css'], [_("Basic-Lilac"), 'Web_Basic-Lilac.css'],
[_("No style sheet"), ''], [_("Basic-Peach"), 'Web_Basic-Peach.css'],
[_("Basic-Spruce"), 'Web_Basic-Spruce.css'],
[_("Mainz"), 'Web_Mainz.css'],
[_("Nebraska"), 'Web_Nebraska.css'],
[_("Visually Impaired"), 'Web_Visually.css'],
[_("No style sheet"), ''],
] ]
_CHARACTER_SETS = [ _CHARACTER_SETS = [
@ -262,6 +267,7 @@ class WebCalReport(Report):
self.warn_dir = True # Only give warning once. self.warn_dir = True # Only give warning once.
self.has_arrow_gif = False # Set to True after copying to destination self.has_arrow_gif = False # Set to True after copying to destination
self.imgs = []
calendar.setfirstweekday(_dow_gramps2iso[self.start_dow]) calendar.setfirstweekday(_dow_gramps2iso[self.start_dow])
@ -406,6 +412,10 @@ class WebCalReport(Report):
fname = os.path.join(const.IMAGE_DIR, 'somerights20.gif') fname = os.path.join(const.IMAGE_DIR, 'somerights20.gif')
self.copy_file(fname, 'somerights20.gif', 'images') self.copy_file(fname, 'somerights20.gif', 'images')
for f in self.imgs:
from_path = os.path.join(const.IMAGE_DIR, f)
self.copy_file(from_path, f, "images")
def display_month_navs(self, of, currentsection, use_home=False): def display_month_navs(self, of, currentsection, use_home=False):
""" """
Will create and display the navigation menu bar Will create and display the navigation menu bar
@ -435,8 +445,8 @@ class WebCalReport(Report):
item = [('blankyear', _('Blank Calendar'), self.blankyear)] item = [('blankyear', _('Blank Calendar'), self.blankyear)]
navs.append(item) navs.append(item)
of.write(' <div id="navigation">\n') of.write('<div id="navigation">\n')
of.write(' <ul>\n') of.write('\t<ul>\n')
for item in navs: for item in navs:
for url_fname, nav_text, cond in item: for url_fname, nav_text, cond in item:
@ -466,16 +476,10 @@ class WebCalReport(Report):
url += self.ext url += self.ext
cs = cs and ' id="CurrentSection"' or '' cs = cs and ' id="CurrentSection"' or ''
of.write('\t\t<li%s><a href="%s">%s</a></li>\n' % (cs, url, nav_text))
of.write(' <li%s><a name="%s" href="%s">%s</a></li>\n' of.write('\t</ul>\n')
% (cs, url_fname, url, nav_text)) of.write('</div>\n\n')
of.write(' </ul>\n')
if self.multiyear:
of.write(' </div>\n')
else:
of.write(' </div>\n\n')
def display_year_navs(self, of, currentsection): def display_year_navs(self, of, currentsection):
""" """
@ -485,8 +489,8 @@ class WebCalReport(Report):
if not self.multiyear: if not self.multiyear:
return return
of.write(' <div id="navigation">\n') of.write('<div id="navigation">\n')
of.write(' <ul>\n') of.write('\t<ul>\n')
cols = 0 cols = 0
cal_year = self.start_year cal_year = self.start_year
while ((0 <= cols <= 25) and (self.start_year <= cal_year <= self.end_year)): while ((0 <= cols <= 25) and (self.start_year <= cal_year <= self.end_year)):
@ -518,8 +522,7 @@ class WebCalReport(Report):
# if True, highlight currentsection # if True, highlight currentsection
cs = cs and ' id="CurrentSection"' or '' cs = cs and ' id="CurrentSection"' or ''
of.write(' <li%s><a href="%s">%s</a></li>\n' of.write('\t\t<li%s><a href="%s">%s</a></li>\n' % (cs, url, str(cal_year)))
% (cs, url, str(cal_year)))
# increase year # increase year
cal_year += 1 cal_year += 1
@ -527,8 +530,8 @@ class WebCalReport(Report):
# increase column # increase column
cols += 1 cols += 1
of.write(' </ul>\n') of.write('\t</ul>\n')
of.write(' </div>\n\n') of.write('</div>\n\n')
def calendar_common(self, of, currsec1, currsec2, title, body_id, year, use_home=False): def calendar_common(self, of, currsec1, currsec2, title, body_id, year, use_home=False):
""" """
@ -545,19 +548,18 @@ class WebCalReport(Report):
of.write('<body id="%s">\n' % body_id) of.write('<body id="%s">\n' % body_id)
# Header Title # Header Title
of.write(' <div id="header" />\n') of.write('<div id="header" />\n')
of.write(' <h1 id="SiteTitle" />%s</h1>\n' % title) of.write('\t<h1 id="SiteTitle" />%s</h1>\n' % title)
if self.author != '': if self.author != '':
of.write(' <div id="GRAMPSinfo" />') of.write('\t<p id="CreatorInfo">')
if self.email != '': if self.email != '':
msg = _('Created for <a href="mailto:%(email)s?subject=WebCal" />%(author)s</a>\n') % { msg = _('Created for <a href="mailto:%(email)s?subject=WebCal">%(author)s</a>\n') % {
'email' : self.email, 'email' : self.email,
'author' : self.author} 'author' : self.author}
else: else:
msg = _('Created for %(author)s\n') % {'author' : self.author} msg = _('Created for %(author)s\n') % {'author' : self.author}
of.write('%s' % msg) of.write('%s</p>\n' % msg)
of.write(' </div>\n') # end GRAMPSinfo of.write('</div>\n') # end header
of.write(' </div>\n') # end header
# adjust the months being created if self.partyear is True # adjust the months being created if self.partyear is True
# and year is eequal to current year, then start_month is current month # and year is eequal to current year, then start_month is current month
@ -619,22 +621,22 @@ class WebCalReport(Report):
if not self.multiyear: if not self.multiyear:
th_txt = '%s %d' % (month_name, year) th_txt = '%s %d' % (month_name, year)
of.write('<!-- %s -->\n\n' % month_name) of.write('<!-- %s -->\n\n' % month_name)
of.write(' <table id="%s" class="calendar">\n' % month_name) of.write('<table id="%s" class="calendar">\n' % month_name)
of.write(' <thead>\n') of.write('\t<thead>\n')
of.write(' <tr>\n') of.write('\t\t<tr>\n')
of.write(' <th colspan="7" class="monthName">%s</th>\n' % th_txt) of.write('\t\t\t<th colspan="7" class="monthName">%s</th>\n' % th_txt)
of.write(' </tr>\n') of.write('\t\t</tr>\n')
# Calendar weekday names header # Calendar weekday names header
of.write(' <tr>\n') of.write('\t\t<tr>\n')
for day_col in range(7): for day_col in range(7):
dayclass = get_class_for_daycol(day_col) dayclass = get_class_for_daycol(day_col)
of.write(' <th class="%s">%s</th>\n' % (dayclass, get_name_for_daycol(day_col))) of.write('\t\t\t<th class="%s">%s</th>\n' % (dayclass, get_name_for_daycol(day_col)))
of.write(' </tr>\n') of.write('\t\t</tr>\n')
of.write(' </thead>\n') of.write('\t</thead>\n')
# begin table body # begin table body
of.write(' <tbody>\n') of.write('\t<tbody>\n')
# Compute the first day to display for this month. # Compute the first day to display for this month.
# It can also be a day in the previous month. # It can also be a day in the previous month.
@ -659,7 +661,7 @@ class WebCalReport(Report):
nweeks = len(monthinfo) nweeks = len(monthinfo)
for week_row in range(0, nweeks): for week_row in range(0, nweeks):
week = monthinfo[week_row] week = monthinfo[week_row]
of.write(' <tr class="week%d">\n' % week_row) of.write('\t\t<tr class="week%d">\n' % week_row)
for day_col in range(0, 7): for day_col in range(0, 7):
dayclass = get_class_for_daycol(day_col) dayclass = get_class_for_daycol(day_col)
@ -674,23 +676,21 @@ class WebCalReport(Report):
specclass = "next " + dayclass specclass = "next " + dayclass
if specclass[0] == 'p': # previous day of last month if specclass[0] == 'p': # previous day of last month
of.write(' <td id="prevday%d" ' % specday) of.write('\t\t\t<td id="prevday%d" ' % specday)
else: # next day of next month else: # next day of next month
of.write(' <td id="nextday%d" ' % specday) of.write('\t\t\t<td id="nextday%d" ' % specday)
of.write('class="%s">\n' % specclass) of.write('class="%s">\n' % specclass)
of.write('\t\t\t\t<div class="date">%d</div>\n' % specday)
# span class is used here to differentiate between previous/next days versus calendar days of.write('\t\t\t</td>\n')
of.write(' <span class="date">%d</span>\n' % specday)
of.write(' </td>\n')
else: # normal day number in current month else: # normal day number in current month
if cal == "by": # blank_year() doesn't need any highlighting or hyperlinks if cal == "by": # blank_year() doesn't need any highlighting or hyperlinks
of.write(' <td id="day%d" class="%s">\n' % (day, dayclass)) of.write('\t\t\t<td id="day%d" class="%s">\n' % (day, dayclass))
of.write(' <div class="date">%d</div>\n' % day) of.write('\t\t\t\t<div class="date">%d</div>\n' % day)
of.write(' </td>\n') of.write('\t\t\t</td>\n')
else: else:
thisday = datetime.date.fromordinal(current_ord) thisday = datetime.date.fromordinal(current_ord)
of.write(' <td id="day%d" ' % day) of.write('\t\t\t<td id="day%d" ' % day)
if thisday.month == month: # Something this month if thisday.month == month: # Something this month
holiday_list = self.holidays.get(month, {}).get(thisday.day, []) holiday_list = self.holidays.get(month, {}).get(thisday.day, [])
bday_anniv_list = self.calendar.get(month, {}).get(thisday.day, []) bday_anniv_list = self.calendar.get(month, {}).get(thisday.day, [])
@ -701,13 +701,14 @@ class WebCalReport(Report):
# Year at a Glance # Year at a Glance
if cal == "yg": if cal == "yg":
of.write(' <a name="%s%d" href="%s/%s%d%s" title="%s%d">\n' of.write('\t\t\t\t<a id="%s%d" href="%s/%s%d%s" title="%s%d">\n'
% (shrt_month, day, lng_month, shrt_month, day, self.ext, shrt_month, day)) % (shrt_month, day, lng_month, shrt_month, day, self.ext, shrt_month, day))
of.write(' <div class="date">%d</div></a>\n' % day) of.write('\t\t\t\t\t<div class="date">%d</div>\n' % day)
of.write('\t\t\t\t</a>\n')
# WebCal # WebCal
elif cal == 'wc': elif cal == 'wc':
of.write(' <div class="date">%d</div>\n' % day) of.write('\t\t\t\t<div class="date">%d</div>\n' % day)
# year_glance() and print_page() both need this to itemize the list # year_glance() and print_page() both need this to itemize the list
self.one_day(of, evt_date, cal, holiday_list, bday_anniv_list) self.one_day(of, evt_date, cal, holiday_list, bday_anniv_list)
@ -715,21 +716,21 @@ class WebCalReport(Report):
# no holiday/ bday/ anniversary this day # no holiday/ bday/ anniversary this day
else: else:
of.write('class="%s">\n' % dayclass) of.write('class="%s">\n' % dayclass)
of.write(' <div class="date">%d</div>\n' % day) of.write('\t\t\t\t<div class="date">%d</div>\n' % day)
# no holiday/ bday/ anniversary this month # no holiday/ bday/ anniversary this month
else: else:
of.write('class="%s">\n' % dayclass) of.write('class="%s">\n' % dayclass)
of.write(' <div class="date">%d</div>\n' % day) of.write('\t\t\t\t<div class="date">%d</div>\n' % day)
# close the day/ column # close the day/ column
of.write(' </td>\n') of.write('\t\t\t</td>\n')
# change day number # change day number
current_ord += 1 current_ord += 1
# close the week/ row # close the week/ row
of.write(' </tr>\n') of.write('\t\t</tr>\n')
def write_header(self, of, title, skip_print=None): def write_header(self, of, title, skip_print=None):
""" """
@ -738,18 +739,18 @@ class WebCalReport(Report):
root of the directory tree (i.e. to self.html_dir). root of the directory tree (i.e. to self.html_dir).
""" """
of.write('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"\n ') of.write('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"\n')
of.write(' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\n ') of.write(' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\n')
of.write('<html xmlns="http://www.w3.org/1999/xhtml" ') of.write('<html xmlns="http://www.w3.org/1999/xhtml" ')
xmllang = Utils.xml_lang() xmllang = Utils.xml_lang()
of.write('xml:lang="%s" lang="%s">\n' % (xmllang, xmllang)) of.write('xml:lang="%s" lang="%s">\n' % (xmllang, xmllang))
of.write('<head>\n') of.write('<head>\n')
of.write(' <title>%s</title>\n' % title) of.write('\t<title>%s</title>\n\n' % title)
of.write(' <meta http-equiv="Content-Type" content="text/html;charset=%s" />\n' of.write('\t<meta http-equiv="Content-Type" content="text/html;charset=%s" />\n'
% self.encoding) % self.encoding)
of.write(' <meta name="robots" content="noindex" />\n') of.write('\t<meta name="robots" content="noindex" />\n')
of.write(' <meta name="generator" content="GRAMPS 3.1.x: http://www.gramps-project.org" />\n') of.write('\t<meta name="generator" content="GRAMPS 3.1.x: http://www.gramps-project.org" />\n')
of.write(' <meta name="author" content="%s" />\n' % self.author) of.write('\t<meta name="author" content="%s" />\n\n' % self.author)
subdirs = ['..'] * self.nr_up subdirs = ['..'] * self.nr_up
# Note. We use '/' here because it is a URL, not a OS dependent pathname # Note. We use '/' here because it is a URL, not a OS dependent pathname
@ -758,19 +759,19 @@ class WebCalReport(Report):
fname3 = '/'.join(subdirs + ['images'] + ['favicon.ico']) fname3 = '/'.join(subdirs + ['images'] + ['favicon.ico'])
# link to _CALENDARSCREEN stylesheet # link to _CALENDARSCREEN stylesheet
of.write(' <link rel="stylesheet" href="%s" type="text/css" media="screen" />\n' % fname1) of.write('\t<link rel="stylesheet" href="%s" type="text/css" media="screen" />\n' % fname1)
# link to _CALENDARPRINT stylesheet # link to _CALENDARPRINT stylesheet
if not skip_print: if not skip_print:
of.write(' <link rel="stylesheet" href="%s" type="text/css" media="print" />\n' % fname2) of.write('\t<link rel="stylesheet" href="%s" type="text/css" media="print" />\n' % fname2)
# link to GRAMPS favicon # link to GRAMPS favicon
of.write(' <link rel="shortcut icon" href="%s" type="image/icon" />\n' % fname3) of.write('\t<link rel="shortcut icon" href="%s" type="image/icon" />\n' % fname3)
# Add calendar specific embedded style if required # Add calendar specific embedded style if required
if self.mystyle: # no extra embedded styling necessary if self.mystyle: # no extra embedded styling necessary
of.write(self.mystyle) of.write(self.mystyle)
of.write('</head>\n') of.write('</head>\n\n')
def write_footer(self, of): def write_footer(self, of):
""" """
@ -786,8 +787,8 @@ class WebCalReport(Report):
msg = _('Generated by <a href="http://gramps-project.org" target="_blank">' msg = _('Generated by <a href="http://gramps-project.org" target="_blank">'
'GRAMPS</a> on %(date)s') % {'date' : value} 'GRAMPS</a> on %(date)s') % {'date' : value}
of.write(' <div id="footer">\n') of.write('<div id="footer">\n')
of.write(' <p id="createdate">%s</p>\n' % msg) of.write('\t<p id="createdate">%s</p>\n' % msg)
if 0 < self.copy < len(_CC): if 0 < self.copy < len(_CC):
subdirs = ['..'] * self.nr_up subdirs = ['..'] * self.nr_up
@ -798,11 +799,11 @@ class WebCalReport(Report):
self.use_copyright = True self.use_copyright = True
else: else:
text = "&copy; %s %s" % (self.today.year, self.author) text = "&copy; %s %s" % (self.today.year, self.author)
of.write(' <p id="copyright">%s</p>\n' % text) of.write('\t<p id="copyright">%s</p>\n' % text)
of.write(' <p id="quality"><a href="http://validator.w3.org/check?uri=referer">') of.write('\t<p id="quality"><a href="http://validator.w3.org/check?uri=referer">')
of.write('<img src="http://www.w3.org/Icons/valid-xhtml10" ') of.write('<img src="http://www.w3.org/Icons/valid-xhtml10" ')
of.write('alt="Valid XHTML 1.0 Transitional" height="31" width="88" /></a></p>\n') of.write('alt="Valid XHTML 1.0 Transitional" height="31" width="88" /></a></p>\n')
of.write(' </div>\n') of.write('</div>\n')
of.write('</body>\n') of.write('</body>\n')
of.write('</html>\n') of.write('</html>\n')
@ -950,40 +951,25 @@ class WebCalReport(Report):
# create calendar common info for each calendar # create calendar common info for each calendar
self.calendar_common(of, lng_month, str(year), _('One Day Within A Year'), my_date, year) self.calendar_common(of, lng_month, str(year), _('One Day Within A Year'), my_date, year)
of.write(' <h1 id="OneDay" style="display:block;">%s</h1>\n' % my_date) of.write('\t<h1 id="OneDay">%s</h1>\n' % my_date)
if self.has_arrow_gif: if self.has_arrow_gif:
of.write(' <ul id="arrow">\n') of.write('\t<ul id="arrow">\n')
else: else:
of.write(' <ul>\n') of.write('\t<ul>\n')
# WebCal # WebCal
else: else:
of.write(' <ul>\n') of.write('\t<ul>\n')
for line in day_list: for line in day_list:
for date, text, event in line: for date, text, event in line:
of.write('\t\t<li>%s</li>\n' % text)
# "WebCal" needs more spacing than "Year At A Glance" of.write('\t</ul>\n')
if cal == 'wc':
of.write(' <li>')
else:
of.write(' <li>')
of.write('%s\n' % text)
if cal == 'wc': # Only close the file for "Year At A Glance"
of.write(' </li>\n')
else:
of.write(' </li>\n')
# WebCal needs 25 spaces
if cal == 'wc':
of.write(' </ul>\n')
# "Yeatr At A Glance"
if cal == 'yg': if cal == 'yg':
# year_glance needs 13 spaces
of.write(' </ul>\n')
self.write_footer(of) self.write_footer(of)
self.close_file(of) self.close_file(of)
@ -1031,8 +1017,8 @@ class WebCalReport(Report):
self.calendar_build(of, 'by', year, month) self.calendar_build(of, 'by', year, month)
# close table body # close table body
of.write(' </tbody>\n') of.write('\t</tbody>\n')
of.write(' </table>\n\n') of.write('</table>\n\n')
# increase progress bar # increase progress bar
self.progress.step() self.progress.step()
@ -1090,11 +1076,11 @@ class WebCalReport(Report):
self.progress.set_pass(_('Creating Year At A Glance calendars'), (self.end_month - self.start_month)) self.progress.set_pass(_('Creating Year At A Glance calendars'), (self.end_month - self.start_month))
# page description # page description
of.write(' <p id="description">\n') of.write('<p id="description">\n')
of.write(_(' This calendar is meant to give you access to all your data at a glance ' of.write(_('This calendar is meant to give you access to all your data at a glance '
'compressed into one page. Clicking on a <b>red square</b> will take you to a ' 'compressed into one page. Clicking on a <strong>red square</strong> will take you to a '
'page that shows all the events for that date!\n')) 'page that shows all the events for that date!\n'))
of.write(' </p>\n\n') of.write('</p>\n\n')
for month in range(self.start_month, (self.end_month + 1)): for month in range(self.start_month, (self.end_month + 1)):
@ -1103,25 +1089,25 @@ class WebCalReport(Report):
# Note. The week rows are filled up to make them all 6 weeks long. # Note. The week rows are filled up to make them all 6 weeks long.
nweeks = len(calendar.monthcalendar(self.year, month)) nweeks = len(calendar.monthcalendar(self.year, month))
for i in range(nweeks+1, 7): for i in range(nweeks+1, 7):
of.write(' <tr class="week%d">\n' % i) of.write('\t\t<tr class="week%d">\n' % i)
of.write(' <td id="emptyDays" colspan="7">\n') of.write('\t\t\t<td id="emptyDays" colspan="7">\n')
of.write(' </td>\n') of.write('\t\t\t</td>\n')
of.write(' </tr>\n') of.write('\t\t</tr>\n')
# close table body before writing note # close table body before writing note
of.write(' </tbody>\n') of.write('\t</tbody>\n')
# create note section for "Year At A Glance" # create note section for "Year At A Glance"
note = self.month_notes[month-1].strip() note = self.month_notes[month-1].strip()
note = note or "&nbsp;" note = note or "&nbsp;"
of.write(' <tfoot>\n') of.write('\t<tfoot>\n')
of.write(' <tr>\n') of.write('\t\t<tr>\n')
of.write(' <td class="note" colspan="7">\n') of.write('\t\t\t<td class="note" colspan="7">\n')
of.write(' %s\n' % note) of.write('\t\t\t\t%s\n' % note)
of.write(' </td>\n') of.write('\t\t\t</td>\n')
of.write(' </tr>\n') of.write('\t\t</tr>\n')
of.write(' </tfoot>\n') of.write('\t</tfoot>\n')
of.write(' </table>\n\n') of.write('</table>\n\n')
# increase progress bar # increase progress bar
self.progress.step() self.progress.step()
@ -1153,6 +1139,14 @@ class WebCalReport(Report):
# get data from database for birthdays/ anniversaries # get data from database for birthdays/ anniversaries
self.collect_data() self.collect_data()
if self.css == "Web_Mainz.css":
# Copy Mainz Style Images
self.imgs += ["Web_Mainz_Bkgd.png",
"Web_Mainz_Header.png",
"Web_Mainz_Mid.png",
"Web_Mainz_MidLight.png",
]
# Copy all files for the calendars being created # Copy all files for the calendars being created
self.copy_calendar_files() self.copy_calendar_files()
@ -1259,17 +1253,17 @@ class WebCalReport(Report):
self.calendar_build(of, 'wc', year, month) self.calendar_build(of, 'wc', year, month)
# close table body before note section # close table body before note section
of.write(' </tbody>\n') of.write('\t</tbody>\n')
# create note section for "WebCal" # create note section for "WebCal"
note = self.month_notes[month-1].strip() note = self.month_notes[month-1].strip()
note = note or "&nbsp;" note = note or "&nbsp;"
of.write(' <tfoot>\n') of.write('\t<tfoot>\n')
of.write(' <tr>\n') of.write('\t\t<tr>\n')
of.write(' <td class="note" colspan="7">%s</td>\n' % note) of.write('\t\t\t<td class="note" colspan="7">%s</td>\n' % note)
of.write(' </tr>\n') of.write('\t\t</tr>\n')
of.write(' </tfoot>\n') of.write('\t</tfoot>\n')
of.write(' </table>\n\n') of.write('</table>\n\n')
# write footer section, and close file # write footer section, and close file
self.write_footer(of) self.write_footer(of)
@ -1471,7 +1465,7 @@ class WebCalOptions(MenuReportOptions):
partyear = BooleanOption(_('Create Partial Year calendar'), False) partyear = BooleanOption(_('Create Partial Year calendar'), False)
partyear.set_help(_('Create a partial year calendar. The start month will be' partyear.set_help(_('Create a partial year calendar. The start month will be'
'equal to the current month to the end of the year.')) ' equal to the current month to the end of the year.'))
menu.add_option(category_name, 'partyear', partyear) menu.add_option(category_name, 'partyear', partyear)
self.__multiyear = BooleanOption(_('Create multiple year calendars'), False) self.__multiyear = BooleanOption(_('Create multiple year calendars'), False)