Reverted NarrativeWeb back to before I committed it today. Back to Doug Blank's last revisions.

svn: r15265
This commit is contained in:
Rob G. Healey 2010-04-22 07:49:13 +00:00
parent 26ed0be397
commit 4966059097

View File

@ -143,7 +143,7 @@ _NARRATIVESCREEN = "narrative-screen.css"
_NARRATIVEPRINT = "narrative-print.css" _NARRATIVEPRINT = "narrative-print.css"
# variables for alphabet_navigation() # variables for alphabet_navigation()
_KEYPERSON, _KEYPLACE, _KEYEVENT = 0, 1, 2 _KEYPERSON, _KEYPLACE, _KEYEVENT, _ALPHAEVENT = 0, 1, 2, 3
# Web page filename extensions # Web page filename extensions
_WEB_EXT = ['.html', '.htm', '.shtml', '.php', '.php3', '.cgi'] _WEB_EXT = ['.html', '.htm', '.shtml', '.php', '.php3', '.cgi']
@ -980,7 +980,7 @@ class BasePage(object):
# return footer to its callers # return footer to its callers
return footer return footer
def write_header(self, title): def write_header(self, title, key):
""" """
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.
@ -1042,29 +1042,29 @@ class BasePage(object):
head += meta head += meta
head += links head += links
# begin header section # alpha event pages do not need these things
headerdiv = (Html("div", id = 'header') + if key is not _ALPHAEVENT:
Html("h1", html_escape(self.title_str), id = "SiteTitle", inline = True)
)
body += headerdiv
header_note = self.report.options['headernote'] # begin header section
if header_note: headerdiv = (Html("div", id = 'header') +
note = db.get_note_from_gramps_id(header_note) Html("h1", html_escape(self.title_str), id = "SiteTitle", inline = True)
)
body += headerdiv
user_header = Html("div", id = 'user_header') header_note = self.report.options['headernote']
headerdiv += user_header if header_note:
note = db.get_note_from_gramps_id(header_note)
# attach note user_header = Html("div", id = 'user_header')
user_header += note.get() headerdiv += user_header
# Begin Navigation Menu # attach note
body += self.display_nav_links(title) user_header += note.get()
# Add page title for the printed page as there is no navigation menus for reference # Begin Navigation Menu
body += Html("h2", title, inline = True) body += self.display_nav_links(title)
# return to its callers: page and body # return to its caller, page and body
return page, body return page, body
def display_nav_links(self, currentsection): def display_nav_links(self, currentsection):
@ -1141,7 +1141,7 @@ class BasePage(object):
cs = 'class = "CurrentSection"' if cs else "" cs = 'class = "CurrentSection"' if cs else ""
ul += (Html("li", attr = cs, inline = True) + ul += (Html("li", attr = cs, inline = True) +
Html("a", nav_text, href = url, title = _("Main navigation item: %s" % nav_text)) Html("a", nav_text, href = url)
) )
navigation += ul navigation += ul
@ -1157,7 +1157,6 @@ class BasePage(object):
obj = db.get_object_from_gramps_id(pic_id) obj = db.get_object_from_gramps_id(pic_id)
if obj is None: if obj is None:
return None return None
obj_handle = obj.handle obj_handle = obj.handle
mime_type = obj.get_mime_type() mime_type = obj.get_mime_type()
if mime_type and mime_type.startswith("image"): if mime_type and mime_type.startswith("image"):
@ -1730,8 +1729,8 @@ class BasePage(object):
with Html("div", class_ = "thumbnail") as thumbnail: with Html("div", class_ = "thumbnail") as thumbnail:
# begin hyperlink # begin hyperlink
hyper = (Html("a", href = url, title = html_escape(name)) + hyper = (Html("a", href = url, title = name) +
Html("img", src = img_url, alt = html_escape(name)) ) Html("img", src=img_url, alt = name) )
thumbnail += hyper thumbnail += hyper
if usedescr: if usedescr:
@ -1748,7 +1747,7 @@ class BasePage(object):
thumbnail = Html("div", class_ = "thumbnail") thumbnail = Html("div", class_ = "thumbnail")
# begin hyperlink # begin hyperlink
hyper = Html("a", href = url, title = html_escape(name)) hyper = Html("a", href = url, title = name)
thumbnail += hyper thumbnail += hyper
url = self.report.build_url_image("document.png", "images", up) url = self.report.build_url_image("document.png", "images", up)
@ -1885,7 +1884,7 @@ class IndividualListPage(BasePage):
showparents = report.options['showparents'] showparents = report.options['showparents']
of = self.report.create_file("individuals") of = self.report.create_file("individuals")
indlistpage, body = self.write_header(_("Individuals")) indlistpage, body = self.write_header(_("Individuals"), _KEYPERSON)
# begin Individuals division # begin Individuals division
with Html("div", class_ = "content", id = "Individuals") as individuallist: with Html("div", class_ = "content", id = "Individuals") as individuallist:
@ -1899,7 +1898,7 @@ class IndividualListPage(BasePage):
# add alphabet navigation # add alphabet navigation
menu_set = get_first_letters(db, person_handle_list, _KEYPERSON) menu_set = get_first_letters(db, person_handle_list, _KEYPERSON)
alpha_nav, menu_set = alphabet_navigation(menu_set) alpha_nav, menu_set = alphabet_navigation(menu_set, _KEYPERSON)
if alpha_nav is not None: if alpha_nav is not None:
individuallist += alpha_nav individuallist += alpha_nav
@ -2063,7 +2062,7 @@ class SurnamePage(BasePage):
of = self.report.create_file(name_to_md5(surname), "srn") of = self.report.create_file(name_to_md5(surname), "srn")
self.up = True 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 # begin SurnameDetail division
with Html("div", class_ = "content", id = "SurnameDetail") as surnamedetail: with Html("div", class_ = "content", id = "SurnameDetail") as surnamedetail:
@ -2212,7 +2211,7 @@ class PlaceListPage(BasePage):
db = report.database db = report.database
of = self.report.create_file("places") of = self.report.create_file("places")
placelistpage, body = self.write_header(_("Places")) placelistpage, body = self.write_header(_("Places"), _KEYPLACE)
# begin places division # begin places division
with Html("div", class_ = "content", id = "Places") as placelist: with Html("div", class_ = "content", id = "Places") as placelist:
@ -2226,7 +2225,7 @@ class PlaceListPage(BasePage):
# begin alphabet navigation # begin alphabet navigation
menu_set = get_first_letters(db, place_handles, _KEYPLACE) menu_set = get_first_letters(db, place_handles, _KEYPLACE)
alpha_nav, menu_set = alphabet_navigation(menu_set) alpha_nav, menu_set = alphabet_navigation(menu_set, _KEYPLACE)
if alpha_nav is not None: if alpha_nav is not None:
placelist += alpha_nav placelist += alpha_nav
@ -2311,7 +2310,7 @@ class PlacePage(BasePage):
of = self.report.create_file(place.get_handle(), "plc") of = self.report.create_file(place.get_handle(), "plc")
self.up = True self.up = True
self.page_title = ReportUtils.place_name(db, place_handle) 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 # begin PlaceDetail Division
with Html("div", class_ = "content", id = "PlaceDetail") as placedetail: with Html("div", class_ = "content", id = "PlaceDetail") as placedetail:
@ -2382,7 +2381,7 @@ class EventListPage(BasePage):
db = report.database db = report.database
of = self.report.create_file("events") of = self.report.create_file("events")
eventslistpage, body = self.write_header(_("Events")) eventslistpage, body = self.write_header(_("Events"), _KEYEVENT)
# begin events list division # begin events list division
with Html("div", class_ = "content", id = "EventList") as eventlist: with Html("div", class_ = "content", id = "EventList") as eventlist:
@ -2394,8 +2393,7 @@ class EventListPage(BasePage):
eventlist += Html("p", msg, id = "description") eventlist += Html("p", msg, id = "description")
# get alphabet navigation for class EventListPage # get alphabet navigation for class EventListPage
menu_set = get_first_letters(db, event_types, _KEYEVENT) alpha_nav, event_types = alphabet_navigation(event_types, _ALPHAEVENT)
alpha_nav, menu_set = alphabet_navigation(menu_set)
if alpha_nav is not None: if alpha_nav is not None:
eventlist += alpha_nav eventlist += alpha_nav
@ -2412,19 +2410,18 @@ class EventListPage(BasePage):
trow.extend( trow.extend(
Html("th", label, class_ = "Column" + colclass, inline = True) Html("th", label, class_ = "Column" + colclass, inline = True)
for (label, colclass) in [ for (label, colclass) in [
[_("Letter"), "Letter"], [THEAD, "Type"],
[THEAD, "Type"], [DHEAD, "Date"],
[DHEAD, "Date"], [GRAMPSID, "GRAMPSID"],
[GRAMPSID, "GRAMPSID"], [_PERSON, "Person"] ]
[_PERSON, "Person"] ]
) )
tbody = Html("tbody") tbody = Html("tbody")
table += tbody table += tbody
# separate events by their type and then thier event handles # separate events by their type and then thier event handles
displayed = [] for (evt_type, datalist) in sort_event_types(db, event_types,
for (evt_type, datalist) in sort_event_types(db, event_types, event_handle_list): event_handle_list):
first_event = True first_event = True
for (date, gid, event_handle) in datalist: for (date, gid, event_handle) in datalist:
@ -2433,23 +2430,14 @@ class EventListPage(BasePage):
trow = Html("tr") trow = Html("tr")
tbody += trow tbody += trow
# display first letter if it is the first one
tcell = Html("td", class_ = "ColumnLetter", inline = True)
trow += tcell
ltr = evt_type[0]
if ltr in displayed:
tcell += " "
else:
trow.attr = 'class = "BeginLetter" '
tcell += Html("a", ltr, name = ltr, title = "Events beginning with letter %s" % ltr,
inline = True)
# display Event type if first in the list # display Event type if first in the list
tcell = Html("td", class_ = "ColumnType", inline = True) tcell = Html("td", class_ = "ColumnType", inline = True)
trow += tcell trow += tcell
if first_event: if first_event:
tcell += evt_type trow.attr = 'class = "BeginEvent"'
tcell += Html("a", evt_type, name = evt_type,
title = _("Event types beginning with %(eventtype)s") % {
'eventtype': evt_type}, inline = True)
else: else:
tcell += " " tcell += " "
@ -2516,7 +2504,6 @@ class EventListPage(BasePage):
else: else:
tcell += " " tcell += " "
first_event = False first_event = False
displayed.append(ltr)
# add clearline for proper styling # add clearline for proper styling
# add footer section # add footer section
@ -2555,7 +2542,7 @@ class EventPage(BasePage):
self.bibli = Bibliography() self.bibli = Bibliography()
of = self.report.create_file(event_handle, "evt") of = self.report.create_file(event_handle, "evt")
eventpage, body = self.write_header(_("Events")) eventpage, body = self.write_header(_("Events"), _KEYEVENT)
# start event detail division # start event detail division
with Html("div", class_ = "content", id = "EventDetail") as eventdetail: with Html("div", class_ = "content", id = "EventDetail") as eventdetail:
@ -2703,7 +2690,7 @@ class MediaPage(BasePage):
copy_thumbnail(self.report, handle, media) copy_thumbnail(self.report, handle, media)
self.page_title = media.get_description() 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 # begin MediaDetail division
with Html("div", class_ = "content", id = "GalleryDetail") as mediadetail: with Html("div", class_ = "content", id = "GalleryDetail") as mediadetail:
@ -2797,9 +2784,9 @@ class MediaPage(BasePage):
url = self.report.build_url_fname(newpath, url = self.report.build_url_fname(newpath,
None, self.up) None, self.up)
mediadisplay += Html("a", href = url) + ( mediadisplay += Html("a", href = url) + (
Html("img", width = new_width, Html("img", width=new_width,
height = new_height, src = url, height=new_height, src=url,
alt = html_escape(self.page_title)) alt=html_escape(self.page_title))
) )
else: else:
dirname = tempfile.mkdtemp() dirname = tempfile.mkdtemp()
@ -2826,7 +2813,7 @@ class MediaPage(BasePage):
if target_exists: if target_exists:
# TODO. Convert disk path to URL # TODO. Convert disk path to URL
url = self.report.build_url_fname(newpath, None, self.up) url = self.report.build_url_fname(newpath, None, self.up)
hyper = Html("a", href = url, title = html_escape(self.page_title)) + ( hyper = Html("a", href = url) + (
Html("img", src = img_url, alt = html_escape(self.page_title)) Html("img", src = img_url, alt = html_escape(self.page_title))
) )
mediadisplay += hyper mediadisplay += hyper
@ -2956,10 +2943,10 @@ class SurnameListPage(BasePage):
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)
surnamelistpage, body = self.write_header(_('Surnames')) surnamelistpage, body = self.write_header(_('Surnames'), _KEYPERSON)
else: else:
of = self.report.create_file("surnames_count") 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 # begin surnames division
with Html("div", class_ = "content", id = "surnames") as surnamelist: with Html("div", class_ = "content", id = "surnames") as surnamelist:
@ -2976,7 +2963,7 @@ class SurnameListPage(BasePage):
# only if surname list not surname count # only if surname list not surname count
if order_by == self.ORDER_BY_NAME: if order_by == self.ORDER_BY_NAME:
menu_set = get_first_letters(db, person_handle_list, _KEYPERSON) menu_set = get_first_letters(db, person_handle_list, _KEYPERSON)
alpha_nav, menu_set = alphabet_navigation(menu_set) alpha_nav, menu_set = alphabet_navigation(menu_set, _KEYPERSON)
if alpha_nav is not None: if alpha_nav is not None:
surnamelist += alpha_nav surnamelist += alpha_nav
@ -3084,7 +3071,7 @@ class IntroductionPage(BasePage):
db = report.database db = report.database
of = self.report.create_file(report.intro_fname) of = self.report.create_file(report.intro_fname)
intropage, body = self.write_header(_('Introduction')) intropage, body = self.write_header(_('Introduction'), _KEYPERSON)
# begin Introduction division # begin Introduction division
with Html("div", class_ = "content", id = "Introduction") as section: with Html("div", class_ = "content", id = "Introduction") as section:
@ -3121,7 +3108,7 @@ class HomePage(BasePage):
db = report.database db = report.database
of = self.report.create_file("index") of = self.report.create_file("index")
homepage, body = self.write_header(_('Home')) homepage, body = self.write_header(_('Home'), _KEYPERSON)
# begin home division # begin home division
with Html("div", class_ = "content", id = "Home") as section: with Html("div", class_ = "content", id = "Home") as section:
@ -3158,7 +3145,7 @@ class SourceListPage(BasePage):
source_dict = {} source_dict = {}
of = self.report.create_file("sources") of = self.report.create_file("sources")
sourcelistpage, body = self.write_header(_("Sources")) sourcelistpage, body = self.write_header(_("Sources"), _KEYPERSON)
# begin source list division # begin source list division
with Html("div", class_ = "content", id = "Sources") as sourceslist: with Html("div", class_ = "content", id = "Sources") as sourceslist:
@ -3229,7 +3216,7 @@ class SourcePage(BasePage):
of = self.report.create_file(source.get_handle(), "src") of = self.report.create_file(source.get_handle(), "src")
self.up = True self.up = True
sourcepage, body = self.write_header(_('Sources')) sourcepage, body = self.write_header(_('Sources'), _KEYPERSON)
# begin source detail division # begin source detail division
with Html("div", class_ = "content", id = "SourceDetail") as section: with Html("div", class_ = "content", id = "SourceDetail") as section:
@ -3298,7 +3285,7 @@ class MediaListPage(BasePage):
db = report.database db = report.database
of = self.report.create_file("media") of = self.report.create_file("media")
medialistpage, body = self.write_header(_('Media')) medialistpage, body = self.write_header(_('Media'), _KEYPERSON)
# begin gallery division # begin gallery division
with Html("div", class_ = "content", id = "Gallery") as medialist: with Html("div", class_ = "content", id = "Gallery") as medialist:
@ -3415,7 +3402,7 @@ class DownloadPage(BasePage):
return return
of = self.report.create_file("download") of = self.report.create_file("download")
downloadpage, body = self.write_header(_('Download')) downloadpage, body = self.write_header(_('Download'), _KEYPERSON)
# begin download page and table # begin download page and table
with Html("div", class_ = "content", id = "Download") as download: with Html("div", class_ = "content", id = "Download") as download:
@ -3522,7 +3509,7 @@ class ContactPage(BasePage):
db = report.database db = report.database
of = self.report.create_file("contact") of = self.report.create_file("contact")
contactpage, body = self.write_header(_('Contact')) contactpage, body = self.write_header(_('Contact'), _KEYPERSON)
# begin contact division # begin contact division
with Html("div", class_ = "content", id = "Contact") as section: with Html("div", class_ = "content", id = "Contact") as section:
@ -3603,7 +3590,7 @@ class IndividualPage(BasePage):
of = self.report.create_file(person.handle, "ppl") of = self.report.create_file(person.handle, "ppl")
self.up = True self.up = True
indivdetpage, body = self.write_header(self.sort_name) indivdetpage, body = self.write_header(self.sort_name, _KEYPERSON)
# begin individualdetail division # begin individualdetail division
with Html("div", class_ = "content", id = 'IndividualDetail') as individualdetail: with Html("div", class_ = "content", id = 'IndividualDetail') as individualdetail:
@ -4690,7 +4677,7 @@ class RepositoryListPage(BasePage):
db = report.database db = report.database
of = self.report.create_file("repositories") of = self.report.create_file("repositories")
repolistpage, body = self.write_header(_("Repositories")) repolistpage, body = self.write_header(_("Repositories"), _KEYPERSON)
# begin RepositoryList division # begin RepositoryList division
with Html("div", class_ = "content", id = "RepositoryList") as repositorylist: with Html("div", class_ = "content", id = "RepositoryList") as repositorylist:
@ -4759,7 +4746,7 @@ class RepositoryPage(BasePage):
of = self.report.create_file(handle, 'repo') of = self.report.create_file(handle, 'repo')
self.up = True self.up = True
repositorypage, body = self.write_header(_('Repositories')) repositorypage, body = self.write_header(_('Repositories'), _KEYPERSON)
# begin RepositoryDetail division and page title # begin RepositoryDetail division and page title
with Html("div", class_ = "content", id = "RepositoryDetail") as repositorydetail: with Html("div", class_ = "content", id = "RepositoryDetail") as repositorydetail:
@ -4831,7 +4818,7 @@ class AddressBookListPage(BasePage):
of = self.report.create_file("addressbook") of = self.report.create_file("addressbook")
# Add xml, doctype, meta and stylesheets # Add xml, doctype, meta and stylesheets
addressbooklistpage, body = self.write_header(_("Address Book")) addressbooklistpage, body = self.write_header("%s - %s" % (title, _("Address Book")), _KEYPERSON)
# begin AddressBookList division # begin AddressBookList division
with Html("div", class_ = "content", id = "AddressBookList") as addressbooklist: with Html("div", class_ = "content", id = "AddressBookList") as addressbooklist:
@ -4933,7 +4920,7 @@ class AddressBookPage(BasePage):
# set the file name and open file # set the file name and open file
of = self.report.create_file(person_handle, "addr") of = self.report.create_file(person_handle, "addr")
addressbookpage, body = self.write_header(_("Address Book")) addressbookpage, body = self.write_header("%s - %s" % (title, _("Address Book")), _KEYPERSON)
# begin address book page division and section title # begin address book page division and section title
with Html("div", class_ = "content", id = "AddressBookDetail") as addressbookdetail: with Html("div", class_ = "content", id = "AddressBookDetail") as addressbookdetail:
@ -5372,19 +5359,23 @@ class NavWebReport(Report):
a dump of all the events sorted by event type, date, and surname a dump of all the events sorted by event type, date, and surname
for classes EventListPage and EventPage for classes EventListPage and EventPage
""" """
db = self.database
# set up progress bar for event pages; using ind list # 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(db, ind_list)
self.progress.set_pass(_("Creating event pages"), len(event_handle_list)) self.progress.set_pass(_("Creating event pages"), len(event_handle_list))
# send all data to the events list page # send all data to the events list page
EventListPage(self, self.title, event_types, event_handle_list) EventListPage(self, self.title, event_types, event_handle_list)
index = 0
for event_handle in event_handle_list: for event_handle in event_handle_list:
self.progress.set_header(_("Creating event page %02d of %02d") % (index + 1, len(event_handle_list)))
# create individual event pages # create individual event pages
EventPage(self, self.title, event_handle) EventPage(self, self.title, event_handle)
index += 1
self.progress.step() self.progress.step()
def gallery_pages(self, source_list): def gallery_pages(self, source_list):
@ -5445,7 +5436,9 @@ class NavWebReport(Report):
# RepositoryListPage Class # RepositoryListPage Class
RepositoryListPage(self, self.title, repos_dict, keys) RepositoryListPage(self, self.title, repos_dict, keys)
count = 1
for index, key in enumerate(keys): for index, key in enumerate(keys):
self.progress.set_header(_("Creating repository page %d of %d" % (count, repo_size)))
(repo, handle) = repos_dict[key] (repo, handle) = repos_dict[key]
# RepositoryPage Class # RepositoryPage Class
@ -5453,6 +5446,7 @@ class NavWebReport(Report):
# increment progress bar # increment progress bar
self.progress.step() self.progress.step()
count += 1
def addressbook_pages(self, ind_list): def addressbook_pages(self, ind_list):
""" """
@ -5501,12 +5495,15 @@ class NavWebReport(Report):
addr_size = len( has_url_address ) addr_size = len( has_url_address )
self.progress.set_pass(_("Creating address book pages ..."), addr_size) self.progress.set_pass(_("Creating address book pages ..."), addr_size)
count = 1
for (sort_name, person_handle, has_add, has_res, has_url) in has_url_address: for (sort_name, person_handle, has_add, has_res, has_url) in has_url_address:
self.progress.set_header(_("Creating address book page %d of %d" % (count, addr_size)))
AddressBookPage(self, self.title, person_handle, has_add, has_res, has_url) AddressBookPage(self, self.title, person_handle, has_add, has_res, has_url)
# increment progress bar # increment progress bar
self.progress.step() self.progress.step()
count += 1
def build_subdirs(self, subdir, fname, up = False): def build_subdirs(self, subdir, fname, up = False):
""" """
@ -6172,46 +6169,30 @@ def first_letter(string):
return letter return letter
def get_first_letters(db, handle_list, key): def get_first_letters(db, handle_list, key):
""" """ key is _PLACE or _PERSON ...."""
return a dictionary for the first letters
@param: habdle_list = a dictionary of handle or event types
@param: key = _KEYPERSON, _KEYPLACE, or _KEYEVENT
"""
first_letters = [] first_letters = []
if key == _KEYEVENT: for handle in handle_list:
for evttype in handle_list: if key == _KEYPERSON:
first_letters.append(evttype[0]) keyname = __get_person_keyname(db, handle)
else:
keyname = __get_place_keyname(db, handle)
ltr = first_letter(keyname)
else: if ltr is not ",":
first_letters.append(ltr)
for handle in handle_list:
if key == _KEYPERSON:
keyname = __get_person_keyname(db, handle)
else:
keyname = __get_place_keyname(db, handle)
ltr = first_letter(keyname)
if ltr is not ",":
first_letters.append(ltr)
# return first letters from data to its callers
return first_letters return first_letters
def alphabet_navigation(menu_set): def alphabet_navigation(menu_set, alphakey):
""" """
Will create the alphabet navigation bar for classes IndividualListPage, Will create the alphabet navigation bar for classes IndividualListPage,
SurnameListPage, PlaceListPage, and EventList SurnameListPage, PlaceListPage, and EventList
@param: menu_set -- a dictionary of either letters or words @param: menu_set -- a dictionary of either letters or words
@param: alphakey -- either Person, Place, or AlphaEvent
""" """
# if no letters or words, return None to its callers
if not menu_set:
return None, []
sorted_set = defaultdict(int) sorted_set = defaultdict(int)
# The comment below from the glibc locale sv_SE in # The comment below from the glibc locale sv_SE in
# localedata/locales/sv_SE : # localedata/locales/sv_SE :
@ -6226,6 +6207,7 @@ def alphabet_navigation(menu_set):
# See : http://www.gramps-project.org/bugs/view.php?id = 2933 # See : http://www.gramps-project.org/bugs/view.php?id = 2933
# #
(lang_country, modifier ) = locale.getlocale() (lang_country, modifier ) = locale.getlocale()
ltr = get_first_letters
for menu_item in menu_set: for menu_item in menu_set:
sorted_set[menu_item] += 1 sorted_set[menu_item] += 1
@ -6233,12 +6215,20 @@ def alphabet_navigation(menu_set):
# remove the number of each occurance of each letter # remove the number of each occurance of each letter
sorted_alpha_index = sorted(sorted_set, key = locale.strxfrm) sorted_alpha_index = sorted(sorted_set, key = locale.strxfrm)
# remove any commas and spaces from the letter set # remove any commas from the letter set
sorted_alpha_index = [(menu_item) for menu_item in sorted_alpha_index sorted_alpha_index = [(menu_item) for menu_item in sorted_alpha_index if menu_item != ","]
if menu_item not in [ ",", " "]]
# remove any single spaces from the letter set also
# 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 or words, return None to its callers
if not sorted_alpha_index:
return None, []
num_ltrs = len(sorted_alpha_index) num_ltrs = len(sorted_alpha_index)
num_of_cols = 32 num_of_cols = 34 if alphakey is not _ALPHAEVENT else 10
num_of_rows = ((num_ltrs // num_of_cols) + 1) num_of_rows = ((num_ltrs // num_of_cols) + 1)
# begin alphabet navigation division # begin alphabet navigation division
@ -6255,14 +6245,10 @@ def alphabet_navigation(menu_set):
unordered += list unordered += list
menu_item = sorted_alpha_index[index] menu_item = sorted_alpha_index[index]
# adding for Visually Impaired screen readers and braille writers
title_str = _("Alphabet Navigation Item: %s" % menu_item)
if lang_country == "sv_SE" and menu_item == u'V': if lang_country == "sv_SE" and menu_item == u'V':
hyper = Html("a", "V,W", href = "#V,W", title = title_str) hyper = Html("a", "V,W", href = "#V,W", alt = "V,W")
else: else:
hyper = Html("a", menu_item, href = "#%s" % menu_item, title = title_str) hyper = Html("a", menu_item, href = "#%s" % menu_item, alt = html_escape(menu_item))
list += hyper list += hyper
# increase letter/ word in sorted_alpha_index # increase letter/ word in sorted_alpha_index