Finished EventListPage. Now only need to work out the sorting protion of it... updated stylesheet to match.
svn: r13678
This commit is contained in:
parent
288a20f62d
commit
b90b6f769c
@ -647,11 +647,32 @@ div#EventList table.eventlist tbody tr.BeginName {
|
||||
div#EventList table.eventlist tbody tr td {
|
||||
padding: 4px 0px 4px 0px;
|
||||
}
|
||||
div#EventList table.eventlist tbody tr td.ColumnEvent a,
|
||||
div#EventList table.eventlist tbody tr td.ColumnPerson a,
|
||||
div#EventList table.eventlist tbody tr td.ColumnPartner a {
|
||||
display: block;
|
||||
padding: 4px 0px 4px 10px;
|
||||
div#EventList table.alphaevent {
|
||||
padding: .3em 0 .3em 0;
|
||||
margin: 0;
|
||||
}
|
||||
div#EventList table.alphaevent tbody tr.BeginEvent {
|
||||
border-top: solid 1px #5D835F;
|
||||
}
|
||||
div#EventList table.alphaevent tbody tr td {
|
||||
background-color: #D8F3D6;
|
||||
border-bottom: dashed 1px #5D835F;
|
||||
}
|
||||
div#EventList table.alphaevent tbody tr td:hover {
|
||||
background: none;
|
||||
}
|
||||
div#EventList table.alphaevent tbody tr td.ColumnType {
|
||||
width: 15%;
|
||||
}
|
||||
div#EventList table.alphaevent tbody tr td.ColumnGRAMPSID {
|
||||
width: 15%;
|
||||
}
|
||||
div#EventList table.alphaevent tbody tr td.ColumnDate {
|
||||
width: 15%;
|
||||
}
|
||||
div#EventList table.alphaevent tbody tr td.ColumnPerson {
|
||||
background-color: #FFF;
|
||||
width: 50%;
|
||||
}
|
||||
div#EventDetail h3 {
|
||||
font-size: xxx-large;
|
||||
@ -939,36 +960,6 @@ div#AddressBookList table.addressbook tbody tr td.ColumnWebLinks {
|
||||
width: 8%;
|
||||
}
|
||||
|
||||
/* Gramps Event List by Alphabet
|
||||
------------------------------------------------------ */
|
||||
div#AlphabetEvent {
|
||||
padding: 0;
|
||||
margin: 0 auto;
|
||||
}
|
||||
div#AlphabetEvent table.alphaevent {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
div#AlphabetEvent table.alphaevent tbody tr.BeginEvent {
|
||||
border-top: solid 1px #5D835F;
|
||||
}
|
||||
div#AlphabetEvent table.alphaevent tbody tr td {
|
||||
background-color: #D8F3D6;
|
||||
border-bottom: dashed 1px #5D835F;
|
||||
}
|
||||
div#AlphabetEvent table.alphaevent tbody tr td.ColumnType {
|
||||
width: 15%;
|
||||
}
|
||||
div#AlphabetEvent table.alphaevent tbody tr td.ColumnGRAMPSID {
|
||||
width: 15%;
|
||||
}
|
||||
div#AlphabetEvent table.alphaevent tbody tr td.ColumnDate {
|
||||
width: 15%;
|
||||
}
|
||||
div#AlphabetEvent table.alphaevent tbody tr td.ColumnPerson {
|
||||
width: 50%;
|
||||
}
|
||||
|
||||
/* Subsections
|
||||
----------------------------------------------------- */
|
||||
#Home, #Introduction, #Contact {
|
||||
|
@ -122,18 +122,24 @@ from libhtmlbackend import HtmlBackend
|
||||
# Translatable strings for variables within this plugin
|
||||
# gettext carries a huge footprint with it.
|
||||
AHEAD = _("Attributes")
|
||||
BIRTH = _("Birth")
|
||||
CITY = _("City")
|
||||
COUNTY = _("County")
|
||||
COUNTRY = _("Country")
|
||||
DEATH = _("Death")
|
||||
DHEAD = _("Date")
|
||||
DESCRHEAD = _("Description")
|
||||
_EVENT = _("Eent")
|
||||
GRAMPSID = _("Gramps ID")
|
||||
LATITUDE = _("Latitude")
|
||||
LOCATIONS = _("Alternate Locations")
|
||||
LONGITUDE = _("Longitude")
|
||||
NHEAD = _("Notes")
|
||||
PARENTS = _("Parents")
|
||||
PARISH = _("Church Parish")
|
||||
_PARTNER = _("Partner")
|
||||
PHEAD = _("Place")
|
||||
_PERSON = _("Person")
|
||||
PHONE = _("Phone")
|
||||
POSTAL = _("Postal Code")
|
||||
SHEAD = _("Sources")
|
||||
@ -152,7 +158,7 @@ _NARRATIVESCREEN = "narrative-screen.css"
|
||||
_NARRATIVEPRINT = "narrative-print.css"
|
||||
|
||||
# variables for alphabet_navigation()
|
||||
_PERSON, _PLACE = 0, 1
|
||||
_KEYPERSON, _KEYPLACE, _KEYEVENT, _ALPHAEVENT = 0, 1, 2, 3
|
||||
|
||||
# Web page filename extensions
|
||||
_WEB_EXT = ['.html', '.htm', '.shtml', '.php', '.php3', '.cgi']
|
||||
@ -323,14 +329,11 @@ class BasePage(object):
|
||||
|
||||
if showsrc:
|
||||
srcrefs = self.get_citation_links(attr.get_source_references()) or " "
|
||||
source_row = ("Sources", srcrefs)
|
||||
attr_data_row.append(source_row)
|
||||
attr_data_row.append(("Sources", srcrefs))
|
||||
|
||||
# get attribute note list
|
||||
notelist = attr.get_note_list()
|
||||
notelist = self.display_note_list(notelist) or " "
|
||||
note_row = ("Notes", notelist)
|
||||
attr_data_row.append(note_row)
|
||||
notelist = self.display_note_list(attr.get_note_list() ) or " "
|
||||
attr_data_row.append(("Notes", notelist))
|
||||
|
||||
# display attribute list
|
||||
trow.extend(
|
||||
@ -535,7 +538,7 @@ class BasePage(object):
|
||||
# position 0 = translatable label, position 1 = column class
|
||||
# position 2 = data
|
||||
info = [
|
||||
[_("Event"), "Event", evt_hyper],
|
||||
[_EVENT, "Event", evt_hyper],
|
||||
[DHEAD, "Date", _dd.display(evt.get_date_object() )] ]
|
||||
|
||||
if showplc:
|
||||
@ -592,7 +595,7 @@ class BasePage(object):
|
||||
]
|
||||
|
||||
# finish the label's missing piece
|
||||
header_row[5][0] += _("Parents") if LDSSealedType == "Person" else _("Spouse")
|
||||
header_row[5][0] += PARENTS if LDSSealedType == "Person" else _("Spouse")
|
||||
|
||||
trow.extend(
|
||||
Html("th", label, class_ = "Column" + colclass, inline = True)
|
||||
@ -935,7 +938,7 @@ class BasePage(object):
|
||||
# return footer to its callers
|
||||
return footer
|
||||
|
||||
def write_header(self, title):
|
||||
def write_header(self, title, key):
|
||||
"""
|
||||
Note. 'title' is used as currentsection in the navigation links and
|
||||
as part of the header title.
|
||||
@ -993,25 +996,28 @@ class BasePage(object):
|
||||
head += meta
|
||||
head += links
|
||||
|
||||
# begin header section
|
||||
headerdiv = (Html("div", id = 'header') +
|
||||
Html("h1", html_escape(self.title_str), id = "SiteTitle", inline = True)
|
||||
)
|
||||
body += headerdiv
|
||||
# alpha event pages do not need these things
|
||||
if key is not _ALPHAEVENT:
|
||||
|
||||
header_note = self.report.options['headernote']
|
||||
if header_note:
|
||||
note = db.get_note_from_gramps_id(header_note)
|
||||
note_text = self.get_note_format(note)
|
||||
# begin header section
|
||||
headerdiv = (Html("div", id = 'header') +
|
||||
Html("h1", html_escape(self.title_str), id = "SiteTitle", inline = True)
|
||||
)
|
||||
body += headerdiv
|
||||
|
||||
user_header = Html("div", id = 'user_header')
|
||||
headerdiv += user_header
|
||||
header_note = self.report.options['headernote']
|
||||
if header_note:
|
||||
note = db.get_note_from_gramps_id(header_note)
|
||||
note_text = self.get_note_format(note)
|
||||
|
||||
user_header = Html("div", id = 'user_header')
|
||||
headerdiv += user_header
|
||||
|
||||
# attach note
|
||||
user_header += note_text
|
||||
# attach note
|
||||
user_header += note_text
|
||||
|
||||
# Begin Navigation Menu
|
||||
body += self.display_nav_links(title)
|
||||
# Begin Navigation Menu
|
||||
body += self.display_nav_links(title)
|
||||
|
||||
# return to its caller, page and body
|
||||
return page, body
|
||||
@ -1340,9 +1346,10 @@ class BasePage(object):
|
||||
confidence = None
|
||||
|
||||
tmp.extend("%s: %s" % (label, data)
|
||||
for (label, data) in [(DHEAD, _dd.display(sref.date)),
|
||||
(_PAGE, sref.page),
|
||||
(_CONFIDENCE, confidence)]
|
||||
for (label, data) in [
|
||||
[DHEAD, _dd.display(sref.date)],
|
||||
[_PAGE, sref.page],
|
||||
[_CONFIDENCE, confidence] ]
|
||||
if data)
|
||||
|
||||
tmp.extend("%s: %s" %
|
||||
@ -1598,7 +1605,7 @@ class IndividualListPage(BasePage):
|
||||
showparents = report.options['showparents']
|
||||
|
||||
of = self.report.create_file("individuals")
|
||||
indlistpage, body = self.write_header(_("Individuals"))
|
||||
indlistpage, body = self.write_header(_("Individuals"), _KEYPERSON)
|
||||
|
||||
# begin Individuals division
|
||||
with Html("div", class_ = "content", id = "Individuals") as individuallist:
|
||||
@ -1611,8 +1618,8 @@ class IndividualListPage(BasePage):
|
||||
individuallist += Html("p", msg, id = "description")
|
||||
|
||||
# add alphabet navigation
|
||||
menu_set = get_first_letters(db, person_handle_list, _PERSON)
|
||||
alpha_nav = alphabet_navigation(menu_set)
|
||||
menu_set = get_first_letters(db, person_handle_list, _KEYPERSON)
|
||||
alpha_nav, menu_set = alphabet_navigation(menu_set, _KEYPERSON)
|
||||
if alpha_nav is not None:
|
||||
individuallist += alpha_nav
|
||||
|
||||
@ -1631,16 +1638,16 @@ class IndividualListPage(BasePage):
|
||||
)
|
||||
|
||||
if showbirth:
|
||||
trow += Html("th", _("Birth"), class_ = "ColumnBirth", inline = True)
|
||||
trow += Html("th", BIRTH, class_ = "ColumnBirth", inline = True)
|
||||
|
||||
if showdeath:
|
||||
trow += Html("th", _("Death"), class_ = "ColumnDeath", inline = True)
|
||||
trow += Html("th", DEATH, class_ = "ColumnDeath", inline = True)
|
||||
|
||||
if showpartner:
|
||||
trow += Html("th", _("Partner"), class_ = "ColumnPartner", inline = True)
|
||||
trow += Html("th", _PARTNER, class_ = "ColumnPartner", inline = True)
|
||||
|
||||
if showparents:
|
||||
trow += Html("th", _("Parents"), class_ = "ColumnParents", inline = True)
|
||||
trow += Html("th", PARENTS, class_ = "ColumnParents", inline = True)
|
||||
|
||||
tbody = Html("tbody")
|
||||
table += tbody
|
||||
@ -1788,7 +1795,7 @@ class SurnamePage(BasePage):
|
||||
|
||||
of = self.report.create_file(name_to_md5(surname), "srn")
|
||||
self.up = True
|
||||
surnamepage, body = self.write_header("%s - %s" % (_("Surname"), surname))
|
||||
surnamepage, body = self.write_header("%s - %s" % (_("Surname"), surname), _KEYPERSON)
|
||||
|
||||
# begin SurnameDetail division
|
||||
with Html("div", class_ = "content", id = "SurnameDetail") as surnamedetail:
|
||||
@ -1815,16 +1822,16 @@ class SurnamePage(BasePage):
|
||||
trow += Html("th", _("Name"), class_ = "ColumnName", inline = True)
|
||||
|
||||
if showbirth:
|
||||
trow += Html("th", _("Birth"), class_ = "ColumnBirth", inline = True)
|
||||
trow += Html("th", BIRTH, class_ = "ColumnBirth", inline = True)
|
||||
|
||||
if showdeath:
|
||||
trow += Html("th", _("Death"), class_ = "ColumnDeath", inline = True)
|
||||
trow += Html("th", DEATH, class_ = "ColumnDeath", inline = True)
|
||||
|
||||
if showpartner:
|
||||
trow += Html("th", _("Partner"), class_ = "ColumnPartner", inline = True)
|
||||
trow += Html("th", _PARTNER, class_ = "ColumnPartner", inline = True)
|
||||
|
||||
if showparents:
|
||||
trow += Html("th", _("Parents"), class_ = "ColumnParents", inline = True)
|
||||
trow += Html("th", PARENTS, class_ = "ColumnParents", inline = True)
|
||||
|
||||
# begin table body
|
||||
tbody = Html("tbody")
|
||||
@ -1942,7 +1949,7 @@ class PlaceListPage(BasePage):
|
||||
db = report.database
|
||||
|
||||
of = self.report.create_file("places")
|
||||
placelistpage, body = self.write_header(_("Places"))
|
||||
placelistpage, body = self.write_header(_("Places"), _KEYPLACE)
|
||||
|
||||
# begin places division
|
||||
with Html("div", class_ = "content", id = "Places") as placelist:
|
||||
@ -1955,8 +1962,8 @@ class PlaceListPage(BasePage):
|
||||
placelist += Html("p", msg, id = "description")
|
||||
|
||||
# begin alphabet navigation
|
||||
menu_set = get_first_letters(db, place_handles, _PLACE)
|
||||
alpha_nav = alphabet_navigation(menu_set)
|
||||
menu_set = get_first_letters(db, place_handles, _KEYPLACE)
|
||||
alpha_nav, menu_set = alphabet_navigation(menu_set, _KEYPLACE)
|
||||
if alpha_nav is not None:
|
||||
placelist += alpha_nav
|
||||
|
||||
@ -2030,7 +2037,7 @@ class PlacePage(BasePage):
|
||||
of = self.report.create_file(place.get_handle(), "plc")
|
||||
self.up = True
|
||||
self.page_title = ReportUtils.place_name(db, place_handle)
|
||||
placepage, body = self.write_header(_("Places"))
|
||||
placepage, body = self.write_header(_("Places"), _KEYPLACE)
|
||||
|
||||
# begin PlaceDetail Division
|
||||
with Html("div", class_ = "content", id = "PlaceDetail") as placedetail:
|
||||
@ -2090,13 +2097,19 @@ class PlacePage(BasePage):
|
||||
self.XHTMLWriter(placepage, of)
|
||||
|
||||
class EventListPage(BasePage):
|
||||
def __init__(self, report, title, event_types, event_handle_list, ind_list):
|
||||
"""
|
||||
Will create the event list page
|
||||
|
||||
def __init__(self, report, title, event_dict):
|
||||
@param: event_types: a list of the type in the events database for this class
|
||||
@param: event_handle_list -- a list of event handles
|
||||
#psram: ind_list -- person handles for this database
|
||||
"""
|
||||
BasePage.__init__(self, report, title)
|
||||
db = report.database
|
||||
|
||||
of = self.report.create_file("events")
|
||||
eventslistpage, body = self.write_header(_("Events"))
|
||||
eventslistpage, body = self.write_header(_("Events"), _KEYEVENT)
|
||||
|
||||
# begin events list division
|
||||
with Html("div", class_ = "content", id = "EventList") as eventlist:
|
||||
@ -2104,49 +2117,103 @@ class EventListPage(BasePage):
|
||||
|
||||
msg = _("This page contains an index of all the events in the "
|
||||
"database, sorted by their type, date (if one is present), "
|
||||
"and person’s surname. Clicking on an event’s type "
|
||||
"will take you to that event’s page. Clicking on a "
|
||||
"person’s name will take you to that person’s page. "
|
||||
"The person’s name will only be shown once for their events.")
|
||||
"Clicking on an event’s type will load a page of those type of events.")
|
||||
eventlist += Html("p", msg, id = "description")
|
||||
|
||||
# begin event list table and table head
|
||||
with Html("table", class_ = "infolist eventlist") as table:
|
||||
# get alphabet navigation for class EventListPage
|
||||
alpha_nav, event_types = alphabet_navigation(event_types, _ALPHAEVENT)
|
||||
if alpha_nav is not None:
|
||||
eventlist += alpha_nav
|
||||
|
||||
# begin alphabet event table
|
||||
with Html("table", class_ = "infolist alphaevent") as table:
|
||||
eventlist += table
|
||||
|
||||
thead = Html("thead")
|
||||
table += thead
|
||||
|
||||
# begin table header row
|
||||
trow = Html("tr")
|
||||
thead += trow
|
||||
|
||||
header_row = [
|
||||
[_("Event"), "Event"],
|
||||
[DHEAD, "Date"],
|
||||
[_("Person"), "Person"],
|
||||
[_("Partner"), "Partner"] ]
|
||||
|
||||
trow.extend(
|
||||
Html("th", label, class_ = "Column" + colclass, inline = True)
|
||||
for (label, colclass) in header_row)
|
||||
for (label, colclass) in [
|
||||
[THEAD, "Type"],
|
||||
[GRAMPSID, "GRAMPSID"],
|
||||
[DHEAD, "Date"],
|
||||
[_PERSON, "Person"] ]
|
||||
)
|
||||
|
||||
# begin table body
|
||||
tbody = Html("tbody")
|
||||
table += tbody
|
||||
|
||||
for (person, event_list) in event_dict:
|
||||
# separate events by their type and then thier event handles
|
||||
for (evt_type, datalist) in sort_event_types(db, event_types, event_handle_list):
|
||||
first_event = True
|
||||
|
||||
first = True
|
||||
for (evt_type, sort_date, sort_name, evt, evt_ref, partner) in event_list:
|
||||
for (gid, date, event_handle) in datalist:
|
||||
|
||||
# write out event row
|
||||
tbody += self.write_event_row(person, partner, evt_type, evt, evt_ref, first)
|
||||
event = db.get_event_from_handle(event_handle)
|
||||
|
||||
# show the individual's name only once for their events
|
||||
first = False
|
||||
trow = Html("tr")
|
||||
tbody += trow
|
||||
|
||||
# and clearline for proper styling
|
||||
# and footer section
|
||||
# display Event type if first in the list
|
||||
tcell = Html("td", class_ = "ColumnType", inline = True)
|
||||
trow += tcell
|
||||
if first_event:
|
||||
trow.attr = 'class = "BeginEvent"'
|
||||
tcell += Html("a", evt_type, name = "%s" % evt_type, inline = True)
|
||||
else:
|
||||
tcell += " "
|
||||
|
||||
# GRAMPS ID
|
||||
tcell = Html("td", class_ = "ColumnGRAMPSID", inline = True)
|
||||
trow += tcell
|
||||
if not self.noid and gid:
|
||||
tcell += gid
|
||||
else:
|
||||
tcell += " "
|
||||
|
||||
# event date
|
||||
tcell = Html("td", class_ = "ColumnDate", inline = True)
|
||||
trow += tcell
|
||||
if date and date is not Date.EMPTY:
|
||||
tcell += _dd.display(date)
|
||||
else:
|
||||
tcell += " "
|
||||
|
||||
# Person
|
||||
if evt_type in ["Divorce", "Marriage"]:
|
||||
handle_list = db.find_backlink_handles(event_handle,
|
||||
include_classes = ['Person', 'Family'])
|
||||
else:
|
||||
handle_list = db.find_backlink_handles(event_handle, include_classes=['Person'])
|
||||
first_person = True
|
||||
|
||||
tcell = Html("td", class_ = "ColumnPerson")
|
||||
trow += tcell
|
||||
|
||||
for handle in handle_list:
|
||||
|
||||
person = db.get_person_from_handle(handle)
|
||||
if person:
|
||||
person_name = self.get_name(person)
|
||||
|
||||
if not first_person:
|
||||
tcell += ", "
|
||||
if handle in ind_list:
|
||||
url = self.report.build_url_fname_html(handle, "ppl", True)
|
||||
tcell += self.person_link(url, person, True)
|
||||
else:
|
||||
tcell += person_name
|
||||
else:
|
||||
tcell += " "
|
||||
first_person = False
|
||||
first_event = False
|
||||
|
||||
# add clearline for proper styling
|
||||
# add footer section
|
||||
footer = self.write_footer()
|
||||
body += (fullclear, footer)
|
||||
|
||||
@ -2154,62 +2221,6 @@ class EventListPage(BasePage):
|
||||
# and close the file
|
||||
self.XHTMLWriter(eventslistpage, of)
|
||||
|
||||
def write_event_row(self, person, partner, evt_type, evt, evt_ref, first):
|
||||
"""
|
||||
display the event row for class EventListPage()
|
||||
|
||||
@param: person = person that the event is referenced to
|
||||
@param: partner = only used when the event is either a Marriage or Divorce
|
||||
@param: evt_type = the type of event
|
||||
@param: evt = event
|
||||
@param: evt_ref = event reference
|
||||
@param: first = used for only showing the person once for list of events
|
||||
"""
|
||||
subdirs = False
|
||||
|
||||
# begin table row
|
||||
trow = Html("tr")
|
||||
|
||||
if first:
|
||||
trow.attr = 'class = "BeginName"'
|
||||
|
||||
# get person's hyperlink
|
||||
url = self.report.build_url_fname_html(person.handle, "ppl", subdirs)
|
||||
person_hyper = self.person_link(url, person, True, first, gid = person.gramps_id)
|
||||
|
||||
# get event data
|
||||
"""
|
||||
for more information: see get_event_data()
|
||||
"""
|
||||
event_data = self.get_event_data(evt, evt_ref, False, False, False, False, subdirs, True)
|
||||
trow.extend(
|
||||
Html("td", data or " ", class_ = "Column" + colclass,
|
||||
inline = (not data or colclass == "Event" or colclass == "Date"))
|
||||
for (label, colclass, data) in event_data)
|
||||
|
||||
# determine if same row or not?
|
||||
samerow = (person_hyper == " ")
|
||||
|
||||
# display person hyperlink
|
||||
trow += Html("td", person_hyper, class_ = "ColumnPerson", inline = samerow)
|
||||
|
||||
# get partner hyperlink
|
||||
# display partner if event is either a Marriage or Divorce?
|
||||
partner_hyper = " "
|
||||
if partner is not None:
|
||||
|
||||
# get partner hyperlink
|
||||
url = self.report.build_url_fname_html(partner.handle, "ppl", subdirs)
|
||||
partner_hyper = self.person_link(url, partner, True, gid = partner.gramps_id)
|
||||
|
||||
# determine if same row or not?
|
||||
samerow = (partner_hyper == " ")
|
||||
|
||||
trow += Html("td", partner_hyper, class_ = "ColumnPartner", inline = samerow)
|
||||
|
||||
# return EventList row to its caller
|
||||
return trow
|
||||
|
||||
class EventPage(BasePage):
|
||||
|
||||
def __init__(self, report, title, person, partner, evt_type, event, evt_ref):
|
||||
@ -2219,7 +2230,7 @@ class EventPage(BasePage):
|
||||
subdirs = True
|
||||
|
||||
of = self.report.create_file(evt_ref.ref, "evt")
|
||||
eventpage, body = self.write_header(_("Events"))
|
||||
eventpage, body = self.write_header(_("Events"), _KEYEVENT)
|
||||
|
||||
# start event page division
|
||||
with Html("div", class_ = "content", id = "EventDetail") as eventdetail:
|
||||
@ -2270,7 +2281,7 @@ class EventPage(BasePage):
|
||||
url = self.report.build_url_fname_html(person.handle, "ppl", self.up)
|
||||
person_hyper = self.person_link(url, person, True, gid = person.gramps_id)
|
||||
trow = Html("tr") + (
|
||||
Html("td", _("Person"), class_ = "ColumnAttribute", inline = True),
|
||||
Html("td", _PERSON, class_ = "ColumnAttribute", inline = True),
|
||||
Html("td", person_hyper, class_ = "ColumnPerson")
|
||||
)
|
||||
tbody += trow
|
||||
@ -2280,7 +2291,7 @@ class EventPage(BasePage):
|
||||
url = self.report.build_url_fname_html(partner.handle, "ppl", self.up)
|
||||
partner_hyper = self.person_link(url, partner, True, gid = partner.gramps_id)
|
||||
trow = Html("tr") + (
|
||||
Html("td", _("Partner"), class_ = "ColumnAttribute", inline = True),
|
||||
Html("td", _PARTNER, class_ = "ColumnAttribute", inline = True),
|
||||
Html("td", partner_hyper, class_ = "ColumnPartner")
|
||||
)
|
||||
tbody += trow
|
||||
@ -2396,7 +2407,7 @@ class MediaPage(BasePage):
|
||||
|
||||
self.copy_thumbnail(handle, media)
|
||||
self.page_title = media.get_description()
|
||||
mediapage, body = self.write_header("%s - %s" % (_("Media"), self.page_title))
|
||||
mediapage, body = self.write_header("%s - %s" % (_("Media"), self.page_title), _KEYPERSON)
|
||||
|
||||
# begin MediaDetail division
|
||||
with Html("div", class_ = "content", id = "GalleryDetail") as mediadetail:
|
||||
@ -2691,10 +2702,10 @@ class SurnameListPage(BasePage):
|
||||
|
||||
if order_by == self.ORDER_BY_NAME:
|
||||
of = self.report.create_file(filename)
|
||||
surnamelistpage, body = self.write_header(_('Surnames'))
|
||||
surnamelistpage, body = self.write_header(_('Surnames'), _KEYPERSON)
|
||||
else:
|
||||
of = self.report.create_file("surnames_count")
|
||||
surnamelistpage, body = self.write_header(_('Surnames by person count'))
|
||||
surnamelistpage, body = self.write_header(_('Surnames by person count'), _KEYPERSON)
|
||||
|
||||
# begin surnames division
|
||||
with Html("div", class_ = "content", id = "surnames") as surnamelist:
|
||||
@ -2710,8 +2721,8 @@ class SurnameListPage(BasePage):
|
||||
# add alphabet navigation...
|
||||
# only if surname list not surname count
|
||||
if order_by == self.ORDER_BY_NAME:
|
||||
menu_set = get_first_letters(db, person_handle_list, _PERSON)
|
||||
alpha_nav = alphabet_navigation(menu_set)
|
||||
menu_set = get_first_letters(db, person_handle_list, _KEYPERSON)
|
||||
alpha_nav, menu_set = alphabet_navigation(menu_set, _KEYPERSON)
|
||||
if alpha_nav is not None:
|
||||
surnamelist += alpha_nav
|
||||
|
||||
@ -2819,7 +2830,7 @@ class IntroductionPage(BasePage):
|
||||
db = report.database
|
||||
|
||||
of = self.report.create_file(report.intro_fname)
|
||||
intropage, body = self.write_header(_('Introduction'))
|
||||
intropage, body = self.write_header(_('Introduction'), _KEYPERSON)
|
||||
|
||||
# begin Introduction division
|
||||
with Html("div", class_ = "content", id = "Introduction") as section:
|
||||
@ -2856,7 +2867,7 @@ class HomePage(BasePage):
|
||||
db = report.database
|
||||
|
||||
of = self.report.create_file("index")
|
||||
homepage, body = self.write_header(_('html|Home'))
|
||||
homepage, body = self.write_header(_('Home'), _KEYPERSON)
|
||||
|
||||
# begin home division
|
||||
with Html("div", class_ = "content", id = "Home") as section:
|
||||
@ -2893,7 +2904,7 @@ class SourceListPage(BasePage):
|
||||
source_dict = {}
|
||||
|
||||
of = self.report.create_file("sources")
|
||||
sourcelistpage, body = self.write_header(_("Sources"))
|
||||
sourcelistpage, body = self.write_header(_("Sources"), _KEYPERSON)
|
||||
|
||||
# begin source list division
|
||||
with Html("div", class_ = "content", id = "Sources") as sourceslist:
|
||||
@ -2964,7 +2975,7 @@ class SourcePage(BasePage):
|
||||
|
||||
of = self.report.create_file(source.get_handle(), "src")
|
||||
self.up = True
|
||||
sourcepage, body = self.write_header(_('Sources'))
|
||||
sourcepage, body = self.write_header(_('Sources'), _KEYPERSON)
|
||||
|
||||
# begin source detail division
|
||||
with Html("div", class_ = "content", id = "SourceDetail") as section:
|
||||
@ -3032,7 +3043,7 @@ class MediaListPage(BasePage):
|
||||
db = report.database
|
||||
|
||||
of = self.report.create_file("media")
|
||||
medialistpage, body = self.write_header(_('Media'))
|
||||
medialistpage, body = self.write_header(_('Media'), _KEYPERSON)
|
||||
|
||||
# begin gallery division
|
||||
with Html("div", class_ = "content", id = "Gallery") as section:
|
||||
@ -3140,7 +3151,7 @@ class DownloadPage(BasePage):
|
||||
return
|
||||
|
||||
of = self.report.create_file("download")
|
||||
downloadpage, body = self.write_header(_('Download'))
|
||||
downloadpage, body = self.write_header(_('Download'), _KEYPERSON)
|
||||
|
||||
# begin download page and table
|
||||
with Html("div", class_ = "content", id = "Download") as download:
|
||||
@ -3247,7 +3258,7 @@ class ContactPage(BasePage):
|
||||
db = report.database
|
||||
|
||||
of = self.report.create_file("contact")
|
||||
contactpage, body = self.write_header(_('Contact'))
|
||||
contactpage, body = self.write_header(_('Contact'), _KEYPERSON)
|
||||
|
||||
# begin contact division
|
||||
with Html("div", class_ = "content", id = "Contact") as section:
|
||||
@ -3328,7 +3339,7 @@ class IndividualPage(BasePage):
|
||||
|
||||
of = self.report.create_file(person.handle, "ppl")
|
||||
self.up = True
|
||||
indivdetpage, body = self.write_header(self.sort_name)
|
||||
indivdetpage, body = self.write_header(self.sort_name, _KEYPERSON)
|
||||
|
||||
# begin individualdetail division
|
||||
with Html("div", class_ = "content", id = 'IndividualDetail') as individualdetail:
|
||||
@ -3969,7 +3980,7 @@ class IndividualPage(BasePage):
|
||||
|
||||
# begin parents division
|
||||
with Html("div", class_ = "subsection", id = "parents") as section:
|
||||
section += Html("h4", _("Parents"), inline = True)
|
||||
section += Html("h4", PARENTS, inline = True)
|
||||
|
||||
# begin parents table
|
||||
with Html("table", class_ = "infolist") as table:
|
||||
@ -4272,9 +4283,9 @@ class IndividualPage(BasePage):
|
||||
elif gender == Person.MALE:
|
||||
relstr = _("Wife")
|
||||
else:
|
||||
relstr = _("Partner")
|
||||
relstr = _PARTNER
|
||||
else:
|
||||
relstr = _("Partner")
|
||||
relstr = _PARTNER
|
||||
|
||||
partner_handle = ReportUtils.find_spouse(self.person, family)
|
||||
if partner_handle:
|
||||
@ -4373,7 +4384,7 @@ class IndividualPage(BasePage):
|
||||
# position 0 = translatable label, position 1 = column class, and
|
||||
# position 2 = data
|
||||
event_header_row = [
|
||||
(_("Event"), "Event"),
|
||||
(_EVENT, "Event"),
|
||||
(DHEAD, "Date") ]
|
||||
|
||||
if showplc:
|
||||
@ -4449,7 +4460,7 @@ class RepositoryListPage(BasePage):
|
||||
db = report.database
|
||||
|
||||
of = self.report.create_file("repositories")
|
||||
repolistpage, body = self.write_header(_("Repositories"))
|
||||
repolistpage, body = self.write_header(_("Repositories"), _KEYPERSON)
|
||||
|
||||
# begin RepositoryList division
|
||||
with Html("div", class_ = "content", id = "RepositoryList") as repositorylist:
|
||||
@ -4524,7 +4535,7 @@ class RepositoryPage(BasePage):
|
||||
|
||||
of = self.report.create_file(handle, 'repo')
|
||||
self.up = True
|
||||
repositorypage, body = self.write_header(_('Repositories'))
|
||||
repositorypage, body = self.write_header(_('Repositories'), _KEYPERSON)
|
||||
|
||||
# begin RepositoryDetail division and page title
|
||||
with Html("div", class_ = "content", id = "RepositoryDetail") as repositorydetail:
|
||||
@ -4594,7 +4605,7 @@ class AddressBookListPage(BasePage):
|
||||
of = self.report.create_file("addressbook")
|
||||
|
||||
# Add xml, doctype, meta and stylesheets
|
||||
addressbooklistpage, body = self.write_header("%s - %s" % (title, _("Address Book List")))
|
||||
addressbooklistpage, body = self.write_header("%s - %s" % (title, _("Address Bookt")), _KEYPERSON)
|
||||
|
||||
# begin AddressBookList division
|
||||
with Html("div", class_ = "content", id = "AddressBookList") as addressbooklist:
|
||||
@ -4715,7 +4726,7 @@ class AddressBookPage(BasePage):
|
||||
|
||||
# set the file name and open file
|
||||
of = self.report.create_file(person_handle, "addr")
|
||||
addressbookpage, body = self.write_header("%s - %s" % (title, _("Address Book")))
|
||||
addressbookpage, body = self.write_header("%s - %s" % (title, _("Address Book")), _KEYPERSON)
|
||||
|
||||
# begin address book page division and section title
|
||||
with Html("div", class_ = "content", id = "AddressBookDetail") as addressbookdetail:
|
||||
@ -4940,9 +4951,9 @@ class NavWebReport(Report):
|
||||
# build classes EventListPage and EventPage
|
||||
# build the events dictionary only if event pages are being created?
|
||||
if self.inc_events:
|
||||
event_dict = []
|
||||
self.build_events(ind_list, event_dict)
|
||||
self.event_pages(event_dict)
|
||||
event_dict, event_types, event_handle_list = [], [], []
|
||||
self.build_events(ind_list, event_dict, event_types, event_handle_list)
|
||||
self.event_pages(event_dict, event_types, event_handle_list, ind_list)
|
||||
|
||||
# build classes SourceListPage and SourcePage
|
||||
self.source_pages(source_list)
|
||||
@ -5038,19 +5049,21 @@ class NavWebReport(Report):
|
||||
from_path = os.path.join(const.IMAGE_DIR, fname)
|
||||
self.copy_file(from_path, fname, "images")
|
||||
|
||||
def build_events(self, ind_list, event_dict):
|
||||
def build_events(self, ind_list, event_dict, event_types, event_handle_list):
|
||||
"""
|
||||
build a list of events for classes EventListPage and EventPage
|
||||
|
||||
@param: ind_list = list of handles for persons in this database
|
||||
@param: event_dict = a list of events from ind_list
|
||||
@param: event_types -- will hold the difrferent event types for this database
|
||||
@param: event_handle_list -- a list of event handles to be sorted by type
|
||||
"""
|
||||
db = self.database
|
||||
|
||||
for person_handle in ind_list:
|
||||
person = db.get_person_from_handle(person_handle)
|
||||
|
||||
# begin events list for each person
|
||||
# begin events list for each new person
|
||||
event_list = []
|
||||
|
||||
# get sort name for sorting later
|
||||
@ -5073,6 +5086,18 @@ class NavWebReport(Report):
|
||||
# get event type
|
||||
evt_type = get_event_type(event, evt_ref)
|
||||
|
||||
# get event types for class EventsListPage
|
||||
etype = None
|
||||
_type = event.type.xml_str()
|
||||
for xtype in EventType._DATAMAP:
|
||||
if xtype[2] == _type:
|
||||
etype = xtype[1]
|
||||
break
|
||||
|
||||
if etype is not None:
|
||||
event_types.append(etype)
|
||||
event_handle_list.append(evt_ref.ref)
|
||||
|
||||
# get sot date as year/month/day, 2009/09/09,
|
||||
# or 0000/00/00 for non-existing date
|
||||
event_date = event.get_date_object()
|
||||
@ -5092,6 +5117,18 @@ class NavWebReport(Report):
|
||||
# get event type
|
||||
evt_type = get_event_type(event, evt_ref)
|
||||
|
||||
# get event types for class EventsListPage
|
||||
etype = None
|
||||
_type = event.type.xml_str()
|
||||
for xtype in EventType._DATAMAP:
|
||||
if xtype[2] == _type:
|
||||
etype = xtype[1]
|
||||
break
|
||||
|
||||
if etype is not None:
|
||||
event_types.append(etype)
|
||||
event_handle_list.append(evt_ref.ref)
|
||||
|
||||
# get sot date as year/month/day, see above for further info
|
||||
event_date = event.get_date_object()
|
||||
year = event_date.get_year() or 0
|
||||
@ -5100,8 +5137,7 @@ class NavWebReport(Report):
|
||||
sort_date = '%04d/%02d/%02d' % (year, month, day)
|
||||
|
||||
# add event data
|
||||
event_list.append([evt_type, sort_date, sort_name, event,
|
||||
evt_ref, partner])
|
||||
event_list.append([evt_type, sort_date, sort_name, event, evt_ref, partner])
|
||||
|
||||
# sort the event_list
|
||||
event_list.sort()
|
||||
@ -5109,8 +5145,11 @@ class NavWebReport(Report):
|
||||
# combine person and their events together
|
||||
event_dict.append([person, event_list])
|
||||
|
||||
# return the events for class EventListPage and EventPage
|
||||
return event_dict
|
||||
# sort the types alphabetically
|
||||
event_types.sort()
|
||||
|
||||
# return the events for EventListPage and EventPage
|
||||
return event_dict, event_types, event_handle_list
|
||||
|
||||
def build_attributes(self, person):
|
||||
""" build a list of attributes for each person """
|
||||
@ -5226,20 +5265,26 @@ class NavWebReport(Report):
|
||||
PlacePage(self, self.title, place, source_list, place_list)
|
||||
self.progress.step()
|
||||
|
||||
def event_pages(self, event_dict):
|
||||
def event_pages(self, event_dict, event_types, event_handle_list, ind_list):
|
||||
"""
|
||||
a dump of all the events sorted by event type, date, and surname
|
||||
for classes EventListPage and EventPage
|
||||
"""
|
||||
self.progress.set_pass(_('Creating event pages'), len(event_dict))
|
||||
|
||||
@param: event_dict -- all the data for class EventPage
|
||||
@param: event_types -- a list of all the event types in this database
|
||||
@param: event_handle_list -- a list of the event handles in the database to be used
|
||||
"""
|
||||
# send all data to the events list page
|
||||
EventListPage(self, self.title, event_dict)
|
||||
EventListPage(self, self.title, event_types, event_handle_list, ind_list)
|
||||
|
||||
# set up progress bar for event pages
|
||||
self.progress.set_pass(_("Creating event pages"), len(event_dict))
|
||||
|
||||
for (person, event_list) in event_dict:
|
||||
self.progress.step()
|
||||
|
||||
for (evt_type, sort_date, sort_name, event, evt_ref, partner) in event_list:
|
||||
self.progress.step()
|
||||
|
||||
# create individual event page
|
||||
EventPage(self, self.title, person, partner, evt_type, event, evt_ref)
|
||||
@ -5978,6 +6023,30 @@ def sort_people(db, handle_list):
|
||||
|
||||
return sorted_lists
|
||||
|
||||
def sort_event_types(db, event_types, event_handle_list):
|
||||
"""
|
||||
sort a list of event types and group them by their type
|
||||
|
||||
@param: event_types -- a dict of event types
|
||||
@param: event_handle_list -- all event handles in this database
|
||||
"""
|
||||
|
||||
event_dict = dict( (evt_type, []) for evt_type in event_types)
|
||||
|
||||
for handle in event_handle_list:
|
||||
|
||||
event = db.get_event_from_handle(handle)
|
||||
event_type = event.type.xml_str()
|
||||
|
||||
# add the stuff from this event
|
||||
if event_type in event_dict:
|
||||
event_dict[event_type].append(
|
||||
(event.gramps_id, event.get_date_object(), handle)
|
||||
)
|
||||
|
||||
# return a list of tuples, one per event
|
||||
return ( (event_type, event_list) for (event_type, event_list) in event_dict.iteritems() )
|
||||
|
||||
# Modified _get_regular_surname from WebCal.py to get prefix, first name, and suffix
|
||||
def _get_short_name(gender, name):
|
||||
""" Will get prefix and suffix for all people passed through it """
|
||||
@ -6021,7 +6090,7 @@ def get_first_letters(db, handle_list, key):
|
||||
first_letters = []
|
||||
|
||||
for handle in handle_list:
|
||||
if key == _PERSON:
|
||||
if key == _KEYPERSON:
|
||||
keyname = __get_person_keyname(db, handle)
|
||||
else:
|
||||
keyname = __get_place_keyname(db, handle)
|
||||
@ -6032,16 +6101,15 @@ def get_first_letters(db, handle_list, key):
|
||||
|
||||
return first_letters
|
||||
|
||||
def alphabet_navigation(menu_set):
|
||||
def alphabet_navigation(menu_set, alphakey):
|
||||
"""
|
||||
Will create the alphabet navigation bar for classes IndividualListPage,
|
||||
SurnameListPage, PlaceListPage, and EventList
|
||||
|
||||
@param: menu_set -- a dictionary of either sorted letters or words
|
||||
@param: menu_set -- a dictionary of either letters or words
|
||||
@param: alphakey -- either Person, Place, or AlphaEvent
|
||||
"""
|
||||
|
||||
sorted_set = {}
|
||||
|
||||
# The comment below from the glibc locale sv_SE in
|
||||
# localedata/locales/sv_SE :
|
||||
#
|
||||
@ -6056,6 +6124,7 @@ def alphabet_navigation(menu_set):
|
||||
#
|
||||
(lang_country, modifier ) = locale.getlocale()
|
||||
ltr = get_first_letters
|
||||
|
||||
for menu_item in menu_set:
|
||||
if menu_item in sorted_set:
|
||||
sorted_set[menu_item] += 1
|
||||
@ -6069,40 +6138,46 @@ def alphabet_navigation(menu_set):
|
||||
sorted_alpha_index = [(menu_item) for menu_item in sorted_alpha_index if menu_item != ","]
|
||||
|
||||
# remove any single spaces from the letter set also
|
||||
sorted_alpha_index = [(menu_item) for menu_item in sorted_alpha_index if menu_item != " "]
|
||||
# Event Types can and do have spaces, so leave them alone for now...
|
||||
if alphakey is not _ALPHAEVENT:
|
||||
sorted_alpha_index = [(ltr) for ltr in sorted_alpha_index if ltr != " "]
|
||||
|
||||
# if no letters, return None back to its callers
|
||||
# if no letters or words, return None to its callers
|
||||
if not sorted_alpha_index:
|
||||
return None
|
||||
|
||||
# begin alphabet division
|
||||
num_ltrs = len(sorted_alpha_index)
|
||||
num_of_cols = 34 if alphakey is not _ALPHAEVENT else 9
|
||||
num_of_rows = ((num_ltrs // num_of_cols) + 1)
|
||||
|
||||
# begin alphabet navigation division
|
||||
with Html("div", id = "alphabet") as alphabetnavigation:
|
||||
|
||||
num_ltrs = len(sorted_alpha_index)
|
||||
nrows = ((num_ltrs // 34) + 1)
|
||||
|
||||
index = 0
|
||||
for row in xrange(nrows):
|
||||
for row in xrange(num_of_rows):
|
||||
unordered = Html("ul")
|
||||
alphabetnavigation += unordered
|
||||
|
||||
cols = 0
|
||||
while (cols <= 34 and index < num_ltrs):
|
||||
while (cols <= num_of_cols and index < num_ltrs):
|
||||
list = Html("li", inline = True)
|
||||
unordered += list
|
||||
|
||||
menu_item = sorted_alpha_index[index]
|
||||
if lang_country == "sv_SE" and ltr == u'V':
|
||||
if lang_country == "sv_SE" and menu_item == u'V':
|
||||
hyper = Html("a", "V,W", href = "#V,W", alt = "V,W")
|
||||
else:
|
||||
hyper = Html("a", menu_item, href = "#%s" % menu_item, alt = html_escape(menu_item))
|
||||
list += hyper
|
||||
|
||||
cols += 1
|
||||
# increase letter/ word in sorted_alpha_index
|
||||
index += 1
|
||||
cols += 1
|
||||
num_of_rows -= 1
|
||||
|
||||
# return alphabet navigation to its callers
|
||||
return alphabetnavigation
|
||||
# return alphabet navigation, and menu_set to its callers
|
||||
# EventListPage will reuse sorted_alpha_index
|
||||
return alphabetnavigation, sorted_alpha_index
|
||||
|
||||
def _has_webpage_extension(url):
|
||||
"""
|
||||
|
Loading…
Reference in New Issue
Block a user