diff --git a/src/plugins/webreport/NarrativeWeb.py b/src/plugins/webreport/NarrativeWeb.py index 69d0e5c12..7fa666916 100644 --- a/src/plugins/webreport/NarrativeWeb.py +++ b/src/plugins/webreport/NarrativeWeb.py @@ -1,4 +1,3 @@ - # -*- coding: utf-8 -*- #!/usr/bin/env python # @@ -1831,8 +1830,8 @@ class BasePage(object): self.report.user.warn(_("Could not add photo to page"), str(msg)) else: # begin hyperlink - snapshot += self.doc_link(photo_handle, descr, up=True, - usedescr=False) + snapshot += self.doc_link(photo_handle, descr, up = True, + usedescr = False) lnk = (self.report.cur_fname, self.page_title, self.gid) # FIXME. Is it OK to add to the photo_list of report? @@ -2256,7 +2255,7 @@ class BasePage(object): # return hyperlink to its caller return hyper - def media_link(self, handle, img_url, name, up, usedescr =True): + def media_link(self, handle, img_url, name, up, usedescr = True): """ creates and returns a hyperlink to the thumbnail image @@ -4331,210 +4330,231 @@ class SourcePage(BasePage): sourcedetail += section section += Html("h4", _("Citation References"), inline =True) - # ordered list (ol) - ordered = Html("ol") - section += ordered + # ordered list #1, Citation Reference Page... + ordered1 = Html("ol", class_ = "Col1 - CitationReference") + section += ordered1 for (citation_handle, refs) in citation_referents_list: citation = self.dbase_.get_citation_from_handle(citation_handle) if citation: - list = Html("li", citation.get_page()) - ordered += list - # if citation references? + # list item 1 cannot be attached until the end..... + list1 = Html("li", citation.get_page()) + + # is there citation references? if refs: - (ppl_list, fml_list, event_list, place_list, source_list, media_list, repo_list) = refs + (people_list, family_list, event_list, place_list, source_list, media_list, repo_list) = refs + + # ordered list #2, Object Type... + ordered2 = Html("ol", class_ = "Col2 - ObjectType") # Citation Referents have Person objects... - if ppl_list: + if people_list: + + list2 = Html("li", _("Person(s)")) + ordered2 += list2 # only add the person handle if the individual is in the report database, and reove any duplication if any? - ppl_list = [phandle for phandle in ppl_list if check_person_database(phandle, ppl_handle_list)] + ppl_list = [phandle for phandle in people_list if check_person_database(phandle, ppl_handle_list)] # Sort the person list by the individual's surname... ppl_list = sort_people(self.dbase_, ppl_list) - ordered1 = Html("ol") - list1 = Html("li", _("Person(s)")) - ordered1 += list1 + # ordered list #3, Surname... + ordered3 = Html("ol", class_ = "Col3 - Surname") + displayed = [] for (surname, handle_list) in ppl_list: + if surname not in displayed: - ordered2 = Html("ol") - list1 += ordered2 + list3 = Html("li", surname) + ordered3 += list3 - list2 = Html("li", surname) - ordered2 += list2 + # ordered list #4, full name... + ordered4 = Html("ol", clss_ = "Col4 - FullName") - ordered3 = Html("ol") + for handle in handle_list: + individual = self.dbase_.get_person_from_handle(handle) + if individual: - for person_handle in handle_list: - _obj = self.dbase_.get_person_from_handle(person_handle) - if _obj: + url = self.report.build_url_fname_html(handle, "ppl", up = True) + list4 = Html("li", self.person_link(url, individual, _NAME_STYLE_DEFAULT, + gid = individual.get_gramps_id())) + ordered4 += list4 - url = self.report.build_url_fname_html(person_handle, "ppl", up = True) - list3 = Html("li") + self.person_link(url, _obj, _NAME_STYLE_DEFAULT, - gid = _obj.get_gramps_id()) - ordered3 += list3 - list2 += ordered3 - list += ordered1 + list3 += ordered4 + displayed.append(surname) + list2 += ordered3 - # Citation Referents have Family objects... - if fml_list: - ffml_list = set([fhandle for fhandle in fml_list]) + # Citation Referents have Family objects... + if family_list: - ordered1 = Html("ol") - list1 = Html("li", _("Families")) - ordered1 += list1 + list2 = Html("li", _("Families")) + ordered2 += list2 - ordered2 = Html("ol") - list1 += ordered2 + # ordered list, Column 3, Husband and Wife... + ordered3 = Html("ol", class_ = "Col3 - Partners") - for fhandle in fml_list: - _obj = self.dbase_.get_family_from_handle(fhandle) - if _obj: - list2 = Html("li") + for handle in family_list: + family = self.dbase_.get_family_from_handle(fhandle) + if family: - father_handle = _obj.get_father_handle() - mother_handle = _obj.get_mother_handle() - if father_handle: + father_handle = family.get_father_handle() + mother_handle = family.get_mother_handle() + + if (father_handle and check_person_database(father_handle, ppl_handle_list)): father = self.dbase_.get_person_from_handle(father_handle) - father_name = self.get_name(father) - if mother_handle: + + if (mother_handle and check_person_database(mother_handle, ppl_handle_list)): mother = self.dbase_.get_person_from_handle(mother_handle) - mother_name = self.get_name(mother) + if mother and father: - use_link = check_person_database(father_handle, ppl_handle_list) - if use_link: - url = self.report.build_url_fname_html(father_handle, "ppl", up = True) - hlink = Html("span", self.person_link(father, father_handle, - _NAME_STYLE_DEFAULT), class_ = "father fatherNmother") - else: - hlink = father_name - - use_link = check_person_database(mother_handle, ppl_handle_list) - if use_link: - url = self.report.build_url_fname_html(mother_handle, "ppl", up = True) - hlink += Html("span", self.person_link(mother, mother_handle, - _NAME_STYLE_DEFAULT), class_ = "Nmother") - else: - hlink += mother_name + url = self.report.build_url_fname_html(mother_handle, "ppl", up = True) + wlink = Html("li", self.person_link(url, mother, _NAME_STYLE_DEFAULT, + gid = mother.get_gramps_id())) + + url = self.report.build_url_fname_html(father_handle, "ppl", up = True) + hlink = Html("li", self.person_link(url, father, _NAME_STYLE_DEFAULT, + gid = father.get_gramps_id())) elif mother: - use_link = check_person_database(mother_handle, ppl_handle_list) - if use_link: - url = self.report.build_url_fname_html(mother_handle, "ppl", up = True) - hlink = Html("span", self.person_link(mother, mother_handle, - _NAME_STYLE_DEFAULT), class_ = "Nmother") - else: - hlink = mother_name + url = self.report.build_url_fname_html(mother_handle, "ppl", up = True) + wlink = Html("li", self.person_link(url, mother, _NAME_STYLE_DEFAULT, + gid = mother.get_gramps_id())) elif father: - use_link = check_person_database(father_handle, ppl_handle_list) - if use_link: - url = self.report.build_url_fname_html(father_handle, "ppl", up = True) - hlink = Html("span", self.person_link(father, father_handle, - _NAME_STYLE_DEFAULT), class_ = "father") - else: - hlink = father_name - list2 += hlink - ordered1 += list2 - list += ordered1 + url = self.report.build_url_fname_html(father_handle, "ppl", up = True) + hlink = Html("li", self.person_link(url, father, _NAME_STYLE_DEFAULT, + gid = father.get_gramps_id())) + else: + wlink = ' ' + hlink = ' ' + list3 = Html("li", '%s' + _("and") + '%s' % (wlink, hlink)) + ordered3 += lis3 + list2 += ordered3 - # Citation Referents have Event objects... + # Citation Referents have Event Objects... if event_list: - event_list = set([evt_handle for evt_handle in event_list]) - ordered1 = Html("ol") - list1 = Html("li", _("Events")) - ordered1 += list1 + list2 = Html("li", _("Events")) + ordered2 += list2 - ordered2 = Html("ol") - list1 += ordered2 + # get event handles and types for these events... + event_handle_list, event_types = build_event_data(self.dbase_, event_list) + db_event_handles = self.dbase_.get_event_handles() - for evt_handle in event_list: - _obj = self.dbase_.get_event_from_handle(evt_handle) - if _obj: - list2 = Html("li") + self.event_link(_obj.get_type(), evt_handle, - gid = _obj.get_gramps_id(), up =True) - ordered2 += list2 - list += ordered1 + # Ordered list 3, Event Types + ordered3 = Html("ol", class_ = "Col3 - EventTypes") + + # separate events by their types and then thier event handles + for (etype, handle_list) in sort_event_types(self.dbase_, event_types, event_handle_list): + + list3 = Html("li", etype) + ordered3 += list3 + + # Ordered list4, Event Date... + ordered4 = Html("ol", class_ = "Col4 - EventDate") + + for handle in handle_list: + event = self.dbase_.get_event_from_handle(handle) + if (event and handle in db_event_handles): + + list4 = Html("li", self.event_link(_dd.display(event.get_date_object()) or etype, + handle, event.get_gramps_id(), self.up)) + ordered4 += list4 + list3 += ordered4 + list2 += ordered3 # Citation Referents have Place objects... if place_list: - place_list = set([plc_handle for plc_handle in place_list]) + db_place_handles = self.dbase_.iter_place_handles() - ordered1 = Html("ol") - list1 = Html("li", _("Places")) - ordered1 += list1 + list2 = Html("li", _("Places")) + ordered2 += list2 - ordered2 = Html("ol") - list1 += ordered2 + # Column and list 3, Place Link... + ordered3 = Html("ol", class_ = "Col3 - PlaceLink") - for plc_handle in place_list: - _obj = self.dbase_.get_place_from_handle(plc_handle) - if _obj: - list2 = Html("li") + self.place_link(plc_handle, _obj.get_title(), up = True) - ordered2 += list2 - list += ordered1 + for place_handle in place_list: + place = self.dbase_.get_place_from_handle(place_handle) + if (place and place_handle in db_place_handles): - # Citation Referents have Source objects... + list3 = Html("li", self.place_link(place_handle, place.get_title(), + place.get_gramps_id(), self.up)) + ordered3 += list3 + list2 += ordered3 + + # Citation Referents has Source Objects... if source_list: - source_list = set([src_handle for src_handle in source_list]) + db_source_handles = self.dbase_.iter_source_handles() - ordered1 = Html("ol") - list1 = Html("li", _("Sources")) - ordered1 += list1 + list2 = Html("li", _("Sources")) + ordered2 += list2 - ordered2 = Html("ol") - list1 += ordered2 + # Column and list 3, Source Link + ordered3 = Html("ol", class_ = "Col3 - SourceLink") - for src_handle in source_list: - _obj = self.dbase_.get_source_from_handle(src_handle) - if _obj: - list2 = Html("li") + self.source_link(_obj, up = True) - ordered2 += list2 - list += ordered1 + for source_handle in source_list: + source = self.dbase_.get_source_from_handle(source_handle) + if (source and source_handle in db_source_handles): - # Citation Referents have Media objects... - if media_list: - media_list = set([mhandle for mhandle in media_list]) + list3 = Html("li", self.source_link(source, up = self.up)) + ordered3 += list3 + list2 += ordered3 - ordered1 = Html("ol") - list1 = Html("li", _("Media")) - ordered1 += list1 + # Citation Referents have Media Objects... + if (self.create_media and media_list): - ordered2 = Html("ol") - list1 += ordered2 + list2 = Html("li", _("Media")) + ordered2 += list2 - for mhandle in media_list: - _obj = self.dbase_.get_object_from_handle(mhandle) - if _obj: - real_path, newpath = self.report.prepare_copy_media(_obj) - ewpath = self.report.build_url_fname(newpath, up = True) + # Column and list 3, Media Link + ordered3 = Html("ol", class_ = "Col3 - MediaLink") - list2 = Html("li") + self.media_link(mhandle, - newpath, _obj.get_description(), up = True) - ordered2 += list2 - list += ordered1 + for handle in media_list: + media = self.dbase_.get_object_from_handle(handle) + if media: - # Citation Referents have Repository objects... - if repo_list: - repo_list = set([rhandle for rhandle in repo_list]) + mime_type = media.get_mime_type() + if mime_type: + try: + real_path, newpath = self.report.prepare_copy_media(media) + newpath = self.report.build_url_fname(newpath, up = True) - ordered1 = Html("ol") - list1 = Html("li", _("Repositories")) - ordered1 += list1 + list3 = Html("li", self.media_link(handle, newpath, media.get_description(), + self.up, False)) + except: + list3 += _("Media error...") + else: + try: + list3 = Html("li", self.doc_link(handle, media.get_description(), + self.up, False)) + except: + list3 += _("Media error...") - ordered2 = Html("ol") - list1 += ordered2 + ordered3 += list3 + list2 += ordered3 + + # Citation Referents have Repository Objects... + if (self.inc_repositories and repo_list): + + list2 = Html("li", _("Repositories")) + ordered2 += list2 + + # Column and list 3, Repository Link... + ordered3 = tml("ol", class_ = "Col3 - RepositoryLink") for repo_handle in repo_list: - _obj = self.dbase_.get_repository_from_handle(repo_handle) - if _obj: - list2 = Html("li") + self.repository_link(repo_handle, _obj.get_name(), up = True) - ordered2 += list2 - list += ordered1 + repository = self.dbase_.get_repository_from_handle(repo_handle) + if repository: + + list3 = Html("li", self.repository_link(repo_handle, repository.get_name(), True, + repository.get_gramps_id(), self.up)) + ordered3 += list3 + + list2 += ordered3 + list1 += ordered2 + ordered1 += list1 # add clearline for proper styling # add footer section @@ -6901,23 +6921,6 @@ class NavWebReport(Report): self.user.step_progress() self.user.end_progress() - def source_pages(self, source_list, ppl_handle_list): - """ - creates SourceListPage and SourcePage - """ - self.user.begin_progress(_("Narrated Web Site Report"), - _("Creating source pages"), - len(source_list)) - - SourceListPage(self, self.title, source_list.keys()) - - for shandle in source_list: - source = self.database.get_source_from_handle(shandle) - - SourcePage(self, self.title, source, shandle, source_list, ppl_handle_list) - self.user.step_progress() - self.user.end_progress() - def family_pages(self, ppl_handle_list, place_list, place_lat_long): """ creates the FamiliesListPage and FamilyPages @@ -6961,11 +6964,13 @@ class NavWebReport(Report): a dump of all the events sorted by event type, date, and surname for classes EventListPage and EventPage """ + self.dbase_ = self.database + # set up progress bar for event pages; using ind list - event_handle_list, event_types = build_event_data(self.database, ind_list) + event_handle_list, event_types = build_event_data(self.dbase_, self.dbase_.iter_event_handles()) self.user.begin_progress(_("Narrated Web Site Report"), _("Creating event pages"), - len(event_handle_list)) + len(self.dbase_.get_event_handles())) # send all data to the events list page EventListPage(self, self.title, event_types, event_handle_list, ind_list) @@ -6976,6 +6981,23 @@ class NavWebReport(Report): self.user.step_progress() self.user.end_progress() + def source_pages(self, source_list, ppl_handle_list): + """ + creates SourceListPage and SourcePage + """ + self.user.begin_progress(_("Narrated Web Site Report"), + _("Creating source pages"), + len(source_list)) + + SourceListPage(self, self.title, source_list.keys()) + + for shandle in source_list: + source = self.database.get_source_from_handle(shandle) + + SourcePage(self, self.title, source, shandle, source_list, ppl_handle_list) + self.user.step_progress() + self.user.end_progress() + def media_pages(self, source_list): """ creates MediaListPage and MediaPage @@ -8124,42 +8146,19 @@ def _find_death_date(dbase, individual): break return date_out -def build_event_data(dbase, ppl_handle_list): +def build_event_data(dbase_, event_handles): """ - creates a list of event handles and event types for this database + creates a list of event handles and event types for these event handles """ - event_handle_list = [] event_types = [] - for phandle in ppl_handle_list: - person = dbase.get_person_from_handle(phandle) - if person: + for event_handle in event_handles: + event = dbase_.get_event_from_handle(event_handle) + if event: + event_types.append(str(event.get_type())) + event_handle_list.append(event_handle) - evt_ref_list = person.get_event_ref_list() - if evt_ref_list: - for evt_ref in evt_ref_list: - event = dbase.get_event_from_handle(evt_ref.ref) - if event: - - event_types.append(str(event.get_type())) - event_handle_list.append(evt_ref.ref) - - person_family_handle_list = person.get_family_handle_list() - if person_family_handle_list: - for fhandle in person_family_handle_list: - family = dbase.get_family_from_handle(fhandle) - if family: - - family_evt_ref_list = family.get_event_ref_list() - if family_evt_ref_list: - for evt_ref in family_evt_ref_list: - event = dbase.get_event_from_handle(evt_ref.ref) - if event: - event_types.append(str(event.type)) - event_handle_list.append(evt_ref.ref) - - # return event_handle_list and event types to its caller return event_handle_list, event_types def check_person_database(phandle, ppl_handle_list):