navwebpage fixes

svn: r4923
This commit is contained in:
Don Allingham 2005-07-13 17:01:58 +00:00
parent 996bc358ae
commit 45c96bbce5
3 changed files with 90 additions and 55 deletions

View File

@ -1,3 +1,8 @@
2005-07-13 Don Allingham <don@gramps-project.org>
* src/Sort.py: don't use upper case, let locale.strcoll figure this
out (correctly) for us
* src/plugins/NavWebPage.py: fix sorting.
2005-07-13 Alex Roitman <shura@gramps-project.org> 2005-07-13 Alex Roitman <shura@gramps-project.org>
* src/GenericFilter.py: Proper test for place in event-based filters. * src/GenericFilter.py: Proper test for place in event-based filters.

View File

@ -67,14 +67,14 @@ class Sort:
name1 = first.get_primary_name() name1 = first.get_primary_name()
name2 = second.get_primary_name() name2 = second.get_primary_name()
fsn = name1.get_surname().upper() fsn = name1.get_surname()
ssn = name2.get_surname().upper() ssn = name2.get_surname()
if fsn == ssn : if fsn == ssn :
ffn = name1.get_first_name().upper() ffn = name1.get_first_name()
sfn = name2.get_first_name().upper() sfn = name2.get_first_name()
if ffn == sfn: if ffn == sfn:
return locale.strcoll(name1.get_suffix().upper(), name2.get_suffix().upper()) return locale.strcoll(name1.get_suffix(), name2.get_suffix())
else: else:
return locale.strcoll(ffn, sfn) return locale.strcoll(ffn, sfn)
else: else:

View File

