Fixed a typing error from yesterday's open_file_with_default_application(). Completed work on default printer stylesheet also.

svn: r12702
This commit is contained in:
Rob G. Healey 2009-06-24 20:03:10 +00:00
parent d5ccd93043
commit 22ecedb061
3 changed files with 118 additions and 196 deletions

View File

@ -46,7 +46,8 @@ import gtk
# gramps modules # gramps modules
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from gui.utils import open_file_with_default_applicationimport PageView from gui.utils import open_file_with_default_application
import PageView
import DisplayModels import DisplayModels
import ThumbNails import ThumbNails
import const import const

View File

@ -34,11 +34,6 @@ Color Palette
White #FFF White #FFF
black #000 black #000
===== Ancestor Graph Color Scheme =====
Males #E5F2FE
Females #FFC0CB
Unknown #000
===== Web Graphics ===== ===== Web Graphics =====
Males Web_Gender_Male.png Males Web_Gender_Male.png
Females Web_Gender_Female.png Females Web_Gender_Female.png
@ -82,8 +77,6 @@ img {
width:965px; width:965px;
margin:0 auto; margin:0 auto;
padding-bottom:.5em; padding-bottom:.5em;
background-color:#FFF;
color:#000;
} }
.content div.snapshot { .content div.snapshot {
margin:0; margin:0;
@ -108,9 +101,6 @@ img {
h1 { h1 {
font:normal 2em/1.2em serif; font:normal 2em/1.2em serif;
} }
h2 {
display:none;
}
h3 { h3 {
font:normal 2em/1.2em serif; font:normal 2em/1.2em serif;
text-align:center; text-align:center;
@ -120,7 +110,6 @@ h3 {
} }
h4 { h4 {
font:normal 1.2em/1.2em serif; font:normal 1.2em/1.2em serif;
color:#000;
margin:0; margin:0;
padding:.2em 0 .2em 20px; padding:.2em 0 .2em 20px;
border-bottom:solid 2px #000; border-bottom:solid 2px #000;
@ -152,7 +141,10 @@ span.preposition {
} }
.grampsid { .grampsid {
font:normal .8em/1.2em monospace; font:normal .8em/1.2em monospace;
}
a {
color:#000; color:#000;
text-decoration:none;
} }
/* Header /* Header
@ -187,8 +179,6 @@ p#user_header {
margin:0; margin:0;
padding:0; padding:0;
border-top:solid 2px #000; border-top:solid 2px #000;
background-color:#FFF;
color:#000;
} }
#footer img { #footer img {
border:0; border:0;
@ -240,11 +230,9 @@ table.infolist {
width:100%; width:100%;
margin:0; margin:0;
padding:0; padding:0;
background-color:#FFF;
} }
table.infolist thead tr th { table.infolist thead tr th {
font:normal 1.1em/1.2em serif; font:normal 1.1em/1.2em serif;
color:#000;
margin:0; margin:0;
padding:.2em 10px; padding:.2em 10px;
border-bottom:solid 1px #000; border-bottom:solid 1px #000;
@ -255,7 +243,7 @@ table.infolist tr td {
padding:.1em 10px; padding:.1em 10px;
} }
table.infolist tr.BeginLetter td, table.infolist tr.BeginSurname td { table.infolist tr.BeginLetter td, table.infolist tr.BeginSurname td {
border-top:solid 1px #453619; border-top:solid 1px #000;
} }
table.infolist tr td.ColumnLetter { table.infolist tr td.ColumnLetter {
width:3%; width:3%;
@ -263,7 +251,6 @@ table.infolist tr td.ColumnLetter {
} }
table.infolist tbody tr td.ColumnBirth { table.infolist tbody tr td.ColumnBirth {
font-size:.9em; font-size:.9em;
color:#000;
width:10%; width:10%;
} }
table.infolist tbody tr td.ColumnDeath { table.infolist tbody tr td.ColumnDeath {
@ -272,7 +259,6 @@ table.infolist tbody tr td.ColumnDeath {
} }
table.infolist tbody tr td.ColumnRowLabel { table.infolist tbody tr td.ColumnRowLabel {
width:2%; width:2%;
color:#000;
padding-left:20px; padding-left:20px;
} }
table.infolist tbody tr td.ColumnType { table.infolist tbody tr td.ColumnType {
@ -309,28 +295,20 @@ table.surnamelist thead tr th a, table.surnamelist thead tr th a:visited {
text-decoration:none; text-decoration:none;
padding:.2em 10px; padding:.2em 10px;
} }
table.surnamelist tr th:hover {
background-color:#C1B398;
}
table.surnamelist thead tr th.ColumnLetter { table.surnamelist thead tr th.ColumnLetter {
padding-left:20px; padding-left:20px;
padding-right:10px; padding-right:10px;
} }
table#SortByName thead tr th.ColumnSurname, table#SortByCount thead tr th.ColumnQuantity { table#SortByName thead tr th.ColumnSurname, table#SortByCount thead tr th.ColumnQuantity {
background-color:#C1B398;
} }
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#SortByName tbody tr td.ColumnSurname { table#SortByName tbody tr td.ColumnSurname {
padding:0; padding:0;
background-color:#FFF;
} }
table#SortByCount tbody tr td.ColumnQuantity { table#SortByCount tbody tr td.ColumnQuantity {
background-color:#FFF;
}
table.surnamelist tbody tr td.ColumnSurname:hover, table#SortByName tbody tr td.ColumnSurname:hover {
background-color:#C1B398;
} }
table.surname { table.surname {
border-bottom:solid 1px #000; border-bottom:solid 1px #000;
@ -373,8 +351,6 @@ table.individuallist tbody tr td.ColumnPartner {
/* IndividualDetail /* IndividualDetail
------------------------------------------------------ */ ------------------------------------------------------ */
#IndividualDetail { #IndividualDetail {
background-color:#FFF;
color:#000;
} }
#IndividualDetail div table.infolist tr td { #IndividualDetail div table.infolist tr td {
font:normal .9em/1.2em sans-serif; font:normal .9em/1.2em sans-serif;
@ -417,16 +393,7 @@ table.individuallist tbody tr td.ColumnPartner {
padding:0; padding:0;
} }
#GalleryNav { #GalleryNav {
display:none' display:none;
}
#GalleryPages {
margin:0 1em;
}
#GalleryCurrent {
font:bold 1.2em/1em sans-serif;
}
#GalleryTotal {
font-weight:normal;
} }
#GalleryDisplay { #GalleryDisplay {
margin:0 auto; margin:0 auto;
@ -507,7 +474,6 @@ table.individuallist tbody tr td.ColumnPartner {
padding-left:.5cm; padding-left:.5cm;
padding-right:.5cm; padding-right:.5cm;
height:390px; height:390px;
color:#000;
} }
table.download { table.download {
border:solid 2px #000; border:solid 2px #000;
@ -548,7 +514,6 @@ table.download td.Filename {
} }
table.download td.Modified { table.download td.Modified {
width:17%; width:17%;
font-weight:bold;
} }
/* Subsections /* Subsections
@ -566,7 +531,6 @@ table.download td.Modified {
} }
div.subsection{ div.subsection{
padding-bottom:.5em; padding-bottom:.5em;
background-color:#FFF;
} }
div.subsection h4 { div.subsection h4 {
margin-bottom:.5em; margin-bottom:.5em;
@ -583,8 +547,6 @@ div.subsection table.infolist {
----------------------------------------------------- */ ----------------------------------------------------- */
div#events { div#events {
padding-bottom:0; padding-bottom:0;
height:2.5cm;
overflow:auto;
} }
div#events h4 { div#events h4 {
margin-bottom:0; margin-bottom:0;
@ -596,10 +558,8 @@ div#events h4 {
line-height:12px; line-height:12px;
font-family:sans-serif; font-family:sans-serif;
text-transform:uppercase; text-transform:uppercase;
color:#000;
padding-top:6px; padding-top:6px;
padding-bottom:4px; padding-bottom:4px;
background-color:#6AF364;
} }
#IndividualDetail div#events table.eventtable { #IndividualDetail div#events table.eventtable {
width:100%; width:100%;
@ -613,14 +573,13 @@ div#events h4 {
padding-bottom:.8em; padding-bottom:.8em;
} }
#IndividualDetail div#events table.infolist tbody tr td.ColumnAttribute { #IndividualDetail div#events table.infolist tbody tr td.ColumnAttribute {
border-bottom:solid 1px #453619; border-bottom:solid 1px #000;
} }
#IndividualDetail div#events table.infolist tbody tr td.ColumnValue { #IndividualDetail div#events table.infolist tbody tr td.ColumnValue {
border-bottom:solid 1px #453619; border-bottom:solid 1px #000;
} }
table.infolist tbody tr td.ColumnValue p { table.infolist tbody tr td.ColumnValue p {
font-family:sans-serif; font-family:sans-serif;
color:#696969;
margin:.2em 0 0 2em; margin:.2em 0 0 2em;
} }
@ -670,10 +629,10 @@ div#addresses table.infolist tbody tr td {
} }
div#addresses table.infolist tbody tr td.ColumnAttribute { div#addresses table.infolist tbody tr td.ColumnAttribute {
width:30%; width:30%;
border-bottom:solid 1px #453619; border-bottom:solid 1px #000;
} }
div#addresses table.infolist tbody tr td.ColumnValue { div#addresses table.infolist tbody tr td.ColumnValue {
border-bottom:solid 1px #453619; border-bottom:solid 1px #000;
} }
/* Subsections : Gallery /* Subsections : Gallery
@ -697,7 +656,7 @@ div#addresses table.infolist tbody tr td.ColumnValue {
#indivgallery .thumbnail tr a img { #indivgallery .thumbnail tr a img {
margin:0; margin:0;
padding:0; padding:0;
border:solid 1px #453619; border:solid 1px #000;
} }
#indivgallery div.thumbnail p { #indivgallery div.thumbnail p {
font:normal .7em/1.4em sans-serif; font:normal .7em/1.4em sans-serif;
@ -725,8 +684,6 @@ div#narrative {
/* Subsections : Source References /* Subsections : Source References
----------------------------------------------------- */ ----------------------------------------------------- */
div#sourcerefs { div#sourcerefs {
height:2.5cm;
overflow:auto;
} }
div#sourcerefs ol { div#sourcerefs ol {
list-style-type:decimal; list-style-type:decimal;
@ -743,7 +700,6 @@ div#summaryarea {
div#summaryarea table.infolist { div#summaryarea table.infolist {
margin:0; margin:0;
padding:0; padding:0;
background:#FFF;
border-bottom:solid .7em #FFF; border-bottom:solid .7em #FFF;
} }
div#summaryarea table.infolist tr td, div#summaryarea table.infolist tr td p { div#summaryarea table.infolist tr td, div#summaryarea table.infolist tr td p {
@ -755,7 +711,6 @@ div#summaryarea table.infolist tr td a, div#summaryarea table.infolist tr td p a
} }
div#summaryarea table.infolist tbody tr td.ColumnAttribute { div#summaryarea table.infolist tbody tr td.ColumnAttribute {
width:14%; width:14%;
color:#696969;
padding-left:20px; padding-left:20px;
} }
@ -793,7 +748,6 @@ div#pedigree {
.spouse a { .spouse a {
font-weight:normal; font-weight:normal;
font-style:normal; font-style:normal;
color:#000;
} }
.spouse:before { .spouse:before {
content: "+ "; content: "+ ";
@ -828,13 +782,11 @@ div#pedigree {
font:normal .7em/1.4em sans-serif; font:normal .7em/1.4em sans-serif;
text-align:center; text-align:center;
text-decoration:none; text-decoration:none;
color:#542;
width:118px; width:118px;
padding:5px 20px 7px 20px; padding:5px 20px 7px 20px;
margin-top:-25px; margin-top:-25px;
margin-left:16px; margin-left:16px;
background-color:#FFF; border:solid 1px #000;
border:solid 1px #453619;
} }
#treeContainer div.boxbg a.noThumb, #treeContainer div.boxbg a.noThumb,
#treeContainer div.AncCol3 a, #treeContainer div.AncCol3 a,
@ -861,16 +813,14 @@ div#pedigree {
} }
#treeContainer div.male a, #treeContainer div.male a,
#treeContainer div.male span.unlinked { #treeContainer div.male span.unlinked {
background:url(../images/Web_Gender_Male.png) #BCEAF6 no-repeat top right; background:url(../images/Web_Gender_Male.png) #FFF no-repeat top right;
} }
#treeContainer div.female a, #treeContainer div.female a,
#treeContainer div.female span.unlinked { #treeContainer div.female span.unlinked {
background:url(../images/Web_Gender_Female.png) #FFC0CB no-repeat top right; background:url(../images/Web_Gender_Female.png) #FFF no-repeat top right;
} }
#treeContainer div.unknown a, #treeContainer div.unknown a,
#treeContainer div.unknown span.unlinked { #treeContainer div.unknown span.unlinked {
background-color:#000;
color:#FAFAFA;
} }
.shadow { .shadow {
display:none; display:none;
@ -881,7 +831,7 @@ div#pedigree {
height:1px; height:1px;
margin:0 0 0 16px; margin:0 0 0 16px;
padding:0; padding:0;
background-color:#453619; background-color:#000;
} }
#tree div div.bhline { #tree div div.bhline {
position:absolute; position:absolute;
@ -889,7 +839,7 @@ div#pedigree {
width:1px; width:1px;
margin:0 0 0 16px; margin:0 0 0 16px;
padding:0; padding:0;
background-color:#453619; background-color:#000;
} }
.ghline, .gvline { .ghline, .gvline {
display:none; display:none;
@ -900,7 +850,6 @@ div#pedigree {
/* Calendar : General */ /* Calendar : General */
body#WebCal { body#WebCal {
padding:0 14px; padding:0 14px;
background-color:#542;
} }
.calendar { .calendar {
empty-cells:show; empty-cells:show;
@ -926,28 +875,22 @@ body#WebCal {
font-size:2em; font-size:2em;
line-height:100%; line-height:100%;
text-transform:none; text-transform:none;
color:#542;
padding:.3em 0 .2em 0; padding:.3em 0 .2em 0;
background-color:#FFF; background-color:#FFF;
} }
#CreatorInfo { #CreatorInfo {
float:right; float:right;
color:#FFF;
margin:-24px 10px 0 0; margin:-24px 10px 0 0;
} }
.calendar thead tr th.weekend, .calendar thead tr th.weekend,
.calendar thead tr th.weekday { .calendar thead tr th.weekday {
font-style:italic; font-style:italic;
color:#000; border:solid 2px #000;
background-color:#6AF364;
border:solid 2px #453619;
} }
.calendar tfoot tr td { .calendar tfoot tr td {
padding:.7em 5% 1em 5%; padding:.7em 5% 1em 5%;
border-top:solid 2px #000; border-top:solid 2px #000;
vertical-align:middle; vertical-align:middle;
color:#453619;
background-color:#D8F3D6;
} }
/* Calendar : Date Numeral */ /* Calendar : Date Numeral */
@ -958,10 +901,8 @@ body#WebCal {
font-size:1.2em; font-size:1.2em;
line-height:100%; line-height:100%;
text-align:center; text-align:center;
color:#542;
margin:0 0 0 .5em; margin:0 0 0 .5em;
padding:.2em 0; padding:.2em 0;
background-color:#D8F3D6;
} }
/* Calendar : Date Container */ /* Calendar : Date Container */
@ -971,22 +912,20 @@ body#WebCal {
padding:0; padding:0;
border-width:1px 0 0 1px; border-width:1px 0 0 1px;
border-style:solid; border-style:solid;
border-color:#453619; border-color:#000;
} }
.calendar tbody tr td.weekday { .calendar tbody tr td.weekday {
background-color:#FFF;
} }
.calendar tbody tr td.weekend { .calendar tbody tr td.weekend {
background-color:#D8F3D6;
} }
.calendar tbody tr td.saturday { .calendar tbody tr td.saturday {
border-right:solid 1px #453619; border-right:solid 1px #000;
} }
.calendar tbody tr td.sunday { .calendar tbody tr td.sunday {
border-left:solid 1px #453619; border-left:solid 1px #000;
} }
.calendar tbody tr td:first-child { .calendar tbody tr td:first-child {
border-left:solid 1px #453619; border-left:solid 1px #000;
} }
.calendar tbody tr:first-child td { .calendar tbody tr:first-child td {
border-top:none; border-top:none;
@ -1005,7 +944,7 @@ body#WebCal {
width:92%; width:92%;
margin:0 4%; margin:0 4%;
padding:.2em 0 .3em 0; padding:.2em 0 .3em 0;
border-top:dashed 1px #453619; border-top:dashed 1px #000;
} }
.calendar tbody tr td ul li:first-child { .calendar tbody tr td ul li:first-child {
border:none; border:none;
@ -1014,16 +953,12 @@ body#WebCal {
/* Calendar : Birthday, Anniversary, Highlight */ /* Calendar : Birthday, Anniversary, Highlight */
.calendar tbody tr td ul li em { .calendar tbody tr td ul li em {
font-style:normal; font-style:normal;
color:#0A65B5;
} }
.calendar tbody tr td ul li span.yearsmarried em { .calendar tbody tr td ul li span.yearsmarried em {
color:#453619;
} }
.calendar tbody tr td.highlight { } .calendar tbody tr td.highlight { }
.calendar tbody tr td.highlight div.date { .calendar tbody tr td.highlight div.date {
color:#0A65B5;
background-color:#C2E1FE;
} }
/* Calendar : Previous-Next Month */ /* Calendar : Previous-Next Month */
@ -1031,8 +966,6 @@ body#WebCal {
.calendar tbody tr td.next, .calendar tbody tr td.next,
.calendar tbody tr td.previous div.date, .calendar tbody tr td.previous div.date,
.calendar tbody tr td.next div.date { .calendar tbody tr td.next div.date {
color:#333;
background-color:#D8F3D6;
} }
/* Calendar : Full Year */ /* Calendar : Full Year */
@ -1045,7 +978,7 @@ body#fullyearlinked table.calendar {
float:left; float:left;
width:320px; width:320px;
height:18em; height:18em;
border:solid 1px #453619; border:solid 1px #000;
} }
body#fullyearlinked table.calendar thead tr th { body#fullyearlinked table.calendar thead tr th {
height:2em; height:2em;

