From 5791788f0e33ab3363ba11ecfb3273e388c1f571 Mon Sep 17 00:00:00 2001 From: Serge Noiraud Date: Sat, 13 May 2017 08:07:32 +0200 Subject: [PATCH] Narrative web features: 5592 + 5408 + 10031 (#389) * Feature: 5592 show more details + 5408 children dates * NarrativeWeb: another translation problem. * Narrativeweb: different locales. * Feature 10031: maps not displaying all events --- gramps/plugins/webreport/narrativeweb.py | 194 ++++++++++++++++++----- 1 file changed, 152 insertions(+), 42 deletions(-) diff --git a/gramps/plugins/webreport/narrativeweb.py b/gramps/plugins/webreport/narrativeweb.py index c24f8bd5c..c044b8980 100644 --- a/gramps/plugins/webreport/narrativeweb.py +++ b/gramps/plugins/webreport/narrativeweb.py @@ -126,6 +126,7 @@ from gramps.gen.display.place import displayer as _pd from gramps.gen.proxy import CacheProxyDb from gramps.plugins.lib.libhtmlconst import _CHARACTER_SETS, _CC, _COPY_OPTIONS from gramps.gen.datehandler import get_date +from gramps.gen.utils.db import get_birth_or_fallback, get_death_or_fallback # import HTML Class from src/plugins/lib/libhtml.py from gramps.plugins.lib.libhtml import Html, xml_lang @@ -764,28 +765,52 @@ class BasePage: ) table = table + trow if table is not None else trow - tcell = Html("td", class_="ColumnValue") + tcell = Html("td", class_="ColumnValue", close=False) trow += tcell - ordered = Html("ol") - tcell += ordered - childlist = [child_ref.ref for child_ref in childlist] + with Html("table", class_="infolist eventlist") as table2: + thead = Html("thead") + table2 += thead + header = Html("tr") - # add individual's children event places to family map... - if self.familymappages: - for handle in childlist: - child = self.r_db.get_person_from_handle(handle) - if child: - self._get_event_place(child, place_lat_long) + header.extend( + Html("th", label, class_=colclass, inline=True) + for (label, colclass) in [ + [self._("Name"), "ColumnName"], + [self._("Birth Date"), "ColumnDate"], + [self._("Death Date"), "ColumnDate"], + ] + ) + thead += header - children = add_birthdate(self.r_db, childlist) - if birthorder: - children = sorted(children) + # begin table body + tbody = Html("tbody") + table2 += tbody - ordered.extend( - (Html("li") + self.display_child_link(chandle)) - for birth_date, chandle in children - ) + childlist = [child_ref.ref for child_ref in childlist] + + # add individual's children event places to family map... + if self.familymappages: + for handle in childlist: + child = self.r_db.get_person_from_handle(handle) + if child: + self._get_event_place(child, place_lat_long) + + children = add_birthdate(self.r_db, childlist, self.rlocale) + if birthorder: + children = sorted(children) + + tbody.extend( + ( + Html("tr", inline=True) + + Html("td", inline=True, close=False) + + self.display_child_link(chandle) + + Html("td", birth, inline=True) + + Html("td", death, inline=True) + ) + for birth_date, birth, death, chandle in children + ) + trow += table2 # family LDS ordinance list family_lds_ordinance_list = family.get_lds_ord_list() @@ -819,6 +844,23 @@ class BasePage: self.display_attr_list(family_attribute_list, attrtable) return table + def display_dates(self, handle): + """ + used to display the birth date + + @param: handle -- handle to the person + """ + birth = death = "" + person = self.r_db.get_person_from_handle(handle) + if person: + bd_event = get_birth_or_fallback(self.r_db, child) + if bd_event: + birth = self.rlocale.get_date(bd_event.get_date_object()) + dd_event = get_death_or_fallback(self.r_db, child) + if dd_event: + death = self.rlocale.get_date(dd_event.get_date_object()) + return birth, death + def complete_people(self, tcell, first_person, handle_list, uplink=True): """ completes the person column for classes EventListPage and EventPage @@ -982,7 +1024,7 @@ class BasePage: for notehandle in notelist: this_note = self.r_db.get_note_from_handle(notehandle) if this_note is not None: - notesection.extend(Html("i", str(this_note.type), + notesection.extend(Html("i", self._(this_note.type.xml_str()), class_="NoteType")) notesection.extend(self.get_note_format(this_note, True)) return notesection @@ -1105,14 +1147,8 @@ class BasePage: latitude, longitude = conv_lat_lon(latitude, longitude, "D.D8") if latitude is not None: etype = event.get_type() - - # only allow Birth, Death, Census, Marriage, - # and Divorce events... - if etype in [EventType.BIRTH, EventType.DEATH, - EventType.CENSUS, - EventType.MARRIAGE, EventType.DIVORCE]: - place_lat_long.append([latitude, longitude, placetitle, - place_handle, event_date, etype]) + place_lat_long.append([latitude, longitude, placetitle, + place_handle, event_date, etype]) def _get_event_place(self, person, place_lat_long): """ @@ -2757,6 +2793,18 @@ class BasePage: tcell += self.new_person_link(partner.get_handle(), uplink=True, person=partner) + birth = death = "" + bd_event = get_birth_or_fallback(self.r_db, partner) + if bd_event: + birth = self.rlocale.get_date(bd_event.get_date_object()) + dd_event = get_death_or_fallback(self.r_db, partner) + if dd_event: + death = self.rlocale.get_date(dd_event.get_date_object()) + + if death == "": + death = "..." + tcell += " ( * ", birth, " + ", death, " )" + return trow def display_child_link(self, chandle): @@ -3131,7 +3179,7 @@ class BasePage: """ list_style = "1", "a", "I", "A", "i" ordered = Html("ol", class_="Col1", role="Volume-n-Page") - ordered.attr += "type = %s" % list_style[depth] + ordered.attr += " type=%s" % list_style[depth] if depth > len(list_style): return "" # Sort by the name of the object at the bkref_class, bkref_handle @@ -6209,7 +6257,7 @@ class PersonPages(BasePage): elif first_surname: first_surname = False tcell += Html("a", html_escape(surname), - title="Surnames " + surname) + title=self._("Surnames") + " " + surname) else: tcell += " " @@ -6920,12 +6968,22 @@ class PersonPages(BasePage): if win(): thumbnail_url = thumbnail_url.replace('\\', "/") url = self.report.build_url_fname_html(person.handle, "ppl", True) + birth = death = "" + bd_event = get_birth_or_fallback(self.r_db, person) + if bd_event: + birth = self.rlocale.get_date(bd_event.get_date_object()) + dd_event = get_death_or_fallback(self.r_db, person) + if dd_event: + death = self.rlocale.get_date(dd_event.get_date_object()) + if death == "": + death = "..." + value = person_name + "
*", birth, "
+", death if thumbnail_url is None: - boxbg += Html("a", href=url, class_="noThumb") + person_name + boxbg += Html("a", href=url, class_="noThumb") + value else: thumb = Html("span", class_="thumbnail") + ( Html("img", src=thumbnail_url, alt="Image: " + person_name)) - boxbg += Html("a", href=url) + thumb + person_name + boxbg += Html("a", href=url) + thumb + value shadow = Html( "div", class_="shadow", inline=True, style="top: %dpx; left: %dpx;" % (top + _SHADOW, xoff + _SHADOW)) @@ -7144,12 +7202,12 @@ class PersonPages(BasePage): childlist = family.get_child_ref_list() childlist = [child_ref.ref for child_ref in childlist] - children = add_birthdate(self.r_db, childlist) + children = add_birthdate(self.r_db, childlist, self.rlocale) if birthorder: children = sorted(children) - for birthdate, handle in children: + for birthdate, birth, death, handle in children: if handle == self.person.get_handle(): child_ped(ol_html) elif handle: @@ -7411,13 +7469,32 @@ class PersonPages(BasePage): @param: rel -- The relation """ tcell1 = Html("td", title, class_="ColumnAttribute", inline=True) - tcell2 = Html("td", class_="ColumnValue") + tcell2 = Html("td", class_="ColumnValue", close=False, inline=True) tcell2 += self.new_person_link(handle, uplink=True) if rel and rel != ChildRefType(ChildRefType.BIRTH): tcell2 += ''.join([' '] *3 + ['(%s)']) % str(rel) + person = self.r_db.get_person_from_handle(handle) + birth = death = "" + if person: + bd_event = get_birth_or_fallback(self.r_db, person) + if bd_event: + birth = self.rlocale.get_date(bd_event.get_date_object()) + dd_event = get_death_or_fallback(self.r_db, person) + if dd_event: + death = self.rlocale.get_date(dd_event.get_date_object()) + + tcell3 = Html("td", birth, class_="ColumnDate", + inline=False, close=False, indent=False) + + tcell4 = Html("td", death, class_="ColumnDate", + inline=True, close=False, indent=False) + + tcell2 += tcell3 + tcell2 += tcell4 + # return table columns to its caller return tcell1, tcell2 @@ -7504,7 +7581,8 @@ class PersonPages(BasePage): except: reln = self._("Not siblings") - reln = "    " + reln + val1 = "    " + reln = val1 + reln # Now output reln, child_link, (frel, mrel) frel = child_ref.get_father_relation() mrel = child_ref.get_mother_relation() @@ -7515,10 +7593,27 @@ class PersonPages(BasePage): trow = Html("tr") + ( Html("td", reln, class_="ColumnAttribute", inline=True)) - tcell = Html("td", class_="ColumnValue", inline=True) - tcell += "    " + tcell = Html("td", val1, class_="ColumnValue", inline=True) tcell += self.display_child_link(child_handle) + + birth = death = "" + bd_event = get_birth_or_fallback(self.r_db, child) + if bd_event: + birth = self.rlocale.get_date(bd_event.get_date_object()) + dd_event = get_death_or_fallback(self.r_db, child) + if dd_event: + death = self.rlocale.get_date(dd_event.get_date_object()) + + tcell2 = Html("td", birth, class_="ColumnDate", + inline=True) + + tcell3 = Html("td", death, class_="ColumnDate", + inline=True) + trow += tcell + trow += tcell2 + trow += tcell3 + tcell = Html("td", frelmrel, class_="ColumnValue", inline=True) trow += tcell @@ -7603,6 +7698,8 @@ class PersonPages(BasePage): for (label, colclass) in [ (self._("Relation to main person"), "ColumnAttribute"), (self._("Name"), "ColumnValue"), + (self._("Birth date"), "ColumnValue"), + (self._("Death date"), "ColumnValue"), (self._("Relation within this family " "(if not by birth)"), "ColumnValue") @@ -7610,7 +7707,6 @@ class PersonPages(BasePage): ) tbody = Html("tbody") - table += tbody all_family_handles = list(parent_list) (birthmother, birthfather) = self.rel_class.get_birth_parents( @@ -7623,7 +7719,7 @@ class PersonPages(BasePage): # Display this family self.display_ind_parent_family(birthmother, birthfather, - family, table, first) + family, tbody, first) first = False if self.report.options['showhalfsiblings']: @@ -7633,11 +7729,12 @@ class PersonPages(BasePage): self.display_step_families( family.get_father_handle(), family, all_family_handles, - birthmother, birthfather, table) + birthmother, birthfather, tbody) self.display_step_families( family.get_mother_handle(), family, all_family_handles, - birthmother, birthfather, table) + birthmother, birthfather, tbody) + table += tbody return section def pedigree_person(self, person): @@ -10601,12 +10698,18 @@ def _has_webpage_extension(url): """ return any(url.endswith(ext) for ext in _WEB_EXT) -def add_birthdate(dbase, ppl_handle_list): +def add_birthdate(dbase, ppl_handle_list, rlocale): """ This will sort a list of child handles in birth order + For each entry in the list, we'll have : + birth date + The transtated birth date for the configured locale + The transtated death date for the configured locale + The handle for the child @param: dbase -- The database to use @param: ppl_handle_list -- the handle for the people + @param: rlocale -- the locale for date translation """ sortable_individuals = [] for person_handle in ppl_handle_list: @@ -10614,11 +10717,18 @@ def add_birthdate(dbase, ppl_handle_list): person = dbase.get_person_from_handle(person_handle) if person: birth_ref = person.get_birth_ref() + birth1 = "" if birth_ref: birth = dbase.get_event_from_handle(birth_ref.ref) if birth: + birth1 = rlocale.get_date(birth.get_date_object()) birth_date = birth.get_date_object().get_sort_value() - sortable_individuals.append((birth_date, person_handle)) + death_event = get_death_or_fallback(dbase, person) + if death_event: + death = rlocale.get_date(death_event.get_date_object()) + else: + death = "" + sortable_individuals.append((birth_date, birth1, death, person_handle)) # return a list of handles with the individual's birthdate attached return sortable_individuals