cleanup and documentation work done.

svn: r11903
This commit is contained in:
Rob G. Healey 2009-02-07 20:41:27 +00:00
parent d087082dba
commit 8dd150ad41
2 changed files with 107 additions and 119 deletions

View File

@ -877,7 +877,7 @@ div#pedigree {
padding:0;
background:none;
}
#tree #treeContainer div.boxbg span.unlinked {
#treeContainer div.boxbg span.unlinked {
position:absolute;
margin:0;
padding:0;
@ -1096,6 +1096,12 @@ body#WebCal {
color:#FFF;
margin:-24px 10px 0 0;
}
#CreatorInfo a {
color:#FFF;
}
#CreatorInfo a:hover {
color:#FFF;
}
.calendar thead tr th.weekend,
.calendar thead tr th.weekday {
font-style:italic;

View File

@ -31,7 +31,6 @@ Refactoring. This is an ongoing job until this plugin is in a better shape.
TODO list:
- progress bar, rethink its usage
- in year navigation, use month in link, or 'fullyear'
- use standard Gramps method to display surname, see _get_regular_surname
- daylight saving not just for USA and Europe
- move the close_file() from one_day() to caller
"""
@ -79,6 +78,7 @@ from DateHandler import displayer as _dd
from DateHandler import parser as _dp
import libholiday
from libholiday import easter, dst
#------------------------------------------------------------------------
#
@ -169,38 +169,6 @@ _COPY_OPTIONS = [
_('No copyright notice'),
]
# Compute the first day to display for this month.
# It can also be a day in the previous month.
def get_first_day(year, month):
current_date = datetime.date(year, month, 1) # first day of the month
# monthinfo is filled using standard Python library
# calendar.monthcalendar. It fills a list of 7-day-lists. The first day
# of the 7-day-list is determined by calendar.firstweekday.
monthinfo = calendar.monthcalendar(year, month)
current_ord = current_date.toordinal() - monthinfo[0].count(0)
return current_date, current_ord, monthinfo
# get last month's last week for previous days in the month
def get_previous_day(year, month, day_col):
if month == 1:
prevmonth = calendar.monthcalendar(year - 1, 12)
else:
prevmonth = calendar.monthcalendar(year, month-1)
num_weeks = len(prevmonth)
lastweek_prevmonth = prevmonth[num_weeks - 1]
return lastweek_prevmonth[day_col]
# get next month's first week for next days in the month
def get_next_day(year, month, day_col):
if month == 12:
nextmonth = calendar.monthcalendar(year + 1, 1)
else:
nextmonth = calendar.monthcalendar(year, month + 1)
firstweek_nextmonth = nextmonth[0]
return firstweek_nextmonth[day_col]
#------------------------------------------------------------------------
#
# WebCalReport
@ -272,7 +240,6 @@ class WebCalReport(Report):
self.today = datetime.date(today[0], today[1], today[2])
self.warn_dir = True # Only give warning once.
self.imgs = []
# self.calendar is a dict; key is the month number
# Each entry in the dict is also a dict; key is the day number.
@ -356,10 +323,10 @@ class WebCalReport(Report):
def copy_calendar_files(self):
"""
Copies all the necessary files
Copies all the necessary stylesheets and images for these calendars
"""
# Copy the normal stylesheet
if self.css != "":
# Copy the screen stylesheet
if self.css:
fname = os.path.join(const.DATA_DIR, self.css)
self.copy_file(fname, self.css, "styles")
@ -367,27 +334,40 @@ class WebCalReport(Report):
fname = os.path.join(const.DATA_DIR, "Web_Print-Default.css")
self.copy_file(fname, "Web_Print-Default.css", "styles")
# set imgs to empty
imgs = []
if self.css == "Web_Mainz.css":
# Copy Mainz Style Images
imgs += ["Web_Mainz_Bkgd.png",
"Web_Mainz_Header.png",
"Web_Mainz_Mid.png",
"Web_Mainz_MidLight.png",
]
# Copy GRAMPS favicon
fname = os.path.join(const.IMAGE_DIR, "favicon.ico")
self.copy_file(fname, "favicon.ico", "images")
imgs += ['favicon.ico']
# copy copyright image
if 0 < self.copy < len(_CC):
fname = os.path.join(const.IMAGE_DIR, 'somerights20.gif')
self.copy_file(fname, 'somerights20.gif', 'images')
imgs += ['somerights20.gif']
for f in self.imgs:
from_path = os.path.join(const.IMAGE_DIR, f)
self.copy_file(from_path, f, "images")
for fname in imgs:
from_path = os.path.join(const.IMAGE_DIR, fname)
self.copy_file(from_path, fname, "images")
def display_month_navs(self, of, nr_up, year, currentsection, use_home=False):
def display_month_navs(self, of, nr_up, year, currentsection, use_home):
"""
Will create and display the navigation menu bar
use_home will produce a link to wherever you specify as a home link
cal is one of these:
od = one_day(), wc = normal_cal(), yg = year_glance(), by = blank_year()
of = calendar filename being created
nr_up = number of directories up to reach root directory
year = year being created
currentsection = month name being created for proper CSS styling
use_home = if this is creating a link to home
-- a link to root directory of website
"""
navs = []
@ -427,7 +407,7 @@ class WebCalReport(Report):
url = url_fname
if not url.startswith('http:'):
url = '/'.join(subdirs + [url_fname])
if not _has_webpage_extension(url):
if not url.endswith(self.ext):
url += self.ext
cs = cs and ' id="CurrentSection"' or ''
@ -439,6 +419,10 @@ class WebCalReport(Report):
def display_year_navs(self, of, nr_up, currentsection):
"""
This will create the year navigation menu bar
of = current calendar filename being created
nr_up = number of directories up to reach root directory
currentsection = proper styling of this navigation bar
"""
of.write('<div id="navigation">\n')
@ -483,15 +467,23 @@ class WebCalReport(Report):
of.write('\t</ul>\n')
of.write('</div>\n\n')
def calendar_common(self, of, nr_up, year, currsec1, title, use_home=False):
def calendar_common(self, of, nr_up, year, currentsection, title, use_home=False):
"""
Will create the common information for each calendar being created
of = current filename being created, can be either web_cal(), or year_glance()
nr_up = number of directories up to reach root directory/ self.html_dir
year = year being created
currentsection = current section for proper styling of display_month_navs()
title = title for this calendar
use_home = for display_month_navs() to display a link to home
-- home directory of website
"""
# Header Title
of.write('<div id="header">\n')
of.write('\t<h1 id="SiteTitle">%s</h1>\n' % title)
if self.author != '':
if self.author:
of.write('\t<p id="CreatorInfo">')
if self.email != '':
msg = _('Created for <a href="mailto:%(email)s?subject=WebCal">%(author)s</a>\n') % {
@ -515,7 +507,7 @@ class WebCalReport(Report):
# Create Month Navigation Menu
# identify currentsection for proper highlighting
self.display_month_navs(of, nr_up, year, currsec1, use_home)
self.display_month_navs(of, nr_up, year, currentsection, use_home)
of.write('<div class="content">\n')
@ -555,7 +547,7 @@ class WebCalReport(Report):
# seems appropriate for most countries.
month_name = full_month_name.capitalize()
th_txt = month_name
if cal == 'wc': # normal_cal()
if cal == 'wc': # web_cal()
if not self.multiyear:
th_txt = '%s %d' % (month_name, year)
of.write('<!-- %s -->\n\n' % month_name)
@ -578,7 +570,7 @@ class WebCalReport(Report):
# begin table body
of.write('\t<tbody>\n')
current_date, current_ord, monthinfo = get_first_day(year, month)
current_date, current_ord, monthinfo = get_first_day_of_month(year, month)
nweeks = len(monthinfo)
for week_row in range(0, nweeks):
@ -759,7 +751,7 @@ class WebCalReport(Report):
fname = os.path.join(self.html_dir, subdir, fname)
if not _has_webpage_extension(fname):
if not fname.endswith(self.ext):
fname += self.ext
destdir = os.path.dirname(fname)
@ -910,14 +902,6 @@ class WebCalReport(Report):
# TODO. Verify that we collect correct info based on start_year
self.collect_data(self.start_year)
if self.css == "Web_Mainz.css":
# Copy Mainz Style Images
self.imgs += ["Web_Mainz_Bkgd.png",
"Web_Mainz_Header.png",
"Web_Mainz_Mid.png",
"Web_Mainz_MidLight.png",
]
# Copy all files for the calendars being created
self.copy_calendar_files()
@ -948,7 +932,7 @@ class WebCalReport(Report):
self.start_month = self.today.month
# create "WebCal" calendar pages
self.normal_cal(cal_year)
self.web_cal(cal_year)
# create "Year At A Glance" and "One Day" calendar pages
if self.fullyear:
@ -975,7 +959,7 @@ class WebCalReport(Report):
self.start_month = self.today.month
# create "WebCal" calendar pages
self.normal_cal(cal_year)
self.web_cal(cal_year)
# create "Year At A Glance"
if self.fullyear:
@ -984,7 +968,7 @@ class WebCalReport(Report):
# Close the progress meter
self.progress.close()
def normal_cal(self, year):
def web_cal(self, year):
"""
This method provides information and header/ footer to the calendar month
@ -1039,12 +1023,6 @@ class WebCalReport(Report):
"""
This method runs through the data, and collects the relevant dates
and text.
TODO The use of living variable is too loosely and too liberable to be
properly used. It only checks to see i an individual was dead as of
January, 1, ????--see line 1147
if person is dead, then do nothing more!!!
"""
people = self.database.get_person_handles(sort_handles=False)
self.progress.set_pass(_('Applying Filter...'), len(people))
@ -1077,8 +1055,8 @@ class WebCalReport(Report):
prob_alive_date = gen.lib.Date(this_year, month, day)
# add some things to handle maiden name:
father_lastname = None # husband, actually
sex = person.get_gender()
father_surname = None # husband, actually
sex = person.gender
if sex == gen.lib.Person.FEMALE:
# get husband's last name:
@ -1095,9 +1073,9 @@ class WebCalReport(Report):
if father_handle:
father = self.database.get_person_from_handle(father_handle)
if father != None:
father_name = father.get_primary_name()
father_lastname = _get_regular_surname(sex, father_name)
short_name = _get_short_name(person, father_lastname)
father_name = father.primary_name
father_surname = _get_regular_surname(sex, father_name)
short_name = _get_short_name(person, father_surname)
alive = probably_alive(person, self.database, prob_alive_date)
text = _('%(short_name)s') % {'short_name' : short_name}
if (self.alive and alive) or not self.alive:
@ -1109,7 +1087,7 @@ class WebCalReport(Report):
fam = self.database.get_family_from_handle(fhandle)
father_handle = fam.get_father_handle()
mother_handle = fam.get_mother_handle()
if father_handle == person.get_handle():
if father_handle == person.handle:
spouse_handle = mother_handle
else:
continue # with next person if this was the marriage event
@ -1119,7 +1097,7 @@ class WebCalReport(Report):
spouse_name = _get_short_name(spouse)
short_name = _get_short_name(person)
are_married = get_marrital_status(fam, self.database)
are_married = get_marrital_status(self.database, fam)
if are_married is not None:
for event_ref in fam.get_event_ref_list():
event = self.database.get_event_from_handle(event_ref.ref)
@ -1132,7 +1110,7 @@ class WebCalReport(Report):
# determine if anniversary date is a valid date???
complete_date = False
if event_obj.get_valid():
if event_obj.is_valid():
complete_date = True
if complete_date:
@ -1386,18 +1364,16 @@ class WebCalOptions(MenuReportOptions):
else:
self.__end_year.set_available(False)
def _get_regular_surname(sex, name):
"""
Return a name string built from the components of the Name instance.
Returns a name string built from the components of the Name instance.
"""
surname = name.get_surname()
surname = name.surname
prefix = name.get_surname_prefix()
if prefix:
surname = prefix + " " + surname
if sex == gen.lib.Person.FEMALE:
pass
else:
if sex is not gen.lib.Person.FEMALE:
suffix = name.get_suffix()
if suffix:
surname = surname + ", " + suffix
@ -1436,31 +1412,6 @@ def _get_short_name(person, maiden_name=None):
first_name, rest = first_name.split(" ", 1) # just one split max
return ("%s %s" % (first_name, family_name)).strip()
def _get_marrital_status(family, db):
"""
Returns the marital status of two people, a couple
are_married will either be the marriage event or None if not married anymore
"""
are_married = None
for event_ref in family.get_event_ref_list():
event = db.get_event_from_handle(event_ref.ref)
if event.type in [gen.lib.EventType.MARRIAGE,
gen.lib.EventType.MARR_ALT]:
are_married = event
elif event.type in [gen.lib.EventType.DIVORCE,
gen.lib.EventType.ANNULMENT,
gen.lib.EventType.DIV_FILING]:
are_married = None
return are_married
def _has_webpage_extension(fname):
for ext in ('.html', '.htm' '.shtml', '.cgi', '.php', '.php3'):
if fname.endswith(ext):
return True
return False
# Simple utility list to convert Gramps day-of-week numbering to calendar.firstweekday numbering
_dow_gramps2iso = [ -1, calendar.SUNDAY, calendar.MONDAY, calendar.TUESDAY, calendar.WEDNESDAY, calendar.THURSDAY, calendar.FRIDAY, calendar.SATURDAY ]
@ -1470,7 +1421,7 @@ def _gramps2iso(dow):
# ISO: MON = 1
return (dow + 5) % 7 + 1
# define names for long and short month in GrampsLocale
# define names for full and abbreviated month names in GrampsLocale
_full_month_name = GrampsLocale.long_months
_abbr_month_name = GrampsLocale.short_months
@ -1484,7 +1435,8 @@ def get_day_list(event_date, holiday_list, bday_anniv_list):
"""
Will fill day_list and return it to its caller: calendar_build()
holiday_list, or bday_anniv_list -- will always have something in it...
holiday_list -- list of holidays for event_date
bday_anniv_list -- list of birthdays and anniversaries for event_date
event_date -- date for this day_list
@ -1525,8 +1477,7 @@ def get_day_list(event_date, holiday_list, bday_anniv_list):
if event == 'Birthday':
if nyears == 0:
txt_str = _('%(person)s, <em>birth</em>') % {
'person' : text}
txt_str = _('%(person)s, <em>birth</em>') % {'person' : text}
else:
txt_str = _('%(person)s, <em>%(age)s</em> old') % {
'person' : text, 'age' : age_str}
@ -1552,7 +1503,7 @@ def get_day_list(event_date, holiday_list, bday_anniv_list):
return day_list
def get_marrital_status(family, db):
def get_marrital_status(db, family):
"""
Returns the marital status of two people, a couple
@ -1571,12 +1522,43 @@ def get_marrital_status(family, db):
are_married = None
return are_married
def gen_key(event):
return ((event.get_year(), event.get_month(), event.get_day()))
# Compute the first day to display for this month.
# It can also be a day in the previous month.
def get_first_day_of_month(year, month):
current_date = datetime.date(year, month, 1) # first day of the month
# monthinfo is filled using standard Python library
# calendar.monthcalendar. It fills a list of 7-day-lists. The first day
# of the 7-day-list is determined by calendar.firstweekday.
monthinfo = calendar.monthcalendar(year, month)
current_ord = current_date.toordinal() - monthinfo[0].count(0)
return current_date, current_ord, monthinfo
# get last month's last week for previous days in the month
def get_previous_day(year, month, day_col):
if month == 1:
prevmonth = calendar.monthcalendar(year - 1, 12)
else:
prevmonth = calendar.monthcalendar(year, month-1)
num_weeks = len(prevmonth)
lastweek_prevmonth = prevmonth[num_weeks - 1]
previous_month_day= lastweek_prevmonth[day_col]
return previous_month_day
# get next month's first week for next days in the month
def get_next_day(year, month, day_col):
if month == 12:
nextmonth = calendar.monthcalendar(year + 1, 1)
else:
nextmonth = calendar.monthcalendar(year, month + 1)
firstweek_nextmonth = nextmonth[0]
next_month_day = firstweek_nextmonth[day_col]
return next_month_day
#-------------------------------------------------------------------------
#
#
# Register Plugin
#
#-------------------------------------------------------------------------
pmgr = PluginManager.get_instance()