diff --git a/src/plugins/NarrativeWeb.py b/src/plugins/NarrativeWeb.py index 16469e852..ea51d5360 100644 --- a/src/plugins/NarrativeWeb.py +++ b/src/plugins/NarrativeWeb.py @@ -48,7 +48,7 @@ import shutil import codecs import tarfile import operator -from gettext import gettext as _ +from TransUtils import sgettext as _ from cStringIO import StringIO from textwrap import TextWrapper from unicodedata import normalize @@ -213,6 +213,11 @@ def html_escape(text): return ''.join([html_escape_table.get(c, c) for c in text]) +def name_to_md5(text): + """This creates an MD5 hex string to be used as filename.""" + return md5.new(text).hexdigest() + + class BasePage: """ This the base class to write certain HTML pages. @@ -247,10 +252,6 @@ class BasePage: self.linkhome = options['linkhome'] self.use_gallery = options['gallery'] - def lnkfmt(self, text): - """This creates an MD5 hex string to be used as filename.""" - return md5.new(text).hexdigest() - def display_footer(self, of): of.write('\n\n') # Terminate div_content @@ -357,7 +358,10 @@ class BasePage: of.write('\t\n') of.write('\n\n') - self.start_div_content(of, self.report.cur_fname, content_divid) + divid = '' + if content_divid: + divid = ' id="%s"' % content_divid + of.write('\n' % divid) def display_nav_links(self, of, currentsection): navs = [ @@ -379,47 +383,6 @@ class BasePage: url = '/'.join(['..']*3 + [url]) self.display_nav_link(of, url, nav_text, currentsection) - def start_div_content(self, of, fname, content_divid=None): - """ - Give unique ID to 'content' div for styling specific sections separately. - Because of how this script was originally written, the appropriate section - ID is determined by looking for a directory or HTML file name to associate - with that section. - - Note. The divid for the content is determined by the caller of display_header. - """ - - if content_divid: - divid = content_divid - elif "index" in fname: - divid = "Home" - elif "introduction" in fname: - divid = "Introduction" - elif "surnames" in fname: - divid = "Surnames" - elif "ppl" in fname: - divid = "IndividualDetail" - elif "sources" in fname: - divid = "Sources" - elif "src" in fname: - divid = "SourceDetail" - elif "plc" in fname: - divid = "PlaceDetail" - elif "gallery" in fname: - divid = "Gallery" - elif "img" in fname: - divid = "GalleryDetail" - elif "download" in fname: - divid = "Download" - elif "contact" in fname: - divid = "Contact" - else: - divid = '' - - if divid: - divid = ' id="%s"' % divid - of.write('\n' % divid) - # TODO. Move this logic to a higher level (caller of display_header). # Define 'currentsection' to correctly set navlink item CSS id @@ -496,9 +459,11 @@ class BasePage: of.write('\t
\n') of.write('\t\t

%s

\n' % _('Gallery')) for mediaref in photolist: + photo_handle = mediaref.get_reference_handle() photo = db.get_object_from_handle(photo_handle) mime_type = photo.get_mime_type() + title = photo.get_description() if title == "": title = "(untitled)" @@ -667,24 +632,6 @@ class BasePage: of.write(' [%s]' % gid) of.write('') - def surname_link(self, of, name, opt_val=None, up=False): - url = self.report.build_url_fname_html(self.lnkfmt(name), 'srn', up) - of.write('%s' % (url, name)) - if opt_val != None: - of.write(' (%d)' % opt_val) - of.write('') - - def galleryNav_link(self, of, handle, name, up=False): - # TODO. Check name, if it already has extension - url = self.report.build_url_fname(handle, 'img', up) - of.write('%s' % (html_escape(name), url, html_escape(name))) - - def media_ref_link(self, of, handle, name, up=False): - # TODO. Check name, if it already has extension - # TODO. Combine with galleryNav_link - url = self.report.build_url_fname(handle, 'img', up) - of.write('%s' % (url, html_escape(name))) - # TODO. Check img_url of callers def media_link(self, of, handle, img_url, name, up, usedescr=True): url = self.report.build_url_fname(handle, 'img', up) @@ -781,7 +728,7 @@ class IndividualListPage(BasePage): # surname column if first: of.write('\t\t\n') - of.write('\t\t\t%s' % (self.lnkfmt(surname), surname)) + of.write('\t\t\t%s' % (name_to_md5(surname), surname)) else: of.write('\t\t\n') of.write('\t\t\t ') @@ -880,7 +827,7 @@ class SurnamePage(BasePage): BasePage.__init__(self, report, title) db = report.database - of = self.report.create_file(self.lnkfmt(surname), 'srn') + of = self.report.create_file(name_to_md5(surname), 'srn') self.up = True self.display_header(of, "%s - %s" % (_('Surname'), surname), content_divid='SurnameDetail') @@ -1075,7 +1022,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) - self.display_header(of, "%s - %s" % (_('Places'), self.page_title)) + self.display_header(of, "%s - %s" % (_('Places'), self.page_title), content_divid='PlaceDetail') media_list = place.get_media_list() self.display_first_image_as_thumbnail(of, media_list) @@ -1157,7 +1104,7 @@ class MediaPage(BasePage): self.copy_thumbnail(handle, photo) self.page_title = photo.get_description() - self.display_header(of, "%s - %s" % (_('Gallery'), self.page_title)) + self.display_header(of, "%s - %s" % (_('Gallery'), self.page_title), content_divid='GalleryDetail') of.write('\t

%s:

\n' % _('Gallery')) @@ -1276,6 +1223,11 @@ class MediaPage(BasePage): self.display_footer(of) self.report.close_file(of) + def galleryNav_link(self, of, handle, name, up=False): + # TODO. Check name, if it already has extension + url = self.report.build_url_fname(handle, 'img', up) + of.write('%s' % (html_escape(name), url, html_escape(name))) + def display_media_sources(self, of, photo): for sref in photo.get_source_references(): self.bibli.add_reference(sref) @@ -1334,7 +1286,7 @@ class MediaPage(BasePage): else: from_path = os.path.join(const.IMAGE_DIR, "document.png") - # FIXME. Why not use copy_file()? + # FIXME. Why not use store_file()? if self.report.archive: self.report.archive.add(from_path, to_path) else: @@ -1356,11 +1308,11 @@ class SurnameListPage(BasePage): db = report.database if order_by == self.ORDER_BY_NAME: of = self.report.create_file(filename) - self.display_header(of, _('Surnames')) + self.display_header(of, _('Surnames'), content_divid='Surnames') of.write('\t

%s

\n' % _('Surnames')) else: of = self.report.create_file("surnames_count") - self.display_header(of, _('Surnames by person count')) + self.display_header(of, _('Surnames by person count'), content_divid='Surnames') of.write('\t

%s

\n' % _('Surnames by person count')) of.write('\t

%s

\n' % _( @@ -1415,13 +1367,13 @@ class SurnameListPage(BasePage): of.write('\t\t\n') of.write('\t\t\t%s\n' % last_letter) of.write('\t\t\t') - self.surname_link(of, surname) + self.surname_link(of, name_to_md5(surname), surname) of.write('\n') elif surname != last_surname: of.write('\t\t\n') of.write('\t\t\t \n') of.write('\t\t\t') - self.surname_link(of, surname) + self.surname_link(of, name_to_md5(surname), surname) of.write('\n') last_surname = surname of.write('\t\t\t%d\n' % len(data_list)) @@ -1433,6 +1385,13 @@ class SurnameListPage(BasePage): self.display_footer(of) self.report.close_file(of) + def surname_link(self, of, fname, name, opt_val=None, up=False): + url = self.report.build_url_fname_html(fname, 'srn', up) + of.write('%s' % (url, name)) + if opt_val != None: + of.write(' (%d)' % opt_val) + of.write('') + class IntroductionPage(BasePage): def __init__(self, report, title): @@ -1440,7 +1399,8 @@ class IntroductionPage(BasePage): db = report.database of = self.report.create_file(report.intro_fname) - self.display_header(of, _('Introduction')) + # Note. In old NarrativeWeb.py the content_divid depended on filename. + self.display_header(of, _('Introduction'), content_divid='Introduction') of.write('\t

%s

\n' % _('Introduction')) @@ -1468,7 +1428,7 @@ class HomePage(BasePage): db = report.database of = self.report.create_file("index") - self.display_header(of, _('Home')) + self.display_header(of, _('Home'), content_divid='Home') of.write('\t

%s

\n' % _('Home')) @@ -1496,7 +1456,7 @@ class SourcesPage(BasePage): db = report.database of = self.report.create_file("sources") - self.display_header(of, _('Sources')) + self.display_header(of, _('Sources'), content_divid='Sources') handle_list = list(handle_set) source_dict = {} @@ -1552,7 +1512,7 @@ class SourcePage(BasePage): of = self.report.create_file(source.get_handle(), 'src') self.up = True self.page_title = source.get_title() - self.display_header(of, "%s - %s" % (_('Sources'), self.page_title)) + self.display_header(of, "%s - %s" % (_('Sources'), self.page_title), content_divid='SourceDetail') media_list = source.get_media_list() self.display_first_image_as_thumbnail(of, media_list) @@ -1595,7 +1555,7 @@ class GalleryPage(BasePage): db = report.database of = self.report.create_file("gallery") - self.display_header(of, _('Gallery')) + self.display_header(of, _('Gallery'), content_divid='Gallery') of.write('\t

%s

\n\n' % _('Gallery')) of.write('\t

') @@ -1643,6 +1603,11 @@ class GalleryPage(BasePage): self.display_footer(of) self.report.close_file(of) + def media_ref_link(self, of, handle, name, up=False): + # TODO. Check name, if it already has extension + url = self.report.build_url_fname(handle, 'img', up) + of.write('%s' % (url, html_escape(name))) + class DownloadPage(BasePage): def __init__(self, report, title): @@ -1651,7 +1616,7 @@ class DownloadPage(BasePage): of = self.report.create_file("download") self.display_header(of, _('Download')) - of.write('\t

%s

\n\n' % _('Download')) + of.write('\t

%s

\n\n' % _('Download'), content_divid='Download') self.display_footer(of) self.report.close_file(of) @@ -1663,7 +1628,7 @@ class ContactPage(BasePage): db = report.database of = self.report.create_file("contact") - self.display_header(of, _('Contact')) + self.display_header(of, _('Contact'), content_divid='Contact') of.write('\t

%s

\n\n' % _('Contact')) of.write('\t
\n') @@ -1728,7 +1693,7 @@ class IndividualPage(BasePage): db = report.database of = self.report.create_file(person.handle, 'ppl') self.up = True - self.display_header(of, self.sort_name) + self.display_header(of, self.sort_name, content_divid='IndividualDetail') self.display_ind_general(of) self.display_ind_events(of) @@ -1954,8 +1919,7 @@ class IndividualPage(BasePage): def display_ind_general(self, of): self.page_title = self.sort_name - self.display_first_image_as_thumbnail(of, - self.person.get_media_list()) + self.display_first_image_as_thumbnail(of, self.person.get_media_list()) of.write('\t

Individuals:

\n') of.write('\t

%s

\n' % self.sort_name.strip()) @@ -2350,7 +2314,7 @@ class IndividualPage(BasePage): if place: if text: text += '  ' - text += _('at') + '  ' + place + text += _('place|at') + '  ' + place text += self.get_citation_links(event.get_source_references()) @@ -2828,6 +2792,33 @@ class NavWebReport(Report): thumb_path = os.path.join(self.build_path('thumb', handle), handle + '.png') return (real_path, thumb_path) + def copy_file(self, from_fname, to_fname, to_dir=''): + """ + Copy a file from a source to a (report) destination. + If to_dir is not present and if the target is not an archive, + then the destination directory will be created. + """ + if self.archive: + dest = os.path.join(to_dir, to_fname) + self.archive.add(from_fname, dest) + else: + dest = os.path.join(self.html_dir, to_dir) + if not os.path.isdir(dest): + os.makedirs(dest) + dest = os.path.join(dest, to_fname) + if from_path != dest: + shutil.copyfile(from_path, dest) + elif self.warn_dir: + WarningDialog( + _("Possible destination error") + "\n" + + _("You appear to have set your target directory " + "to a directory used for data storage. This " + "could create problems with file management. " + "It is recommended that you consider using " + "a different directory to store your generated " + "web pages.")) + self.warn_dir = False + def store_file(self, from_path, to_path): """ Store the file in the destination.