2005-02-01 09:16:29 +05:30
#
# Gramps - a GTK+/GNOME based genealogy program
#
2007-06-28 11:11:40 +05:30
# Copyright (C) 2000-2007 Donald N. Allingham
2007-07-24 09:58:17 +05:30
# Copyright (C) 2007 Johan Gonqvist <johan.gronqvist@gmail.com>
2007-09-28 17:46:12 +05:30
# Copyright (C) 2007 Gary Burton <gary.burton@zen.co.uk>
2005-02-01 09:16:29 +05:30
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Pubilc License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# $Id$
2005-08-18 11:28:28 +05:30
"""
Narrative Web Page generator .
"""
2005-02-01 09:16:29 +05:30
#------------------------------------------------------------------------
#
# python modules
#
#------------------------------------------------------------------------
2008-03-06 18:37:37 +05:30
import cgi
2005-02-01 09:16:29 +05:30
import os
2005-08-18 11:28:28 +05:30
import md5
import time
import locale
2005-02-01 09:16:29 +05:30
import shutil
2005-08-18 11:28:28 +05:30
import codecs
2005-12-06 12:08:09 +05:30
import tarfile
2007-10-01 09:03:08 +05:30
import operator
2006-04-07 03:32:46 +05:30
from gettext import gettext as _
2005-08-18 11:28:28 +05:30
from cStringIO import StringIO
2007-01-08 09:18:49 +05:30
from textwrap import TextWrapper
2007-10-04 09:26:41 +05:30
from unicodedata import normalize
2005-02-01 09:16:29 +05:30
2006-03-05 10:01:24 +05:30
#------------------------------------------------------------------------
#
# Set up logging
#
#------------------------------------------------------------------------
import logging
log = logging . getLogger ( " .WebPage " )
2005-02-01 09:16:29 +05:30
#------------------------------------------------------------------------
#
# GRAMPS module
#
#------------------------------------------------------------------------
2007-10-08 22:11:39 +05:30
import gen . lib
2005-02-01 09:16:29 +05:30
import const
2005-08-18 11:28:28 +05:30
from GrampsCfg import get_researcher
2005-02-01 09:16:29 +05:30
import Sort
2008-02-19 01:37:09 +05:30
from PluginUtils import ( register_report , FilterOption , EnumeratedListOption ,
PersonOption , BooleanOption , NumberOption ,
StringOption , DestinationOption , NoteOption ,
MediaOption )
from ReportBase import ( Report , ReportUtils , MenuReportOptions , CATEGORY_WEB ,
MODE_GUI , MODE_CLI , Bibliography )
2005-02-01 09:16:29 +05:30
import Utils
2007-09-11 03:44:33 +05:30
import ThumbNails
2007-11-04 08:59:58 +05:30
import ImgManip
2007-11-03 11:13:12 +05:30
import Mime
2005-08-18 11:28:28 +05:30
from QuestionDialog import ErrorDialog , WarningDialog
2007-06-28 11:11:40 +05:30
from BasicUtils import name_displayer as _nd
2005-02-04 19:24:02 +05:30
from DateHandler import displayer as _dd
2007-08-05 11:12:43 +05:30
from DateHandler import parser as _dp
2008-02-19 01:37:09 +05:30
from gen . proxy import PrivateProxyDb , LivingProxyDb
2007-10-16 17:39:20 +05:30
from gen . lib . eventroletype import EventRoleType
2005-02-01 09:16:29 +05:30
2005-08-18 11:28:28 +05:30
#------------------------------------------------------------------------
#
# constants
#
#------------------------------------------------------------------------
2005-02-10 07:14:05 +05:30
_NARRATIVE = " narrative.css "
2008-03-06 18:37:37 +05:30
_NARRATIVEPRINT = " narrative-print.css "
2005-08-18 11:28:28 +05:30
_NAME_COL = 3
2008-02-10 09:39:09 +05:30
_MAX_IMG_WIDTH = 800 # resize images that are wider than this
_MAX_IMG_HEIGHT = 600 # resize images that are taller than this
_WIDTH = 160
_HEIGHT = 50
_VGAP = 10
_HGAP = 30
_SHADOW = 5
_XOFFSET = 5
2005-12-06 12:08:09 +05:30
2008-03-06 18:37:37 +05:30
#This information defines the list of styles in the Narrative Web options dialog as well as the location of the corresponding SCREEN stylesheets.
2008-02-10 09:39:09 +05:30
_CSS_FILES = [
2008-03-06 18:37:37 +05:30
[ _ ( " Basic - Ash " ) , ' NWeb-Screen_Basic-Ash.css ' ] ,
[ _ ( " Basic - Cypress " ) , ' NWeb-Screen_Basic-Cypress.css ' ] ,
[ _ ( " Basic - Lilac " ) , ' NWeb-Screen_Basic-Lilac.css ' ] ,
[ _ ( " Basic - Peach " ) , ' NWeb-Screen_Basic-Peach.css ' ] ,
[ _ ( " Basic - Spruce " ) , ' NWeb-Screen_Basic-Spruce.css ' ] ,
[ _ ( " Mainz " ) , ' NWeb-Screen_Mainz.css ' ] ,
[ _ ( " Nebraska " ) , ' NWeb-Screen_Nebraska.css ' ] ,
2005-08-18 11:28:28 +05:30
[ _ ( " No style sheet " ) , ' ' ] ,
]
2005-02-10 07:14:05 +05:30
2008-02-10 09:39:09 +05:30
_CHARACTER_SETS = [
2005-08-18 11:28:28 +05:30
[ _ ( ' Unicode (recommended) ' ) , ' utf-8 ' ] ,
[ ' ISO-8859-1 ' , ' iso-8859-1 ' ] ,
[ ' ISO-8859-2 ' , ' iso-8859-2 ' ] ,
[ ' ISO-8859-3 ' , ' iso-8859-3 ' ] ,
[ ' ISO-8859-4 ' , ' iso-8859-4 ' ] ,
[ ' ISO-8859-5 ' , ' iso-8859-5 ' ] ,
[ ' ISO-8859-6 ' , ' iso-8859-6 ' ] ,
[ ' ISO-8859-7 ' , ' iso-8859-7 ' ] ,
[ ' ISO-8859-8 ' , ' iso-8859-8 ' ] ,
[ ' ISO-8859-9 ' , ' iso-8859-9 ' ] ,
[ ' ISO-8859-10 ' , ' iso-8859-10 ' ] ,
[ ' ISO-8859-13 ' , ' iso-8859-13 ' ] ,
[ ' ISO-8859-14 ' , ' iso-8859-14 ' ] ,
[ ' ISO-8859-15 ' , ' iso-8859-15 ' ] ,
[ ' koi8_r ' , ' koi8_r ' , ] ,
]
2008-02-10 09:39:09 +05:30
_CC = [
' <a rel= " license " href= " http://creativecommons.org/licenses/by/2.5/ " > '
' <img alt= " Creative Commons License - By attribution " title= " Creative '
' Commons License - By attribution " src= " somerights20.gif " /></a> ' ,
' <a rel= " license " href= " http://creativecommons.org/licenses/by-nd/2.5/ " > '
' <img alt= " Creative Commons License - By attribution, No derivations " '
' title= " Creative Commons License - By attribution, No derivations " '
' src= " somerights20.gif " /></a> ' ,
' <a rel= " license " href= " http://creativecommons.org/licenses/by-sa/2.5/ " > '
' <img alt= " Creative Commons License - By attribution, Share-alike " '
' title= " Creative Commons License - By attribution, Share-alike " '
' src= " somerights20.gif " /></a> ' ,
' <a rel= " license " href= " http://creativecommons.org/licenses/by-nc/2.5/ " > '
' <img alt= " Creative Commons License - By attribution, Non-commercial " '
' title= " Creative Commons License - By attribution, Non-commercial " '
' src= " somerights20.gif " /></a> ' ,
' <a rel= " license " href= " http://creativecommons.org/licenses/by-nc-nd/2.5/ " > '
' <img alt= " Creative Commons License - By attribution, Non-commercial, No '
' derivations " title= " Creative Commons License - By attribution, '
' Non-commercial, No derivations " src= " somerights20.gif " /></a> ' ,
' <a rel= " license " href= " http://creativecommons.org/licenses/by-nc-sa/2.5/ " > '
' <img alt= " Creative Commons License - By attribution, Non-commerical, '
' Share-alike " title= " Creative Commons License - By attribution, '
' Non-commerical, Share-alike " src= " somerights20.gif " /></a> '
2005-02-04 09:24:48 +05:30
]
2005-02-10 07:14:05 +05:30
2008-02-10 09:39:09 +05:30
_COPY_OPTIONS = [
_ ( ' Standard copyright ' ) ,
_ ( ' Creative Commons - By attribution ' ) ,
_ ( ' Creative Commons - By attribution, No derivations ' ) ,
_ ( ' Creative Commons - By attribution, Share-alike ' ) ,
_ ( ' Creative Commons - By attribution, Non-commercial ' ) ,
_ ( ' Creative Commons - By attribution, Non-commercial, No derivations ' ) ,
_ ( ' Creative Commons - By attribution, Non-commercial, Share-alike ' ) ,
_ ( ' No copyright notice ' ) ,
]
2007-01-08 09:18:49 +05:30
wrapper = TextWrapper ( )
wrapper . break_log_words = True
wrapper . width = 20
2005-02-10 07:14:05 +05:30
2008-03-06 18:37:37 +05:30
#This list of characters defines which hexadecimal entity certain 'special characters' with be transformed into for valid HTML rendering.
#The variety of quotes with spaces are to assist in appropriately typesetting curly quotes and apostrophes.
html_escape_table = {
" & " : " & " ,
' " ' : " “ " ,
' " ' : " ” " ,
" ' " : " ‘ " ,
" ' " : " ’ " ,
" ' s " : " ’s " ,
' " ' : " " " ,
" ' " : " ' " ,
" > " : " > " ,
" < " : " < " ,
}
#This command then defines the 'html_escape' option for escaping special characters for presentation in HTML based on the above list.
def html_escape ( text ) :
""" Produce entities within text. """
L = [ ]
for c in text :
L . append ( html_escape_table . get ( c , c ) )
return " " . join ( L )
2005-02-10 07:14:05 +05:30
class BasePage :
2005-12-06 12:08:09 +05:30
def __init__ ( self , title , options , archive , photo_list , gid ) :
2005-02-13 09:24:47 +05:30
self . title_str = title
2005-08-18 11:28:28 +05:30
self . gid = gid
2008-02-10 09:39:09 +05:30
self . inc_download = options [ ' incdownload ' ]
self . html_dir = options [ ' target ' ]
self . copyright = options [ ' cright ' ]
2005-08-18 11:28:28 +05:30
self . options = options
self . archive = archive
2008-02-10 09:39:09 +05:30
self . ext = options [ ' ext ' ]
self . encoding = options [ ' encoding ' ]
self . css = options [ ' css ' ]
self . noid = options [ ' nogid ' ]
self . linkhome = options [ ' linkhome ' ]
self . showbirth = options [ ' showbirth ' ]
self . showdeath = options [ ' showdeath ' ]
self . showspouse = options [ ' showspouse ' ]
self . showparents = options [ ' showparents ' ]
self . showhalfsiblings = options [ ' showhalfsiblings ' ]
self . use_intro = options [ ' intronote ' ] != u " " \
or options [ ' introimg ' ] != u " "
self . use_contact = options [ ' contactnote ' ] != u " " \
or options [ ' contactimg ' ] != u " "
self . use_gallery = options [ ' gallery ' ]
self . header = options [ ' headernote ' ]
self . footer = options [ ' footernote ' ]
2005-08-18 11:28:28 +05:30
self . photo_list = photo_list
2008-02-10 09:39:09 +05:30
self . usegraph = options [ ' graph ' ]
self . graphgens = options [ ' graphgens ' ]
self . use_home = self . options [ ' homenote ' ] != " " or \
self . options [ ' homeimg ' ] != " "
2006-05-02 02:41:26 +05:30
self . page_title = " "
2007-02-17 02:50:36 +05:30
self . warn_dir = True
2005-12-06 12:08:09 +05:30
2008-02-24 19:25:55 +05:30
def store_file ( self , archive , html_dir , from_path , to_path ) :
2005-08-18 11:28:28 +05:30
if archive :
2007-05-14 09:14:34 +05:30
archive . add ( str ( from_path ) , str ( to_path ) )
2005-08-18 11:28:28 +05:30
else :
2005-12-06 12:08:09 +05:30
dest = os . path . join ( html_dir , to_path )
dirname = os . path . dirname ( dest )
if not os . path . isdir ( dirname ) :
os . makedirs ( dirname )
2007-02-17 02:50:36 +05:30
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
2005-08-18 11:28:28 +05:30
def copy_media ( self , photo , store_ref = True ) :
handle = photo . get_handle ( )
if store_ref :
lnk = ( self . cur_name , self . page_title , self . gid )
if self . photo_list . has_key ( handle ) :
if lnk not in self . photo_list [ handle ] :
self . photo_list [ handle ] . append ( lnk )
else :
self . photo_list [ handle ] = [ lnk ]
2005-12-06 12:08:09 +05:30
ext = os . path . splitext ( photo . get_path ( ) ) [ 1 ]
2008-02-24 19:25:55 +05:30
real_path = " %s / %s " % ( self . build_path ( handle , ' images ' ) , handle + ext )
thumb_path = " %s / %s .png " % ( self . build_path ( handle , ' thumb ' ) , handle )
2005-08-18 11:28:28 +05:30
return ( real_path , thumb_path )
2008-02-24 19:25:55 +05:30
def create_file ( self , name ) :
self . cur_name = self . build_name ( " " , name )
2005-08-18 11:28:28 +05:30
if self . archive :
self . string_io = StringIO ( )
2005-12-06 12:08:09 +05:30
of = codecs . EncodedFile ( self . string_io , ' utf-8 ' , self . encoding ,
' xmlcharrefreplace ' )
2005-08-18 11:28:28 +05:30
else :
page_name = os . path . join ( self . html_dir , self . cur_name )
2005-12-06 12:08:09 +05:30
of = codecs . EncodedFile ( open ( page_name , " w " ) , ' utf-8 ' ,
self . encoding , ' xmlcharrefreplace ' )
2005-08-18 11:28:28 +05:30
return of
2008-02-24 19:25:55 +05:30
def link_path ( self , name , path ) :
path = " %s / %s / %s " % ( path , name [ 0 ] . lower ( ) , name [ 1 ] . lower ( ) )
path = self . build_name ( path , name )
2008-01-06 01:40:26 +05:30
return path
2005-08-18 11:28:28 +05:30
2008-02-24 19:25:55 +05:30
def create_link_file ( self , name , path ) :
2005-08-18 11:28:28 +05:30
self . cur_name = self . link_path ( name , path )
if self . archive :
self . string_io = StringIO ( )
2005-12-06 12:08:09 +05:30
of = codecs . EncodedFile ( self . string_io , ' utf-8 ' ,
self . encoding , ' xmlcharrefreplace ' )
2005-08-18 11:28:28 +05:30
else :
2007-11-18 19:49:33 +05:30
dirname = os . path . join ( self . html_dir ,
2008-02-24 19:25:55 +05:30
path , name [ 0 ] . lower ( ) ,
2007-11-18 19:49:33 +05:30
name [ 1 ] . lower ( ) )
2005-08-18 11:28:28 +05:30
if not os . path . isdir ( dirname ) :
os . makedirs ( dirname )
2008-02-24 19:25:55 +05:30
page_name = self . build_name ( dirname , name )
2005-12-06 12:08:09 +05:30
of = codecs . EncodedFile ( open ( page_name , " w " ) , ' utf-8 ' ,
self . encoding , ' xmlcharrefreplace ' )
2005-08-18 11:28:28 +05:30
return of
2008-02-24 19:25:55 +05:30
def close_file ( self , of ) :
2005-08-18 11:28:28 +05:30
if self . archive :
2005-12-06 12:08:09 +05:30
tarinfo = tarfile . TarInfo ( self . cur_name )
tarinfo . size = len ( self . string_io . getvalue ( ) )
tarinfo . mtime = time . time ( )
2006-11-29 09:53:20 +05:30
if os . sys . platform != " win32 " :
tarinfo . uid = os . getuid ( )
tarinfo . gid = os . getgid ( )
2005-12-06 12:08:09 +05:30
self . string_io . seek ( 0 )
self . archive . addfile ( tarinfo , self . string_io )
2005-08-18 11:28:28 +05:30
of . close ( )
else :
of . close ( )
2005-02-10 07:14:05 +05:30
def lnkfmt ( self , text ) :
2005-08-18 11:28:28 +05:30
return md5 . new ( text ) . hexdigest ( )
2008-02-24 19:25:55 +05:30
def display_footer ( self , of , db ) :
2005-02-10 07:14:05 +05:30
2008-03-06 18:37:37 +05:30
of . write ( ' </div> \n \n ' )
2005-12-06 12:08:09 +05:30
of . write ( ' <div id= " footer " > \n ' )
2008-03-06 18:37:37 +05:30
if self . footer :
note = db . get_note_from_gramps_id ( self . footer )
of . write ( ' \t <div id= " user_footer " > \n \t \t <p> ' )
of . write ( note . get ( markup = True ) )
of . write ( ' </p> \n \t </div> \n ' )
2005-08-18 11:28:28 +05:30
if self . copyright == 0 :
2008-03-06 18:37:37 +05:30
of . write ( ' \t <div id= " copyright " > \n \t \t <p> ' )
2005-08-18 11:28:28 +05:30
if self . author :
self . author = self . author . replace ( ' ,,, ' , ' ' )
year = time . localtime ( time . time ( ) ) [ 0 ]
cright = _ ( ' © %(year)d %(person)s ' ) % {
' person ' : self . author ,
' year ' : year }
2008-03-06 18:37:37 +05:30
of . write ( ' %s ' % cright )
of . write ( ' </p> \n \t </div> \n ' )
2005-08-18 11:28:28 +05:30
elif self . copyright < = 6 :
2008-03-06 18:37:37 +05:30
of . write ( ' \t <div id= " copyright " > ' )
2008-02-10 09:39:09 +05:30
text = _CC [ self . copyright - 1 ]
2005-08-18 11:28:28 +05:30
if self . up :
2005-12-06 12:08:09 +05:30
text = text . replace ( ' #PATH# ' , ' ../../../ ' )
2005-08-18 11:28:28 +05:30
else :
text = text . replace ( ' #PATH# ' , ' ' )
of . write ( text )
2005-12-06 12:08:09 +05:30
of . write ( ' </div> \n ' )
2008-03-06 18:37:37 +05:30
of . write ( ' \t <div class= " fullclear " ></div> \n ' )
of . write ( ' </div> \n \n ' )
2005-02-21 04:57:55 +05:30
of . write ( ' </body> \n ' )
2008-03-06 18:37:37 +05:30
of . write ( ' </html> ' )
2005-02-10 07:14:05 +05:30
2008-02-24 19:25:55 +05:30
def display_header ( self , of , db , title , author = " " , up = False ) :
2005-08-18 11:28:28 +05:30
self . up = up
if up :
2005-12-06 12:08:09 +05:30
path = " ../../.. "
2005-08-18 11:28:28 +05:30
else :
path = " "
self . author = author
2008-03-06 18:37:37 +05:30
2005-12-06 12:08:09 +05:30
of . write ( ' <!DOCTYPE html PUBLIC ' )
of . write ( ' " -//W3C//DTD XHTML 1.0 Strict//EN " ' )
of . write ( ' " http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd " > \n ' )
of . write ( ' <html xmlns= " http://www.w3.org/1999/xhtml " ' )
2005-12-13 07:37:16 +05:30
xmllang = Utils . xml_lang ( )
2008-03-06 18:37:37 +05:30
of . write ( ' xml:lang= " %s " lang= " %s " > \n \n <head> \n ' % ( xmllang , xmllang ) )
of . write ( ' <title> %s - %s </title> \n ' % ( html_escape ( self . title_str ) , html_escape ( title ) ) )
2005-03-28 10:28:28 +05:30
of . write ( ' <meta http-equiv= " Content-Type " content= " text/html; ' )
2005-12-06 12:08:09 +05:30
of . write ( ' charset= %s " /> \n ' % self . encoding )
2008-03-06 18:37:37 +05:30
# Link to narrative.css
2005-08-18 11:28:28 +05:30
if path :
of . write ( ' <link href= " %s / %s " ' % ( path , _NARRATIVE ) )
else :
of . write ( ' <link href= " %s " ' % _NARRATIVE )
2008-03-06 18:37:37 +05:30
of . write ( ' rel= " stylesheet " type= " text/css " title= " GRAMPS Style " media= " screen " /> \n ' )
# Link to narrativePrint.css
if path :
of . write ( ' <link href= " %s / %s " ' % ( path , _NARRATIVEPRINT ) )
else :
of . write ( ' <link href= " %s " ' % _NARRATIVEPRINT )
of . write ( ' rel= " stylesheet " type= " text/css " media= " print " /> \n ' )
# Link to favicon.ico
if path :
of . write ( ' <link href= " %s /images/favicon.ico " rel= " Shortcut Icon " /> \n ' % path )
else :
of . write ( ' <link href= " images/favicon.ico " rel= " Shortcut Icon " /> \n ' )
2005-12-06 12:08:09 +05:30
of . write ( ' <!-- %s Id %s --> \n ' % ( ' $ ' , ' $ ' ) )
2008-03-06 18:37:37 +05:30
of . write ( ' </head> \n \n ' )
2005-02-21 04:57:55 +05:30
of . write ( ' <body> \n ' )
2008-03-06 18:37:37 +05:30
of . write ( ' <div id= " Header " > \n ' )
2005-08-18 11:28:28 +05:30
2007-08-05 11:12:43 +05:30
value = _dp . parse ( time . strftime ( ' % b %d % Y ' ) )
2007-10-13 08:47:27 +05:30
value = _dd . display ( value )
2005-08-18 11:28:28 +05:30
msg = _ ( ' Generated by <a href= " http://gramps-project.org " > '
' GRAMPS</a> on %(date)s ' ) % { ' date ' : value }
2007-07-19 12:15:25 +05:30
if self . linkhome :
home_person_handle = db . get_default_handle ( )
if home_person_handle :
home_person = db . get_default_person ( )
home_person_url = self . build_name (
self . build_path ( home_person_handle , " ppl " , up ) ,
home_person . handle )
home_person_name = home_person . get_primary_name ( ) . get_regular_name ( )
2008-03-06 18:37:37 +05:30
msg + = _ ( ' <br />for <a href= " %s " > %s </a> ' ) % ( home_person_url , home_person_name )
of . write ( ' \t <div id= " GRAMPSinfo " > %s </div> \n ' % msg )
of . write ( ' \t <h1 id= " SiteTitle " > %s </h1> \n ' % html_escape ( self . title_str ) )
if self . header :
note = db . get_note_from_gramps_id ( self . header )
of . write ( ' \t <p id= " user_header " > ' )
of . write ( note . get ( markup = True ) )
of . write ( ' </p> \n ' )
of . write ( ' </div> \n \n ' )
2007-07-19 12:15:25 +05:30
2008-03-06 18:37:37 +05:30
of . write ( ' <div id= " Navigation " > \n ' )
of . write ( ' \t <ol> \n ' )
2005-12-06 12:08:09 +05:30
if self . use_home :
index_page = " index "
surname_page = " surnames "
intro_page = " introduction "
elif self . use_intro :
index_page = " "
surname_page = " surnames "
intro_page = " index "
else :
index_page = " "
surname_page = " index "
intro_page = " "
2008-03-06 18:37:37 +05:30
# Define 'self.currentsection' to correctly set navlink item CSS id 'CurrentSection' for Navigation styling
# Use 'self.cur_name' to determine 'CurrentSection' for individual elements for Navigation styling
self . currentsection = title
2005-12-06 12:08:09 +05:30
if self . use_home :
2008-03-06 18:37:37 +05:30
self . show_navlink ( of , index_page , _ ( ' Home ' ) , path )
2005-08-18 11:28:28 +05:30
if self . use_intro :
2008-03-06 18:37:37 +05:30
self . show_navlink ( of , intro_page , _ ( ' Introduction ' ) , path )
self . show_navlink ( of , surname_page , _ ( ' Surnames ' ) , path )
self . show_navlink ( of , ' individuals ' , _ ( ' Individuals ' ) , path )
self . show_navlink ( of , ' sources ' , _ ( ' Sources ' ) , path )
self . show_navlink ( of , ' places ' , _ ( ' Places ' ) , path )
2005-12-06 12:08:09 +05:30
if self . use_gallery :
2008-03-06 18:37:37 +05:30
self . show_navlink ( of , ' gallery ' , _ ( ' Gallery ' ) , path )
2005-08-18 11:28:28 +05:30
if self . inc_download :
2008-03-06 18:37:37 +05:30
self . show_navlink ( of , ' download ' , _ ( ' Download ' ) , path )
2005-08-18 11:28:28 +05:30
if self . use_contact :
2008-03-06 18:37:37 +05:30
self . show_navlink ( of , ' contact ' , _ ( ' Contact ' ) , path )
of . write ( ' \t </ol> \n </div> \n \n ' )
# 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
if " index " in self . cur_name :
of . write ( ' <div id= " Home " class= " content " > \n ' )
elif " introduction " in self . cur_name :
of . write ( ' <div id= " Introduction " class= " content " > \n ' )
elif " surnames " in self . cur_name :
of . write ( ' <div id= " Surnames " class= " content " > \n ' )
elif " srn " in self . cur_name :
of . write ( ' <div id= " SurnameDetail " class= " content " > \n ' )
elif " individuals " in self . cur_name :
of . write ( ' <div id= " Individuals " class= " content " > \n ' )
elif " ppl " in self . cur_name :
of . write ( ' <div id= " IndividualDetail " class= " content " > \n ' )
elif " sources " in self . cur_name :
of . write ( ' <div id= " Sources " class= " content " > \n ' )
elif " src " in self . cur_name :
of . write ( ' <div id= " SourceDetail " class= " content " > \n ' )
elif " places " in self . cur_name :
of . write ( ' <div id= " Places " class= " content " > \n ' )
elif " plc " in self . cur_name :
of . write ( ' <div id= " PlaceDetail " class= " content " > \n ' )
elif " gallery " in self . cur_name :
of . write ( ' <div id= " Gallery " class= " content " > \n ' )
elif " img " in self . cur_name :
of . write ( ' <div id= " GalleryDetail " class= " content " > \n ' )
elif " download " in self . cur_name :
of . write ( ' <div id= " Download " class= " content " > \n ' )
elif " contact " in self . cur_name :
of . write ( ' <div id= " Contact " class= " content " > \n ' )
else :
of . write ( ' <div class= " content " > \n ' )
def show_link ( self , of , lpath , title , path ) :
2005-08-18 11:28:28 +05:30
if path :
2008-02-11 02:47:43 +05:30
of . write ( ' <a href= " %s / %s %s " > %s </a> \n ' % ( path , lpath , self . ext , title ) )
2005-08-18 11:28:28 +05:30
else :
2008-02-11 02:47:43 +05:30
of . write ( ' <a href= " %s %s " > %s </a> \n ' % ( lpath , self . ext , title ) )
2005-08-18 11:28:28 +05:30
2008-03-06 18:37:37 +05:30
def show_navlink ( self , of , lpath , title , path ) :
if self . currentsection == title :
if path :
of . write ( ' \t \t <li id= " CurrentSection " ><a href= " %s / %s %s " > %s </a></li> \n ' % ( path , lpath , self . ext , title ) )
else :
of . write ( ' \t \t <li id= " CurrentSection " ><a href= " %s %s " > %s </a></li> \n ' % ( lpath , self . ext , title ) )
elif title == " Surnames " :
if " srn " in self . cur_name :
if path :
of . write ( ' \t \t <li id= " CurrentSection " ><a href= " %s / %s %s " > %s </a></li> \n ' % ( path , lpath , self . ext , title ) )
else :
of . write ( ' \t \t <li id= " CurrentSection " ><a href= " %s %s " > %s </a></li> \n ' % ( lpath , self . ext , title ) )
elif " Surnames " in self . currentsection :
if path :
of . write ( ' \t \t <li id= " CurrentSection " ><a href= " %s / %s %s " > %s </a></li> \n ' % ( path , lpath , self . ext , title ) )
else :
of . write ( ' \t \t <li id= " CurrentSection " ><a href= " %s %s " > %s </a></li> \n ' % ( lpath , self . ext , title ) )
else :
if path :
of . write ( ' \t \t <li><a href= " %s / %s %s " > %s </a></li> \n ' % ( path , lpath , self . ext , title ) )
else :
of . write ( ' \t \t <li><a href= " %s %s " > %s </a></li> \n ' % ( lpath , self . ext , title ) )
elif title == " Individuals " :
if " ppl " in self . cur_name :
if path :
of . write ( ' \t \t <li id= " CurrentSection " ><a href= " %s / %s %s " > %s </a></li> \n ' % ( path , lpath , self . ext , title ) )
else :
of . write ( ' \t \t <li id= " CurrentSection " ><a href= " %s %s " > %s </a></li> \n ' % ( lpath , self . ext , title ) )
else :
if path :
of . write ( ' \t \t <li><a href= " %s / %s %s " > %s </a></li> \n ' % ( path , lpath , self . ext , title ) )
else :
of . write ( ' \t \t <li><a href= " %s %s " > %s </a></li> \n ' % ( lpath , self . ext , title ) )
elif title == " Sources " :
if " src " in self . cur_name :
if path :
of . write ( ' \t \t <li id= " CurrentSection " ><a href= " %s / %s %s " > %s </a></li> \n ' % ( path , lpath , self . ext , title ) )
else :
of . write ( ' \t \t <li id= " CurrentSection " ><a href= " %s %s " > %s </a></li> \n ' % ( lpath , self . ext , title ) )
else :
if path :
of . write ( ' \t \t <li><a href= " %s / %s %s " > %s </a></li> \n ' % ( path , lpath , self . ext , title ) )
else :
of . write ( ' \t \t <li><a href= " %s %s " > %s </a></li> \n ' % ( lpath , self . ext , title ) )
elif title == " Places " :
if " plc " in self . cur_name :
if path :
of . write ( ' \t \t <li id= " CurrentSection " ><a href= " %s / %s %s " > %s </a></li> \n ' % ( path , lpath , self . ext , title ) )
else :
of . write ( ' \t \t <li id= " CurrentSection " ><a href= " %s %s " > %s </a></li> \n ' % ( lpath , self . ext , title ) )
else :
if path :
of . write ( ' \t \t <li><a href= " %s / %s %s " > %s </a></li> \n ' % ( path , lpath , self . ext , title ) )
else :
of . write ( ' \t \t <li><a href= " %s %s " > %s </a></li> \n ' % ( lpath , self . ext , title ) )
elif title == " Gallery " :
if " img " in self . cur_name :
if path :
of . write ( ' \t \t <li id= " CurrentSection " ><a href= " %s / %s %s " > %s </a></li> \n ' % ( path , lpath , self . ext , title ) )
else :
of . write ( ' \t \t <li id= " CurrentSection " ><a href= " %s %s " > %s </a></li> \n ' % ( lpath , self . ext , title ) )
else :
if path :
of . write ( ' \t \t <li><a href= " %s / %s %s " > %s </a></li> \n ' % ( path , lpath , self . ext , title ) )
else :
of . write ( ' \t \t <li><a href= " %s %s " > %s </a></li> \n ' % ( lpath , self . ext , title ) )
else :
if path :
of . write ( ' \t \t <li><a href= " %s / %s %s " > %s </a></li> \n ' % ( path , lpath , self . ext , title ) )
else :
of . write ( ' \t \t <li><a href= " %s %s " > %s </a></li> \n ' % ( lpath , self . ext , title ) )
2005-08-18 11:28:28 +05:30
def display_first_image_as_thumbnail ( self , of , db , photolist = None ) :
2005-12-06 12:08:09 +05:30
if not photolist or not self . use_gallery :
2005-08-18 11:28:28 +05:30
return
2005-12-06 12:08:09 +05:30
2005-08-18 11:28:28 +05:30
photo_handle = photolist [ 0 ] . get_reference_handle ( )
photo = db . get_object_from_handle ( photo_handle )
2005-12-06 12:08:09 +05:30
mime_type = photo . get_mime_type ( )
if mime_type :
2005-08-18 11:28:28 +05:30
try :
2008-02-24 19:25:55 +05:30
( real_path , newpath ) = self . copy_media ( photo )
2008-03-06 18:37:37 +05:30
of . write ( ' \t <div class= " snapshot " > \n ' )
2008-02-24 19:25:55 +05:30
self . media_link ( of , photo_handle , newpath , ' ' , up = True )
2008-03-06 18:37:37 +05:30
of . write ( ' \t </div> \n \n ' )
2005-08-18 11:28:28 +05:30
except ( IOError , OSError ) , msg :
WarningDialog ( _ ( " Could not add photo to page " ) , str ( msg ) )
2005-12-06 12:08:09 +05:30
else :
2008-03-06 18:37:37 +05:30
of . write ( ' \t <div class= " snapshot " > \n ' )
2007-01-08 09:18:49 +05:30
descr = " " . join ( wrapper . wrap ( photo . get_description ( ) ) )
self . doc_link ( of , photo_handle , descr , up = True )
2008-03-06 18:37:37 +05:30
of . write ( ' \t </div> \n \n ' )
2007-01-08 09:18:49 +05:30
lnk = ( self . cur_name , self . page_title , self . gid )
2005-12-06 12:08:09 +05:30
if self . photo_list . has_key ( photo_handle ) :
if lnk not in self . photo_list [ photo_handle ] :
self . photo_list [ photo_handle ] . append ( lnk )
else :
self . photo_list [ photo_handle ] = [ lnk ]
2005-08-18 11:28:28 +05:30
def display_additional_images_as_gallery ( self , of , db , photolist = None ) :
2005-12-06 12:08:09 +05:30
if not photolist or not self . use_gallery :
2005-08-18 11:28:28 +05:30
return
2008-03-06 18:37:37 +05:30
of . write ( ' \t <div id= " indivgallery " class= " subsection " > \n ' )
of . write ( ' \t \t <h4> %s </h4> \n ' % _ ( ' Gallery ' ) )
2005-08-18 11:28:28 +05:30
for mediaref in photolist :
photo_handle = mediaref . get_reference_handle ( )
photo = db . get_object_from_handle ( photo_handle )
2005-12-06 12:08:09 +05:30
mime_type = photo . get_mime_type ( )
2007-04-09 09:10:11 +05:30
title = photo . get_description ( )
if title == " " :
title = " (untitled) "
2005-12-06 12:08:09 +05:30
if mime_type :
2005-08-18 11:28:28 +05:30
try :
2008-02-24 19:25:55 +05:30
( real_path , newpath ) = self . copy_media ( photo )
2007-04-09 09:10:11 +05:30
descr = " " . join ( wrapper . wrap ( title ) )
2007-01-08 09:18:49 +05:30
self . media_link ( of , photo_handle , newpath , descr , up = True )
2005-08-18 11:28:28 +05:30
except ( IOError , OSError ) , msg :
WarningDialog ( _ ( " Could not add photo to page " ) , str ( msg ) )
2005-12-06 12:08:09 +05:30
else :
try :
2007-04-09 09:10:11 +05:30
descr = " " . join ( wrapper . wrap ( title ) )
2007-01-08 09:18:49 +05:30
self . doc_link ( of , photo_handle , descr , up = True )
2005-12-06 12:08:09 +05:30
lnk = ( self . cur_name , self . page_title , self . gid )
if self . photo_list . has_key ( photo_handle ) :
if lnk not in self . photo_list [ photo_handle ] :
self . photo_list [ photo_handle ] . append ( lnk )
else :
self . photo_list [ photo_handle ] = [ lnk ]
except ( IOError , OSError ) , msg :
WarningDialog ( _ ( " Could not add photo to page " ) , str ( msg ) )
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t <div class= " fullclear " ></div> \n ' )
of . write ( ' \t </div> \n \n ' )
2005-08-18 11:28:28 +05:30
2008-02-24 19:25:55 +05:30
def display_note_list ( self , of , db , notelist = None ) :
2007-03-10 09:55:23 +05:30
if not notelist :
2005-08-18 11:28:28 +05:30
return
2007-03-10 09:55:23 +05:30
for notehandle in notelist :
noteobj = db . get_note_from_handle ( notehandle )
format = noteobj . get_format ( )
text = noteobj . get ( markup = True )
try :
text = unicode ( text )
except UnicodeDecodeError :
text = unicode ( str ( text ) , errors = ' replace ' )
if text :
2008-03-06 18:37:37 +05:30
of . write ( ' \t <div id= " narrative " class= " subsection " > \n ' )
of . write ( ' \t \t <h4> %s </h4> \n ' % _ ( ' Narrative ' ) )
2007-03-10 09:55:23 +05:30
if format :
text = u " <pre> %s </pre> " % text
else :
2008-03-06 18:37:37 +05:30
text = u " </p> \n \t \t <p> " . join ( text . split ( " \n " ) )
of . write ( ' \t \t <p> %s </p> \n ' % text )
of . write ( ' \t </div> \n \n ' )
2005-08-18 11:28:28 +05:30
2008-02-24 19:25:55 +05:30
def display_url_list ( self , of , urllist = None ) :
2005-08-18 11:28:28 +05:30
if not urllist :
return
2008-03-06 18:37:37 +05:30
of . write ( ' \t <div id= " weblinks " class= " subsection " > \n ' )
of . write ( ' \t \t <h4> %s </h4> \n ' % _ ( ' Weblinks ' ) )
of . write ( ' \t \t <ol> \n ' )
2005-08-18 11:28:28 +05:30
index = 1
for url in urllist :
uri = url . get_path ( )
descr = url . get_description ( )
2006-08-23 06:39:54 +05:30
if not descr :
descr = uri
2007-10-08 22:11:39 +05:30
if url . get_type ( ) == gen . lib . UrlType . EMAIL and not uri . startswith ( " mailto: " ) :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <li><a href= " mailto: %s " > %s </a> ' % ( uri , descr ) )
2007-10-08 22:11:39 +05:30
elif url . get_type ( ) == gen . lib . UrlType . WEB_HOME and not uri . startswith ( " http:// " ) :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <li><a href= " http:// %s " > %s </a> ' % ( uri , descr ) )
2007-10-08 22:11:39 +05:30
elif url . get_type ( ) == gen . lib . UrlType . WEB_FTP and not uri . startswith ( " ftp:// " ) :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <li><a href= " ftp:// %s " > %s </a> ' % ( uri , descr ) )
2007-03-06 10:00:22 +05:30
else :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <li><a href= " %s " > %s </a> ' % ( uri , descr ) )
of . write ( ' </li> \n ' )
2005-08-18 11:28:28 +05:30
index = index + 1
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t </ol> \n ' )
of . write ( ' \t </div> \n \n ' )
2005-08-18 11:28:28 +05:30
2008-03-01 10:13:58 +05:30
def display_source_refs ( self , of , db , bibli ) :
if bibli . get_citation_count ( ) == 0 :
2007-08-23 15:24:37 +05:30
return
2008-03-06 18:37:37 +05:30
of . write ( ' \t <div id= " sourcerefs " class= " subsection " > \n ' )
of . write ( ' \t \t <h4> %s </h4> \n ' % _ ( ' Source References ' ) )
of . write ( ' \t \t <ol> \n ' )
2007-08-23 15:24:37 +05:30
cindex = 0
2008-03-01 10:13:58 +05:30
for citation in bibli . get_citation_list ( ) :
2007-08-23 15:24:37 +05:30
cindex + = 1
# Add this source to the global list of sources to be displayed
# on each source page.
lnk = ( self . cur_name , self . page_title , self . gid )
shandle = citation . get_source_handle ( )
if self . src_list . has_key ( shandle ) :
if lnk not in self . src_list [ shandle ] :
self . src_list [ shandle ] . append ( lnk )
else :
self . src_list [ shandle ] = [ lnk ]
# Add this source and its references to the page
2008-03-01 10:13:58 +05:30
source = db . get_source_from_handle ( shandle )
2007-08-23 15:24:37 +05:30
title = source . get_title ( )
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <li><a name= " sref %d " ' % cindex )
2008-03-01 10:13:58 +05:30
self . source_link ( of , source . handle , title , source . gramps_id , True )
2007-08-23 15:24:37 +05:30
2008-03-06 18:37:37 +05:30
of . write ( ' \n \t \t \t \t <ol> \n ' )
for key , sref in citation . get_ref_list ( ) :
2007-08-23 15:24:37 +05:30
tmp = [ ]
confidence = Utils . confidence . get ( sref . confidence , _ ( ' Unknown ' ) )
2007-11-17 11:36:43 +05:30
if confidence == _ ( ' Normal ' ) :
confidence = None
2008-03-01 10:13:58 +05:30
for ( label , data ) in [ ( _ ( ' Date ' ) , _dd . display ( sref . date ) ) ,
( _ ( ' Page ' ) , sref . page ) ,
( _ ( ' Confidence ' ) , confidence ) ] :
2007-08-23 15:24:37 +05:30
if data :
2008-03-01 10:13:58 +05:30
tmp . append ( " %s : %s " % ( label , data ) )
2007-08-23 15:24:37 +05:30
notelist = sref . get_note_list ( )
for notehandle in notelist :
2008-03-01 10:13:58 +05:30
note = db . get_note_from_handle ( notehandle )
2008-02-24 19:25:55 +05:30
tmp . append ( " %s : %s " % ( _ ( ' Text ' ) , note . get ( True ) ) )
2007-08-23 15:24:37 +05:30
if len ( tmp ) > 0 :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t \t \t <li><a name= " sref %d %s " > ' % ( cindex , key ) )
of . write ( ' ; ' . join ( tmp ) )
of . write ( ' </a></li> \n ' )
of . write ( ' \t \t \t \t </ol> \n ' )
of . write ( ' \t \t \t </li> \n ' )
of . write ( ' \t \t </ol> \n ' )
of . write ( ' \t </div> \n \n ' )
2007-08-23 15:24:37 +05:30
2008-02-24 19:25:55 +05:30
def display_references ( self , of , db , handlelist ) :
2005-08-18 11:28:28 +05:30
if not handlelist :
return
2008-03-06 18:37:37 +05:30
of . write ( ' \t <div id= " references " class= " subsection " > \n ' )
of . write ( ' \t \t <h4> %s </h4> \n ' % _ ( ' References ' ) )
of . write ( ' \t \t <ol> \n ' )
2007-10-01 09:03:08 +05:30
2007-10-02 17:42:15 +05:30
sortlist = sorted ( handlelist ,
key = operator . itemgetter ( 1 ) ,
2007-10-04 09:26:41 +05:30
cmp = locale . strcoll )
2005-08-18 11:28:28 +05:30
index = 1
2008-02-24 19:25:55 +05:30
for ( path , name , gid ) in sortlist :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <li> ' )
2008-02-24 19:25:55 +05:30
self . person_link ( of , path , name , gid )
2008-03-06 18:37:37 +05:30
of . write ( ' </li> \n ' )
2005-08-18 11:28:28 +05:30
index = index + 1
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t </ol> \n ' )
of . write ( ' \t </div> \n ' )
2005-08-18 11:28:28 +05:30
2008-02-24 19:25:55 +05:30
def build_path ( self , handle , dirroot , up = False ) :
2006-12-11 11:01:51 +05:30
path = " "
2005-08-18 11:28:28 +05:30
if up :
2007-11-18 19:49:33 +05:30
path = ' ../../../ %s / %s / %s ' % ( dirroot ,
handle [ 0 ] . lower ( ) ,
handle [ 1 ] . lower ( ) )
2005-08-18 11:28:28 +05:30
else :
2008-02-24 19:25:55 +05:30
path = " %s / %s / %s " % ( dirroot , handle [ 0 ] . lower ( ) , handle [ 1 ] . lower ( ) )
2006-12-11 11:01:51 +05:30
return path
2005-08-18 11:28:28 +05:30
def build_name ( self , path , base ) :
if path :
2008-02-11 02:47:43 +05:30
return path + " / " + base + self . ext
2005-08-18 11:28:28 +05:30
else :
2008-02-11 02:47:43 +05:30
return base + self . ext
2005-08-18 11:28:28 +05:30
2008-02-24 19:25:55 +05:30
def person_link ( self , of , path , name , gid = " " , up = True ) :
2005-08-18 11:28:28 +05:30
if up :
2005-12-06 12:08:09 +05:30
path = " ../../../ " + path
2005-08-18 11:28:28 +05:30
2008-02-24 19:25:55 +05:30
of . write ( ' <a href= " %s " > %s ' % ( path , name ) )
2005-08-18 11:28:28 +05:30
if not self . noid and gid != " " :
of . write ( ' <span class= " grampsid " >[ %s ]</span> ' % gid )
of . write ( ' </a> ' )
2008-02-24 19:25:55 +05:30
def surname_link ( self , of , name , opt_val = None , up = False ) :
2005-08-18 11:28:28 +05:30
handle = self . lnkfmt ( name )
dirpath = self . build_path ( handle , ' srn ' , up )
2008-02-24 19:25:55 +05:30
of . write ( ' <a href= " %s / %s %s " > %s ' % ( dirpath , handle , self . ext , name ) )
2005-08-18 11:28:28 +05:30
if opt_val != None :
of . write ( ' ( %d ) ' % opt_val )
of . write ( ' </a> ' )
2008-03-06 18:37:37 +05:30
def galleryNav_link ( self , of , handle , name , up = False ) :
dirpath = self . build_path ( handle , ' img ' , up )
of . write ( ' <a id= " %s " href= " %s / %s %s " > %s </a> ' % ( html_escape ( name ) , dirpath , handle , self . ext , html_escape ( name ) ) )
def media_ref_link ( self , of , handle , name , up = False ) :
2005-08-18 11:28:28 +05:30
dirpath = self . build_path ( handle , ' img ' , up )
2008-03-06 18:37:37 +05:30
of . write ( ' <a href= " %s / %s %s " > %s </a> ' % ( dirpath , handle , self . ext , html_escape ( name ) ) )
2005-08-18 11:28:28 +05:30
2008-02-24 19:25:55 +05:30
def media_link ( self , of , handle , path , name , up , usedescr = True ) :
2005-08-18 11:28:28 +05:30
dirpath = self . build_path ( handle , ' img ' , up )
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t <div class= " thumbnail " > \n ' )
of . write ( ' \t \t \t <a href= " %s / %s %s " > ' % ( dirpath , handle , self . ext ) )
2005-12-06 12:08:09 +05:30
of . write ( ' <img src= " ../../../ %s " ' % path )
2008-03-06 18:37:37 +05:30
of . write ( ' alt= " %s " /></a> \n ' % name )
2005-08-18 11:28:28 +05:30
if usedescr :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <p> %s </p> \n ' % html_escape ( name ) )
of . write ( ' \t \t </div> \n ' )
2005-12-06 12:08:09 +05:30
2008-02-24 19:25:55 +05:30
def doc_link ( self , of , handle , name , up , usedescr = True ) :
2005-12-06 12:08:09 +05:30
path = os . path . join ( ' images ' , ' document.png ' )
dirpath = self . build_path ( handle , ' img ' , up )
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t <div class= " thumbnail " > \n ' )
of . write ( ' \t \t \t <a href= " %s / %s %s " > ' % ( dirpath , handle , self . ext ) )
2005-12-06 12:08:09 +05:30
of . write ( ' <img src= " ../../../ %s " ' % path )
2008-03-06 18:37:37 +05:30
of . write ( ' alt= " %s " /></a> \n ' % html_escape ( name ) )
2005-12-06 12:08:09 +05:30
if usedescr :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <p> %s </p> \n ' % html_escape ( name ) )
of . write ( ' \t \t </div> \n ' )
2005-08-18 11:28:28 +05:30
2008-02-24 19:25:55 +05:30
def source_link ( self , of , handle , name , gid = " " , up = False ) :
2005-08-18 11:28:28 +05:30
dirpath = self . build_path ( handle , ' src ' , up )
2008-03-06 18:37:37 +05:30
of . write ( ' href= " %s / %s %s " > %s ' % ( dirpath , handle , self . ext , html_escape ( name ) ) )
2005-08-18 11:28:28 +05:30
if not self . noid and gid != " " :
of . write ( ' <span class= " grampsid " >[ %s ]</span> ' % gid )
of . write ( ' </a> ' )
2008-02-24 19:25:55 +05:30
def place_link ( self , of , handle , name , gid = " " , up = False ) :
2005-08-18 11:28:28 +05:30
dirpath = self . build_path ( handle , ' plc ' , up )
2008-02-11 02:47:43 +05:30
of . write ( ' <a href= " %s / %s %s " > %s ' % (
2008-03-06 18:37:37 +05:30
dirpath , handle , self . ext , html_escape ( name ) ) )
2005-08-18 11:28:28 +05:30
if not self . noid and gid != " " :
of . write ( ' <span class= " grampsid " >[ %s ]</span> ' % gid )
of . write ( ' </a> ' )
2008-02-24 19:25:55 +05:30
def place_link_str ( self , handle , name , gid = " " , up = False ) :
2005-08-18 11:28:28 +05:30
dirpath = self . build_path ( handle , ' plc ' , up )
2008-02-11 02:47:43 +05:30
retval = ' <a href= " %s / %s %s " > %s ' % (
2008-03-06 18:37:37 +05:30
dirpath , handle , self . ext , html_escape ( name ) )
2005-08-18 11:28:28 +05:30
if not self . noid and gid != " " :
retval = retval + ' <span class= " grampsid " >[ %s ]</span> ' % gid
return retval + ' </a> '
2005-02-10 07:14:05 +05:30
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
class IndividualListPage ( BasePage ) :
2007-08-27 01:49:18 +05:30
def __init__ ( self , db , title , person_handle_list ,
2005-12-06 12:08:09 +05:30
options , archive , media_list ) :
BasePage . __init__ ( self , title , options , archive , media_list , " " )
2005-08-18 11:28:28 +05:30
of = self . create_file ( " individuals " )
self . display_header ( of , db , _ ( ' Individuals ' ) ,
get_researcher ( ) . get_name ( ) )
2005-02-10 07:14:05 +05:30
2005-08-18 11:28:28 +05:30
msg = _ ( " This page contains an index of all the individuals in the "
2008-03-06 18:37:37 +05:30
" database, sorted by their last names. Selecting the person’s "
" name will take you to that person’s individual page. " )
of . write ( ' \t <h2> %s </h2> \n ' % _ ( ' Individuals ' ) )
of . write ( ' \t <p id= " description " > %s </p> \n ' % msg )
of . write ( ' \t <table class= " infolist individuallist " > \n \t <thead> \n \t \t <tr> \n ' )
of . write ( ' \t \t \t <th class= " ColumnSurname " > %s </th> \n ' % _ ( ' Surname ' ) )
of . write ( ' \t \t \t <th class= " ColumnName " > %s </th> \n ' % _ ( ' Name ' ) )
2007-07-19 12:15:25 +05:30
column_count = 2
if self . showbirth :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <th class= " ColumnBirth " > %s </th> \n ' % _ ( ' Birth ' ) )
2007-07-19 12:15:25 +05:30
column_count + = 1
if self . showdeath :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <th class= " ColumnDeath " > %s </th> \n ' % _ ( ' Death ' ) )
2007-07-19 12:15:25 +05:30
column_count + = 1
if self . showspouse :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <th class= " ColumnPartner " > %s </th> \n ' % _ ( ' Partner ' ) )
2007-07-19 12:15:25 +05:30
column_count + = 1
if self . showparents :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <th class= " ColumnParents " > %s </th> \n ' % _ ( ' Parents ' ) )
2007-07-19 12:15:25 +05:30
column_count + = 1
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t </tr> \n \t </thead> \n \t <tbody> \n ' )
2005-08-18 11:28:28 +05:30
person_handle_list = sort_people ( db , person_handle_list )
2008-02-24 19:25:55 +05:30
for ( surname , handle_list ) in person_handle_list :
2005-08-18 11:28:28 +05:30
first = True
for person_handle in handle_list :
person = db . get_person_from_handle ( person_handle )
2007-07-19 12:15:25 +05:30
# surname column
2005-08-18 11:28:28 +05:30
if first :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t <tr class= " BeginSurname " > \n \t \t \t <td class= " ColumnSurname " ><a name= " %s " > %s </a> ' % ( self . lnkfmt ( surname ) , surname ) )
2005-08-18 11:28:28 +05:30
else :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t <tr> \n \t \t \t <td class= " ColumnSurname " > ' )
of . write ( ' </td> \n ' )
2007-07-19 12:15:25 +05:30
# firstname column
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <td class= " ColumnName " > ' )
2005-08-18 11:28:28 +05:30
path = self . build_path ( person . handle , " ppl " , False )
self . person_link ( of , self . build_name ( path , person . handle ) ,
2005-12-06 12:08:09 +05:30
_nd . display_given ( person ) , person . gramps_id , False )
2008-03-06 18:37:37 +05:30
of . write ( ' </td> \n ' )
2005-12-06 12:08:09 +05:30
2007-07-19 12:15:25 +05:30
# birth column
if self . showbirth :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <td class= " ColumnBirth " > ' )
2007-09-28 17:46:12 +05:30
birth = ReportUtils . get_birth_or_fallback ( db , person )
if birth :
2007-10-08 22:11:39 +05:30
if birth . get_type ( ) == gen . lib . EventType . BIRTH :
2007-09-28 17:46:12 +05:30
of . write ( _dd . display ( birth . get_date_object ( ) ) )
else :
of . write ( ' <em> ' )
of . write ( _dd . display ( birth . get_date_object ( ) ) )
of . write ( ' </em> ' )
2008-03-06 18:37:37 +05:30
of . write ( ' </td> \n ' )
2007-07-19 12:15:25 +05:30
# death column
if self . showdeath :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <td class= " ColumnDeath " > ' )
2007-09-28 17:46:12 +05:30
death = ReportUtils . get_death_or_fallback ( db , person )
if death :
2007-10-08 22:11:39 +05:30
if death . get_type ( ) == gen . lib . EventType . DEATH :
2007-09-28 17:46:12 +05:30
of . write ( _dd . display ( death . get_date_object ( ) ) )
else :
of . write ( ' <em> ' )
of . write ( _dd . display ( death . get_date_object ( ) ) )
of . write ( ' </em> ' )
2008-03-06 18:37:37 +05:30
of . write ( ' </td> \n ' )
2007-07-19 12:15:25 +05:30
# spouse (partner) column
if self . showspouse :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <td class= " ColumnPartner " > ' )
2007-08-27 01:49:18 +05:30
family_list = person . get_family_handle_list ( )
first_family = True
spouse_name = None
if family_list :
for family_handle in family_list :
family = db . get_family_from_handle ( family_handle )
spouse_id = ReportUtils . find_spouse ( person , family )
if spouse_id :
spouse = db . get_person_from_handle ( spouse_id )
spouse_name = spouse . get_primary_name ( ) . get_regular_name ( )
if not first_family :
of . write ( ' , ' )
of . write ( ' %s ' % spouse_name )
first_family = False
2008-03-06 18:37:37 +05:30
of . write ( ' </td> \n ' )
2007-07-19 12:15:25 +05:30
# parents column
if self . showparents :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <td class= " ColumnParents " > ' )
2007-07-19 12:15:25 +05:30
parent_handle_list = person . get_parent_family_handle_list ( )
if parent_handle_list :
parent_handle = parent_handle_list [ 0 ]
family = db . get_family_from_handle ( parent_handle )
father_name = ' '
mother_name = ' '
father_id = family . get_father_handle ( )
mother_id = family . get_mother_handle ( )
father = db . get_person_from_handle ( father_id )
mother = db . get_person_from_handle ( mother_id )
2007-08-12 08:12:22 +05:30
if father :
2007-07-19 12:15:25 +05:30
father_name = father . get_primary_name ( ) . get_regular_name ( )
2007-08-12 08:12:22 +05:30
if mother :
2007-07-19 12:15:25 +05:30
mother_name = mother . get_primary_name ( ) . get_regular_name ( )
if mother and father :
2008-03-06 18:37:37 +05:30
of . write ( ' <span class= " father fatherNmother " > %s </span> <span class= " mother " > %s </span> ' % ( father_name , mother_name ) )
2007-07-19 12:15:25 +05:30
elif mother :
2008-03-06 18:37:37 +05:30
of . write ( ' <span class= " mother " > %s </span> ' % mother_name )
2007-07-19 12:15:25 +05:30
elif father :
2008-03-06 18:37:37 +05:30
of . write ( ' <span class= " father " > %s </span> ' % father_name )
of . write ( ' </td> \n ' )
2007-07-19 12:15:25 +05:30
# finished writing all columns
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t </tr> \n ' )
2005-08-18 11:28:28 +05:30
first = False
2008-03-06 18:37:37 +05:30
of . write ( ' \t </tbody> \n \t </table> \n ' )
2005-08-18 11:28:28 +05:30
self . display_footer ( of , db )
self . close_file ( of )
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
class SurnamePage ( BasePage ) :
2008-03-06 18:37:37 +05:30
def __init__ ( self , db , title , person_handle_list , options , archive , media_list ) :
2005-12-06 12:08:09 +05:30
BasePage . __init__ ( self , title , options , archive , media_list , " " )
2005-08-18 11:28:28 +05:30
of = self . create_link_file ( md5 . new ( title ) . hexdigest ( ) , ' srn ' )
self . display_header ( of , db , title , get_researcher ( ) . get_name ( ) , True )
msg = _ ( " This page contains an index of all the individuals in the "
2008-03-06 18:37:37 +05:30
" database with the surname of %s . Selecting the person’s name "
" will take you to that person’s individual page. " ) % title
of . write ( ' \t <h2>Surnames:</h2> \n ' )
of . write ( ' \t <h3> %s </h3> \n ' % html_escape ( title ) )
of . write ( ' \t <p id= " description " > %s </p> \n ' % msg )
of . write ( ' \t <table class= " infolist surname " > \n \t <thead> \n \t \t <tr> \n ' )
of . write ( ' \t \t \t <th class= " ColumnName " > %s </th> \n ' % _ ( ' Name ' ) )
2007-07-19 12:15:25 +05:30
if self . showbirth :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <th class= " ColumnBirth " > %s </th> \n ' % _ ( ' Birth ' ) )
2007-07-19 12:15:25 +05:30
if self . showdeath :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <th class= " ColumnDeath " > %s </th> \n ' % _ ( ' Death ' ) )
2007-07-19 12:15:25 +05:30
if self . showspouse :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <th class= " ColumnPartner " > %s </th> \n ' % _ ( ' Partner ' ) )
2007-07-19 12:15:25 +05:30
if self . showparents :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <th class= " ColumnParents " > %s </th> \n ' % _ ( ' Parents ' ) )
of . write ( ' \t \t </tr> \n \t </thead> \n \t <tbody> \n ' )
2005-02-10 07:14:05 +05:30
for person_handle in person_handle_list :
2007-07-19 12:15:25 +05:30
# firstname column
2005-02-10 07:14:05 +05:30
person = db . get_person_from_handle ( person_handle )
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t <tr> \n \t \t \t <td class= " ColumnName " > ' )
2005-12-06 12:08:09 +05:30
path = self . build_path ( person . handle , " ppl " , True )
2005-08-18 11:28:28 +05:30
self . person_link ( of , self . build_name ( path , person . handle ) ,
person . get_primary_name ( ) . get_first_name ( ) ,
person . gramps_id , False )
2008-03-06 18:37:37 +05:30
of . write ( ' </td> \n ' )
2007-07-19 12:15:25 +05:30
# birth column
if self . showbirth :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <td class= " ColumnBirth " > ' )
2007-09-28 17:46:12 +05:30
birth = ReportUtils . get_birth_or_fallback ( db , person )
if birth :
2007-10-08 22:11:39 +05:30
if birth . get_type ( ) == gen . lib . EventType . BIRTH :
2007-09-28 17:46:12 +05:30
of . write ( _dd . display ( birth . get_date_object ( ) ) )
else :
of . write ( ' <em> ' )
of . write ( _dd . display ( birth . get_date_object ( ) ) )
of . write ( ' </em> ' )
2008-03-06 18:37:37 +05:30
of . write ( ' </td> \n ' )
2007-07-19 12:15:25 +05:30
# death column
if self . showdeath :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <td class= " ColumnDeath " > ' )
2007-09-28 17:46:12 +05:30
death = ReportUtils . get_death_or_fallback ( db , person )
if death :
2007-10-08 22:11:39 +05:30
if death . get_type ( ) == gen . lib . EventType . DEATH :
2007-09-28 17:46:12 +05:30
of . write ( _dd . display ( death . get_date_object ( ) ) )
else :
of . write ( ' <em> ' )
of . write ( _dd . display ( death . get_date_object ( ) ) )
of . write ( ' </em> ' )
2008-03-06 18:37:37 +05:30
of . write ( ' </td> \n ' )
2007-07-19 12:15:25 +05:30
# spouse (partner) column
if self . showspouse :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <td class= " ColumnPartner " > ' )
2007-08-27 01:49:18 +05:30
family_list = person . get_family_handle_list ( )
first_family = True
spouse_name = None
if family_list :
for family_handle in family_list :
family = db . get_family_from_handle ( family_handle )
spouse_id = ReportUtils . find_spouse ( person , family )
if spouse_id :
spouse = db . get_person_from_handle ( spouse_id )
spouse_name = spouse . get_primary_name ( ) . get_regular_name ( )
if not first_family :
of . write ( ' , ' )
of . write ( ' %s ' % spouse_name )
first_family = False
2008-03-06 18:37:37 +05:30
of . write ( ' </td> \n ' )
2007-07-19 12:15:25 +05:30
# parents column
if self . showparents :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <td class= " ColumnParents " > ' )
2007-07-19 12:15:25 +05:30
parent_handle_list = person . get_parent_family_handle_list ( )
if parent_handle_list :
parent_handle = parent_handle_list [ 0 ]
family = db . get_family_from_handle ( parent_handle )
father_name = ' '
mother_name = ' '
father_id = family . get_father_handle ( )
mother_id = family . get_mother_handle ( )
father = db . get_person_from_handle ( father_id )
mother = db . get_person_from_handle ( mother_id )
2007-08-12 08:12:22 +05:30
if father :
2007-07-19 12:15:25 +05:30
father_name = father . get_primary_name ( ) . get_regular_name ( )
2007-08-12 08:12:22 +05:30
if mother :
2007-07-19 12:15:25 +05:30
mother_name = mother . get_primary_name ( ) . get_regular_name ( )
if mother and father :
2008-03-06 18:37:37 +05:30
of . write ( ' <span class= " father fatherNmother " > %s </span> <span class= " mother " > %s </span> ' % ( father_name , mother_name ) )
2007-07-19 12:15:25 +05:30
elif mother :
2008-03-06 18:37:37 +05:30
of . write ( ' <span class= " mother " > %s </span> ' % mother_name )
2007-07-19 12:15:25 +05:30
elif father :
2008-03-06 18:37:37 +05:30
of . write ( ' <span class= " father " > %s </span> ' % father_name )
of . write ( ' </td> \n ' )
2007-07-19 12:15:25 +05:30
# finished writing all columns
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t </tr> \n ' )
of . write ( ' \t </tbody> \n \t </table> \n ' )
2005-08-18 11:28:28 +05:30
self . display_footer ( of , db )
self . close_file ( of )
2005-02-10 07:14:05 +05:30
2005-02-13 09:24:47 +05:30
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
class PlaceListPage ( BasePage ) :
2005-08-18 11:28:28 +05:30
def __init__ ( self , db , title , place_handles , src_list , options , archive ,
2005-12-06 12:08:09 +05:30
media_list ) :
BasePage . __init__ ( self , title , options , archive , media_list , " " )
2005-08-18 11:28:28 +05:30
of = self . create_file ( " places " )
self . display_header ( of , db , _ ( ' Places ' ) ,
get_researcher ( ) . get_name ( ) )
msg = _ ( " This page contains an index of all the places in the "
2008-03-06 18:37:37 +05:30
" database, sorted by their title. Clicking on a place’s "
" title will take you to that place’s page. " )
2005-02-13 09:24:47 +05:30
2008-03-06 18:37:37 +05:30
of . write ( ' \t <h2> %s </h2> \n ' % _ ( ' Places ' ) )
of . write ( ' \t <p id= " description " > %s </p> \n ' % msg )
2005-02-13 09:24:47 +05:30
2008-03-06 18:37:37 +05:30
of . write ( ' \t <table class= " infolist placelist " > \n \t <thead> \n \t \t <tr> \n ' )
of . write ( ' \t \t \t <th class= " ColumnLetter " > %s </th> \n ' % _ ( ' Letter ' ) )
of . write ( ' \t \t \t <th class= " ColumnName " > %s </th> \n ' % _ ( ' Name ' ) )
of . write ( ' \t \t </tr> \n \t </thead> \n \t <tbody> \n \n ' )
2005-02-13 09:24:47 +05:30
self . sort = Sort . Sort ( db )
2005-08-18 11:28:28 +05:30
handle_list = place_handles . keys ( )
2005-02-13 09:24:47 +05:30
handle_list . sort ( self . sort . by_place_title )
last_letter = ' '
for handle in handle_list :
place = db . get_place_from_handle ( handle )
2008-02-24 19:25:55 +05:30
n = ReportUtils . place_name ( db , handle )
2005-02-13 09:24:47 +05:30
2005-07-09 01:54:54 +05:30
if not n or len ( n ) == 0 :
2005-02-13 09:24:47 +05:30
continue
2008-02-24 19:25:55 +05:30
letter = normalize ( ' NFD ' , n ) [ 0 ] . upper ( )
2007-10-04 09:26:41 +05:30
if letter != last_letter :
last_letter = letter
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t <tr class= " BeginLetter " > \n \t \t \t <td class= " ColumnLetter " > %s </td> \n ' % last_letter )
of . write ( ' \t \t \t <td class= " ColumnName " > ' )
2008-02-24 19:25:55 +05:30
self . place_link ( of , place . handle , n , place . gramps_id )
2008-03-06 18:37:37 +05:30
of . write ( ' </td> \n \t \t </tr> \n ' )
2007-10-04 09:26:41 +05:30
else :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t <tr> \n \t \t \t <td class= " ColumnLetter " > </td> \n ' )
of . write ( ' \t \t \t <td class= " ColumnName " > ' )
2008-02-24 19:25:55 +05:30
self . place_link ( of , place . handle , n , place . gramps_id )
2008-03-06 18:37:37 +05:30
of . write ( ' </td> \n \t \t </tr> \n ' )
2005-02-13 09:24:47 +05:30
2008-03-06 18:37:37 +05:30
of . write ( ' \t </tbody> \n \t </table> \n ' )
2005-08-18 11:28:28 +05:30
self . display_footer ( of , db )
self . close_file ( of )
2005-02-13 09:24:47 +05:30
2005-07-09 01:54:54 +05:30
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
class PlacePage ( BasePage ) :
2005-08-18 11:28:28 +05:30
def __init__ ( self , db , title , place_handle , src_list , place_list , options ,
2005-12-06 12:08:09 +05:30
archive , media_list ) :
2005-07-09 01:54:54 +05:30
place = db . get_place_from_handle ( place_handle )
2005-12-06 12:08:09 +05:30
BasePage . __init__ ( self , title , options , archive , media_list ,
2005-08-18 11:28:28 +05:30
place . gramps_id )
of = self . create_link_file ( place . get_handle ( ) , " plc " )
self . page_title = ReportUtils . place_name ( db , place_handle )
2008-03-06 18:37:37 +05:30
self . display_header ( of , db , " %s - %s " % ( _ ( ' Places ' ) , self . page_title ) , get_researcher ( ) . get_name ( ) , up = True )
2005-07-09 01:54:54 +05:30
2005-12-06 12:08:09 +05:30
media_list = place . get_media_list ( )
self . display_first_image_as_thumbnail ( of , db , media_list )
2005-07-09 01:54:54 +05:30
2008-03-06 18:37:37 +05:30
of . write ( ' \t <h2>Places:</h2> \n ' )
of . write ( ' \t <h3> %s </h3> \n \n ' % html_escape ( self . page_title . strip ( ) ) )
of . write ( ' \t <div id= " summaryarea " > \n ' )
of . write ( ' \t \t <table class= " infolist place " > \n ' )
2005-08-18 11:28:28 +05:30
if not self . noid :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <tr> \n \t \t \t \t <td class= " ColumnAttribute " > %s </td> \n ' % _ ( ' GRAMPS ID ' ) )
of . write ( ' \t \t \t \t <td class= " ColumnValue " > %s </td> \n ' % place . gramps_id )
of . write ( ' \t \t \t </tr> \n ' )
2005-07-09 01:54:54 +05:30
2005-08-18 11:28:28 +05:30
if place . main_loc :
ml = place . main_loc
2006-11-06 08:45:44 +05:30
for val in [ ( _ ( ' Street ' ) , ml . street ) ,
( _ ( ' City ' ) , ml . city ) ,
( _ ( ' Church Parish ' ) , ml . parish ) ,
( _ ( ' County ' ) , ml . county ) ,
( _ ( ' State/Province ' ) , ml . state ) ,
( _ ( ' Postal Code ' ) , ml . postal ) ,
( _ ( ' Country ' ) , ml . country ) ] :
2005-08-18 11:28:28 +05:30
if val [ 1 ] :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <tr> \n \t \t \t \t <td class= " ColumnAttribute " > %s </td> \n ' % val [ 0 ] )
of . write ( ' \t \t \t \t <td class= " ColumnValue " > %s </td> \n ' % val [ 1 ] )
of . write ( ' \t \t \t </tr> \n ' )
2005-08-18 11:28:28 +05:30
if place . long :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <tr> \n \t \t \t \t <td class= " ColumnAttribute " > %s </td> \n ' % _ ( ' Longitude ' ) )
of . write ( ' \t \t \t \t <td class= " ColumnValue " > %s </td> \n ' % place . long )
of . write ( ' \t \t \t </tr> \n ' )
2005-07-09 01:54:54 +05:30
2005-08-18 11:28:28 +05:30
if place . lat :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <tr> \n \t \t \t \t <td class= " ColumnAttribute " > %s </td> \n ' % _ ( ' Latitude ' ) )
of . write ( ' \t \t \t \t <td class= " ColumnValue " > %s </td> \n ' % place . lat )
of . write ( ' \t \t \t </tr> \n ' )
2005-07-09 01:54:54 +05:30
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t </table> \n ' )
of . write ( ' \t </div> \n ' )
2005-08-18 11:28:28 +05:30
2005-12-06 12:08:09 +05:30
if self . use_gallery :
self . display_additional_images_as_gallery ( of , db , media_list )
2007-03-10 09:55:23 +05:30
self . display_note_list ( of , db , place . get_note_list ( ) )
2007-08-12 08:12:22 +05:30
self . display_url_list ( of , place . get_url_list ( ) )
2005-08-18 11:28:28 +05:30
self . display_references ( of , db , place_list [ place . handle ] )
self . display_footer ( of , db )
self . close_file ( of )
2005-07-09 01:54:54 +05:30
2005-02-10 07:14:05 +05:30
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
2005-08-18 11:28:28 +05:30
class MediaPage ( BasePage ) :
2008-03-06 18:37:37 +05:30
def __init__ ( self , db , title , handle , src_list , options , archive , media_list , info ) :
2005-08-18 11:28:28 +05:30
( prev , next , page_number , total_pages ) = info
photo = db . get_object_from_handle ( handle )
2008-03-06 18:37:37 +05:30
BasePage . __init__ ( self , title , options , archive , media_list , photo . gramps_id )
2005-08-18 11:28:28 +05:30
of = self . create_link_file ( handle , " img " )
2007-11-03 11:13:12 +05:30
2007-11-05 12:46:10 +05:30
self . db = db
self . src_list = src_list
2005-12-06 12:08:09 +05:30
mime_type = photo . get_mime_type ( )
2007-11-03 11:13:12 +05:30
2007-04-09 09:10:11 +05:30
if mime_type :
note_only = False
2005-12-06 12:08:09 +05:30
newpath = self . copy_source_file ( handle , photo )
target_exists = newpath != None
2005-08-18 11:28:28 +05:30
else :
2007-04-09 09:10:11 +05:30
note_only = True
2005-12-06 12:08:09 +05:30
target_exists = False
2005-08-18 11:28:28 +05:30
2005-12-06 12:08:09 +05:30
self . copy_thumbnail ( handle , photo )
2005-08-18 11:28:28 +05:30
self . page_title = photo . get_description ( )
2008-03-06 18:37:37 +05:30
self . display_header ( of , db , " %s - %s " % ( _ ( ' Gallery ' ) , self . page_title ) , get_researcher ( ) . get_name ( ) , up = True )
2007-11-03 11:13:12 +05:30
2008-03-06 18:37:37 +05:30
of . write ( ' \t <h2>Gallery:</h2> \n ' )
2005-08-18 11:28:28 +05:30
# gallery navigation
2008-03-06 18:37:37 +05:30
of . write ( ' \t <div id= " GalleryNav " > \n \t \t ' )
2005-08-18 11:28:28 +05:30
if prev :
2008-03-06 18:37:37 +05:30
self . galleryNav_link ( of , prev , _ ( ' Previous ' ) , True )
data = _ ( ' <strong id= " GalleryCurrent " > %(page_number)d </strong> of <strong id= " GalleryTotal " > %(total_pages)d </strong> ' ) % {
2005-08-18 11:28:28 +05:30
' page_number ' : page_number , ' total_pages ' : total_pages }
2008-03-06 18:37:37 +05:30
of . write ( ' <span id= " GalleryPages " > %s </span> ' % data )
2005-08-18 11:28:28 +05:30
if next :
2008-03-06 18:37:37 +05:30
self . galleryNav_link ( of , next , _ ( ' Next ' ) , True )
of . write ( ' \n \t </div> \n \n ' )
2005-08-18 11:28:28 +05:30
2008-03-06 18:37:37 +05:30
of . write ( ' \t <div id= " summaryarea " > \n ' )
2005-12-06 12:08:09 +05:30
if mime_type :
if mime_type . startswith ( " image/ " ) :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t <div id= " GalleryDisplay " > \n ' )
2005-12-06 12:08:09 +05:30
if target_exists :
2007-11-04 08:59:58 +05:30
# if the image is spectacularly large, then force the client
# to resize it, and include a "<a href=" link to the actual
# image; most web browsers will dynamically resize an image
# and provide zoom-in/zoom-out functionality when the image
# is displayed directly
2008-02-18 19:36:41 +05:30
( width , height ) = ImgManip . image_size (
Utils . media_path_full ( self . db , photo . get_path ( ) ) )
2007-11-04 08:59:58 +05:30
scale = 1.0
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t ' )
2008-02-10 09:39:09 +05:30
if width > _MAX_IMG_WIDTH or height > _MAX_IMG_HEIGHT :
2007-11-04 08:59:58 +05:30
# image is too large -- scale it down and link to the full image
2008-02-10 09:39:09 +05:30
scale = min ( float ( _MAX_IMG_WIDTH ) / float ( width ) , float ( _MAX_IMG_HEIGHT ) / float ( height ) )
2007-11-04 08:59:58 +05:30
width = int ( width * scale )
height = int ( height * scale )
2008-03-06 18:37:37 +05:30
of . write ( ' <a href= " ../../../ %s " > ' % newpath )
of . write ( ' <img width= " %d " height= " %d " src= " ../../../ %s " alt= " %s " /> ' % ( width , height , newpath , html_escape ( self . page_title ) ) )
2007-11-04 08:59:58 +05:30
if scale < > 1.0 :
2008-03-06 18:37:37 +05:30
of . write ( ' </a> ' ) ;
of . write ( ' \n ' )
2007-11-04 08:59:58 +05:30
2005-12-06 12:08:09 +05:30
else :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <span class= " MissingImage " >( %s )</span> ' % _ ( " The file has been moved or deleted " ) )
of . write ( ' \t \t </div> \n \n ' )
2005-12-06 12:08:09 +05:30
else :
import tempfile
2005-02-10 07:14:05 +05:30
2005-12-06 12:08:09 +05:30
dirname = tempfile . mkdtemp ( )
thmb_path = os . path . join ( dirname , " temp.png " )
2008-02-18 19:36:41 +05:30
if ThumbNails . run_thumbnailer ( mime_type ,
Utils . media_path_full ( self . db ,
photo . get_path ( ) ) ,
thmb_path , 320 ) :
2005-12-06 12:08:09 +05:30
try :
path = " %s / %s .png " % ( self . build_path ( photo . handle , " preview " ) , photo . handle )
self . store_file ( archive , self . html_dir , thmb_path , path )
os . unlink ( thmb_path )
except IOError :
path = os . path . join ( ' images ' , ' document.png ' )
else :
path = os . path . join ( ' images ' , ' document.png ' )
os . rmdir ( dirname )
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t <div id= " GalleryDisplay " > \n ' )
2005-12-06 12:08:09 +05:30
if target_exists :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <a href= " ../../../ %s " alt= " %s " /> \n ' % ( newpath , html_escape ( self . page_title ) ) )
of . write ( ' \t \t \t \t <img src= " ../../../ %s " alt= " %s " /> \n ' % ( path , html_escape ( self . page_title ) ) )
2005-12-06 12:08:09 +05:30
if target_exists :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t </a> \n ' )
2005-12-06 12:08:09 +05:30
else :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <span class= " MissingImage " >( %s )</span> ' % _ ( " The file has been moved or deleted " ) )
of . write ( ' \t \t </div> \n \n ' )
2005-12-06 12:08:09 +05:30
else :
path = os . path . join ( ' images ' , ' document.png ' )
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t <div id= " GalleryDisplay " > \n ' )
of . write ( ' \t \t \t <img src= " ../../../ %s " alt= " %s " /> \n ' % ( path , html_escape ( self . page_title ) ) )
of . write ( ' \t \t </div> \n \n ' )
2005-12-06 12:08:09 +05:30
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t <h3> %s </h3> \n ' % html_escape ( self . page_title . strip ( ) ) )
of . write ( ' \t \t <table class= " infolist gallery " > \n ' )
2005-08-18 11:28:28 +05:30
if not self . noid :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <tr> \n ' )
of . write ( ' \t \t \t \t <td class= " ColumnAttribute " > %s </td> \n ' % _ ( ' GRAMPS ID ' ) )
of . write ( ' \t \t \t \t <td class= " ColumnValue " > %s </td> \n ' % photo . gramps_id )
of . write ( ' \t \t \t </tr> \n ' )
2007-11-03 11:13:12 +05:30
if not note_only and not mime_type . startswith ( " image/ " ) :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <tr> \n ' )
of . write ( ' \t \t \t \t <td class= " ColumnAttribute " > %s </td> \n ' % _ ( ' File type ' ) )
of . write ( ' \t \t \t \t <td class= " ColumnValue " > %s </td> \n ' % Mime . get_description ( mime_type ) )
of . write ( ' \t \t \t </tr> \n ' )
2007-03-14 04:30:33 +05:30
date = _dd . display ( photo . get_date_object ( ) )
if date != " " :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <tr> \n ' )
of . write ( ' \t \t \t \t <td class= " ColumnAttribute " > %s </td> \n ' % _ ( ' Date ' ) )
of . write ( ' \t \t \t \t <td class= " ColumnValue " > %s </td> \n ' % date )
of . write ( ' \t \t \t </tr> \n ' )
of . write ( ' \t \t </table> \n ' )
of . write ( ' \t </div> \n \n ' )
2005-02-10 07:14:05 +05:30
2007-03-10 09:55:23 +05:30
self . display_note_list ( of , db , photo . get_note_list ( ) )
2007-08-12 08:12:22 +05:30
self . display_attr_list ( of , photo . get_attribute_list ( ) )
2007-08-23 15:24:37 +05:30
self . display_media_sources ( of , db , photo )
2005-08-18 11:28:28 +05:30
self . display_references ( of , db , media_list )
self . display_footer ( of , db )
self . close_file ( of )
2005-02-10 07:14:05 +05:30
2007-08-23 15:24:37 +05:30
def display_media_sources ( self , of , db , photo ) :
self . bibli = Bibliography ( )
for sref in photo . get_source_references ( ) :
self . bibli . add_reference ( sref )
2008-03-01 10:13:58 +05:30
self . display_source_refs ( of , db , self . bibli )
2007-08-23 15:24:37 +05:30
2008-02-24 19:25:55 +05:30
def display_attr_list ( self , of , attrlist = None ) :
2007-04-05 17:43:33 +05:30
if not attrlist :
return
2008-03-06 18:37:37 +05:30
of . write ( ' \t <div id= " attributes " > \n ' )
of . write ( ' \t \t <h4> %s </h4> \n ' % _ ( ' Attributes ' ) )
of . write ( ' \t \t <table class= " infolist " > \n ' )
2007-04-05 17:43:33 +05:30
for attr in attrlist :
atType = str ( attr . get_type ( ) )
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <tr> \n \t \t \t \t <td class= " ColumnAttribute " > %s </td> \n ' % atType )
of . write ( ' \t \t \t \t <td class= " ColumnValue " > %s </td> \n \t \t \t </tr> \n ' % attr . get_value ( ) )
of . write ( ' \t \t </table> \n ' )
of . write ( ' \t </div> \n \n ' )
2007-04-05 17:43:33 +05:30
2008-02-24 19:25:55 +05:30
def copy_source_file ( self , handle , photo ) :
2005-12-06 12:08:09 +05:30
ext = os . path . splitext ( photo . get_path ( ) ) [ 1 ]
to_dir = self . build_path ( handle , ' images ' )
2007-05-19 00:15:49 +05:30
newpath = to_dir + " / " + handle + ext
2005-12-06 12:08:09 +05:30
2008-02-18 19:36:41 +05:30
fullpath = Utils . media_path_full ( self . db , photo . get_path ( ) )
2005-12-06 12:08:09 +05:30
try :
if self . archive :
2008-02-18 19:36:41 +05:30
self . archive . add ( fullpath , str ( newpath ) )
2005-12-06 12:08:09 +05:30
else :
to_dir = os . path . join ( self . html_dir , to_dir )
if not os . path . isdir ( to_dir ) :
os . makedirs ( to_dir )
2008-02-18 19:36:41 +05:30
shutil . copyfile ( fullpath ,
2008-02-24 19:25:55 +05:30
os . path . join ( self . html_dir , newpath ) )
2005-12-06 12:08:09 +05:30
return newpath
except ( IOError , OSError ) , msg :
2007-04-09 09:10:11 +05:30
error = _ ( " Missing media object: " ) + \
" %s ( %s ) " % ( photo . get_description ( ) , photo . get_gramps_id ( ) )
WarningDialog ( error , str ( msg ) )
2005-12-06 12:08:09 +05:30
return None
2008-02-24 19:25:55 +05:30
def copy_thumbnail ( self , handle , photo ) :
2005-12-06 12:08:09 +05:30
to_dir = self . build_path ( handle , ' thumb ' )
2008-02-24 19:25:55 +05:30
to_path = os . path . join ( to_dir , handle + " .png " )
2005-12-06 12:08:09 +05:30
if photo . get_mime_type ( ) :
2008-02-18 19:36:41 +05:30
from_path = ThumbNails . get_thumbnail_path ( Utils . media_path_full (
self . db ,
photo . get_path ( ) ) ,
photo . get_mime_type ( ) )
2005-12-06 12:08:09 +05:30
if not os . path . isfile ( from_path ) :
2007-09-08 11:24:02 +05:30
from_path = os . path . join ( const . IMAGE_DIR , " document.png " )
2005-12-06 12:08:09 +05:30
else :
2007-09-08 11:24:02 +05:30
from_path = os . path . join ( const . IMAGE_DIR , " document.png " )
2005-12-06 12:08:09 +05:30
if self . archive :
self . archive . add ( from_path , to_path )
else :
to_dir = os . path . join ( self . html_dir , to_dir )
dest = os . path . join ( self . html_dir , to_path )
if not os . path . isdir ( to_dir ) :
os . makedirs ( to_dir )
try :
shutil . copyfile ( from_path , dest )
except IOError :
print " Could not copy file "
2005-08-18 11:28:28 +05:30
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
class SurnameListPage ( BasePage ) :
ORDER_BY_NAME = 0
ORDER_BY_COUNT = 1
def __init__ ( self , db , title , person_handle_list , options , archive ,
2005-12-06 12:08:09 +05:30
media_list , order_by = ORDER_BY_NAME , filename = " surnames " ) :
BasePage . __init__ ( self , title , options , archive , media_list , " " )
2005-08-18 11:28:28 +05:30
if order_by == self . ORDER_BY_NAME :
2005-12-06 12:08:09 +05:30
of = self . create_file ( filename )
2005-08-18 11:28:28 +05:30
self . display_header ( of , db , _ ( ' Surnames ' ) , get_researcher ( ) . get_name ( ) )
2008-03-06 18:37:37 +05:30
of . write ( ' \t <h2> %s </h2> \n ' % _ ( ' Surnames ' ) )
2005-08-18 11:28:28 +05:30
else :
of = self . create_file ( " surnames_count " )
self . display_header ( of , db , _ ( ' Surnames by person count ' ) ,
get_researcher ( ) . get_name ( ) )
2008-03-06 18:37:37 +05:30
of . write ( ' \t <h2> %s </h2> \n ' % _ ( ' Surnames by person count ' ) )
2005-08-18 11:28:28 +05:30
2008-03-06 18:37:37 +05:30
of . write ( ' \t <p id= " description " > %s </p> \n ' % _ (
2005-08-18 11:28:28 +05:30
' This page contains an index of all the '
' surnames in the database. Selecting a link '
' will lead to a list of individuals in the '
' database with this same surname. ' ) )
2005-02-10 07:14:05 +05:30
2008-03-06 18:37:37 +05:30
if order_by == self . ORDER_BY_COUNT :
of . write ( ' \t <table id= " SortByCount " class= " infolist surnamelist " > \n \t <thead> \n \t \t <tr> \n ' )
else :
of . write ( ' \t <table id= " SortByName " class= " infolist surnamelist " > \n \t <thead> \n \t \t <tr> \n ' )
of . write ( ' \t \t \t <th class= " ColumnLetter " > %s </th> \n ' % _ ( ' Letter ' ) )
2005-12-06 12:08:09 +05:30
if not self . use_home and not self . use_intro :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <th class= " ColumnSurname " ><a href= " %s %s " > %s </a></th> \n ' % ( " index " , self . ext , _ ( ' Surname ' ) ) )
2005-12-06 12:08:09 +05:30
else :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <th class= " ColumnSurname " ><a href= " %s %s " > %s </a></th> \n ' % ( " surnames " , self . ext , _ ( ' Surname ' ) ) )
of . write ( ' \t \t \t <th class= " ColumnQuantity " ><a href= " %s %s " > %s </a></th> \n ' % ( " surnames_count " , self . ext , _ ( ' Number of people ' ) ) )
of . write ( ' \t \t </tr> \n \t </thead> \n \t <tbody> \n ' )
2005-02-10 07:14:05 +05:30
2005-08-18 11:28:28 +05:30
person_handle_list = sort_people ( db , person_handle_list )
if order_by == self . ORDER_BY_COUNT :
temp_list = { }
for ( surname , data_list ) in person_handle_list :
2005-12-06 12:08:09 +05:30
index_val = " %90d _ %s " % ( 999999999 - len ( data_list ) , surname )
temp_list [ index_val ] = ( surname , data_list )
2005-08-18 11:28:28 +05:30
temp_keys = temp_list . keys ( )
temp_keys . sort ( )
person_handle_list = [ ]
for key in temp_keys :
person_handle_list . append ( temp_list [ key ] )
2005-02-10 07:14:05 +05:30
last_letter = ' '
2005-08-18 11:28:28 +05:30
last_surname = ' '
2005-02-10 07:14:05 +05:30
2005-08-18 11:28:28 +05:30
for ( surname , data_list ) in person_handle_list :
if len ( surname ) == 0 :
2005-02-10 07:14:05 +05:30
continue
2007-10-04 09:26:41 +05:30
# Get a capital normalized version of the first letter of
# the surname
letter = normalize ( ' NFD ' , surname ) [ 0 ] . upper ( )
if letter != last_letter :
last_letter = letter
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t <tr class= " BeginLetter " > \n \t \t \t <td class= " ColumnLetter " > %s </td> \n ' % last_letter )
of . write ( ' \t \t \t <td class= " ColumnSurname " > ' )
2005-08-18 11:28:28 +05:30
self . surname_link ( of , surname )
2008-03-06 18:37:37 +05:30
of . write ( ' </td> \n ' )
2005-08-18 11:28:28 +05:30
elif surname != last_surname :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t <tr> \n \t \t \t <td class= " ColumnLetter " > </td> \n ' )
of . write ( ' \t \t \t <td class= " ColumnSurname " > ' )
2005-08-18 11:28:28 +05:30
self . surname_link ( of , surname )
2008-03-06 18:37:37 +05:30
of . write ( ' </td> \n ' )
2005-08-18 11:28:28 +05:30
last_surname = surname
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <td class= " ColumnQuantity " > %d </td> \n \t \t </tr> \n ' % len ( data_list ) )
2005-02-10 07:14:05 +05:30
2008-03-06 18:37:37 +05:30
of . write ( ' \t </tbody> \n \t </table> \n ' )
2005-08-18 11:28:28 +05:30
self . display_footer ( of , db )
self . close_file ( of )
2005-02-10 07:14:05 +05:30
return
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
class IntroductionPage ( BasePage ) :
2005-12-06 12:08:09 +05:30
def __init__ ( self , db , title , options , archive , media_list ) :
BasePage . __init__ ( self , title , options , archive , media_list , " " )
2008-02-10 09:39:09 +05:30
note_id = options [ ' intronote ' ]
pic_id = options [ ' introimg ' ]
2005-02-10 07:14:05 +05:30
2005-12-06 12:08:09 +05:30
if self . use_home :
of = self . create_file ( " introduction " )
else :
of = self . create_file ( " index " )
2005-08-18 11:28:28 +05:30
author = get_researcher ( ) . get_name ( )
self . display_header ( of , db , _ ( ' Introduction ' ) , author )
2005-02-10 07:14:05 +05:30
2008-03-06 18:37:37 +05:30
of . write ( ' \t <h2> %s </h2> \n ' % _ ( ' Introduction ' ) )
2005-02-10 07:14:05 +05:30
2007-11-27 03:23:58 +05:30
if pic_id :
2008-02-10 09:39:09 +05:30
obj = db . get_object_from_gramps_id ( pic_id )
2005-08-18 11:28:28 +05:30
mime_type = obj . get_mime_type ( )
if mime_type and mime_type . startswith ( " image " ) :
try :
2007-11-27 03:23:58 +05:30
( newpath , thumb_path ) = self . copy_media ( obj , False )
2008-02-18 19:36:41 +05:30
self . store_file ( archive , self . html_dir ,
Utils . media_path_full ( db ,
obj . get_path ( ) ) ,
2005-08-18 11:28:28 +05:30
newpath )
2008-03-06 18:37:37 +05:30
of . write ( ' \t <img ' )
2005-08-18 11:28:28 +05:30
of . write ( ' src= " %s " ' % newpath )
2008-03-06 18:37:37 +05:30
of . write ( ' alt= " %s " /> \n ' % obj . get_description ( ) )
2007-11-27 03:23:58 +05:30
except ( IOError , OSError ) , msg :
WarningDialog ( _ ( " Could not add photo to page " ) , str ( msg ) )
if note_id :
2008-02-10 09:39:09 +05:30
note_obj = db . get_note_from_gramps_id ( note_id )
2007-11-27 03:23:58 +05:30
text = note_obj . get ( markup = True )
if note_obj . get_format ( ) :
2008-03-06 18:37:37 +05:30
of . write ( ' \t <pre> \n %s \n \t </pre> \n ' % text )
2007-11-27 03:23:58 +05:30
else :
2008-03-06 18:37:37 +05:30
of . write ( ' \t <p> ' )
of . write ( u ' </p> \n \t <p> ' . join ( text . split ( " \n " ) ) )
of . write ( ' </p> \n ' )
2005-02-28 05:13:20 +05:30
2005-08-18 11:28:28 +05:30
self . display_footer ( of , db )
self . close_file ( of )
2005-02-10 07:14:05 +05:30
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
class HomePage ( BasePage ) :
2005-12-06 12:08:09 +05:30
def __init__ ( self , db , title , options , archive , media_list ) :
BasePage . __init__ ( self , title , options , archive , media_list , " " )
2005-02-10 07:14:05 +05:30
2008-02-10 09:39:09 +05:30
note_id = options [ ' homenote ' ]
pic_id = options [ ' homeimg ' ]
2005-08-18 11:28:28 +05:30
of = self . create_file ( " index " )
author = get_researcher ( ) . get_name ( )
self . display_header ( of , db , _ ( ' Home ' ) , author )
2005-02-10 07:14:05 +05:30
2008-03-06 18:37:37 +05:30
of . write ( ' \t <h2> %s </h2> \n ' % _ ( ' Home ' ) )
2005-02-10 07:14:05 +05:30
2007-11-26 00:37:50 +05:30
if pic_id :
2008-02-10 09:39:09 +05:30
obj = db . get_object_from_gramps_id ( pic_id )
2005-02-28 05:13:20 +05:30
2005-08-18 11:28:28 +05:30
mime_type = obj . get_mime_type ( )
if mime_type and mime_type . startswith ( " image " ) :
try :
( newpath , thumb_path ) = self . copy_media ( obj , False )
2008-02-18 19:36:41 +05:30
self . store_file ( archive , self . html_dir ,
Utils . media_path_full ( db ,
obj . get_path ( ) ) ,
2005-08-18 11:28:28 +05:30
newpath )
2008-03-06 18:37:37 +05:30
of . write ( ' \t <img ' )
2005-08-18 11:28:28 +05:30
of . write ( ' src= " %s " ' % newpath )
2008-03-06 18:37:37 +05:30
of . write ( ' alt= " %s " /> \n ' % obj . get_description ( ) )
2005-08-18 11:28:28 +05:30
except ( IOError , OSError ) , msg :
2007-11-26 00:37:50 +05:30
WarningDialog ( _ ( " Could not add photo to page " ) , str ( msg ) )
2005-08-18 11:28:28 +05:30
2007-11-26 00:37:50 +05:30
if note_id :
2008-02-10 09:39:09 +05:30
note_obj = db . get_note_from_gramps_id ( note_id )
2007-11-26 00:37:50 +05:30
text = note_obj . get ( markup = True )
if note_obj . get_format ( ) :
2008-03-06 18:37:37 +05:30
of . write ( ' \t <pre> \n %s \n \t </pre> \n ' % text )
2007-11-26 00:37:50 +05:30
else :
2008-03-06 18:37:37 +05:30
of . write ( ' \t <p> ' )
of . write ( u ' </p> \n \t <p> ' . join ( text . split ( " \n " ) ) )
of . write ( ' </p> \n ' )
2005-08-18 11:28:28 +05:30
self . display_footer ( of , db )
self . close_file ( of )
2005-02-10 07:14:05 +05:30
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
class SourcesPage ( BasePage ) :
2005-12-06 12:08:09 +05:30
def __init__ ( self , db , title , handle_set , options , archive , media_list ) :
BasePage . __init__ ( self , title , options , archive , media_list , " " )
2005-02-10 07:14:05 +05:30
2005-08-18 11:28:28 +05:30
of = self . create_file ( " sources " )
author = get_researcher ( ) . get_name ( )
self . display_header ( of , db , _ ( ' Sources ' ) , author )
2005-02-10 07:14:05 +05:30
2005-02-16 11:11:33 +05:30
handle_list = list ( handle_set )
2007-03-07 08:45:45 +05:30
source_dict = { }
#Sort the sources
for handle in handle_list :
source = db . get_source_from_handle ( handle )
key = source . get_title ( ) + str ( source . get_gramps_id ( ) )
source_dict [ key ] = ( source , handle )
keys = source_dict . keys ( )
2007-10-04 09:26:41 +05:30
keys . sort ( locale . strcoll )
2005-02-16 11:11:33 +05:30
2005-08-18 11:28:28 +05:30
msg = _ ( " This page contains an index of all the sources in the "
2008-03-06 18:37:37 +05:30
" database, sorted by their title. Clicking on a source’s "
" title will take you to that source’s page. " )
2005-08-18 11:28:28 +05:30
2008-03-06 18:37:37 +05:30
of . write ( ' \t <h2> %s </h2> \n \t <p id= " description " > ' % _ ( ' Sources ' ) )
2005-08-18 11:28:28 +05:30
of . write ( msg )
2008-03-06 18:37:37 +05:30
of . write ( ' </p> \n \t <table class= " infolist sourcelist " > \n ' )
of . write ( ' \t <thead> \n \t \t <tr> \n ' )
of . write ( ' \t \t \t <th class= " ColumnLabel " > </th> \n ' )
of . write ( ' \t \t \t <th class= " ColumnName " >Name</th> \n ' )
of . write ( ' \t \t </tr> \n \t </thead> \n \t <tbody> \n ' )
2005-02-16 11:11:33 +05:30
index = 1
2007-03-07 08:45:45 +05:30
for key in keys :
( source , handle ) = source_dict [ key ]
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t <tr> \n \t \t \t <td class= " ColumnRowLabel " > %d .</td> \n ' % index )
of . write ( ' \t \t \t <td class= " ColumnName " ><a ' )
2008-02-24 19:25:55 +05:30
self . source_link ( of , handle , source . get_title ( ) , source . gramps_id )
2008-03-06 18:37:37 +05:30
of . write ( ' </td> \n \t \t </tr> \n ' )
2005-07-09 01:54:54 +05:30
index + = 1
2005-02-16 11:11:33 +05:30
2008-03-06 18:37:37 +05:30
of . write ( ' \t </tbody> \n \t </table> \n ' )
2005-08-18 11:28:28 +05:30
self . display_footer ( of , db )
self . close_file ( of )
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
class SourcePage ( BasePage ) :
def __init__ ( self , db , title , handle , src_list , options , archive ,
2005-12-06 12:08:09 +05:30
media_list ) :
2005-08-18 11:28:28 +05:30
source = db . get_source_from_handle ( handle )
2005-12-06 12:08:09 +05:30
BasePage . __init__ ( self , title , options , archive , media_list ,
2005-08-18 11:28:28 +05:30
source . gramps_id )
of = self . create_link_file ( source . get_handle ( ) , " src " )
self . page_title = source . get_title ( )
self . display_header ( of , db , " %s - %s " % ( _ ( ' Sources ' ) , self . page_title ) ,
get_researcher ( ) . get_name ( ) , up = True )
2005-12-06 12:08:09 +05:30
media_list = source . get_media_list ( )
self . display_first_image_as_thumbnail ( of , db , media_list )
2005-08-18 11:28:28 +05:30
2008-03-06 18:37:37 +05:30
of . write ( ' \t <h2>Sources:</h2> \n ' )
of . write ( ' \t <h3> %s </h3> \n \n ' % html_escape ( self . page_title . strip ( ) ) )
of . write ( ' \t <div id= " summaryarea " > \n ' )
of . write ( ' \t \t <table class= " infolist source " > \n ' )
2005-08-18 11:28:28 +05:30
2007-03-14 08:45:47 +05:30
grampsid = None
if not self . noid :
grampsid = source . gramps_id
for ( label , val ) in [ ( _ ( ' GRAMPS ID ' ) , grampsid ) ,
2005-08-18 11:28:28 +05:30
( _ ( ' Author ' ) , source . author ) ,
( _ ( ' Publication information ' ) , source . pubinfo ) ,
( _ ( ' Abbreviation ' ) , source . abbrev ) ] :
if val :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <tr> \n \t \t \t \t <td class= " ColumnAttribute " > %s </td> \n ' % label )
of . write ( ' \t \t \t \t <td class= " ColumnValue " > %s </td> \n ' % val )
of . write ( ' \t \t \t </tr> \n ' )
2005-08-18 11:28:28 +05:30
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t </table> \n \t </div> \n \n ' )
2005-08-18 11:28:28 +05:30
2005-12-06 12:08:09 +05:30
self . display_additional_images_as_gallery ( of , db , media_list )
2007-03-10 09:55:23 +05:30
self . display_note_list ( of , db , source . get_note_list ( ) )
2005-08-18 11:28:28 +05:30
self . display_references ( of , db , src_list [ source . handle ] )
self . display_footer ( of , db )
self . close_file ( of )
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
class GalleryPage ( BasePage ) :
2005-12-06 12:08:09 +05:30
def __init__ ( self , db , title , handle_set , options , archive , media_list ) :
BasePage . __init__ ( self , title , options , archive , media_list , " " )
2005-08-18 11:28:28 +05:30
of = self . create_file ( " gallery " )
self . display_header ( of , db , _ ( ' Gallery ' ) , get_researcher ( ) . get_name ( ) )
2008-03-06 18:37:37 +05:30
of . write ( ' \t <h2> %s </h2> \n \n \t <p id= " description " > ' % _ ( ' Gallery ' ) )
2005-08-18 11:28:28 +05:30
of . write ( _ ( " This page contains an index of all the media objects "
" in the database, sorted by their title. Clicking on "
2008-03-06 18:37:37 +05:30
" the title will take you to that media object’s page. " ) )
of . write ( ' </p> \n \n \t <table class= " infolist gallerylist " > \n ' )
of . write ( ' \t <thead> \n \t \t <tr> \n ' )
of . write ( ' \t \t \t <th class= " ColumnRowLabel " > </th> \n ' )
of . write ( ' \t \t \t <th class= " ColumnName " >Name</th> \n ' )
of . write ( ' \t \t \t <th class= " ColumnDate " >Date</th> \n ' )
of . write ( ' \t \t </tr> \n \t </thead> \n \t <tbody> \n ' )
2005-08-18 11:28:28 +05:30
self . db = db
index = 1
mlist = media_list . keys ( )
2007-10-12 17:46:49 +05:30
sort = Sort . Sort ( self . db )
mlist . sort ( sort . by_media_title )
2005-08-18 11:28:28 +05:30
for handle in mlist :
media = db . get_object_from_handle ( handle )
2007-03-14 04:30:33 +05:30
date = _dd . display ( media . get_date_object ( ) )
2007-04-09 09:10:11 +05:30
title = media . get_description ( )
if title == " " :
title = " untitled "
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t <tr> \n ' )
2007-03-14 04:30:33 +05:30
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <td class= " ColumnRowLabel " > %d .</td> \n ' % index )
2007-03-14 04:30:33 +05:30
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <td class= " ColumnName " > ' )
2008-02-24 19:25:55 +05:30
self . media_ref_link ( of , handle , title )
2007-03-14 04:30:33 +05:30
of . write ( ' </td> \n ' )
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <td class= " ColumnDate " > %s </td> \n ' % date )
2007-03-14 04:30:33 +05:30
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t </tr> \n ' )
2005-08-18 11:28:28 +05:30
index + = 1
2008-03-06 18:37:37 +05:30
of . write ( ' \t </tbody> \n \t </table> \n ' )
2005-08-18 11:28:28 +05:30
self . display_footer ( of , db )
self . close_file ( of )
2005-02-10 07:14:05 +05:30
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
class DownloadPage ( BasePage ) :
2005-12-06 12:08:09 +05:30
def __init__ ( self , db , title , options , archive , media_list ) :
BasePage . __init__ ( self , title , options , archive , media_list , " " )
2005-02-10 07:14:05 +05:30
2005-08-18 11:28:28 +05:30
of = self . create_file ( " download " )
self . display_header ( of , db , _ ( ' Download ' ) ,
get_researcher ( ) . get_name ( ) )
2005-02-10 07:14:05 +05:30
2008-03-06 18:37:37 +05:30
of . write ( ' \t <h2> %s </h2> \n \n ' % _ ( ' Download ' ) )
2005-02-10 07:14:05 +05:30
2005-08-18 11:28:28 +05:30
self . display_footer ( of , db )
self . close_file ( of )
2005-02-10 07:14:05 +05:30
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
class ContactPage ( BasePage ) :
2005-12-06 12:08:09 +05:30
def __init__ ( self , db , title , options , archive , media_list ) :
BasePage . __init__ ( self , title , options , archive , media_list , " " )
2005-02-10 07:14:05 +05:30
2005-08-18 11:28:28 +05:30
of = self . create_file ( " contact " )
self . display_header ( of , db , _ ( ' Contact ' ) ,
get_researcher ( ) . get_name ( ) )
2005-02-10 07:14:05 +05:30
2008-03-06 18:37:37 +05:30
of . write ( ' \t <h2> %s </h2> \n \n ' % _ ( ' Contact ' ) )
of . write ( ' \t <div id= " summaryarea " > \n ' )
2005-02-10 07:14:05 +05:30
2008-02-10 09:39:09 +05:30
note_id = options [ ' contactnote ' ]
pic_id = options [ ' contactimg ' ]
2007-11-27 03:23:58 +05:30
if pic_id :
2008-02-10 09:39:09 +05:30
obj = db . get_object_from_gramps_id ( pic_id )
2005-08-18 11:28:28 +05:30
mime_type = obj . get_mime_type ( )
if mime_type and mime_type . startswith ( " image " ) :
try :
2007-11-27 03:23:58 +05:30
( newpath , thumb_path ) = self . copy_media ( obj , False )
2008-02-18 19:36:41 +05:30
self . store_file ( archive , self . html_dir ,
Utils . media_path_full ( db ,
obj . get_path ( ) ) ,
2005-08-18 11:28:28 +05:30
newpath )
2005-12-06 12:08:09 +05:30
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t <img height= " 200 " ' )
2006-08-25 09:53:55 +05:30
of . write ( ' src= " %s " ' % newpath )
2008-03-06 18:37:37 +05:30
of . write ( ' alt= " %s " /> \n ' % obj . get_description ( ) )
2007-11-27 03:23:58 +05:30
except ( IOError , OSError ) , msg :
WarningDialog ( _ ( " Could not add photo to page " ) , str ( msg ) )
2005-08-18 11:28:28 +05:30
r = get_researcher ( )
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t <div id= " researcher " > \n ' )
2005-12-06 12:08:09 +05:30
if r . name :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <h3> %s </h3> \n ' % r . name . replace ( ' ,,, ' , ' ' ) )
2005-12-06 12:08:09 +05:30
if r . addr :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <span id= " streetaddress " > %s </span> \n ' % r . addr )
2005-12-06 12:08:09 +05:30
text = " " . join ( [ r . city , r . state , r . postal ] )
if text :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <span id= " city " > %s </span> \n \t \t \t <span id= " state " > %s </span> \n \t \t \t <span id= " postalcode " > %s </span> \n ' % ( r . city , r . state , r . postal ) )
2005-12-06 12:08:09 +05:30
if r . country :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <span id= " country " > %s </span> \n ' % r . country )
2005-12-06 12:08:09 +05:30
if r . email :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <span id= " email " ><a href= " mailto: %s ?subject=from GRAMPS Web Site " > %s </a></span> \n ' % ( r . email , r . email ) )
of . write ( ' \t \t </div> \n ' )
of . write ( ' \t \t <div class= " fullclear " ></div> \n ' )
2005-08-18 11:28:28 +05:30
2007-11-27 03:23:58 +05:30
if note_id :
2008-02-10 09:39:09 +05:30
note_obj = db . get_note_from_gramps_id ( note_id )
2007-11-27 03:23:58 +05:30
text = note_obj . get ( markup = True )
if note_obj . get_format ( ) :
2008-03-06 18:37:37 +05:30
text = u " \t \t <pre> %s </pre> " % text
2007-11-27 03:23:58 +05:30
else :
2008-03-06 18:37:37 +05:30
text = u " <br /> " . join ( text . split ( " \n " ) )
of . write ( ' \t \t <p> %s </p> \n ' % text )
2005-12-06 12:08:09 +05:30
2008-03-06 18:37:37 +05:30
of . write ( ' \t </div> \n ' )
2005-08-18 11:28:28 +05:30
self . display_footer ( of , db )
self . close_file ( of )
2005-02-10 07:14:05 +05:30
2005-02-01 09:16:29 +05:30
#------------------------------------------------------------------------
#
#
#
#------------------------------------------------------------------------
2005-02-10 07:14:05 +05:30
class IndividualPage ( BasePage ) :
2005-02-01 09:16:29 +05:30
gender_map = {
2007-10-08 22:11:39 +05:30
gen . lib . Person . MALE : _ ( ' male ' ) ,
gen . lib . Person . FEMALE : _ ( ' female ' ) ,
gen . lib . Person . UNKNOWN : _ ( ' unknown ' ) ,
2005-02-01 09:16:29 +05:30
}
2007-08-27 01:49:18 +05:30
def __init__ ( self , db , person , title , ind_list ,
2005-12-06 12:08:09 +05:30
place_list , src_list , options , archive , media_list ) :
BasePage . __init__ ( self , title , options , archive , media_list ,
2005-08-18 11:28:28 +05:30
person . gramps_id )
2005-02-01 09:16:29 +05:30
self . person = person
self . db = db
self . ind_list = ind_list
2005-02-16 11:11:33 +05:30
self . src_list = src_list
2007-07-23 17:52:03 +05:30
self . bibli = Bibliography ( )
2005-02-16 11:11:33 +05:30
self . place_list = place_list
2007-08-12 08:12:22 +05:30
self . sort_name = _nd . sorted ( self . person )
self . name = _nd . sorted ( self . person )
2005-02-01 09:16:29 +05:30
2005-08-18 11:28:28 +05:30
of = self . create_link_file ( person . handle , " ppl " )
self . display_header ( of , db , self . sort_name ,
get_researcher ( ) . get_name ( ) , up = True )
2005-02-21 04:57:55 +05:30
self . display_ind_general ( of )
self . display_ind_events ( of )
2005-08-18 11:28:28 +05:30
self . display_attr_list ( of , self . person . get_attribute_list ( ) )
self . display_ind_parents ( of )
2005-02-21 04:57:55 +05:30
self . display_ind_relationships ( of )
2007-01-18 10:01:08 +05:30
self . display_addresses ( of )
2005-08-18 11:28:28 +05:30
2007-08-27 01:49:18 +05:30
media_list = [ ]
photolist = self . person . get_media_list ( )
if len ( photolist ) > 1 :
media_list = photolist [ 1 : ]
for handle in self . person . get_family_handle_list ( ) :
family = self . db . get_family_from_handle ( handle )
media_list + = family . get_media_list ( )
for evt_ref in family . get_event_ref_list ( ) :
2008-01-06 01:40:26 +05:30
event = self . db . get_event_from_handle ( evt_ref . ref )
media_list + = event . get_media_list ( )
2007-08-27 01:49:18 +05:30
for evt_ref in self . person . get_primary_event_ref_list ( ) :
event = self . db . get_event_from_handle ( evt_ref . ref )
if event :
media_list + = event . get_media_list ( )
self . display_additional_images_as_gallery ( of , db , media_list )
self . display_note_list ( of , db , self . person . get_note_list ( ) )
self . display_url_list ( of , self . person . get_url_list ( ) )
self . display_ind_sources ( of )
2005-02-21 04:57:55 +05:30
self . display_ind_pedigree ( of )
2005-12-06 12:08:09 +05:30
if self . usegraph :
self . display_tree ( of )
2005-08-18 11:28:28 +05:30
self . display_footer ( of , db )
self . close_file ( of )
2005-02-21 04:57:55 +05:30
2008-02-24 19:25:55 +05:30
def display_attr_list ( self , of , attrlist = None ) :
2007-04-05 17:43:33 +05:30
if not attrlist :
return
2008-03-06 18:37:37 +05:30
of . write ( ' \t <div id= " attributes " class= " subsection " > \n ' )
of . write ( ' \t \t <h4> %s </h4> \n ' % _ ( ' Attributes ' ) )
of . write ( ' \t \t <table class= " infolist " > \n ' )
2007-04-05 17:43:33 +05:30
for attr in attrlist :
atType = str ( attr . get_type ( ) )
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <tr> \n \t \t \t \t <td class= " ColumnAttribute " > %s </td> \n ' % atType )
2007-04-05 17:43:33 +05:30
value = attr . get_value ( )
value + = self . get_citation_links ( attr . get_source_references ( ) )
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t \t <td class= " ColumnValue " > %s </td> \n \t \t \t </tr> \n ' % value )
of . write ( ' \t \t </table> \n ' )
of . write ( ' \t </div> \n \n ' )
2007-04-05 17:43:33 +05:30
2008-02-24 19:25:55 +05:30
def draw_box ( self , of , center , col , person ) :
2008-02-10 09:39:09 +05:30
top = center - _HEIGHT / 2
xoff = _XOFFSET + col * ( _WIDTH + _HGAP )
2005-12-06 12:08:09 +05:30
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <div class= " boxbg " style= " top: %d px; left: %d px; " > \n ' % ( top , xoff + 1 ) )
of . write ( ' \t \t \t \t <div class= " box " > ' )
2005-12-06 12:08:09 +05:30
person_link = person . handle in self . ind_list
if person_link :
2007-08-12 08:12:22 +05:30
person_name = _nd . display ( person )
2005-12-06 12:08:09 +05:30
path = self . build_path ( person . handle , " ppl " , False )
fname = self . build_name ( path , person . handle )
self . person_link ( of , fname , person_name )
else :
2007-08-12 08:12:22 +05:30
of . write ( _nd . display ( person ) )
2005-12-06 12:08:09 +05:30
of . write ( ' </div> \n ' )
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t </div> \n ' )
of . write ( ' \t \t \t <div class= " shadow " style= " top: %d px; left: %d px; " ></div> \n ' % ( top + _SHADOW , xoff + _SHADOW ) )
2005-12-06 12:08:09 +05:30
2008-02-24 19:25:55 +05:30
def extend_line ( self , of , y0 , x0 ) :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <div class= " bvline " style= " top: %d px; left: %d px; width: %d px; " ></div> \n ' %
2008-02-10 09:39:09 +05:30
( y0 , x0 , _HGAP / 2 ) )
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <div class= " gvline " style= " top: %d px; left: %d px; width: %d px; " ></div> \n ' %
2008-02-10 09:39:09 +05:30
( y0 + _SHADOW , x0 , _HGAP / 2 + _SHADOW ) )
2005-12-06 12:08:09 +05:30
2008-02-24 19:25:55 +05:30
def connect_line ( self , of , y0 , y1 , col ) :
2005-12-06 12:08:09 +05:30
if y0 < y1 :
y = y0
else :
y = y1
2008-02-10 09:39:09 +05:30
x0 = _XOFFSET + col * _WIDTH + ( col - 1 ) * _HGAP + _HGAP / 2
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <div class= " bvline " style= " top: %d px; left: %d px; width: %d px; " ></div> \n ' %
2008-02-10 09:39:09 +05:30
( y1 , x0 , _HGAP / 2 ) )
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <div class= " gvline " style= " top: %d px; left: %d px; width: %d px; " ></div> \n ' %
2008-02-10 09:39:09 +05:30
( y1 + _SHADOW , x0 + _SHADOW , _HGAP / 2 + _SHADOW ) )
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <div class= " bhline " style= " top: %d px; left: %d px; height: %d px; " ></div> \n ' %
2005-12-06 12:08:09 +05:30
( y , x0 , abs ( y0 - y1 ) ) )
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <div class= " ghline " style= " top: %d px; left: %d px; height: %d px; " ></div> \n ' %
2008-02-10 09:39:09 +05:30
( y + _SHADOW , x0 + _SHADOW , abs ( y0 - y1 ) ) )
2005-12-06 12:08:09 +05:30
2008-02-24 19:25:55 +05:30
def draw_connected_box ( self , of , center1 , center2 , col , handle ) :
2005-12-06 12:08:09 +05:30
if not handle :
return None
person = self . db . get_person_from_handle ( handle )
self . draw_box ( of , center2 , col , person )
self . connect_line ( of , center1 , center2 , col )
return person
2008-02-24 19:25:55 +05:30
def display_tree ( self , of ) :
2006-05-14 11:21:46 +05:30
if not self . person . get_main_parents_family_handle ( ) :
2005-12-06 12:08:09 +05:30
return
2006-05-14 11:21:46 +05:30
generations = self . graphgens
max_in_col = 1 << ( generations - 1 )
2008-02-10 09:39:09 +05:30
max_size = _HEIGHT * max_in_col + _VGAP * ( max_in_col + 1 )
2006-05-14 11:21:46 +05:30
center = int ( max_size / 2 )
2008-03-06 18:37:37 +05:30
of . write ( ' \t <div id= " tree " class= " subsection " > \n ' )
of . write ( ' \t \t <h4> %s </h4> \n ' % _ ( ' Ancestors ' ) )
of . write ( ' \t \t <div id= " treeContainer " style= " width: %d px; height: %d px; " > \n ' % ( _XOFFSET + ( generations ) * _WIDTH + ( generations - 1 ) * _HGAP , max_size ) )
2006-05-14 11:21:46 +05:30
self . draw_tree ( of , 1 , generations , max_size , 0 , center , self . person . handle )
2005-12-06 12:08:09 +05:30
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t </div> \n ' )
of . write ( ' \t </div> \n ' )
2006-05-14 11:21:46 +05:30
2008-02-24 19:25:55 +05:30
def draw_tree ( self , of , gen , maxgen , max_size , old_center , new_center , phandle ) :
2006-05-14 11:21:46 +05:30
if gen > maxgen :
return
gen_offset = int ( max_size / pow ( 2 , gen + 1 ) )
person = self . db . get_person_from_handle ( phandle )
if not person :
return
2005-12-06 12:08:09 +05:30
2006-05-14 11:21:46 +05:30
if gen == 1 :
2008-02-24 19:25:55 +05:30
self . draw_box ( of , new_center , 0 , person )
2006-05-14 11:21:46 +05:30
else :
2008-02-24 19:25:55 +05:30
self . draw_connected_box ( of , old_center , new_center , gen - 1 , phandle )
2006-05-14 11:21:46 +05:30
if gen == maxgen :
return
2005-12-06 12:08:09 +05:30
2006-05-14 11:21:46 +05:30
family_handle = person . get_main_parents_family_handle ( )
if family_handle :
2008-02-10 09:39:09 +05:30
line_offset = _XOFFSET + ( gen ) * _WIDTH + ( gen - 1 ) * _HGAP
2008-02-24 19:25:55 +05:30
self . extend_line ( of , new_center , line_offset )
2005-12-06 12:08:09 +05:30
2006-05-14 11:21:46 +05:30
gen = gen + 1
family = self . db . get_family_from_handle ( family_handle )
f_center = new_center - gen_offset
f_handle = family . get_father_handle ( )
2008-02-24 19:25:55 +05:30
self . draw_tree ( of , gen , maxgen , max_size , new_center , f_center , f_handle )
2005-12-06 12:08:09 +05:30
2006-05-14 11:21:46 +05:30
m_center = new_center + gen_offset
m_handle = family . get_mother_handle ( )
2008-02-24 19:25:55 +05:30
self . draw_tree ( of , gen , maxgen , max_size , new_center , m_center , m_handle )
2005-12-06 12:08:09 +05:30
2008-02-24 19:25:55 +05:30
def display_ind_sources ( self , of ) :
2007-07-23 17:52:03 +05:30
for sref in self . person . get_source_references ( ) :
self . bibli . add_reference ( sref )
2007-08-27 01:49:18 +05:30
if self . bibli . get_citation_count ( ) == 0 :
2005-02-10 07:14:05 +05:30
return
2008-03-01 10:13:58 +05:30
self . display_source_refs ( of , self . db , self . bibli )
2005-02-10 07:14:05 +05:30
2008-02-24 19:25:55 +05:30
def display_ind_pedigree ( self , of ) :
2005-02-04 09:24:48 +05:30
parent_handle_list = self . person . get_parent_family_handle_list ( )
if parent_handle_list :
2006-04-23 08:28:53 +05:30
parent_handle = parent_handle_list [ 0 ]
2005-02-04 09:24:48 +05:30
family = self . db . get_family_from_handle ( parent_handle )
father_id = family . get_father_handle ( )
mother_id = family . get_mother_handle ( )
mother = self . db . get_person_from_handle ( mother_id )
father = self . db . get_person_from_handle ( father_id )
else :
family = None
father = None
mother = None
2008-03-06 18:37:37 +05:30
of . write ( ' \t <div id= " pedigree " class= " subsection " > \n ' )
of . write ( ' \t \t <h4> %s </h4> \n ' % _ ( ' Pedigree ' ) )
of . write ( ' \t \t <ol class= " pedigreegen " > \n \t \t \t ' )
if father and mother :
self . pedigree_person ( of , father )
of . write ( ' \n \t \t \t \t <ol> \n \t \t \t \t \t ' )
self . pedigree_person ( of , mother , True )
of . write ( ' \n ' )
of . write ( ' \t \t \t \t \t \t <ol> \n ' )
else :
2005-02-04 09:24:48 +05:30
if father :
2005-02-21 04:57:55 +05:30
self . pedigree_person ( of , father )
2008-03-06 18:37:37 +05:30
of . write ( ' \n ' )
of . write ( ' \t \t \t \t <ol> \n ' )
2005-02-04 09:24:48 +05:30
if mother :
2005-12-06 12:08:09 +05:30
self . pedigree_person ( of , mother , True )
2008-03-06 18:37:37 +05:30
of . write ( ' \n ' )
of . write ( ' \t \t \t \t <ol> \n ' )
2005-02-04 09:24:48 +05:30
if family :
2007-08-12 08:12:22 +05:30
for child_ref in family . get_child_ref_list ( ) :
2006-04-23 08:28:53 +05:30
child_handle = child_ref . ref
2005-02-04 09:24:48 +05:30
if child_handle == self . person . handle :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t \t \t \t \t <li class= " thisperson " > %s \n ' % self . name )
of . write ( ' \t \t \t \t \t \t \t \t <ol class= " spouselist " > \n \t \t \t \t \t \t \t \t \t ' )
2005-02-21 04:57:55 +05:30
self . pedigree_family ( of )
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t \t \t \t \t \t </ol> \n \t \t \t \t \t \t \t </li> \n ' )
2005-02-04 09:24:48 +05:30
else :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t \t \t \t \t ' )
2005-02-04 09:24:48 +05:30
child = self . db . get_person_from_handle ( child_handle )
2005-02-21 04:57:55 +05:30
self . pedigree_person ( of , child )
2008-03-06 18:37:37 +05:30
of . write ( ' </li> \n ' )
of . write ( ' \t \t \t \t \t \t </ol> \n \t \t \t \t \t </li> \n ' )
2005-02-04 09:24:48 +05:30
else :
2008-03-06 18:37:37 +05:30
of . write ( ' <li class= " thisperson " > %s \n ' % self . name )
of . write ( ' \t \t \t \t <ol class= " spouselist " > \n \t \t \t \t \t \t ' )
2005-02-21 04:57:55 +05:30
self . pedigree_family ( of )
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t \t </ol> \n \t \t \t </li> \n ' )
of . write ( ' \t \t </ol> \n ' )
of . write ( ' \t </div> \n \n ' )
2005-02-10 07:14:05 +05:30
2008-02-24 19:25:55 +05:30
def display_ind_general ( self , of ) :
2005-08-18 11:28:28 +05:30
self . page_title = self . sort_name
self . display_first_image_as_thumbnail ( of , self . db ,
self . person . get_media_list ( ) )
2005-02-01 09:16:29 +05:30
2008-03-06 18:37:37 +05:30
of . write ( ' \t <h2>Individuals:</h2> \n ' )
of . write ( ' \t <h3> %s </h3> \n ' % self . sort_name . strip ( ) )
of . write ( ' \t <div id= " summaryarea " > \n ' )
of . write ( ' \t \t <table class= " infolist " > \n ' )
2005-02-01 09:16:29 +05:30
2005-08-18 11:28:28 +05:30
# GRAMPS ID
if not self . noid :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <tr> \n \t \t \t \t <td class= " ColumnAttribute " > %s </td> \n ' % _ ( ' GRAMPS ID ' ) )
of . write ( ' \t \t \t \t <td class= " ColumnValue " > %s </td> \n ' % self . person . gramps_id )
of . write ( ' \t \t \t </tr> \n ' )
2005-08-18 11:28:28 +05:30
# Names [and their sources]
for name in [ self . person . get_primary_name ( ) , ] + self . person . get_alternate_names ( ) :
2007-08-12 08:12:22 +05:30
pname = _nd . display_name ( name )
2007-07-23 17:52:03 +05:30
pname + = self . get_citation_links ( name . get_source_references ( ) )
2006-04-23 08:28:53 +05:30
type = str ( name . get_type ( ) )
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <tr> \n \t \t \t \t <td class= " ColumnAttribute " > %s </td> \n ' % _ ( type ) )
of . write ( ' \t \t \t \t <td class= " ColumnValue " > %s ' % pname )
of . write ( ' </td> \n \t \t \t </tr> \n ' )
2005-08-18 11:28:28 +05:30
2006-03-01 01:24:35 +05:30
# Gender
nick = self . person . get_nick_name ( )
if nick :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <tr> \n \t \t \t \t <td class= " ColumnAttribute " > %s </td> \n ' % _ ( ' Nickname ' ) )
of . write ( ' \t \t \t \t <td class= " ColumnValue " > %s </td> \n ' % nick )
of . write ( ' \t \t \t </tr> \n ' )
2006-03-01 01:24:35 +05:30
2005-02-01 09:16:29 +05:30
# Gender
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <tr> \n \t \t \t \t <td class= " ColumnAttribute " > %s </td> \n ' % _ ( ' Gender ' ) )
2005-02-04 09:24:48 +05:30
gender = self . gender_map [ self . person . gender ]
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t \t <td class= " ColumnValue " > %s </td> \n ' % gender )
of . write ( ' \t \t \t </tr> \n \t \t </table> \n \t </div> \n \n ' )
2005-08-18 11:28:28 +05:30
2008-02-24 19:25:55 +05:30
def display_ind_events ( self , of ) :
2007-10-16 17:39:20 +05:30
evt_ref_list = self . person . get_event_ref_list ( )
2006-03-31 11:07:41 +05:30
2007-03-07 08:45:45 +05:30
if not evt_ref_list :
2006-03-31 11:07:41 +05:30
return
2005-08-18 11:28:28 +05:30
2008-03-06 18:37:37 +05:30
of . write ( ' \t <div id= " events " class= " subsection " > \n ' )
of . write ( ' \t \t <h4> %s </h4> \n ' % _ ( ' Events ' ) )
of . write ( ' \t \t <table class= " infolist " > \n ' )
2005-02-10 07:14:05 +05:30
2006-03-31 11:07:41 +05:30
for event_ref in evt_ref_list :
2007-03-07 08:45:45 +05:30
event = self . db . get_event_from_handle ( event_ref . ref )
if event :
evt_name = str ( event . get_type ( ) )
2007-10-16 17:39:20 +05:30
if event_ref . get_role ( ) == EventRoleType . PRIMARY :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <tr> \n \t \t \t \t <td class= " ColumnAttribute " > %s </td> \n ' % evt_name )
2007-10-16 17:39:20 +05:30
else :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <tr> \n \t \t \t \t <td class= " ColumnAttribute " > %s ( %s )</td> \n ' \
2007-10-16 17:39:20 +05:30
% ( evt_name , event_ref . get_role ( ) ) )
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t \t <td class= " ColumnValue " > ' )
2007-10-21 02:56:43 +05:30
of . write ( self . format_event ( event , event_ref ) )
2007-03-07 08:45:45 +05:30
of . write ( ' </td> \n ' )
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t </tr> \n ' )
of . write ( ' \t \t </table> \n ' )
of . write ( ' \t </div> \n \n ' )
2007-01-18 10:01:08 +05:30
2008-02-24 19:25:55 +05:30
def display_addresses ( self , of ) :
2007-01-18 10:01:08 +05:30
alist = self . person . get_address_list ( )
if len ( alist ) == 0 :
return
2008-03-06 18:37:37 +05:30
of . write ( ' \t <div id= " addresses " class= " subsection " > \n ' )
of . write ( ' \t \t <h4> %s </h4> \n ' % _ ( ' Addresses ' ) )
of . write ( ' \t \t <table class= " infolist " > \n ' )
2007-01-18 10:01:08 +05:30
for addr in alist :
2007-01-23 07:21:33 +05:30
location = ReportUtils . get_address_str ( addr )
2007-01-18 10:01:08 +05:30
location + = self . get_citation_links ( addr . get_source_references ( ) )
date = _dd . display ( addr . get_date_object ( ) )
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <tr> \n \t \t \t \t <td class= " ColumnAttribute " > %s </td> \n ' % date )
of . write ( ' \t \t \t \t <td class= " ColumnValue " > %s </td> \n ' % location )
of . write ( ' \t \t \t </tr> \n ' )
2007-01-18 10:01:08 +05:30
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t </table> \n ' )
of . write ( ' \t </div> \n \n ' )
2005-02-01 09:16:29 +05:30
2005-08-18 11:28:28 +05:30
def display_child_link ( self , of , child_handle ) :
use_link = child_handle in self . ind_list
child = self . db . get_person_from_handle ( child_handle )
gid = child . get_gramps_id ( )
if use_link :
2008-03-06 18:37:37 +05:30
of . write ( " \t \t \t \t \t \t <li> " )
2007-08-12 08:12:22 +05:30
child_name = _nd . display ( child )
2005-08-18 11:28:28 +05:30
path = self . build_path ( child_handle , " ppl " , False )
self . person_link ( of , self . build_name ( path , child_handle ) ,
child_name , gid )
else :
2008-03-06 18:37:37 +05:30
of . write ( " \t \t \t \t \t \t <li> " )
2007-08-12 08:12:22 +05:30
of . write ( _nd . display ( child ) )
2008-03-06 18:37:37 +05:30
of . write ( u " </li> \n " )
2005-02-01 09:16:29 +05:30
2005-08-18 11:28:28 +05:30
def display_parent ( self , of , handle , title , rel ) :
use_link = handle in self . ind_list
2005-02-01 09:16:29 +05:30
person = self . db . get_person_from_handle ( handle )
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t \t <td class= " ColumnAttribute " > %s </td> \n ' % title )
of . write ( ' \t \t \t \t <td class= " ColumnValue " > ' )
2005-08-18 11:28:28 +05:30
val = person . gramps_id
2005-02-01 09:16:29 +05:30
if use_link :
2005-08-18 11:28:28 +05:30
path = self . build_path ( handle , " ppl " , False )
2008-02-24 19:25:55 +05:30
fname = self . build_name ( path , handle )
2007-08-12 08:12:22 +05:30
self . person_link ( of , fname , _nd . display ( person ) ,
2005-08-18 11:28:28 +05:30
val )
else :
2007-08-12 08:12:22 +05:30
of . write ( _nd . display ( person ) )
2007-10-08 22:11:39 +05:30
if rel != gen . lib . ChildRefType . BIRTH :
2006-04-23 08:28:53 +05:30
of . write ( ' ( %s ) ' % str ( rel ) )
2005-02-21 04:57:55 +05:30
of . write ( ' </td> \n ' )
2005-02-01 09:16:29 +05:30
2008-02-24 19:25:55 +05:30
def display_ind_parents ( self , of ) :
2005-02-04 09:24:48 +05:30
parent_list = self . person . get_parent_family_handle_list ( )
2005-02-01 09:16:29 +05:30
2005-08-18 11:28:28 +05:30
if not parent_list :
2005-02-01 09:16:29 +05:30
return
2008-03-06 18:37:37 +05:30
of . write ( ' \t <div id= " parents " class= " subsection " > \n ' )
of . write ( ' \t \t <h4> %s </h4> \n ' % _ ( " Parents " ) )
of . write ( ' \t \t <table class= " infolist " > \n ' )
2005-02-01 09:16:29 +05:30
2005-08-18 11:28:28 +05:30
first = True
2005-02-01 09:16:29 +05:30
if parent_list :
2006-04-23 08:28:53 +05:30
for family_handle in parent_list :
2005-02-01 09:16:29 +05:30
family = self . db . get_family_from_handle ( family_handle )
2006-04-23 08:28:53 +05:30
# Get the mother and father relationships
frel = " "
mrel = " "
2007-07-19 12:15:25 +05:30
sibling = set ( )
2006-04-23 08:28:53 +05:30
child_handle = self . person . get_handle ( )
2007-08-12 08:12:22 +05:30
child_ref_list = family . get_child_ref_list ( )
2006-04-23 08:28:53 +05:30
for child_ref in child_ref_list :
if child_ref . ref == child_handle :
frel = str ( child_ref . get_father_relation ( ) )
mrel = str ( child_ref . get_mother_relation ( ) )
2005-08-18 11:28:28 +05:30
if not first :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <tr> \n \t \t \t \t <td colspan= " 2 " > </td> \n \t \t \t </tr> \n ' )
2005-08-18 11:28:28 +05:30
else :
first = False
2005-02-01 09:16:29 +05:30
father_handle = family . get_father_handle ( )
if father_handle :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <tr> \n ' )
2005-08-18 11:28:28 +05:30
self . display_parent ( of , father_handle , _ ( ' Father ' ) , frel )
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t </tr> \n ' )
2005-02-01 09:16:29 +05:30
mother_handle = family . get_mother_handle ( )
if mother_handle :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <tr> \n ' )
2005-08-18 11:28:28 +05:30
self . display_parent ( of , mother_handle , _ ( ' Mother ' ) , mrel )
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t </tr> \n ' )
2007-07-19 12:15:25 +05:30
2005-02-04 19:24:02 +05:30
first = False
2007-04-16 00:42:57 +05:30
if len ( child_ref_list ) > 1 :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <tr> \n ' )
of . write ( ' \t \t \t \t <td class= " ColumnAttribute " > %s </td> \n ' % _ ( " Siblings " ) )
of . write ( ' \t \t \t \t <td class= " ColumnValue " > \n \t \t \t \t \t <ol> \n ' )
2007-04-16 00:42:57 +05:30
for child_ref in child_ref_list :
2006-04-23 08:28:53 +05:30
child_handle = child_ref . ref
2007-07-19 12:15:25 +05:30
sibling . add ( child_handle ) # remember that we've already "seen" this child
2005-08-18 11:28:28 +05:30
if child_handle != self . person . handle :
self . display_child_link ( of , child_handle )
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t \t \t </ol> \n \t \t \t \t </td> \n \t \t \t </tr> \n ' )
2007-07-19 12:15:25 +05:30
# Also try to identify half-siblings
other_siblings = set ( )
# if we have a known father...
if father_handle and self . showhalfsiblings :
# 1) get all of the families in which this father is involved
# 2) get all of the children from those families
# 3) if the children are not already listed as siblings...
# 4) then remember those children since we're going to list them
father = self . db . get_person_from_handle ( father_handle )
for family_handle in father . get_family_handle_list ( ) :
family = self . db . get_family_from_handle ( family_handle )
2007-08-12 08:12:22 +05:30
for step_child_ref in family . get_child_ref_list ( ) :
2007-07-19 12:15:25 +05:30
step_child_handle = step_child_ref . ref
if step_child_handle not in sibling :
if step_child_handle != self . person . handle :
# we have a new step/half sibling
other_siblings . add ( step_child_ref . ref )
# do the same thing with the mother (see "father" just above):
if mother_handle and self . showhalfsiblings :
mother = self . db . get_person_from_handle ( mother_handle )
for family_handle in mother . get_family_handle_list ( ) :
family = self . db . get_family_from_handle ( family_handle )
2007-08-12 08:12:22 +05:30
for step_child_ref in family . get_child_ref_list ( ) :
2007-07-19 12:15:25 +05:30
step_child_handle = step_child_ref . ref
if step_child_handle not in sibling :
if step_child_handle != self . person . handle :
# we have a new step/half sibling
other_siblings . add ( step_child_ref . ref )
# now that we have all of the step-siblings/half-siblings, print them out
if len ( other_siblings ) > 0 :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <tr> \n ' )
of . write ( ' \t \t \t \t <td class= " ColumnAttribute " > %s </td> \n ' % _ ( " Half Siblings " ) )
of . write ( ' \t \t \t \t <td class= " ColumnValue " > \n \t \t \t \t \t <ol> \n ' )
2007-07-19 12:15:25 +05:30
for child_handle in other_siblings :
self . display_child_link ( of , child_handle )
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t \t \t </ol> \n \t \t \t \t </td> \n \t \t \t </tr> \n ' )
of . write ( ' \t \t </table> \n ' )
of . write ( ' \t </div> \n \n ' )
2005-08-18 11:28:28 +05:30
2008-02-24 19:25:55 +05:30
def display_ind_relationships ( self , of ) :
2005-08-18 11:28:28 +05:30
family_list = self . person . get_family_handle_list ( )
if not family_list :
return
2008-03-06 18:37:37 +05:30
of . write ( ' \t <div id= " families " class= " subsection " > \n ' )
of . write ( ' \t \t <h4> %s </h4> \n ' % _ ( " Families " ) )
of . write ( ' \t \t <table class= " infolist " > \n ' )
2005-08-18 11:28:28 +05:30
first = True
for family_handle in family_list :
family = self . db . get_family_from_handle ( family_handle )
self . display_spouse ( of , family , first )
first = False
2007-08-12 08:12:22 +05:30
childlist = family . get_child_ref_list ( )
2005-08-18 11:28:28 +05:30
if childlist :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <tr> \n \t \t \t \t <td class= " ColumnType " > </td> \n ' )
of . write ( ' \t \t \t \t <td class= " ColumnAttribute " > %s </td> \n ' % _ ( " Children " ) )
of . write ( ' \t \t \t \t <td class= " ColumnValue " > \n \t \t \t \t \t <ol> \n ' )
2006-04-23 08:28:53 +05:30
for child_ref in childlist :
self . display_child_link ( of , child_ref . ref )
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t \t \t </ol> \n \t \t \t \t </td> \n \t \t \t </tr> \n ' )
of . write ( ' \t \t </table> \n ' )
of . write ( ' \t </div> \n \n ' )
2005-02-10 07:14:05 +05:30
2008-02-24 19:25:55 +05:30
def display_spouse ( self , of , family , first = True ) :
2005-02-01 09:16:29 +05:30
gender = self . person . get_gender ( )
reltype = family . get_relationship ( )
2007-10-08 22:11:39 +05:30
if reltype == gen . lib . FamilyRelType . MARRIED :
if gender == gen . lib . Person . FEMALE :
2005-02-01 09:16:29 +05:30
relstr = _ ( " Husband " )
2007-10-08 22:11:39 +05:30
elif gender == gen . lib . Person . MALE :
2005-02-01 09:16:29 +05:30
relstr = _ ( " Wife " )
else :
relstr = _ ( " Partner " )
else :
relstr = _ ( " Partner " )
spouse_id = ReportUtils . find_spouse ( self . person , family )
if spouse_id :
spouse = self . db . get_person_from_handle ( spouse_id )
2007-08-12 08:12:22 +05:30
name = _nd . display ( spouse )
2005-02-01 09:16:29 +05:30
else :
name = _ ( " unknown " )
2006-04-23 08:28:53 +05:30
rtype = str ( family . get_relationship ( ) )
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <tr class= " BeginFamily " > \n \t \t \t \t <td class= " ColumnType " > %s </td> \n ' % rtype )
of . write ( ' \t \t \t \t <td class= " ColumnAttribute " > %s </td> \n ' % relstr )
of . write ( ' \t \t \t \t <td class= " ColumnValue " > ' )
2005-08-18 11:28:28 +05:30
if spouse_id :
use_link = spouse_id in self . ind_list
gid = spouse . get_gramps_id ( )
if use_link :
2007-08-12 08:12:22 +05:30
spouse_name = _nd . display ( spouse )
2005-08-18 11:28:28 +05:30
path = self . build_path ( spouse . handle , " ppl " , False )
fname = self . build_name ( path , spouse . handle )
self . person_link ( of , fname , spouse_name , gid )
else :
of . write ( name )
2008-03-06 18:37:37 +05:30
of . write ( ' </td> \n \t \t \t </tr> \n ' )
2005-12-06 12:08:09 +05:30
2006-04-01 23:08:34 +05:30
for event_ref in family . get_event_ref_list ( ) :
event = self . db . get_event_from_handle ( event_ref . ref )
2006-04-23 08:28:53 +05:30
evtType = str ( event . get_type ( ) )
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <tr> \n \t \t \t \t <td class= " ColumnType " > </td> \n ' )
of . write ( ' \t \t \t \t <td class= " ColumnAttribute " > %s </td> \n ' % evtType )
of . write ( ' \t \t \t \t <td class= " ColumnValue " > ' )
2007-10-21 02:56:43 +05:30
of . write ( self . format_event ( event , event_ref ) )
2008-03-06 18:37:37 +05:30
of . write ( ' </td> \n \t \t \t </tr> \n ' )
2005-08-18 11:28:28 +05:30
for attr in family . get_attribute_list ( ) :
2006-04-23 08:28:53 +05:30
attrType = str ( attr . get_type ( ) )
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <tr> \n \t \t \t \t <td class= " ColumnType " > </td> \n ' )
of . write ( ' \t \t \t \t <td class= " ColumnAttribute " > %s </td> ' % attrType )
of . write ( ' \t \t \t \t <td class= " ColumnValue " > %s </td> \n \t \t \t </tr> \n ' % attr . get_value ( ) )
2007-03-10 09:55:23 +05:30
notelist = family . get_note_list ( )
for notehandle in notelist :
2007-07-18 17:47:08 +05:30
nobj = self . db . get_note_from_handle ( notehandle )
2007-03-10 09:55:23 +05:30
if nobj :
text = nobj . get ( markup = True )
format = nobj . get_format ( )
if text :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t <tr> \n \t \t \t \t <td class= " ColumnType " > </td> \n ' )
of . write ( ' \t \t \t \t <td class= " ColumnAttribute " > %s </td> \n ' % _ ( ' Narrative ' ) )
of . write ( ' \t \t \t \t <td class= " ColumnValue " > \n \t \t \t \t \t <p> ' )
2007-03-10 09:55:23 +05:30
if format :
of . write ( u " <pre> %s </pre> " % text )
else :
2008-03-06 18:37:37 +05:30
of . write ( u " </p> \n \t \t \t \t \t <p> " . join ( text . split ( " \n " ) ) )
of . write ( ' </p> \n \t \t \t \t </td> \n \t \t \t </tr> \n ' )
2005-08-18 11:28:28 +05:30
2008-02-24 19:25:55 +05:30
def pedigree_person ( self , of , person , is_spouse = False ) :
2005-02-04 09:24:48 +05:30
person_link = person . handle in self . ind_list
2005-12-06 12:08:09 +05:30
if is_spouse :
2008-03-06 18:37:37 +05:30
of . write ( ' <li class= " spouse " > ' )
else :
of . write ( ' <li> ' )
2005-02-04 09:24:48 +05:30
if person_link :
2007-08-12 08:12:22 +05:30
person_name = _nd . display ( person )
2005-08-18 11:28:28 +05:30
path = self . build_path ( person . handle , " ppl " , False )
fname = self . build_name ( path , person . handle )
self . person_link ( of , fname , person_name )
else :
2008-03-06 18:37:37 +05:30
of . write ( ' <li> ' )
2007-08-12 08:12:22 +05:30
of . write ( _nd . display ( person ) )
2005-02-04 09:24:48 +05:30
2008-02-24 19:25:55 +05:30
def pedigree_family ( self , of ) :
2005-02-04 09:24:48 +05:30
for family_handle in self . person . get_family_handle_list ( ) :
rel_family = self . db . get_family_from_handle ( family_handle )
spouse_handle = ReportUtils . find_spouse ( self . person , rel_family )
if spouse_handle :
spouse = self . db . get_person_from_handle ( spouse_handle )
2005-12-06 12:08:09 +05:30
self . pedigree_person ( of , spouse , True )
2007-08-12 08:12:22 +05:30
childlist = rel_family . get_child_ref_list ( )
2005-02-04 09:24:48 +05:30
if childlist :
2008-03-06 18:37:37 +05:30
of . write ( ' \n \t \t \t \t \t \t \t \t \t \t <ol> \n ' )
2006-04-23 08:28:53 +05:30
for child_ref in childlist :
2008-03-06 18:37:37 +05:30
of . write ( ' \t \t \t \t \t \t \t \t \t \t \t ' )
2006-04-23 08:28:53 +05:30
child = self . db . get_person_from_handle ( child_ref . ref )
2005-02-21 04:57:55 +05:30
self . pedigree_person ( of , child )
2008-03-06 18:37:37 +05:30
of . write ( ' </li> \n ' )
of . write ( ' \t \t \t \t \t \t \t \t \t \t </ol> \n \t \t \t \t \t \t \t \t \t </li> \n ' )
else :
of . write ( ' </li> \n ' )
2005-02-04 09:24:48 +05:30
2007-10-21 02:56:43 +05:30
def format_event ( self , event , event_ref ) :
2005-08-18 11:28:28 +05:30
lnk = ( self . cur_name , self . page_title , self . gid )
2005-02-01 09:16:29 +05:30
descr = event . get_description ( )
2005-02-16 11:11:33 +05:30
place_handle = event . get_place_handle ( )
if place_handle :
2005-08-18 11:28:28 +05:30
if self . place_list . has_key ( place_handle ) :
if lnk not in self . place_list [ place_handle ] :
self . place_list [ place_handle ] . append ( lnk )
else :
self . place_list [ place_handle ] = [ lnk ]
place = self . place_link_str ( place_handle ,
ReportUtils . place_name ( self . db , place_handle ) ,
up = True )
else :
place = u " "
2005-02-01 09:16:29 +05:30
2005-02-16 11:11:33 +05:30
date = _dd . display ( event . get_date_object ( ) )
2005-02-01 09:16:29 +05:30
tmap = { ' description ' : descr , ' date ' : date , ' place ' : place }
if descr and date and place :
2005-08-18 11:28:28 +05:30
text = _ ( ' %(description)s , %(date)s at %(place)s ' ) % tmap
2005-02-01 09:16:29 +05:30
elif descr and date :
2005-08-18 11:28:28 +05:30
text = _ ( ' %(description)s , %(date)s ' ) % tmap
2007-09-29 08:45:00 +05:30
elif descr and place :
text = _ ( ' %(description)s at %(place)s ' ) % tmap
2005-02-01 09:16:29 +05:30
elif descr :
text = descr
elif date and place :
2005-08-18 11:28:28 +05:30
text = _ ( ' %(date)s at %(place)s ' ) % tmap
2005-02-01 09:16:29 +05:30
elif date :
text = date
elif place :
text = place
else :
text = ' \n '
2007-01-18 10:01:08 +05:30
text + = self . get_citation_links ( event . get_source_references ( ) )
2007-07-19 12:15:25 +05:30
2007-10-21 02:56:43 +05:30
# if the event or event reference has a attributes attached to it,
# get the text and format it correctly
attr_list = event . get_attribute_list ( )
attr_list . extend ( event_ref . get_attribute_list ( ) )
for attr in attr_list :
2008-03-06 18:37:37 +05:30
text + = _ ( " <br /> %(type)s : %(value)s " ) % {
2007-10-21 02:56:43 +05:30
' type ' : attr . get_type ( ) ,
' value ' : attr . get_value ( ) }
# if the event or event reference has a note attached to it,
# get the text and format it correctly
2007-07-19 12:15:25 +05:30
notelist = event . get_note_list ( )
2007-10-21 02:56:43 +05:30
notelist . extend ( event_ref . get_note_list ( ) )
2007-07-19 12:15:25 +05:30
for notehandle in notelist :
nobj = self . db . get_note_from_handle ( notehandle )
if nobj :
note_text = nobj . get ( markup = True )
format = nobj . get_format ( )
if note_text :
if format :
text + = u " <pre> %s </pre> " % note_text
else :
text + = u " <p> "
2008-03-06 18:37:37 +05:30
text + = u " <br /> " . join ( note_text . split ( " \n " ) )
2007-07-19 12:15:25 +05:30
text + = u " </p> "
2007-01-18 10:01:08 +05:30
return text
def get_citation_links ( self , source_ref_list ) :
gid_list = [ ]
lnk = ( self . cur_name , self . page_title , self . gid )
text = " "
for sref in source_ref_list :
handle = sref . get_reference_handle ( )
2007-04-16 00:42:57 +05:30
source = self . db . get_source_from_handle ( handle )
2007-01-18 10:01:08 +05:30
gid_list . append ( sref )
if self . src_list . has_key ( handle ) :
if lnk not in self . src_list [ handle ] :
self . src_list [ handle ] . append ( lnk )
else :
self . src_list [ handle ] = [ lnk ]
2005-08-18 11:28:28 +05:30
if len ( gid_list ) > 0 :
text = text + " <sup> "
for ref in gid_list :
2007-07-23 17:52:03 +05:30
index , key = self . bibli . add_reference ( ref )
id = " %d %s " % ( index + 1 , key )
text = text + ' <a href= " #sref %s " > %s </a> ' % ( id , id )
2005-08-18 11:28:28 +05:30
text = text + " </sup> "
2007-01-18 10:01:08 +05:30
2005-02-01 09:16:29 +05:30
return text
#------------------------------------------------------------------------
#
2008-02-10 09:39:09 +05:30
# NavWebReport
2005-02-01 09:16:29 +05:30
#
#------------------------------------------------------------------------
2008-02-10 09:39:09 +05:30
class NavWebReport ( Report ) :
2008-02-20 10:22:10 +05:30
def __init__ ( self , database , options ) :
2005-02-01 09:16:29 +05:30
"""
2008-02-24 19:25:55 +05:30
Create WebReport object that produces the report .
2005-02-01 09:16:29 +05:30
The arguments are :
database - the GRAMPS database instance
person - currently selected person
2008-02-10 09:39:09 +05:30
options - instance of the Options class for this report
2005-02-01 09:16:29 +05:30
"""
2008-02-20 10:22:10 +05:30
Report . __init__ ( self , database , options )
2008-02-10 09:39:09 +05:30
menu = options . menu
self . opts = { }
for optname in menu . get_all_option_names ( ) :
menuopt = menu . get_option_by_name ( optname )
self . opts [ optname ] = menuopt . get_value ( )
2007-08-12 08:12:22 +05:30
2008-02-10 09:39:09 +05:30
if not self . opts [ ' incpriv ' ] :
2007-08-12 08:12:22 +05:30
self . database = PrivateProxyDb ( database )
else :
self . database = database
2007-08-27 01:49:18 +05:30
2008-02-10 09:39:09 +05:30
livinginfo = self . opts [ ' living ' ]
yearsafterdeath = self . opts [ ' yearsafterdeath ' ]
2007-08-27 01:49:18 +05:30
if livinginfo == LivingProxyDb . MODE_EXCLUDE :
self . database = LivingProxyDb ( self . database ,
LivingProxyDb . MODE_EXCLUDE ,
None ,
yearsafterdeath )
elif livinginfo == LivingProxyDb . MODE_RESTRICT :
self . database = LivingProxyDb ( self . database ,
LivingProxyDb . MODE_RESTRICT ,
None ,
yearsafterdeath )
2005-02-01 09:16:29 +05:30
2008-02-10 09:39:09 +05:30
filters_option = menu . get_option_by_name ( ' filter ' )
self . filter = filters_option . get_filter ( )
self . target_path = self . opts [ ' target ' ]
self . copyright = self . opts [ ' cright ' ]
self . ext = self . opts [ ' ext ' ]
self . encoding = self . opts [ ' encoding ' ]
self . css = self . opts [ ' css ' ]
self . noid = self . opts [ ' nogid ' ]
self . linkhome = self . opts [ ' linkhome ' ]
self . showbirth = self . opts [ ' showbirth ' ]
self . showdeath = self . opts [ ' showdeath ' ]
self . showspouse = self . opts [ ' showspouse ' ]
self . showparents = self . opts [ ' showparents ' ]
self . showhalfsiblings = self . opts [ ' showhalfsiblings ' ]
self . title = self . opts [ ' title ' ]
2005-08-18 11:28:28 +05:30
self . sort = Sort . Sort ( self . database )
2008-02-10 09:39:09 +05:30
self . inc_gallery = self . opts [ ' gallery ' ]
self . inc_contact = self . opts [ ' contactnote ' ] != u " " \
or self . opts [ ' contactimg ' ] != u " "
self . inc_download = self . opts [ ' incdownload ' ]
self . use_archive = self . opts [ ' archive ' ]
self . use_intro = self . opts [ ' intronote ' ] != u " " \
or self . opts [ ' introimg ' ] != u " "
self . use_home = self . opts [ ' homenote ' ] != u " " or \
self . opts [ ' homeimg ' ] != u " "
2005-08-18 11:28:28 +05:30
2005-02-01 09:16:29 +05:30
def write_report ( self ) :
2005-08-18 11:28:28 +05:30
if not self . use_archive :
dir_name = self . target_path
if dir_name == None :
dir_name = os . getcwd ( )
elif not os . path . isdir ( dir_name ) :
parent_dir = os . path . dirname ( dir_name )
if not os . path . isdir ( parent_dir ) :
ErrorDialog ( _ ( " Neither %s nor %s are directories " ) % \
( dir_name , parent_dir ) )
2005-02-01 09:16:29 +05:30
return
2005-08-18 11:28:28 +05:30
else :
try :
os . mkdir ( dir_name )
except IOError , value :
ErrorDialog ( _ ( " Could not create the directory: %s " ) % \
dir_name + " \n " + value [ 1 ] )
return
except :
ErrorDialog ( _ ( " Could not create the directory: %s " ) % \
dir_name )
return
2005-02-01 09:16:29 +05:30
try :
2005-08-18 11:28:28 +05:30
image_dir_name = os . path . join ( dir_name , ' images ' )
if not os . path . isdir ( image_dir_name ) :
os . mkdir ( image_dir_name )
image_dir_name = os . path . join ( dir_name , ' thumb ' )
if not os . path . isdir ( image_dir_name ) :
os . mkdir ( image_dir_name )
2005-02-01 09:16:29 +05:30
except IOError , value :
ErrorDialog ( _ ( " Could not create the directory: %s " ) % \
2005-02-13 09:24:47 +05:30
image_dir_name + " \n " + value [ 1 ] )
2005-02-01 09:16:29 +05:30
return
except :
ErrorDialog ( _ ( " Could not create the directory: %s " ) % \
2005-02-13 09:24:47 +05:30
image_dir_name )
2005-02-01 09:16:29 +05:30
return
2005-12-06 12:08:09 +05:30
archive = None
else :
if os . path . isdir ( self . target_path ) :
ErrorDialog ( _ ( ' Invalid file name ' ) ,
_ ( ' The archive file must be a file, not a directory ' ) )
return
try :
archive = tarfile . open ( self . target_path , " w:gz " )
except ( OSError , IOError ) , value :
ErrorDialog ( _ ( " Could not create %s " ) % self . target_path ,
value )
return
2008-03-06 18:37:37 +05:30
self . progress = Utils . ProgressMeter ( _ ( " Generate HTML reports " ) , ' ' )
2005-12-06 12:08:09 +05:30
# Build the person list
2007-08-27 01:49:18 +05:30
ind_list = self . build_person_list ( )
2005-12-06 12:08:09 +05:30
# Generate the CSS file if requested
if self . css != ' ' :
self . write_css ( archive , self . target_path , self . css )
2008-03-06 18:37:37 +05:30
# Copy Mainz Style Images
from_path = os . path . join ( const . IMAGE_DIR , " NWeb_Mainz_Bkgd.png " )
to_path = os . path . join ( " images " , " NWeb_Mainz_Bkgd.png " )
self . store_file ( archive , self . target_path , from_path , to_path )
from_path = os . path . join ( const . IMAGE_DIR , " NWeb_Mainz_Header.png " )
to_path = os . path . join ( " images " , " NWeb_Mainz_Header.png " )
self . store_file ( archive , self . target_path , from_path , to_path )
from_path = os . path . join ( const . IMAGE_DIR , " NWeb_Mainz_Mid.png " )
to_path = os . path . join ( " images " , " NWeb_Mainz_Mid.png " )
self . store_file ( archive , self . target_path , from_path , to_path )
from_path = os . path . join ( const . IMAGE_DIR , " NWeb_Mainz_MidLight.png " )
to_path = os . path . join ( " images " , " NWeb_Mainz_MidLight.png " )
self . store_file ( archive , self . target_path , from_path , to_path )
2005-12-06 12:08:09 +05:30
# Copy the Creative Commons icon if the a Creative Commons
# license is requested
2006-03-01 01:24:35 +05:30
if 0 < self . copyright < 7 :
2007-09-23 22:48:47 +05:30
from_path = os . path . join ( const . IMAGE_DIR , " somerights20.gif " )
2005-12-06 12:08:09 +05:30
to_path = os . path . join ( " images " , " somerights20.gif " )
self . store_file ( archive , self . target_path , from_path , to_path )
2007-09-23 22:48:47 +05:30
from_path = os . path . join ( const . IMAGE_DIR , " document.png " )
2005-12-06 12:08:09 +05:30
to_path = os . path . join ( " images " , " document.png " )
self . store_file ( archive , self . target_path , from_path , to_path )
2008-03-06 18:37:37 +05:30
# Copy GRAMPS favicon.ico to images directory
from_path = os . path . join ( const . IMAGE_DIR , " favicon.ico " )
to_path = os . path . join ( " images " , " favicon.ico " )
self . store_file ( archive , self . target_path , from_path , to_path )
2005-12-06 12:08:09 +05:30
place_list = { }
source_list = { }
self . photo_list = { }
self . base_pages ( self . photo_list , archive )
2007-08-27 01:49:18 +05:30
self . person_pages ( ind_list , place_list , source_list , archive )
self . surname_pages ( ind_list , archive )
2005-12-06 12:08:09 +05:30
self . place_pages ( place_list , source_list , archive )
if self . inc_gallery :
self . gallery_pages ( self . photo_list , source_list , archive )
2007-11-05 12:46:10 +05:30
self . source_pages ( source_list , self . photo_list , archive )
2005-12-06 12:08:09 +05:30
if archive :
archive . close ( )
self . progress . close ( )
2005-02-28 05:13:20 +05:30
2005-12-06 12:08:09 +05:30
def build_person_list ( self ) :
"""
Builds the person list . Gets all the handles from the database
2007-08-27 01:49:18 +05:30
and then applies the cosen filter :
2005-12-06 12:08:09 +05:30
"""
# gets the person list and applies the requested filter
2005-02-28 05:13:20 +05:30
ind_list = self . database . get_person_handles ( sort_handles = False )
2005-12-06 12:08:09 +05:30
self . progress . set_pass ( _ ( ' Filtering ' ) , 1 )
2005-02-28 05:13:20 +05:30
ind_list = self . filter . apply ( self . database , ind_list )
2007-08-27 01:49:18 +05:30
return ind_list
2005-08-18 11:28:28 +05:30
2008-02-24 19:25:55 +05:30
def write_css ( self , archive , html_dir , css_file ) :
2005-12-06 12:08:09 +05:30
"""
Copy the CSS file to the destination .
"""
if archive :
2007-09-08 11:24:02 +05:30
fname = os . path . join ( const . DATA_DIR , css_file )
2005-12-06 12:08:09 +05:30
archive . add ( fname , _NARRATIVE )
2008-03-06 18:37:37 +05:30
gname = os . path . join ( const . DATA_DIR , " NWeb-Print_Default.css " )
archive . add ( gname , _NARRATIVEPRINT )
2005-08-18 11:28:28 +05:30
else :
2007-09-08 11:24:02 +05:30
shutil . copyfile ( os . path . join ( const . DATA_DIR , css_file ) ,
2005-12-06 12:08:09 +05:30
os . path . join ( html_dir , _NARRATIVE ) )
2008-03-06 18:37:37 +05:30
shutil . copyfile ( os . path . join ( const . DATA_DIR , " NWeb-Print_Default.css " ) ,
os . path . join ( html_dir , _NARRATIVEPRINT ) )
2005-12-06 12:08:09 +05:30
2007-08-27 01:49:18 +05:30
def person_pages ( self , ind_list , place_list , source_list , archive ) :
2005-12-06 12:08:09 +05:30
2007-07-19 12:15:25 +05:30
self . progress . set_pass ( _ ( ' Creating individual pages ' ) , len ( ind_list ) + 1 )
self . progress . step ( ) # otherwise the progress indicator sits at 100%
# for a short while from the last step we did,
# which was to apply the privacy filter
2005-12-06 12:08:09 +05:30
IndividualListPage (
2007-08-27 01:49:18 +05:30
self . database , self . title , ind_list ,
2008-02-10 09:39:09 +05:30
self . opts , archive , self . photo_list )
2005-08-18 11:28:28 +05:30
2005-02-01 09:16:29 +05:30
for person_handle in ind_list :
2005-12-06 12:08:09 +05:30
self . progress . step ( )
2005-02-01 09:16:29 +05:30
person = self . database . get_person_from_handle ( person_handle )
2005-08-18 11:28:28 +05:30
2005-12-06 12:08:09 +05:30
IndividualPage (
2007-08-27 01:49:18 +05:30
self . database , person , self . title , ind_list ,
2008-02-10 09:39:09 +05:30
place_list , source_list , self . opts , archive , self . photo_list )
2005-02-01 09:16:29 +05:30
2007-08-27 01:49:18 +05:30
def surname_pages ( self , ind_list , archive ) :
2005-12-06 12:08:09 +05:30
"""
Generates the surname related pages from list of individual
people .
"""
2005-08-18 11:28:28 +05:30
local_list = sort_people ( self . database , ind_list )
2005-12-06 12:08:09 +05:30
self . progress . set_pass ( _ ( " Creating surname pages " ) , len ( local_list ) )
2005-08-18 11:28:28 +05:30
2005-12-06 12:08:09 +05:30
if self . use_home or self . use_intro :
defname = " surnames "
else :
defname = " index "
2005-08-18 11:28:28 +05:30
2005-12-06 12:08:09 +05:30
SurnameListPage (
2008-02-10 09:39:09 +05:30
self . database , self . title , ind_list , self . opts , archive ,
2005-12-06 12:08:09 +05:30
self . photo_list , SurnameListPage . ORDER_BY_NAME , defname )
SurnameListPage (
2008-02-10 09:39:09 +05:30
self . database , self . title , ind_list , self . opts , archive ,
2005-12-06 12:08:09 +05:30
self . photo_list , SurnameListPage . ORDER_BY_COUNT , " surnames_count " )
2005-02-13 09:24:47 +05:30
2008-02-24 19:25:55 +05:30
for ( surname , handle_list ) in local_list :
2007-08-27 01:49:18 +05:30
SurnamePage ( self . database , surname , handle_list ,
2008-02-10 09:39:09 +05:30
self . opts , archive , self . photo_list )
2005-12-06 12:08:09 +05:30
self . progress . step ( )
def source_pages ( self , source_list , photo_list , archive ) :
2005-07-09 01:54:54 +05:30
2005-12-06 12:08:09 +05:30
self . progress . set_pass ( _ ( " Creating source pages " ) , len ( source_list ) )
2005-08-18 11:28:28 +05:30
SourcesPage ( self . database , self . title , source_list . keys ( ) ,
2008-02-10 09:39:09 +05:30
self . opts , archive , photo_list )
2005-08-18 11:28:28 +05:30
for key in list ( source_list ) :
2005-12-06 12:08:09 +05:30
SourcePage ( self . database , self . title , key , source_list ,
2008-02-10 09:39:09 +05:30
self . opts , archive , photo_list )
2005-12-06 12:08:09 +05:30
self . progress . step ( )
def place_pages ( self , place_list , source_list , archive ) :
self . progress . set_pass ( _ ( " Creating place pages " ) , len ( place_list ) )
PlaceListPage (
2008-02-10 09:39:09 +05:30
self . database , self . title , place_list , source_list , self . opts ,
2005-12-06 12:08:09 +05:30
archive , self . photo_list )
for place in place_list . keys ( ) :
PlacePage (
self . database , self . title , place , source_list , place_list ,
2008-02-10 09:39:09 +05:30
self . opts , archive , self . photo_list )
2005-12-06 12:08:09 +05:30
self . progress . step ( )
def gallery_pages ( self , photo_list , source_list , archive ) :
2007-04-09 01:49:14 +05:30
import gc
2005-12-06 12:08:09 +05:30
self . progress . set_pass ( _ ( " Creating media pages " ) , len ( photo_list ) )
2005-08-18 11:28:28 +05:30
GalleryPage ( self . database , self . title , source_list ,
2008-02-10 09:39:09 +05:30
self . opts , archive , self . photo_list )
2005-08-18 11:28:28 +05:30
prev = None
2005-12-06 12:08:09 +05:30
total = len ( self . photo_list )
2005-08-18 11:28:28 +05:30
index = 1
2005-12-06 12:08:09 +05:30
photo_keys = self . photo_list . keys ( )
2007-10-12 17:46:49 +05:30
sort = Sort . Sort ( self . database )
photo_keys . sort ( sort . by_media_title )
2005-08-18 11:28:28 +05:30
for photo_handle in photo_keys :
2007-04-09 01:49:14 +05:30
gc . collect ( ) # Reduce memory usage when there are many images.
2005-08-18 11:28:28 +05:30
if index == total :
next = None
else :
next = photo_keys [ index ]
2005-12-06 12:08:09 +05:30
MediaPage ( self . database , self . title , photo_handle , source_list ,
2008-02-10 09:39:09 +05:30
self . opts , archive , self . photo_list [ photo_handle ] ,
2005-12-06 12:08:09 +05:30
( prev , next , index , total ) )
self . progress . step ( )
2005-08-18 11:28:28 +05:30
prev = photo_handle
index + = 1
2005-12-06 12:08:09 +05:30
def base_pages ( self , photo_list , archive ) :
if self . use_home :
2008-02-10 09:39:09 +05:30
HomePage ( self . database , self . title , self . opts , archive , photo_list )
2005-12-06 12:08:09 +05:30
if self . inc_contact :
2008-02-10 09:39:09 +05:30
ContactPage ( self . database , self . title , self . opts ,
archive , photo_list )
2005-12-06 12:08:09 +05:30
if self . inc_download :
2008-02-10 09:39:09 +05:30
DownloadPage ( self . database , self . title , self . opts ,
archive , photo_list )
2005-12-06 12:08:09 +05:30
if self . use_intro :
2008-02-10 09:39:09 +05:30
IntroductionPage ( self . database , self . title , self . opts ,
2005-12-06 12:08:09 +05:30
archive , photo_list )
2005-08-18 11:28:28 +05:30
2008-02-24 19:25:55 +05:30
def store_file ( self , archive , html_dir , from_path , to_path ) :
2005-12-06 12:08:09 +05:30
"""
Store the file in the destination .
"""
2005-08-18 11:28:28 +05:30
if archive :
2005-12-06 12:08:09 +05:30
archive . add ( from_path , to_path )
2005-08-18 11:28:28 +05:30
else :
2008-02-24 19:25:55 +05:30
shutil . copyfile ( from_path , os . path . join ( html_dir , to_path ) )
2005-08-18 11:28:28 +05:30
2005-02-01 09:16:29 +05:30
#------------------------------------------------------------------------
#
2008-02-10 09:39:09 +05:30
# NavWebOptions
2005-02-01 09:16:29 +05:30
#
#------------------------------------------------------------------------
2008-02-10 09:39:09 +05:30
class NavWebOptions ( MenuReportOptions ) :
2005-02-01 09:16:29 +05:30
"""
Defines options and provides handling interface .
"""
2008-02-10 09:39:09 +05:30
__INCLUDE_LIVING_VALUE = 99 # Arbitrary number
2008-02-20 10:22:10 +05:30
def __init__ ( self , name , dbase ) :
2008-02-10 09:39:09 +05:30
self . __db = dbase
self . __archive = None
self . __target = None
self . __pid = None
self . __filter = None
self . __graph = None
self . __graphgens = None
self . __living = None
self . __yearsafterdeath = None
2008-02-20 10:22:10 +05:30
MenuReportOptions . __init__ ( self , name , dbase )
2005-08-18 11:28:28 +05:30
2008-02-10 09:39:09 +05:30
def add_menu_options ( self , menu ) :
"""
Add options to the menu for the web calendar .
"""
self . __add_report_options ( menu )
self . __add_page_generation_options ( menu )
self . __add_privacy_options ( menu )
self . __add_advanced_options ( menu )
def __add_report_options ( self , menu ) :
"""
Options on the " Report Options " tab .
"""
category_name = _ ( " Report Options " )
self . __archive = BooleanOption ( _ ( ' Store web pages in .tar.gz archive ' ) ,
False )
self . __archive . set_help ( _ ( ' Whether to store the web pages in an '
' archive file ' ) )
menu . add_option ( category_name , ' archive ' , self . __archive )
self . __archive . connect ( ' value-changed ' , self . __archive_changed )
self . __target = DestinationOption ( _ ( " Destination " ) ,
os . path . join ( const . USER_HOME , " NAVWEB " ) )
self . __target . set_help ( _ ( " The destination directory for the web "
" files " ) )
menu . add_option ( category_name , " target " , self . __target )
self . __archive_changed ( )
self . __filter = FilterOption ( _ ( " Filter " ) , 0 )
self . __filter . set_help (
_ ( " Select filter to restrict people that appear on calendar " ) )
menu . add_option ( category_name , " filter " , self . __filter )
self . __filter . connect ( ' value-changed ' , self . __filter_changed )
self . __pid = PersonOption ( _ ( " Filter Person " ) )
self . __pid . set_help ( _ ( " The center person for the filter " ) )
menu . add_option ( category_name , " pid " , self . __pid )
self . __pid . connect ( ' value-changed ' , self . __update_filters )
self . __update_filters ( )
title = StringOption ( _ ( " Web site title " ) , _ ( ' My Family Tree ' ) )
2008-02-11 02:47:43 +05:30
title . set_help ( _ ( " The title of the web site " ) )
2008-02-10 09:39:09 +05:30
menu . add_option ( category_name , " title " , title )
ext = EnumeratedListOption ( _ ( " File extension " ) , " .html " )
for etype in [ ' .html ' , ' .htm ' , ' .shtml ' , ' .php ' , ' .php3 ' , ' .cgi ' ] :
ext . add_item ( etype , etype )
ext . set_help ( _ ( " The extension to be used for the web files " ) )
menu . add_option ( category_name , " ext " , ext )
cright = EnumeratedListOption ( _ ( ' Copyright ' ) , 0 )
index = 0
for copt in _COPY_OPTIONS :
cright . add_item ( index , copt )
index + = 1
cright . set_help ( _ ( " The copyright to be used for the web files " ) )
menu . add_option ( category_name , " cright " , cright )
encoding = EnumeratedListOption ( _ ( ' Character set encoding ' ) , ' utf-8 ' )
for eopt in _CHARACTER_SETS :
encoding . add_item ( eopt [ 1 ] , eopt [ 0 ] )
encoding . set_help ( _ ( " The encoding to be used for the web files " ) )
menu . add_option ( category_name , " encoding " , encoding )
css = EnumeratedListOption ( _ ( ' Stylesheet ' ) , ' main1.css ' )
for style in _CSS_FILES :
css . add_item ( style [ 1 ] , style [ 0 ] )
css . set_help ( _ ( " The style sheet to be used for the web page " ) )
menu . add_option ( category_name , " css " , css )
self . __graph = BooleanOption ( _ ( " Include ancestor graph " ) , True )
self . __graph . set_help ( _ ( ' Whether to include an ancestor graph '
' on each individual page ' ) )
menu . add_option ( category_name , ' graph ' , self . __graph )
self . __graph . connect ( ' value-changed ' , self . __graph_changed )
self . __graphgens = EnumeratedListOption ( _ ( ' Graph generations ' ) , 4 )
self . __graphgens . add_item ( 2 , " 2 " )
self . __graphgens . add_item ( 3 , " 3 " )
self . __graphgens . add_item ( 4 , " 4 " )
self . __graphgens . add_item ( 5 , " 5 " )
self . __graphgens . set_help ( _ ( " The number of generations to include in "
" the ancestor graph " ) )
menu . add_option ( category_name , " graphgens " , self . __graphgens )
self . __graph_changed ( )
2007-11-27 03:23:58 +05:30
2008-02-10 09:39:09 +05:30
def __add_page_generation_options ( self , menu ) :
"""
Options on the " Page Generation " tab .
"""
category_name = _ ( " Page Generation " )
homenote = NoteOption ( _ ( ' Home page note ' ) )
homenote . set_help ( _ ( " A note to be used on the home page " ) )
menu . add_option ( category_name , " homenote " , homenote )
2007-11-27 03:23:58 +05:30
2008-02-10 09:39:09 +05:30
homeimg = MediaOption ( _ ( ' Home page image ' ) )
homeimg . set_help ( _ ( " An image to be used on the home page " ) )
menu . add_option ( category_name , " homeimg " , homeimg )
intronote = NoteOption ( _ ( ' Introduction note ' ) )
intronote . set_help ( _ ( " A note to be used as the introduction " ) )
menu . add_option ( category_name , " intronote " , intronote )
2007-11-27 03:23:58 +05:30
2008-02-10 09:39:09 +05:30
introimg = MediaOption ( _ ( ' Introduction image ' ) )
introimg . set_help ( _ ( " An image to be used as the introduction " ) )
menu . add_option ( category_name , " introimg " , introimg )
2007-11-27 03:23:58 +05:30
2008-02-10 09:39:09 +05:30
contactnote = NoteOption ( _ ( " Publisher contact note " ) )
contactnote . set_help ( _ ( " A note to be used as the publisher contact " ) )
menu . add_option ( category_name , " contactnote " , contactnote )
2007-11-27 03:23:58 +05:30
2008-02-10 09:39:09 +05:30
contactimg = MediaOption ( _ ( " Publisher contact image " ) )
contactimg . set_help ( _ ( " An image to be used as the publisher contact " ) )
menu . add_option ( category_name , " contactimg " , contactimg )
2007-11-27 03:23:58 +05:30
2008-02-10 09:39:09 +05:30
headernote = NoteOption ( _ ( ' HTML user header ' ) )
headernote . set_help ( _ ( " A note to be used as the page header " ) )
menu . add_option ( category_name , " headernote " , headernote )
footernote = NoteOption ( _ ( ' HTML user footer ' ) )
footernote . set_help ( _ ( " A note to be used as the page footer " ) )
menu . add_option ( category_name , " footernote " , footernote )
2007-11-27 03:23:58 +05:30
2008-02-10 09:39:09 +05:30
gallery = BooleanOption ( _ ( " Include images and media objects " ) , True )
gallery . set_help ( _ ( ' Whether to include a gallery of media objects ' ) )
menu . add_option ( category_name , ' gallery ' , gallery )
incdownload = BooleanOption ( _ ( " Include download page " ) , False )
incdownload . set_help ( _ ( ' Whether to include a database download option ' ) )
menu . add_option ( category_name , ' incdownload ' , incdownload )
nogid = BooleanOption ( _ ( ' Suppress GRAMPS ID ' ) , False )
nogid . set_help ( _ ( ' Whether to include the Gramps ID of objects ' ) )
menu . add_option ( category_name , ' nogid ' , nogid )
2007-11-27 03:23:58 +05:30
2008-02-10 09:39:09 +05:30
def __add_privacy_options ( self , menu ) :
"""
Options on the " Privacy " tab .
"""
category_name = _ ( " Privacy " )
incpriv = BooleanOption ( _ ( " Include records marked private " ) , False )
incpriv . set_help ( _ ( ' Whether to include private objects ' ) )
menu . add_option ( category_name , ' incpriv ' , incpriv )
self . __living = EnumeratedListOption ( _ ( " Living People " ) ,
self . __INCLUDE_LIVING_VALUE )
self . __living . add_item ( LivingProxyDb . MODE_EXCLUDE , _ ( " Exclude " ) )
self . __living . add_item ( LivingProxyDb . MODE_RESTRICT , _ ( " Restrict " ) )
self . __living . add_item ( self . __INCLUDE_LIVING_VALUE , _ ( " Include " ) )
self . __living . set_help ( _ ( " How to handle living people " ) )
menu . add_option ( category_name , " living " , self . __living )
self . __living . connect ( ' value-changed ' , self . __living_changed )
self . __yearsafterdeath = NumberOption ( _ ( " Years from death to consider "
" living " ) , 30 , 0 , 100 )
self . __yearsafterdeath . set_help ( _ ( " This allows you to restrict "
" information on people who have not "
" been dead for very long " ) )
menu . add_option ( category_name , ' yearsafterdeath ' ,
self . __yearsafterdeath )
self . __living_changed ( )
2007-11-26 00:37:50 +05:30
2008-02-10 09:39:09 +05:30
def __add_advanced_options ( self , menu ) :
"""
Options on the " Advanced " tab .
"""
category_name = _ ( " Advanced " )
linkhome = BooleanOption ( _ ( ' Include link to home person on every '
' page ' ) , False )
linkhome . set_help ( _ ( ' Whether to include a link to the home person ' ) )
menu . add_option ( category_name , ' linkhome ' , linkhome )
showbirth = BooleanOption ( _ ( " Include a column for birth dates on the "
" index pages " ) , True )
showbirth . set_help ( _ ( ' Whether to include a birth column ' ) )
menu . add_option ( category_name , ' showbirth ' , showbirth )
showdeath = BooleanOption ( _ ( " Include a column for death dates on the "
" index pages " ) , False )
showdeath . set_help ( _ ( ' Whether to include a death column ' ) )
menu . add_option ( category_name , ' showdeath ' , showdeath )
showspouse = BooleanOption ( _ ( " Include a column for partners on the "
" index pages " ) , False )
showspouse . set_help ( _ ( ' Whether to include a partners column ' ) )
menu . add_option ( category_name , ' showspouse ' , showspouse )
2005-02-01 09:16:29 +05:30
2008-02-10 09:39:09 +05:30
showparents = BooleanOption ( _ ( " Include a column for parents on the "
" index pages " ) , False )
showparents . set_help ( _ ( ' Whether to include a parents column ' ) )
menu . add_option ( category_name , ' showparents ' , showparents )
2006-05-14 11:21:46 +05:30
2008-02-10 09:39:09 +05:30
showhalfsiblings = BooleanOption ( _ ( " Include a column for half-siblings "
" on the index pages " ) , False )
showhalfsiblings . set_help ( _ ( " Whether to include a half-siblings "
" column " ) )
menu . add_option ( category_name , ' showhalfsiblings ' , showhalfsiblings )
2005-08-18 11:28:28 +05:30
2008-02-10 09:39:09 +05:30
def __archive_changed ( self ) :
"""
Update the change of storage : archive or directory
"""
if self . __archive . get_value ( ) == True :
self . __target . set_extension ( " .tar.gz " )
self . __target . set_directory_entry ( False )
2005-08-18 11:28:28 +05:30
else :
2008-02-10 09:39:09 +05:30
self . __target . set_directory_entry ( True )
2005-02-01 09:16:29 +05:30
2008-02-10 09:39:09 +05:30
def __update_filters ( self ) :
"""
Update the filter list based on the selected person
"""
gid = self . __pid . get_value ( )
person = self . __db . get_person_from_gramps_id ( gid )
filter_list = ReportUtils . get_person_filters ( person , False )
self . __filter . set_filters ( filter_list )
def __filter_changed ( self ) :
"""
Handle filter change . If the filter is not specific to a person ,
disable the person option
"""
filter_value = self . __filter . get_value ( )
if filter_value in [ 1 , 2 , 3 , 4 ] :
# Filters 1, 2, 3 and 4 rely on the center person
self . __pid . set_available ( True )
2005-08-18 11:28:28 +05:30
else :
2008-02-10 09:39:09 +05:30
# The rest don't
self . __pid . set_available ( False )
def __graph_changed ( self ) :
"""
Handle enabling or disabling the ancestor graph
"""
self . __graphgens . set_available ( self . __graph . get_value ( ) )
def __living_changed ( self ) :
"""
Handle a change in the living option
"""
if self . __living . get_value ( ) == self . __INCLUDE_LIVING_VALUE :
self . __yearsafterdeath . set_available ( False )
else :
self . __yearsafterdeath . set_available ( True )
2005-02-01 09:16:29 +05:30
2008-02-10 09:39:09 +05:30
def make_default_style ( self , default_style ) :
""" Make the default output style for the Web Pages Report. """
2005-02-01 09:16:29 +05:30
pass
2005-08-18 11:28:28 +05:30
2005-02-01 09:16:29 +05:30
2008-02-24 19:25:55 +05:30
def sort_people ( db , handle_list ) :
2006-03-05 10:01:24 +05:30
flist = set ( handle_list )
2005-08-18 11:28:28 +05:30
sname_sub = { }
sortnames = { }
2007-08-12 08:12:22 +05:30
for person_handle in handle_list :
person = db . get_person_from_handle ( person_handle )
primary_name = person . get_primary_name ( )
if primary_name . group_as :
surname = primary_name . group_as
else :
surname = db . get_name_group_mapping ( primary_name . surname )
sortnames [ person_handle ] = _nd . sort_string ( primary_name )
if sname_sub . has_key ( surname ) :
sname_sub [ surname ] . append ( person_handle )
else :
sname_sub [ surname ] = [ person_handle ]
2005-08-18 11:28:28 +05:30
sorted_lists = [ ]
temp_list = sname_sub . keys ( )
2007-10-04 09:26:41 +05:30
temp_list . sort ( locale . strcoll )
2005-08-18 11:28:28 +05:30
for name in temp_list :
slist = map ( lambda x : ( sortnames [ x ] , x ) , sname_sub [ name ] )
2007-10-04 09:26:41 +05:30
slist . sort ( lambda x , y : locale . strcoll ( x [ 0 ] , y [ 0 ] ) )
2005-08-18 11:28:28 +05:30
entries = map ( lambda x : x [ 1 ] , slist )
sorted_lists . append ( ( name , entries ) )
return sorted_lists
2005-02-01 09:16:29 +05:30
#-------------------------------------------------------------------------
#
#
#
#-------------------------------------------------------------------------
register_report (
2005-02-04 19:24:02 +05:30
name = ' navwebpage ' ,
2006-06-01 10:09:40 +05:30
category = CATEGORY_WEB ,
2008-02-10 09:39:09 +05:30
report_class = NavWebReport ,
options_class = NavWebOptions ,
2006-06-01 10:09:40 +05:30
modes = MODE_GUI | MODE_CLI ,
2008-03-02 04:17:48 +05:30
translated_name = _ ( " Narrated Web Site " ) ,
2005-12-06 12:08:09 +05:30
status = _ ( " Stable " ) ,
2008-02-10 09:39:09 +05:30
author_name = " Donald N. Allingham " ,
author_email = " don@gramps-project.org " ,
2008-03-02 04:17:48 +05:30
description = _ ( " Produces web (HTML) pages for individuals, or a set of "
" individuals " ) ,
2005-02-01 09:16:29 +05:30
)