View File

@ -331,80 +331,74 @@ class BasePage(object):
name.set_display_as(name_format) name.set_display_as(name_format)
return _nd.display_name(name) return _nd.display_name(name)
def write_footer(self, counter, hyper=False): def write_footer(self):
""" """
Will create and display the footer section of each page... Will create and display the footer section of each page...
""" """
db = self.report.database db = self.report.database
footer = Html('div', id='footer') # begin footer division
with Html('div', id='footer') as section:
# add top of page link footer_note = self.report.options['footernote']
if hyper and counter > 25: if footer_note:
footer += Html('p', id='top', inline=True) + ( note = db.get_note_from_gramps_id(footer_note)
Html('a', _('Top of Page'), id="top", href='#top'), note_text = note.get()
Html('a', name='bottom', title=_('Bottom')) if note_text:
) user_footer = Html('div', id='user_footer')
section += user_footer
footer_note = self.report.options['footernote']
if footer_note:
note = db.get_note_from_gramps_id(footer_note)
note_text = note.get()
if note_text:
user_footer = Html('div', id='user_footer')
footer += user_footer
# styled notes # styled notes
htmlnotetext = self.styled_note(note.get_styledtext(), htmlnotetext = self.styled_note(note.get_styledtext(),
note.get_format()) note.get_format())
if htmlnotetext: if htmlnotetext:
text = htmlnotetext text = htmlnotetext
else: else:
text = Html('p', note_text) text = Html('p', note_text)
user_footer += text user_footer += text
value = _dd.display(date.Today()) value = _dd.display(date.Today())
msg = _('Generated by <a href="%(homepage)s">' msg = _('Generated by <a href="%(homepage)s">'
'GRAMPS</a> on %(date)s') % { 'GRAMPS</a> on %(date)s') % {
'date': value, 'homepage' : const.URL_HOMEPAGE 'date': value, 'homepage' : const.URL_HOMEPAGE
} }
# optional "link-home" feature; see bug report #2736 # optional "link-home" feature; see bug report #2736
if self.report.options['linkhome']: if self.report.options['linkhome']:
home_person = db.get_default_person() home_person = db.get_default_person()
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 = self.get_name(home_person) home_person_name = self.get_name(home_person)
msg += _(' Created for <a href="%s">%s</a>') % ( msg += _(' Created for <a href="%s">%s</a>') % (
home_person_url, home_person_name) home_person_url, home_person_name)
# create date # creation date
footer += Html('p', msg, id='createdate') section += Html('p', msg, id='createdate')
# get copyright license for all pages # get copyright license for all pages
copy_nr = self.report.copyright copy_nr = self.report.copyright
text = '' text = ''
if copy_nr == 0: if copy_nr == 0:
if self.author: if self.author:
year = date.Today().get_year() year = date.Today().get_year()
text = '&copy; %(year)d %(person)s' % { text = '&copy; %(year)d %(person)s' % {
'person' : self.author, 'person' : self.author,
'year' : year} 'year' : year}
elif 0 < copy_nr <= len(_CC): elif 0 < copy_nr <= len(_CC):
# Note. This is a URL # Note. This is a URL
fname = '/'.join(["images", "somerights20.gif"]) fname = '/'.join(["images", "somerights20.gif"])
url = self.report.build_url_fname(fname, None, self.up) url = self.report.build_url_fname(fname, None, self.up)
text = _CC[copy_nr] % {'gif_fname' : url} text = _CC[copy_nr] % {'gif_fname' : url}
footer += Html('p', text, id='copyright') section += Html('p', text, id='copyright')
# add clear line for proper styling # add clear line for proper styling
footer += fullclear section += fullclear
# return footer to its caller # return footer to its caller
return footer return section
def write_header(self, title, hyper=False): def write_header(self, title):
""" """
Note. 'title' is used as currentsection in the navigation links and Note. 'title' is used as currentsection in the navigation links and
as part of the header title. as part of the header title.
@ -465,13 +459,6 @@ class BasePage(object):
) )
body += headerdiv body += headerdiv
# add bottom link
if hyper:
headerdiv += Html('p', id='bottom', inline=True) + (
Html('a', id="bottom", href='#bottom', inline=True),
Html('a', name='top')
)
header_note = self.report.options['headernote'] header_note = self.report.options['headernote']
if header_note: if header_note:
note = db.get_note_from_gramps_id(header_note) note = db.get_note_from_gramps_id(header_note)
@ -948,11 +935,8 @@ class IndividualListPage(BasePage):
showpartner = report.options['showpartner'] showpartner = report.options['showpartner']
showparents = report.options['showparents'] showparents = report.options['showparents']
# add top of page link
counter = len(person_handle_list)
of = self.report.create_file("individuals") of = self.report.create_file("individuals")
indlistpage, body = self.write_header(_('Individuals'), hyper=True) indlistpage, body = self.write_header(_('Individuals'))
# begin Individuals division # begin Individuals division
with Html('div', class_='content', id='Individuals') as section: with Html('div', class_='content', id='Individuals') as section:
@ -979,9 +963,9 @@ class IndividualListPage(BasePage):
thead += trow thead += trow
# Table Header -- Surname and Given name columns # Table Header -- Surname and Given name columns
trow += Html('th', _('Surname'), class_='ColumnSurname') + ( tcell1 = Html('th', _('Surname'), class_='ColumnSurname', inline=True)
Html('th', _('Name'), class_='ColumnName', inline=True) tcell2 = Html('th', _('Name'), class_='ColumnName', inline=True)
) trow += (tcell1, tcell2)
# table header -- show birth column # table header -- show birth column
if showbirth: if showbirth:
@ -1125,10 +1109,11 @@ class IndividualListPage(BasePage):
# create clear line for proper styling # create clear line for proper styling
# create footer section # create footer section
footer = self.write_footer(counter, hyper=True) footer = self.write_footer()
body += (fullclear, footer) body += (fullclear, footer)
# send page out for processing # send page out for processing
# and close the file
self.mywriter(indlistpage, of) self.mywriter(indlistpage, of)
class SurnamePage(BasePage): class SurnamePage(BasePage):
@ -1279,13 +1264,13 @@ class SurnamePage(BasePage):
trow += tcell trow += tcell
tbody += trow tbody += trow
# add surnames table
# add clearline for proper styling # add clearline for proper styling
# add footer section # add footer section
footer = self.write_footer(counter=0) footer = self.write_footer()
body += (fullclear, footer) body += (fullclear, footer)
# send page out for processing # send page out for processing
# and close the file
self.mywriter(surnamepage, of) self.mywriter(surnamepage, of)
class PlaceListPage(BasePage): class PlaceListPage(BasePage):
@ -1295,11 +1280,8 @@ class PlaceListPage(BasePage):
self.src_list = src_list # TODO verify that this is correct self.src_list = src_list # TODO verify that this is correct
db = report.database db = report.database
# add top of page link
counter = len(place_handles)
of = self.report.create_file("places") of = self.report.create_file("places")
placelistpage, body = self.write_header(_('Places'), hyper=True) placelistpage, body = self.write_header(_('Places'))
# begin places division # begin places division
with Html('div', class_='content', id='Places') as section: with Html('div', class_='content', id='Places') as section:
@ -1310,7 +1292,7 @@ class PlaceListPage(BasePage):
"title will take you to that place&#8217;s page.") "title will take you to that place&#8217;s page.")
section += Html('p', msg, id='description') section += Html('p', msg, id='description')
# begin alphabetic navigation # begin alphabet navigation
alpha_nav = alphabet_navigation(db, place_handles, _PLACE) alpha_nav = alphabet_navigation(db, place_handles, _PLACE)
if alpha_nav is not None: if alpha_nav is not None:
section += alpha_nav section += alpha_nav
@ -1369,10 +1351,11 @@ class PlaceListPage(BasePage):
# add clearline for proper styling # add clearline for proper styling
# add footer section # add footer section
footer = self.write_footer(counter, hyper=True) footer = self.write_footer()
body += (fullclear, footer) body += (fullclear, footer)
# send page out for processing # send page out for processing
# and close the file
self.mywriter(placelistpage, of) self.mywriter(placelistpage, of)
class PlacePage(BasePage): class PlacePage(BasePage):
@ -1468,10 +1451,11 @@ class PlacePage(BasePage):
# add clearline for proper styling # add clearline for proper styling
# add footer section # add footer section
footer = self.write_footer(counter=0) footer = self.write_footer()
body += (fullclear, footer) body += (fullclear, footer)
# send page out for processing # send page out for processing
# and close the file
self.mywriter(placepage, of) self.mywriter(placepage, of)
class MediaPage(BasePage): class MediaPage(BasePage):
@ -1746,10 +1730,11 @@ class MediaPage(BasePage):
# add clearline for proper styling # add clearline for proper styling
# add footer section # add footer section
footer = self.write_footer(counter=0) footer = self.write_footer()
body += (fullclear, footer) body += (fullclear, footer)
# send page out for processing # send page out for processing
# and close the file
self.mywriter(mediapage, of) self.mywriter(mediapage, of)
def gallery_nav_link(self, handle, name, up=False): def gallery_nav_link(self, handle, name, up=False):
@ -1850,15 +1835,12 @@ class SurnameListPage(BasePage):
BasePage.__init__(self, report, title) BasePage.__init__(self, report, title)
db = report.database db = report.database
# amount of surnames to be created
counter = len(person_handle_list)
if order_by == self.ORDER_BY_NAME: if order_by == self.ORDER_BY_NAME:
of = self.report.create_file(filename) of = self.report.create_file(filename)
surnamelist, body = self.write_header(_('Surnames'), hyper=True) surnamelist, body = self.write_header(_('Surnames'))
else: else:
of = self.report.create_file("surnames_count") of = self.report.create_file("surnames_count")
surnamelist, body = self.write_header(_('Surnames by person count'), hyper=True) surnamelist, body = self.write_header(_('Surnames by person count'))
# begin surnames division # begin surnames division
with Html('div', class_='content', id='surnames') as section: with Html('div', class_='content', id='surnames') as section:
@ -1942,7 +1924,7 @@ class SurnameListPage(BasePage):
with Html('td', class_='ColumnLetter', inline=True) as tcell: with Html('td', class_='ColumnLetter', inline=True) as tcell:
trow += tcell trow += tcell
tcell += Html('a', last_letter, name=last_letter) tcell += Html('a', last_letter, name=last_letter)
with Html('td', class_='ColumnSurname', inline=True) as tcell: with Html('td', class_='ColumnSurname') as tcell:
trow += tcell trow += tcell
tcell += self.surname_link(name_to_md5(surname), surname) tcell += self.surname_link(name_to_md5(surname), surname)
elif surname != last_surname: elif surname != last_surname:
@ -1950,7 +1932,7 @@ class SurnameListPage(BasePage):
tbody += trow tbody += trow
with Html('td', '&nbsp;', class_='ColumnLetter', inline=True) as tcell: with Html('td', '&nbsp;', class_='ColumnLetter', inline=True) as tcell:
trow += tcell trow += tcell
with Html('td', class_='ColumnSurname', inline=True) as tcell: with Html('td', class_='ColumnSurname') as tcell:
trow += tcell trow += tcell
tcell += self.surname_link(name_to_md5(surname), surname) tcell += self.surname_link(name_to_md5(surname), surname)
last_surname = surname last_surname = surname
@ -1959,11 +1941,11 @@ class SurnameListPage(BasePage):
# create footer section # create footer section
# add clearline for proper styling # add clearline for proper styling
# bring all body pieces together footer = self.write_footer()
footer = self.write_footer(counter, hyper=True)
body += (fullclear, footer) body += (fullclear, footer)
# send page out for processing # send page out for processing
# and close the file
self.mywriter(surnamelist, of) self.mywriter(surnamelist, of)
def surname_link(self, fname, name, opt_val=None, up=False): def surname_link(self, fname, name, opt_val=None, up=False):
@ -2013,10 +1995,11 @@ class IntroductionPage(BasePage):
# add clearline for proper styling # add clearline for proper styling
# create footer section # create footer section
footer = self.write_footer(counter=0) footer = self.write_footer()
body += (fullclear, footer) body += (fullclear, footer)
# send page out for processing # send page out for processing
# and close the file
self.mywriter(intropage, of) self.mywriter(intropage, of)
class HomePage(BasePage): class HomePage(BasePage):
@ -2056,10 +2039,11 @@ class HomePage(BasePage):
# create clear line for proper styling # create clear line for proper styling
# create footer section # create footer section
footer = self.write_footer(counter=0) footer = self.write_footer()
body += (fullclear, footer) body += (fullclear, footer)
# send page out for processing # send page out for processing
# and close the file
self.mywriter(homepage, of) self.mywriter(homepage, of)
class SourceListPage(BasePage): class SourceListPage(BasePage):
@ -2068,11 +2052,8 @@ class SourceListPage(BasePage):
BasePage.__init__(self, report, title) BasePage.__init__(self, report, title)
db = report.database db = report.database
# add bottom and top links
counter = len(handle_set)
of = self.report.create_file("sources") of = self.report.create_file("sources")
sourcelistpage, body = self.write_header(_('Sources'), hyper=True) sourcelistpage, body = self.write_header(_('Sources'))
# begin source list division # begin source list division
with Html('div', class_='content', id='sources') as section: with Html('div', class_='content', id='sources') as section:
@ -2121,10 +2102,11 @@ class SourceListPage(BasePage):
# add clearline for proper styling # add clearline for proper styling
# add footer section # add footer section
footer = self.write_footer(counter=0, hyper=True) footer = self.write_footer()
body += (fullclear, footer) body += (fullclear, footer)
# send page out for processing # send page out for processing
# and close the file
self.mywriter(sourcelistpage, of) self.mywriter(sourcelistpage, of)
class SourcePage(BasePage): class SourcePage(BasePage):
@ -2192,10 +2174,11 @@ class SourcePage(BasePage):
# add clearline for proper styling # add clearline for proper styling
# add footer section # add footer section
footer = self.write_footer(counter=0) footer = self.write_footer()
body += (fullclear, footer) body += (fullclear, footer)
# send page out for processing # send page out for processing
# and close the file
self.mywriter(sourcepage, of) self.mywriter(sourcepage, of)
class MediaListPage(BasePage): class MediaListPage(BasePage):
@ -2208,7 +2191,7 @@ class MediaListPage(BasePage):
counter = len(self.report.photo_list) counter = len(self.report.photo_list)
of = self.report.create_file("gallery") of = self.report.create_file("gallery")
medialistpage, body = self.write_header(_('Gallery'), hyper=True) medialistpage, body = self.write_header(_('Gallery'))
# begin gallery division # begin gallery division
with Html('div', class_='content', id='Gallery') as section: with Html('div', class_='content', id='Gallery') as section:
@ -2265,10 +2248,11 @@ class MediaListPage(BasePage):
# add footer section # add footer section
# add clearline for proper styling # add clearline for proper styling
footer = self.write_footer(counter, hyper=True) footer = self.write_footer()
body += (fullclear, footer) body += (fullclear, footer)
# send page out for processing # send page out for processing
# and close the file
self.mywriter(medialistpage, of) self.mywriter(medialistpage, of)
def media_ref_link(self, handle, name, up=False): def media_ref_link(self, handle, name, up=False):
@ -2422,10 +2406,11 @@ class DownloadPage(BasePage):
# clear line for proper styling # clear line for proper styling
# create footer section # create footer section
footer = self.write_footer(counter=0) footer = self.write_footer()
body += (fullclear, footer) body += (fullclear, footer)
# send page out for processing # send page out for processing
# and close the file
self.mywriter(downloadpage, of) self.mywriter(downloadpage, of)
class ContactPage(BasePage): class ContactPage(BasePage):
@ -2493,10 +2478,11 @@ class ContactPage(BasePage):
# add clearline for proper styling # add clearline for proper styling
# add footer section # add footer section
footer = self.write_footer(counter=0) footer = self.write_footer()
body += (fullclear, footer) body += (fullclear, footer)
# send page out for porcessing # send page out for porcessing
# and close the file
self.mywriter(contactpage, of) self.mywriter(contactpage, of)
class IndividualPage(BasePage): class IndividualPage(BasePage):
@ -2606,14 +2592,16 @@ class IndividualPage(BasePage):
# display ancestor tree # display ancestor tree
if report.options['graph']: if report.options['graph']:
sect12 = self.display_tree() sect12 = self.display_tree()
section += sect12 if sect12 is not None:
section += sect12
# add clearline for proper styling # add clearline for proper styling
# create footer section # create footer section
footer = self.write_footer(counter=0) footer = self.write_footer()
body += (fullclear, footer) body += (fullclear, footer)
# send page out for processing # send page out for processing
# and close the file
self.mywriter(indivdetpage, of) self.mywriter(indivdetpage, of)
def display_attr_list(self, attrlist=None): def display_attr_list(self, attrlist=None):