@ -64,6 +64,7 @@ import ReportUtils
import sets import sets
_NARRATIVE = "narrative.css" _NARRATIVE = "narrative.css"
_NAME_COL = 3
_character_sets = [ _character_sets = [
[_('Unicode (recommended)'), 'utf-8'], [_('Unicode (recommended)'), 'utf-8'],
@ -273,18 +274,18 @@ class IndividualListPage(BasePage):
of.write(u'<td class="field"><u><b>%s</b></u></td>\n' % _('Name')) of.write(u'<td class="field"><u><b>%s</b></u></td>\n' % _('Name'))
of.write(u'</tr>\n') of.write(u'</tr>\n')
self.sort = Sort.Sort(db) flist = sets.Set(person_handle_list)
person_handle_list.sort(self.sort.by_last_name)
last_surname = ""
for person_handle in person_handle_list: person_handle_list = sort_people(db,person_handle_list)
person = db.get_person_from_handle(person_handle)
n = person.get_primary_name().get_surname() for (surname,handle_list) in person_handle_list:
if n != last_surname: first = True
of.write(u'<tr><td colspan="2">&nbsp;</td></tr>\n') of.write(u'<tr><td colspan="2">&nbsp;</td></tr>\n')
for person_handle in handle_list:
person = db.get_person_from_handle(person_handle)
of.write(u'<tr><td class="category">') of.write(u'<tr><td class="category">')
if n != last_surname: if first:
of.write(u'<a name="%s">%s</a>' % (self.lnkfmt(n),n)) of.write(u'<a name="%s">%s</a>' % (self.lnkfmt(surname),surname))
else: else:
of.write(u'&nbsp') of.write(u'&nbsp')
of.write(u'</td><td class="data">') of.write(u'</td><td class="data">')
@ -293,7 +294,7 @@ class IndividualListPage(BasePage):
if not self.noid: if not self.noid:
of.write(u"&nbsp;[%s]" % person.gramps_id) of.write(u"&nbsp;[%s]" % person.gramps_id)
of.write(u'</a></td></tr>\n') of.write(u'</a></td></tr>\n')
last_surname = n first = False
of.write(u'</table>\n</blockquote>\n') of.write(u'</table>\n</blockquote>\n')
self.display_footer(of) self.display_footer(of)
@ -313,10 +314,8 @@ class PlaceListPage(BasePage):
db.get_researcher().get_name()) db.get_researcher().get_name())
msg = _("This page contains an index of all the places in the " msg = _("This page contains an index of all the places in the "
"database, sorted by their title. Selecting the GRAMPS " "database, sorted by their title. Clicking on a place's "
"ID next to a person's name will take you to that place's " "title will take you to that place's page.")
"page.")
of.write(u'<h3>%s</h3>\n' % _('Places')) of.write(u'<h3>%s</h3>\n' % _('Places'))
of.write(u'<p>%s</p>\n' % msg ) of.write(u'<p>%s</p>\n' % msg )
@ -447,33 +446,28 @@ class SurnameListPage(BasePage):
of.write(u'<b>%s</b></u></td>\n' % _('Surname')) of.write(u'<b>%s</b></u></td>\n' % _('Surname'))
of.write(u'</tr>\n') of.write(u'</tr>\n')
self.sort = Sort.Sort(db) person_handle_list = sort_people(db,person_handle_list)
person_handle_list.sort(self.sort.by_last_name)
last_surname = ""
last_letter = '' last_letter = ''
last_surname = ''
for person_handle in person_handle_list: for (surname,data_list) in person_handle_list:
person = db.get_person_from_handle(person_handle) if len(surname) == 0:
n = person.get_primary_name().get_surname()
if len(n) == 0:
continue continue
if n[0] != last_letter: if surname[0] != last_letter:
last_letter = n[0] last_letter = surname[0]
of.write(u'<tr><td class="category">%s</td>' % last_letter) of.write(u'<tr><td class="category">%s</td>' % last_letter)
of.write(u'<td class="data">') of.write(u'<td class="data">')
of.write(u'<a href="individuals.%s#%s">' % (self.lnkfmt(n),self.ext)) of.write(u'<a href="individuals.%s#%s">' % (self.ext,self.lnkfmt(surname)))
of.write(n) of.write(surname)
of.write(u'</a></td></tr>') of.write(u'</a></td></tr>')
last_surname = n elif surname != last_surname:
elif n != last_surname:
of.write(u'<tr><td class="category">&nbsp;</td>') of.write(u'<tr><td class="category">&nbsp;</td>')
of.write(u'<td class="data">') of.write(u'<td class="data">')
of.write(u'<a href="individuals.%s#%s">' % (self.lnkfmt(n),self.ext)) of.write(u'<a href="individuals.%s#%s">' % (self.ext,self.lnkfmt(surname)))
of.write(n) of.write(surname)
of.write(u'</a></td></tr>') of.write(u'</a></td></tr>')
last_surname = n last_surname = surname
of.write(u'</table>\n</blockquote>\n') of.write(u'</table>\n</blockquote>\n')
self.display_footer(of) self.display_footer(of)
@ -916,6 +910,7 @@ class IndividualPage(BasePage):
of.write(u'<td>&nbsp;</td>') of.write(u'<td>&nbsp;</td>')
of.write(u'<td class="field">%s</td>\n' % relstr) of.write(u'<td class="field">%s</td>\n' % relstr)
of.write(u'<td class="data">') of.write(u'<td class="data">')
if spouse_id:
use_link = spouse_id in self.ind_list use_link = spouse_id in self.ind_list
gid = spouse.get_gramps_id() gid = spouse.get_gramps_id()
if use_link: if use_link:
@ -1560,6 +1555,41 @@ class WebReportDialog(Report.ReportDialog):
(m1,m2) = msg.messages() (m1,m2) = msg.messages()
ErrorDialog(m1,m2) ErrorDialog(m1,m2)
def sort_people(db,handle_list):
import sets
flist = sets.Set(handle_list)
sname_sub = {}
sortnames = {}
cursor = db.get_person_cursor()
node = cursor.first()
while node:
if node[0] in flist:
primary_name = node[1][_NAME_COL]
if primary_name.group_as:
surname = primary_name.group_as
else:
surname = db.get_name_group_mapping(primary_name.surname)
sortnames[node[0]] = primary_name.sname
if sname_sub.has_key(surname):
sname_sub[surname].append(node[0])
else:
sname_sub[surname] = [node[0]]
node = cursor.next()
cursor.close()
sorted_lists = []
temp_list = sname_sub.keys()
temp_list.sort(locale.strcoll)
for name in temp_list:
slist = map(lambda x: (sortnames[x],x),sname_sub[name])
slist.sort(lambda x,y: locale.strcoll(x[0],y[0]))
entries = map(lambda x: x[1], slist)
sorted_lists.append((name,entries))
return sorted_lists
#------------------------------------------------------------------------ #------------------------------------------------------------------------
# #
# #