Compare commits
4 Commits
master
...
TreeDoc-Te
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
96e715df2b | ||
|
|
0120572a7a | ||
|
|
ea58544530 | ||
|
|
c36b6c20c1 |
3
.gitignore
vendored
3
.gitignore
vendored
@ -7,6 +7,9 @@ build/
|
||||
dist/
|
||||
|
||||
# Gramps
|
||||
data/tips.xml
|
||||
data/holidays.xml
|
||||
po/.intltool-merge-cache
|
||||
docs/_build/
|
||||
|
||||
# Editing
|
||||
|
||||
143
.travis.yml
143
.travis.yml
@ -23,11 +23,16 @@
|
||||
# After changing this file, check it on:
|
||||
# http://lint.travis-ci.org/
|
||||
|
||||
os: linux
|
||||
dist: xenial
|
||||
sudo: required
|
||||
dist: trusty
|
||||
language: python
|
||||
python:
|
||||
- 3.5
|
||||
- 3.3 # This is irrelevant, because the virtualenv is not used at all
|
||||
|
||||
# FIXME: The minimum requirement for Gramps is Python 3.2, so a test environment
|
||||
# for Python 3.2 should be added to this environment which is Python 3.3. It
|
||||
# will not be possible to run coverage under Python 3.2, because coverage is
|
||||
# Python 3.3 (or above) only.
|
||||
|
||||
addons:
|
||||
apt:
|
||||
@ -46,7 +51,7 @@ addons:
|
||||
- python3-dev
|
||||
- python3-nose
|
||||
- python3-mock
|
||||
- python3-icu
|
||||
- python3-pyicu
|
||||
- python3-coverage
|
||||
- python3-jsonschema
|
||||
# lxml dependencies. for merge_ref_test to work
|
||||
@ -60,87 +65,65 @@ addons:
|
||||
# https://github.com/deanmalmgren/textract/issues/19
|
||||
- zlib1g-dev
|
||||
|
||||
stages:
|
||||
- test
|
||||
# Only execute deployment stage on tagged commits, and from our repository
|
||||
# (e.g. not PRs).
|
||||
- name: deploy
|
||||
if: tag IS PRESENT AND repo = gramps-project/gramps
|
||||
before_install:
|
||||
|
||||
env:
|
||||
global:
|
||||
- TWINE_USERNAME=__token__
|
||||
install:
|
||||
# The working directory is set to /home/travis/build/gramps-project/gramps
|
||||
# by the automatic git checkout.
|
||||
|
||||
jobs:
|
||||
include:
|
||||
- stage: test
|
||||
name: Run unit tests
|
||||
install:
|
||||
# The working directory is set to /home/travis/build/gramps-project/gramps
|
||||
# by the automatic git checkout.
|
||||
# Download Sean Ross-Ross's Pure Python module containing a framework to
|
||||
# manipulate and analyze python ast<73>s and bytecode. This is loaded to
|
||||
# /home/travis/build/gramps-project/gramps/meta
|
||||
# FIXME: This should be loaded from the release directory at
|
||||
# https://pypi.python.org/pypi/meta
|
||||
- git clone -b master https://github.com/srossross/meta
|
||||
|
||||
# Download Sean Ross-Ross's Pure Python module containing a framework to
|
||||
# manipulate and analyze python ast<73>s and bytecode. This is loaded to
|
||||
# /home/travis/build/gramps-project/gramps/meta
|
||||
# FIXME: This should be loaded from the release directory at
|
||||
# https://pypi.python.org/pypi/meta
|
||||
- git clone -b master https://github.com/srossross/meta
|
||||
# Build Gramps package. This seems to copy everything to
|
||||
# /home/travis/build/scripts-3.3
|
||||
- python setup.py build
|
||||
|
||||
# Build Gramps package. This seems to copy everything to
|
||||
# /home/travis/build/scripts-3.3
|
||||
- python setup.py build
|
||||
before_script:
|
||||
# Create the Gramps database directory.
|
||||
- mkdir -p ~/.gramps/grampsdb/
|
||||
# set PYTHONPATH so the directly installed module (meta) is picked up from
|
||||
# /home/travis/build/gramps-project/gramps/meta
|
||||
- export PYTHONPATH=meta
|
||||
# set module exclusions. --exclude=TestUser because of older version of mock
|
||||
# without configure_mock
|
||||
- export EXCLUDE="--exclude=TestcaseGenerator"
|
||||
# --exclude=merge_ref_test"
|
||||
# set GRAMPS_RESOURCES for locale, data,image and documentation
|
||||
- export GRAMPS_RESOURCES=.
|
||||
# Install addons
|
||||
- mkdir -p ~/.gramps/gramps51/plugins/
|
||||
- wget https://github.com/gramps-project/addons/raw/master/gramps51/download/CliMerge.addon.tgz
|
||||
- tar -C ~/.gramps/gramps51/plugins -xzf CliMerge.addon.tgz
|
||||
- wget https://github.com/gramps-project/addons/raw/master/gramps51/download/ExportRaw.addon.tgz
|
||||
- tar -C ~/.gramps/gramps51/plugins -xzf ExportRaw.addon.tgz
|
||||
|
||||
before_script:
|
||||
# Create the Gramps database directory.
|
||||
- mkdir -p ~/.gramps/grampsdb/
|
||||
# set PYTHONPATH so the directly installed module (meta) is picked up from
|
||||
# /home/travis/build/gramps-project/gramps/meta
|
||||
- export PYTHONPATH=meta
|
||||
# set module exclusions. --exclude=TestUser because of older version of mock
|
||||
# without configure_mock
|
||||
- export EXCLUDE="--exclude=TestcaseGenerator"
|
||||
# --exclude=merge_ref_test"
|
||||
# set GRAMPS_RESOURCES for locale, data,image and documentation
|
||||
- export GRAMPS_RESOURCES=.
|
||||
# Install addons
|
||||
- mkdir -p ~/.gramps/gramps52/plugins/
|
||||
- wget https://github.com/gramps-project/addons/raw/master/gramps52/download/CliMerge.addon.tgz
|
||||
- tar -C ~/.gramps/gramps52/plugins -xzf CliMerge.addon.tgz
|
||||
- wget https://github.com/gramps-project/addons/raw/master/gramps52/download/ExportRaw.addon.tgz
|
||||
- tar -C ~/.gramps/gramps52/plugins -xzf ExportRaw.addon.tgz
|
||||
script:
|
||||
# Ignore the virtualenv entirely. Use nosetests3, python3 (3.4.0) and coverage
|
||||
# from /usr/bin. Use libraries from /usr/lib/python3.4,
|
||||
# /usr/local/lib/python3.4/dist-packages and /usr/lib/python3/dist-packages
|
||||
- nosetests3 --nologcapture --with-coverage --cover-package=gramps $EXCLUDE
|
||||
gramps
|
||||
# FIXME: This should have run from the current directory, rather than from
|
||||
# gramps, because there is some test code in that directory.
|
||||
|
||||
script:
|
||||
# Ignore the virtualenv entirely. Use nosetests3, python3 (3.4.0) and coverage
|
||||
# from /usr/bin. Use libraries from /usr/lib/python3.4,
|
||||
# /usr/local/lib/python3.4/dist-packages and /usr/lib/python3/dist-packages
|
||||
- nosetests3 --nologcapture --with-coverage --cover-package=gramps $EXCLUDE
|
||||
gramps
|
||||
# FIXME: This should have run from the current directory, rather than from
|
||||
# gramps, because there is some test code in that directory.
|
||||
# give an error for any trailing whitespace
|
||||
- if git --no-pager grep --color -n --full-name '[ ]$' -- \*.py; then
|
||||
echo "ERROR - Trailing whitespace found in source file(s)";
|
||||
exit 1;
|
||||
fi
|
||||
|
||||
# give an error for any trailing whitespace
|
||||
- if git --no-pager grep --color -n --full-name '[ ]$' -- \*.py; then
|
||||
echo "ERROR - Trailing whitespace found in source file(s)";
|
||||
exit 1;
|
||||
fi
|
||||
after_success:
|
||||
# apt-get installs python3-coverage, but codecov only invokes coverage, so make
|
||||
# a link
|
||||
- sudo ln /usr/bin/python3-coverage /usr/bin/coverage
|
||||
|
||||
after_success:
|
||||
# apt-get installs python3-coverage, but codecov only invokes coverage, so make
|
||||
# a link
|
||||
- sudo ln /usr/bin/python3-coverage /usr/bin/coverage
|
||||
|
||||
# We have to use the bash script because the apt-get coverage does not install
|
||||
# codecov. If we used pip to install codecov, it would run inside the
|
||||
# virtualenv, and that doesn't work. Change the path to ensure that codecov
|
||||
# picks up coverage from /usr/bin, rather than from
|
||||
# /home/travis/virtualenv/python3.3.6/bin/
|
||||
- PATH=/usr/bin:$PATH bash <(curl -s https://codecov.io/bash)
|
||||
|
||||
# Deploy source distribution
|
||||
- stage: deploy
|
||||
name: Deploy source distribution and wheel
|
||||
install: skip
|
||||
script:
|
||||
- python3 setup.py sdist bdist_wheel
|
||||
- python3 -m pip install twine
|
||||
- python3 -m twine upload --repository testpypi --skip-existing dist/*
|
||||
# We have to use the bash script because the apt-get coverage does not install
|
||||
# codecov. If we used pip to install codecov, it would run inside the
|
||||
# virtualenv, and that doesn't work. Change the path to ensure that codecov
|
||||
# picks up coverage from /usr/bin, rather than from
|
||||
# /home/travis/virtualenv/python3.3.6/bin/
|
||||
- PATH=/usr/bin:$PATH bash <(curl -s https://codecov.io/bash)
|
||||
|
||||
499
ChangeLog
499
ChangeLog
@ -1,15 +1,80 @@
|
||||
2020-08-11 prculley <paulr2787@gmail.com>
|
||||
2019-09-14 SNoiraud <Serge.Noiraud@free.fr>
|
||||
|
||||
* po/ar.po, po/bg.po, po/br.po, po/ca.po, po/cs.po, po/da.po,
|
||||
po/el.po, po/en_GB.po, po/eo.po, po/es.po, po/fi.po, po/fr.po,
|
||||
po/ga.po, po/he.po, po/hr.po, po/hu.po, po/is.po, po/it.po,
|
||||
po/ja.po, po/lt.po, po/mk.po, po/nb.po, po/nl.po, po/nn.po,
|
||||
po/pl.po, po/pt_BR.po, po/pt_PT.po, po/ro.po, po/ru.po, po/sk.po,
|
||||
po/sl.po, po/sq.po, po/sr.po, po/sr_Latn.po, po/sv.po, po/ta.po,
|
||||
po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_HK.po, po/zh_TW.po:
|
||||
Remove duplicates in Translations
|
||||
* gramps/gen/filters/rules/place/_withinarea.py: Fix deprecation
|
||||
warning in withinarea rule
|
||||
|
||||
2020-08-10 prculley <paulr2787@gmail.com>
|
||||
2019-09-14 Nick Hall <nick-h@gramps-project.org>
|
||||
|
||||
* gramps/gui/grampsgui.py: Disable development warning message
|
||||
|
||||
2019-09-13 Jonas Hahnfeld <hahnjo@hahnjo.de>
|
||||
|
||||
* gramps/gen/plug/docgen/treedoc.py: Add options to sandclock in
|
||||
tree document generator This works and is actually needed to style the root node.
|
||||
|
||||
2019-09-11 SNoiraud <Serge.Noiraud@free.fr>
|
||||
|
||||
* gramps/gui/filters/sidebar/_personsidebarfilter.py: Using regex in
|
||||
the sidebar gives different result from previous gramps release. Fixes #11321
|
||||
|
||||
2019-09-12 Jérôme Rapinat <romjerome@yahoo.fr>
|
||||
|
||||
* po/fr.po: Add missing French translation strings
|
||||
|
||||
2019-09-10 Gil da Costa <gdacosta@sommier-colas.fr>
|
||||
|
||||
* po/fr.po: Update French translation
|
||||
|
||||
2019-09-09 prculley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/plugins/docgen/odfdoc.py: Fix odt output when db owner has
|
||||
XML unfriendly chars ('&') Fixes #11327
|
||||
|
||||
2019-09-11 John Bickmore <johnbickmore@users.noreply.github.com>
|
||||
|
||||
* README.md: Bump required Python version to 3.3 on Readme As mentioned on the release announcement
|
||||
|
||||
https://gramps-project.org/introduction-WP/2019/08/gramps-5-1-0-released/
|
||||
|
||||
2019-09-08 SNoiraud <Serge.Noiraud@free.fr>
|
||||
|
||||
* gramps/plugins/webreport/narrativeweb.py: Remove
|
||||
reload_custom_filters to conform to PR894
|
||||
|
||||
2019-09-07 prculley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/cli/grampscli.py: Fix CLI crash when generating reports Fixes #11318, #11213
|
||||
|
||||
2019-09-06 prculley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gui/views/listview.py: Fix Statusbar HandleError on merge
|
||||
families Fixes #11320, #11294, #11279
|
||||
|
||||
2019-09-12 Avi Markovitz <avi.markovitz@gmail.com>
|
||||
|
||||
* po/he.po: Update Hebrew translation
|
||||
|
||||
2019-09-12 Matti Niemelä <matti.u.niemela@gmail.com>
|
||||
|
||||
* po/fi.po: Fix translation in Finnish
|
||||
|
||||
2019-09-12 Matti Niemelä <matti.u.niemela@gmail.com>
|
||||
|
||||
* po/fi.po: Update finnish translation
|
||||
|
||||
2019-09-11 vantu5z <vantu5z@mail.ru>
|
||||
|
||||
* po/ru.po: update Russian translation
|
||||
|
||||
2019-09-10 pehlm <par.ekholm@pekholm.org>
|
||||
|
||||
* po/sv.po: Update Swedish translation
|
||||
|
||||
2019-09-10 Mirko Leonhaeuser <mirko@leonhaeuser.de>
|
||||
|
||||
* po/de.po: Update German translation
|
||||
|
||||
2019-09-10 Nick Hall <nick-h@gramps-project.org>
|
||||
|
||||
* po/ar.po, po/bg.po, po/br.po, po/ca.po, po/cs.po, po/da.po,
|
||||
po/de.po, po/el.po, po/en_GB.po, po/eo.po, po/es.po, po/fi.po,
|
||||
@ -18,385 +83,195 @@
|
||||
po/nn.po, po/pl.po, po/pt_BR.po, po/pt_PT.po, po/ro.po, po/ru.po,
|
||||
po/sk.po, po/sl.po, po/sq.po, po/sr.po, po/sr_Latn.po, po/sv.po,
|
||||
po/ta.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_HK.po,
|
||||
po/zh_TW.po: Clean up translations for Default/Home Person
|
||||
po/zh_TW.po: Merge po files and new template
|
||||
|
||||
2020-08-10 Leonhaeuser <mirko@leonhaeuser.de>
|
||||
2019-09-10 Nick Hall <nick-h@gramps-project.org>
|
||||
|
||||
* po/de.po: Update German translation
|
||||
* po/gramps.pot: Update translation template for new release
|
||||
|
||||
2020-08-10 Serge Noiraud <Serge.Noiraud@laposte.net>
|
||||
2019-08-27 Avi Markovitz <avi.markovitz@gmail.com>
|
||||
|
||||
* gramps/gui/views/treemodels/eventmodel.py: Events View: "Main
|
||||
Participants" column does not (#1075) show the full list of participants when expanded. Fixes #11805
|
||||
* po/he.po: Update Hebrew translation
|
||||
|
||||
2020-08-10 Paul Culley <paulr2787@gmail.com>
|
||||
2019-07-11 Pedro Albuquerque <palbuquerque73@gmail.com>
|
||||
|
||||
* po/pl.po: Fix Charts/Pedigreeview tooltip Polish translation
|
||||
(#1092) Fixes #11852
|
||||
* po/pt_PT.po: Update Portuguese (Europe) translation
|
||||
|
||||
2020-08-10 Krystian Safjan <ksafjan@gmail.com>
|
||||
2019-06-24 Milo Ivir <mail@milotype.de>
|
||||
|
||||
* po/gramps.pot, po/pl.po: Fix and add objects to Polish translation
|
||||
of Gramps (#1088)
|
||||
* po/hr.po: Update croatian translation - update with newest/current .pot file - translation is complete - corrections in wording and some missing accelerators
|
||||
|
||||
2020-08-06 John Ralls <jralls@ceridwen.us>
|
||||
2019-09-02 prculley <paulr2787@gmail.com>
|
||||
|
||||
* mac/gramps.modules: Use current Gtk release instead of Gtk-3.14.
|
||||
* gramps/gui/widgets/styledtexteditor.py: Fix missing tooltip
|
||||
translations in the Note editor toolbar Fixes #11289
|
||||
|
||||
2020-08-06 John Ralls <jralls@ceridwen.us>
|
||||
2019-09-01 SNoiraud <Serge.Noiraud@free.fr>
|
||||
|
||||
* mac/gramps.modules: Upgrade pymodules for Python 3.8
|
||||
compatibility.
|
||||
* gramps/gen/filters/rules/place/_withinarea.py: Avoid bad
|
||||
coordinates in the ref place
|
||||
|
||||
2020-07-09 prculley <paulr2787@gmail.com>
|
||||
2019-08-28 SNoiraud <Serge.Noiraud@free.fr>
|
||||
|
||||
* gramps/plugins/export/exportxml.py: Fix XML export when 'Group-as"
|
||||
name contains XML invalid chars Fixes #11834
|
||||
* gramps/gen/filters/rules/place/_withinarea.py: Avoid alphabetic
|
||||
characters in filter rules
|
||||
|
||||
2020-07-08 SNoiraud <serge.noiraud@laposte.net>
|
||||
2019-08-23 SNoiraud <Serge.Noiraud@free.fr>
|
||||
|
||||
* gramps/plugins/webreport/basepage.py: NarWeb: Province place-type
|
||||
is not displayed
|
||||
* gramps/gen/filters/rules/place/_withinarea.py: Could not convert
|
||||
string to float by using withinarea filter rule + difference between sidebar filter
|
||||
and filter rule + some pylint improvements
|
||||
|
||||
2020-07-07 prculley <paulr2787@gmail.com>
|
||||
2019-08-31 prculley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gui/managedwindow.py: Fix ManagedWindow so that new windows
|
||||
don't appear offscreen when system 'screen' sizes change in part
|
||||
time multi-monitor setups. Fixes #11831
|
||||
* gramps/gen/plug/docgen/graphdoc.py: Fix Graph outputs for multiple
|
||||
page PDF Postscript Fixes #11305
|
||||
|
||||
2020-07-03 prculley <paulr2787@gmail.com>
|
||||
2019-08-31 prculley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gui/viewmanager.py: Fix menus when db fails to open due to
|
||||
upgrade/downgrade etc. Fixes #11604
|
||||
* gramps/gen/plug/_pluginreg.py, gramps/gui/managedwindow.py,
|
||||
gramps/gui/plug/quick/_quickreports.py, gramps/gui/uimanager.py,
|
||||
gramps/gui/viewmanager.py, gramps/gui/views/tags.py,
|
||||
gramps/gui/widgets/grampletpane.py: Fix to make Gtk 'action names'
|
||||
always valid Fixes #11291
|
||||
|
||||
2020-07-03 prculley <paulr2787@gmail.com>
|
||||
2019-08-31 prculley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gui/plug/_windows.py: Fix issue with attach source tool,
|
||||
results panel Fixes #11780
|
||||
* gramps/gui/uimanager.py, gramps/gui/views/tags.py: Fix missing
|
||||
menus/buttons when operating in non-English languages Fixes #11292
|
||||
|
||||
2020-07-03 prculley <paulr2787@gmail.com>
|
||||
2019-08-31 SNoiraud <Serge.Noiraud@free.fr>
|
||||
|
||||
* gramps/plugins/export/exportgedcom.py: Fix GEDCOM export; don't
|
||||
include ADDR when address is missing Fixes #11825
|
||||
* gramps/gui/widgets/validatedmaskedentry.py: Cursor position error
|
||||
in lat and long fields Fixes #11310
|
||||
|
||||
2020-07-02 SNoiraud <serge.noiraud@laposte.net>
|
||||
2019-08-30 SNoiraud <Serge.Noiraud@free.fr>
|
||||
|
||||
* gramps/gui/editors/editplace.py,
|
||||
gramps/gui/editors/editplaceref.py: Coordinates containing a comma
|
||||
instead of a period Fixes #11823
|
||||
* gramps/plugins/tool/removespaces.py: Avoid all characters looking
|
||||
like a dash hyphen non breaking hyphen figure dash em dash horizontal bar Fixes #11308
|
||||
|
||||
2020-07-23 Leonhaeuser <mirko@leonhaeuser.de>
|
||||
2019-08-30 SNoiraud <Serge.Noiraud@free.fr>
|
||||
|
||||
* po/de.po: German translation fixed typo
|
||||
* data/css/Web_Mainz.css: Narrative web: Mainz Style sheet weird
|
||||
looking Fixes #11282
|
||||
|
||||
2020-07-17 niememat <niememat@gmail.com>
|
||||
2019-09-02 SNoiraud <Serge.Noiraud@free.fr>
|
||||
|
||||
* po/fi.po: Update finnish translation
|
||||
* gramps/plugins/view/relview.py: Set symbols for the active person
|
||||
|
||||
2020-06-07 Tian Shixiong <tiansworld@fedoraproject.org>
|
||||
2019-08-28 SNoiraud <Serge.Noiraud@free.fr>
|
||||
|
||||
* po/zh_CN.po: Update Simplified Chinese translation for gramps51
|
||||
branch
|
||||
* gramps/plugins/view/relview.py: Set good symbols for marriage,
|
||||
baptism, cremation and burial
|
||||
|
||||
2020-07-08 Serge Noiraud <Serge.Noiraud@laposte.net>
|
||||
2019-08-28 SNoiraud <Serge.Noiraud@free.fr>
|
||||
|
||||
* gramps/plugins/webreport/basepage.py,
|
||||
gramps/plugins/webreport/person.py,
|
||||
gramps/plugins/webreport/surname.py: NarrativeWeb should show
|
||||
patronymic in individuals (#1048) In the individuals and in surnames pages, we should show the
|
||||
complete name like defined in the display tab from the narrative web
|
||||
configuration. Fixes #04404
|
||||
* gramps/plugins/view/relview.py: Reduce the size of the sexuality
|
||||
symbol in relview Fixes #11295
|
||||
|
||||
2020-07-08 Serge Noiraud <Serge.Noiraud@laposte.net>
|
||||
2019-08-28 prculley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/plugins/webreport/person.py,
|
||||
gramps/plugins/webreport/place.py: Narrated Website Google Maps
|
||||
Output JS Warning (#1038) SensorNotRequired: The sensor parameter is no longer required for
|
||||
the Maps JavaScript API. It won't prevent the Maps JavaScript API
|
||||
from working correctly, but we recommend that you remove the sensor
|
||||
parameter from the script element. Fixes #011654
|
||||
* gramps/gui/widgets/styledtexteditor.py: Fix exception when editing
|
||||
Note with italics/bold etc. in non English Fixes #11284
|
||||
|
||||
2020-01-11 giansalvo <pioggia3+github@gmail.com>
|
||||
2019-08-27 Nick Hall <nick-h@gramps-project.org>
|
||||
|
||||
* gramps/gen/filters/rules/person/_isdefaultperson.py,
|
||||
gramps/gen/filters/rules/person/_islessthannthgenerationancestorofd
|
||||
efaultperson.py, gramps/gui/views/navigationview.py,
|
||||
gramps/plugins/lib/libpersonview.py,
|
||||
gramps/plugins/view/fanchartview.py,
|
||||
gramps/plugins/view/geoclose.py,
|
||||
gramps/plugins/view/geofamclose.py,
|
||||
gramps/plugins/view/geomoves.py, gramps/plugins/view/geoperson.py,
|
||||
gramps/plugins/view/pedigreeview.py,
|
||||
gramps/plugins/view/relview.py, po/ar.po, po/bg.po, po/br.po,
|
||||
po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/en_GB.po,
|
||||
po/eo.po, po/es.po, po/fi.po, po/fr.po, po/ga.po, po/gramps.pot,
|
||||
po/he.po, po/hr.po, po/hu.po, po/is.po, po/it.po, po/ja.po,
|
||||
po/lt.po, po/mk.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po,
|
||||
po/pt_BR.po, po/pt_PT.po, po/ro.po, po/ru.po, po/sk.po, po/sl.po,
|
||||
po/sq.po, po/sr.po, po/sr_Latn.po, po/sv.po, po/ta.po, po/tr.po,
|
||||
po/uk.po, po/vi.po, po/zh_CN.po, po/zh_HK.po, po/zh_TW.po: Fix bug
|
||||
0011078: 'Default person' instead of 'Home person' - modified button hints - modified filter rules names and descriptions - modified .pot and .po files - substituted 'home person' with 'Home Person'
|
||||
* gramps/gui/views/pageview.py: Restore keybindings for gramplet
|
||||
bars Resolves #11297.
|
||||
|
||||
2020-07-07 Leonhaeuser <mirko@leonhaeuser.de>
|
||||
2019-08-27 Nick Hall <nick-h@gramps-project.org>
|
||||
|
||||
* po/de.po: Germen fixed translation error of Media:
|
||||
* gramps/gui/plug/quick/_quickreports.py: Fix bug in web connection
|
||||
menu launching incorrect web site Resolves #11280.
|
||||
|
||||
2020-07-04 Leonhaeuser <mirko@leonhaeuser.de>
|
||||
2019-08-26 SNoiraud <Serge.Noiraud@free.fr>
|
||||
|
||||
* po/de.po: Fix typo
|
||||
* gramps/gui/autocomp.py: Translation problem when creating event
|
||||
filter If you create a filter with the rule name: "Events with a particular type" or "Events with <data>" The menu "Travel", "Academic"... are not
|
||||
translated Fixes #11293
|
||||
|
||||
2020-07-01 Leonhaeuser <mirko@leonhaeuser.de>
|
||||
2019-08-26 SNoiraud <Serge.Noiraud@free.fr>
|
||||
|
||||
* po/de.po: update German translation
|
||||
* gramps/gui/configure.py, gramps/gui/widgets/grampletbar.py: Error
|
||||
when checking option to add Quit to Taskbar Fixes #11290
|
||||
|
||||
2020-02-16 Nick Hall <nick-h@gramps-project.org>
|
||||
2019-08-25 SNoiraud <Serge.Noiraud@free.fr>
|
||||
|
||||
* gramps/gui/editors/editeventref.py: Use event attribute types in
|
||||
the event reference editor In the event reference editor, custom event attribute types should
|
||||
be used rather than the default person attribute types. Fixes #11576.
|
||||
* gramps/plugins/webreport/narrativeweb.py,
|
||||
gramps/plugins/webreport/person.py: Make the narratives notes
|
||||
placement an option From 5.1 the narrative notes are placed just after the name, gender
|
||||
and age at death. This follow the feature request #6772. Some
|
||||
people want to have this placement an option to have the same
|
||||
functionality as before Fixes #11283
|
||||
|
||||
2020-04-23 SNoiraud <serge.noiraud@laposte.net>
|
||||
2019-08-24 Ross Gammon <rossgammon@mail.dk>
|
||||
|
||||
* gramps/gui/configure.py, po/ar.po, po/bg.po, po/br.po, po/ca.po,
|
||||
po/cs.po, po/da.po, po/de.po, po/el.po, po/en_GB.po, po/eo.po,
|
||||
po/es.po, po/fi.po, po/fr.po, po/ga.po, po/he.po, po/hr.po,
|
||||
po/hu.po, po/is.po, po/it.po, po/ja.po, po/lt.po, po/mk.po,
|
||||
po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt_BR.po, po/pt_PT.po,
|
||||
po/ro.po, po/ru.po, po/sk.po, po/sl.po, po/sq.po, po/sr.po,
|
||||
po/sr_Latn.po, po/sv.po, po/ta.po, po/tr.po, po/uk.po, po/vi.po,
|
||||
po/zh_CN.po, po/zh_HK.po, po/zh_TW.po: Fix typo in gui/configure.py
|
||||
and translation files Fixes #11665
|
||||
* debian/changelog: Finalise Debian changelog for 5.1.0 release
|
||||
|
||||
2020-05-07 prculley <paulr2787@gmail.com>
|
||||
2019-08-24 Ross Gammon <rossgammon@mail.dk>
|
||||
|
||||
* gramps/plugins/tool/verify.py: Fix Verify tool bug caused by bad
|
||||
change in GObject introspection Fixes: #11708
|
||||
* debian/control: Bump gtk+ version to 3.12 & add
|
||||
gir1.2-geocodeglib-1.0 dependency
|
||||
|
||||
2020-06-22 pehlm <par.ekholm@pekholm.org>
|
||||
2019-08-24 Ross Gammon <rossgammon@mail.dk>
|
||||
|
||||
* po/sv.po: A little adjustment to Swedish translation
|
||||
* debian/copyright: Update copyrights
|
||||
|
||||
2020-06-21 pehlm <par.ekholm@pekholm.org>
|
||||
2019-08-24 Ross Gammon <rossgammon@mail.dk>
|
||||
|
||||
* po/sv.po: Updates to Swedish translation
|
||||
* debian/changelog, debian/control: Merge last 5.0.2 debian release
|
||||
information into 51 maintenance branch
|
||||
|
||||
2020-06-20 Nick Hall <nick-h@gramps-project.org>
|
||||
2019-08-23 Sebastian Schubert <schubert.seb@gmail.com>
|
||||
|
||||
* gramps/gen/utils/grampslocale.py: Remove Japanese from the
|
||||
incomplete translations Japanese now has a coverage of 83.2% which is above the 70%
|
||||
threshold.
|
||||
* README.md: Add optional fontconfig package to README.md
|
||||
|
||||
2020-06-20 Megumi Sakata <megumi.sakata.k@gmail.com>
|
||||
2019-08-23 Sebastian Schubert <schubert.seb@gmail.com>
|
||||
|
||||
* po/ja.po: Update Japanese translation
|
||||
* NEWS: Fix typo in NEWS
|
||||
|
||||
2020-06-07 Serge Noiraud <Serge.Noiraud@laposte.net>
|
||||
2019-08-30 Zdeněk Hataš <zdenek.hatas@gmail.com>
|
||||
|
||||
* gramps/plugins/webreport/person.py,
|
||||
gramps/plugins/webreport/place.py: Navweb: incorrect link type for
|
||||
osm css files (#1071) Fixes #011787
|
||||
* po/cs.po: Update Czech translation
|
||||
|
||||
2020-06-07 prculley <paulr2787@gmail.com>
|
||||
2019-08-29 Zdeněk Hataš <zdenek.hatas@gmail.com>
|
||||
|
||||
* data/tests/imp_sample.gramps: Fix import test for change cause by
|
||||
commit a2c66417 which was Fix GEDCOM import for bad source title
|
||||
when sources precede references.
|
||||
* po/cs.po: Update Czech translation
|
||||
|
||||
2020-06-07 prculley <paulr2787@gmail.com>
|
||||
2019-08-25 Mirko Leonhaeuser <mirko@leonhaeuser.de>
|
||||
|
||||
* : commit e614a79cef213f57552ceb566eb2d294c9435231 Author: vantu5z
|
||||
<vantu5z@mail.ru> Date: Tue Apr 28 15:23:25 2020 +0300
|
||||
* po/de.po: German translation updated
|
||||
|
||||
2020-03-16 prculley <paulr2787@gmail.com>
|
||||
2019-08-24 John Ralls <jralls@ceridwen.us>
|
||||
|
||||
* gramps/gen/plug/menu/_enumeratedlist.py: Fix some reports for CLI
|
||||
where warning message about Value not found Fixes #11621
|
||||
* mac/Info.plist, mac/gramps.modules: Release Gramps-5.1.0 on Mac.
|
||||
|
||||
2020-03-16 prculley <paulr2787@gmail.com>
|
||||
2019-08-16 John Ralls <jralls@ceridwen.us>
|
||||
|
||||
* gramps/cli/plug/__init__.py: Fix Genealogy Tree reports for crash
|
||||
in CLI Fixes #11621
|
||||
* mac/release.entitlements.plist: An entitlements plist for
|
||||
codesigning Gramps. Python is an interpreter and therefore needs to create executable
|
||||
memory. Since it doesn't know how to sign that memory it requires
|
||||
the allow-unsigned-executable-memory entitlement to run in a
|
||||
hardened runtime. One must apply this entitlement to both Gramps.app
|
||||
and Gramps.app/Contents/MacOS/dot when codesigning them.
|
||||
|
||||
2020-04-10 prculley <paulr2787@gmail.com>
|
||||
2019-06-11 John Ralls <jralls@ceridwen.us>
|
||||
|
||||
* gramps/gui/views/treemodels/treebasemodel.py: Add uistate to tree
|
||||
views filter initialization Fixes #11657
|
||||
* mac/gramps.modules: Fix graphviz and exiv2 download URLs.
|
||||
|
||||
2020-04-04 prculley <paulr2787@gmail.com>
|
||||
2019-06-11 John Ralls <jralls@ceridwen.us>
|
||||
|
||||
* gramps/plugins/lib/libgedcom.py: Fix GEDCOM import for bad source
|
||||
title when sources precede references. Fixes #11610
|
||||
* mac/gramps.modules: Update dependency versions and download paths.
|
||||
|
||||
2020-03-31 prculley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/plugins/tool/removeunused.py: Fix RemoveUnused tool for
|
||||
crash caused by Gtk introspection bug Fixes #11634
|
||||
|
||||
2020-03-30 prculley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gen/plug/_manager.py, gramps/gen/plug/_pluginreg.py,
|
||||
gramps/gui/pluginmanager.py,
|
||||
gramps/plugins/lib/maps/messagelayer.py: Fix some Python syntax
|
||||
errors that appear in v3.8.x Fixes #11641
|
||||
|
||||
2020-03-26 SNoiraud <serge.noiraud@laposte.net>
|
||||
|
||||
* gramps/gui/editors/displaytabs/eventrefmodel.py,
|
||||
gramps/plugins/gramplet/events.py: Age: test if the death is the
|
||||
same day as birth
|
||||
|
||||
2020-03-25 SNoiraud <serge.noiraud@laposte.net>
|
||||
|
||||
* gramps/gui/editors/displaytabs/eventrefmodel.py,
|
||||
gramps/plugins/gramplet/events.py: Suppress age = 0 days in events
|
||||
list If the reference event date is equal to the event date, don't show
|
||||
the age except if the date is estimated, calculated, ... Fixes #0007745
|
||||
|
||||
2020-03-23 prculley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gui/viewmanager.py: Fix Dashboard Gramplets to update
|
||||
during db close when not shown Fixes #11632
|
||||
|
||||
2020-03-14 prculley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/grampsapp.py: Fix Windows GUI mode startup for crash with
|
||||
some languages Fixes: #11612. #11490, #11518, #9179, #9201, #9266
|
||||
|
||||
2020-03-07 prculley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gen/db/generic.py, gramps/plugins/db/dbapi/dbapi.py: Fix
|
||||
dbapi to support "Abandon Changes & Quit" feature Fixes #11599
|
||||
|
||||
2020-02-08 prculley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gen/lib/grampstype.py: Fix GrampsType for comparison bug
|
||||
with empty string as one value Fixes #11563
|
||||
|
||||
2020-05-07 prculley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/plugins/tool/verify.py: Fix Verify tool bug caused by bad
|
||||
change in GObject introspection Fixes: #11708
|
||||
|
||||
2020-04-24 niememat <niememat@gmail.com>
|
||||
|
||||
* po/fi.po: Fix translation in Finnish
|
||||
|
||||
2020-04-18 Joan Creus <joan.creusandreu@gmail.com>
|
||||
|
||||
* po/ca.po: Updating Catalan translation
|
||||
|
||||
2020-04-18 Joan Creus <joan.creusandreu@gmail.com>
|
||||
|
||||
* po/ca.po: Updating Catalan translation
|
||||
|
||||
2020-01-20 prculley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gen/datehandler/__init__.py: Fix Date Display so that it
|
||||
uses LC_TIME if defined Fixes #11230
|
||||
|
||||
2020-01-12 prculley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gen/lib/styledtext.py,
|
||||
gramps/gen/lib/test/styledtext_test.py: Fix StyledText so serialize
|
||||
will match for style list order changes Fixes #11529
|
||||
|
||||
2020-01-08 prculley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gui/managedwindow.py: Try to fix exceptions on
|
||||
ManagedWindow close Issues #10252, #10642, #10821, #11163, #11440, #11476, #11482,
|
||||
#11508
|
||||
|
||||
2020-04-08 John Ralls <jralls@ceridwen.us>
|
||||
|
||||
* : Merge John Ralls's 'bug11639' into maintenance/gramps51
|
||||
|
||||
2020-04-04 Serge Noiraud <Serge.Noiraud@laposte.net>
|
||||
|
||||
* gramps/plugins/tool/verify.py: Same date of birth and death gives
|
||||
an error. (#1011) Fixes #011553
|
||||
|
||||
2020-04-04 Serge Noiraud <Serge.Noiraud@laposte.net>
|
||||
|
||||
* gramps/plugins/lib/maps/osmgps.py: Geography: add a popup for a
|
||||
bad tiles path (#1025)
|
||||
|
||||
2020-04-04 Serge Noiraud <Serge.Noiraud@laposte.net>
|
||||
|
||||
* gramps/plugins/webreport/narrativeweb.py: Narweb: image size limit
|
||||
doesn't match tooltip (#1004) Fixes #011536
|
||||
|
||||
2020-04-01 John Ralls <jralls@ceridwen.us>
|
||||
|
||||
* gramps/plugins/db/dbapi/sqlite.py: Protect SQLite3 locale from
|
||||
old-style Unicode locale characters. PySQLite3 requires that collation names have only ascii
|
||||
alphanumerics and _. ICU locales use old-style Unicode specifiers
|
||||
and passing them to create_locale will raise an exception. Translate
|
||||
those characters into underscores. Fixes #11639
|
||||
|
||||
2020-03-26 vantu5z <vantu5z@mail.ru>
|
||||
2019-08-22 vantu5z <vantu5z@mail.ru>
|
||||
|
||||
* po/ru.po: update Russian translation
|
||||
|
||||
2020-03-25 Translator5 <Translator5@users.noreply.github.com>
|
||||
2019-08-22 pehlm <par.ekholm@pekholm.org>
|
||||
|
||||
* po/ru.po: [Language: Russian] Maintenance/gramps51 (#1027) * some Russian translations updates Новый перевод для неких случаев, но
|
||||
улучшающие понимание и выглядит
|
||||
более уместно. Также применены
|
||||
русские переводы слов, которые
|
||||
использовали до того англицизмы
|
||||
* po/sv.po: Update Swedish translation with the new gramps.pot
|
||||
|
||||
2020-03-03 Joan Creus <joan.creusandreu@gmail.com>
|
||||
2019-08-21 prculley <paulr2787@gmail.com>
|
||||
|
||||
* po/ca.po: Updating Catalan translation
|
||||
|
||||
2020-02-29 Joan Creus <joan.creusandreu@gmail.com>
|
||||
|
||||
* po/ca.po: Updating Catalan translation
|
||||
|
||||
2020-02-25 Bernard Banko <beernarrd@gmail.com>
|
||||
|
||||
* po/sl.po: V&O changed to PZV to avoid ampersand
|
||||
|
||||
2020-02-07 pehlm <par.ekholm@pekholm.org>
|
||||
|
||||
* po/sv.po: Minor update to Swedish translation
|
||||
|
||||
2020-01-07 prculley <paulr2787@gmail.com>
|
||||
|
||||
* data/tests/exp_sample_ged.ged,
|
||||
gramps/plugins/export/exportgedcom.py: Fix GEDCOM export of
|
||||
estimated/calculated dates with modifers Fixes #11513
|
||||
|
||||
2020-01-11 Ross Gammon <rossgammon@mail.dk>
|
||||
|
||||
* debian/changelog: New debian release - update changelog
|
||||
|
||||
2020-01-31 vantu5z <vantu5z@mail.ru>
|
||||
|
||||
* po/ru.po: update Russian translation
|
||||
|
||||
2020-01-26 Bernard Banko <beernarrd@gmail.com>
|
||||
|
||||
* po/sl.po: Slovenian translation update
|
||||
|
||||
2020-01-23 prculley <paulr2787@gmail.com>
|
||||
|
||||
* po/ru.po: Fix typo in Russian translation
|
||||
|
||||
2020-01-21 système <romjerome@users.noreply.github.com>
|
||||
|
||||
* po/fr.po: typos in french translation #11534 #10534
|
||||
|
||||
2020-01-21 Fedik <getthesite@gmail.com>
|
||||
|
||||
* po/uk.po: Ukrainian translation update
|
||||
|
||||
2020-01-11 John Ralls <jralls@ceridwen.us>
|
||||
|
||||
* mac/Info.plist, mac/gramps.modules: Mac release of 5.1.2.
|
||||
|
||||
2020-01-10 prculley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gen/const.py, gramps/gui/grampsgui.py, gramps/version.py:
|
||||
Bump to v5.1.3
|
||||
* Bump to 5.1.1
|
||||
|
||||
|
||||
156
FAQ
156
FAQ
@ -1,7 +1,7 @@
|
||||
**** This is Gramps Frequently Asked Questions ****
|
||||
|
||||
The questions below frequently come up in mailing list discussions and forums.
|
||||
This list is by no means complete. If you would like to add questions/answers
|
||||
This list is by no means complete. If you would like to add questions/answers
|
||||
to this list, please email your suggestions to gramps-devel@lists.sf.net
|
||||
|
||||
|
||||
@ -65,13 +65,13 @@ to this list, please email your suggestions to gramps-devel@lists.sf.net
|
||||
|
||||
24. What is the maximum database size (bytes) Gramps can handle?
|
||||
|
||||
25. How many people can Gramps database handle?
|
||||
25. How many people can Gramps database handle?
|
||||
|
||||
26. My database is really big. Is there a way around loading all the data into memory?
|
||||
|
||||
27. Can I run Gramps from a database on a NFS share?
|
||||
|
||||
28. Is the database format portable?
|
||||
28. Why is the database format not portable?
|
||||
|
||||
==Bugs and requests==
|
||||
|
||||
@ -90,41 +90,37 @@ to this list, please email your suggestions to gramps-devel@lists.sf.net
|
||||
|
||||
1. What is Gramps?
|
||||
|
||||
Gramps is the Genealogical Research and Analysis Management Program System.
|
||||
In other words, it is a personal genealogy program letting you store, edit,
|
||||
and research genealogical data using the powers of your computer.
|
||||
Gramps is the Genealogical Research and Analysis Management Program System.
|
||||
In other words, it is a personal genealogy program letting you store, edit,
|
||||
and research genealogical data using the powers of your computer.
|
||||
|
||||
|
||||
2. Where do I get it and how much does it cost?
|
||||
|
||||
Gramps can be downloaded from http://sf.net/projects/gramps at no charge.
|
||||
Gramps is an Open Source project covered by the GNU General Public License.
|
||||
You have full access to the source code and are allowed to distribute the
|
||||
program and source code freely.
|
||||
Gramps can be downloaded from http://sf.net/projects/gramps at no charge.
|
||||
Gramps is an Open Source project covered by the GNU General Public License.
|
||||
You have full access to the source code and are allowed to distribute the
|
||||
program and source code freely.
|
||||
|
||||
|
||||
3. Does Gramps exist in other languages?
|
||||
|
||||
Yes. Although developed in English, Gramps is actively translated into dozens
|
||||
of languages including: Catalan, Chinese, Croatian, Czech, Danish, Dutch,
|
||||
Esperanto, Finnish, French, German, Greek, Hebrew, Hungarian, Icelandic,
|
||||
Italian, Japanese, Lithuanian, Norwegian, Portuguese, Russian, Serbian,
|
||||
Slovak, Slovenian, Spanish, Swedish, Ukrainian and Vietnamese.
|
||||
Note: See https://www.gramps-project.org/wiki/index.php/Template:Gramps_translations for more information.
|
||||
Yes, at the moment Gramps is translated in 15 languages
|
||||
|
||||
|
||||
4. How do I keep backups?
|
||||
|
||||
Use a recent version of Gramps! From 5.0.0 onwards there is an automatic backup utility.
|
||||
It is extremely important to keep backups of your data, and keep them in a safe place. Gramps has a specific portable file format which is small, and human readable, denoted by .gramps. If you have allowed this in the preferences (In Edit->Preferences->Family Tree menu), Gramps will keep a backup of your database on exit or on shedule (every 15 minutes, 30 minutes, 1 hour, 12 hours, or 1 day). You can copy this backup file from time to time to a save location (e.g. a USB stick).
|
||||
Note: The .gramps files are compressed. Clicking them will open Gramps. To see the XML select them and open them with a decompressing utility (like ark, gunzip), after which you can extract the XML file which is human readable.
|
||||
Use a recent version of Gramps! From 2.2.5 onwards there is an automatic backup utility.
|
||||
It is extremely important to keep backups of your data, and keep them in a safe place. Gramps has a specific portable file format which is small, and human readable, denoted by .gramps. If you have allowed this in the preferences (In Edit menu->Preferences->General), Gramps will keep a backup of your database on exit. You can copy this backup file from time to time to a save location (eg a usb stick).
|
||||
|
||||
Note: The .gramps files are compressed. Clicking them will open Gramps. To see the XML select them and open them with a decompressing utility (like ark, gunzip), after which you can extract the XML file which is human readable.
|
||||
Do not keep backups in GEDCOM. Not all information Gramps stores can be written in the GEDCOM. Hence, an export/import operation Gramps --> GEDCOM --> Gramps, will mean you lose data. Use the .gramps file format for backups!
|
||||
Do not keep backups in GRDB format. GRDB is a database, which might be computer dependent (read, not working on a different PC). Small damage to a GRDB file can also not be repaired. Use the .gramps file format for backups!
|
||||
|
||||
|
||||
5. Does Gramps support Unicode fonts? In particular, does it support non-Roman Unicode fonts?
|
||||
|
||||
Yes. Gramps works internally with Unicode (UTF-8), so all alphabets can be used on all entry fields. All reports fully support this, although for PDF/PS you need to work with gnome-print or OpenOffice.
|
||||
Note: To use genealogical symbols you must install a font that provides the miscellaneous symbols in the unicode range 2600-26FF.
|
||||
Yes. Gramps works internally with Unicode (UTF-8), so all alphabets can be used on all entry fields. All reports fully support this, although for PDF/PS you need to work with gnome-print or openoffice.
|
||||
|
||||
==Installation==
|
||||
|
||||
@ -144,7 +140,7 @@ An Windows installer is available for 32 and 64 bit versions of windows from Win
|
||||
|
||||
The Fink project has ported some older versions of Gramps to OS X (tm). The Mac OS X port is not directly supported by the Gramps project, primarily because none of the Gramps developers have access to Mac OS X and because OS X is not Free Software.
|
||||
|
||||
This present version of Gramps (2.2.x) does not appear to have been ported by the Fink project. Please contact the Fink project for more information. However, some users had success in installing 2.2.x on Mac OSX either running in native mode or running on X11 using some of the fink packages.
|
||||
This present version of Gramps (2.2.x) does not appear to have been ported by the Fink project. Please contact the Fink project for more information. However, some users had success in installing 2.2.x on Mac OSX either running in native mode or running on X11 using some of the fink packages.
|
||||
|
||||
|
||||
9. What are the Minimum Specs to run Gramps?
|
||||
@ -156,7 +152,7 @@ We would recommend at least an 800x600 video display. For Gramps 5.x, Gramps can
|
||||
|
||||
10. Can I change the dates in reports to 'day month year'
|
||||
|
||||
Yes, change in the preferences ("Edit->Preferences") the date for Gramps to the required format (e.g. 'YYYY-MM-DD' or 'day month year'), and make the report. Your global date preferences will be used.
|
||||
Yes, change in the preferences ("Edit->Preferences") the date for Gramps to the required format (eg YYYY-MM-DD or day mont year), and make the report. Your global date preferences will be used.
|
||||
|
||||
|
||||
==Collaboration-Portability==
|
||||
@ -185,7 +181,7 @@ The nice thing about standards is that there never is a shortage of them. Gramps
|
||||
|
||||
15. How do I import data from another genealogy program into Gramps?
|
||||
|
||||
The best way is to create a new Gramps database file, and select the import option in the file menu. Here you select the GEDCOM you generated with the other program, and import it.
|
||||
The best way is to create a new gramps database file, and select the import option in the file menu. Here you select the GEDCOM you generated with the other program, and import it.
|
||||
|
||||
|
||||
16. Can I install Gramps on a Linux Web Server and use it via a web browser? This would enable my relations worldwide to access and update it.
|
||||
@ -203,15 +199,15 @@ You may also want to consider the effects of possible downtime of your site if y
|
||||
|
||||
17. Can Gramps print a genealogical tree for my family?
|
||||
|
||||
Yes. Different people have different ideas of what a genealogical tree is.
|
||||
Some think of it as a chart going from the distant ancestor and listing
|
||||
all his/her descendants and their families. Others think it should be a
|
||||
chart going from the person back in time, listing the ancestors and their
|
||||
families. Yet other people think of a table, text report, etc.
|
||||
Yes. Different people have different ideas of what a genealogical tree is.
|
||||
Some think of it as a chart going from the distant ancestor and listing
|
||||
all his/her descendants and their families. Others think it should be a
|
||||
chart going from the person back in time, listing the ancestors and their
|
||||
families. Yet other people think of a table, text report, etc.
|
||||
|
||||
Gramps can produce any of the above, and many more different charts and
|
||||
reports. Moreover, the plugin architechture enables users (you) to create
|
||||
their own plugins which could be new reports, charts, or research tools.
|
||||
Gramps can produce any of the above, and many more different charts and
|
||||
reports. Moreover, the plugin architechture enables users (you) to create
|
||||
their own plugins which could be new reports, charts, or research tools.
|
||||
|
||||
|
||||
18. In what formats can Gramps output its reports?
|
||||
@ -219,33 +215,33 @@ their own plugins which could be new reports, charts, or research tools.
|
||||
Text reports are available in HTML, PDF, ODT, LaTeX, and RTF formats. Graphical reports (charts and diagrams) are available in PostScript, PDF, SVG, ODS, and Graphviz formats.
|
||||
|
||||
|
||||
19. How can I change the default language in reports?
|
||||
19. How can I change the default language in reports?
|
||||
|
||||
The reports are in the language of your Linux installation. You can change it by installing extra language packs, see [Howto: Change the language of reports] on wiki.
|
||||
The reports are in the language of your linux installation. You can change it by installing extra language packs, see [Howto: Change the language of reports] on wiki.
|
||||
|
||||
|
||||
20. Is Gramps compatible with the Internet?
|
||||
|
||||
Gramps can store web addresses and direct your browser to them. It can import
|
||||
data that you download from the Internet. It can export data that you could
|
||||
send over the Internet. Gramps is familiar with the standard file formats
|
||||
widely used on the Internet (e.g. JPEG, PNG, and GIF images, MP3, OGG, and
|
||||
WAV sound files, QuickTime, MPEG, and AVI movie files, etc). Other than that,
|
||||
there is little that a genealogical program can do with the Internet :-)
|
||||
data that you download from the Internet. It can export data that you could
|
||||
send over the Internet. Gramps is familiar with the standard file formats
|
||||
widely used on the Internet (e.g. JPEG, PNG, and GIF images, MP3, OGG, and
|
||||
WAV sound files, QuickTime, MPEG, and AVI movie files, etc). Other than that,
|
||||
there is little that a genealogical program can do with the Internet :-)
|
||||
|
||||
|
||||
21. Can I create custom reports/filters/whatever?
|
||||
|
||||
Yes. There are many levels of customization. One is creating or modifying
|
||||
the templates used for the reports. This gives you some control over
|
||||
the fonts, colors, and some layout of the reports. You can also use Gramps
|
||||
controls in the report dialogs to tell what contents should be used for a
|
||||
particular report. In addition to this, you have an ability to create your
|
||||
own filters -- this is useful in selecting people based on criteria set
|
||||
by you. You can combine these filters to create new, more complex filters.
|
||||
Finally, you have an option to create your own plugins. These may be new
|
||||
reports, research tools, import/export filters, etc. This assumes some
|
||||
knowledge of programming in Python.
|
||||
Yes. There are many levels of customization. One is creating or modifying
|
||||
the templates used for the reports. This gives you some control over
|
||||
the fonts, colors, and some layout of the reports. You can also use Gramps
|
||||
controls in the report dialogs to tell what contents should be used for a
|
||||
particular report. In addition to this, you have an ability to create your
|
||||
own filters -- this is useful in selecting people based on criteria set
|
||||
by you. You can combine these filters to create new, more complex filters.
|
||||
Finally, you have an option to create your own plugins. These may be new
|
||||
reports, research tools, import/export filters, etc. This assumes some
|
||||
knowledge of programming in Python.
|
||||
|
||||
|
||||
22. Why are non-latin characters displayed as garbage in PDF/PS reports?
|
||||
@ -269,17 +265,17 @@ If you are happy with your plugin and would like to contribute your code back to
|
||||
|
||||
24. What is the maximum database size (bytes) Gramps can handle?
|
||||
|
||||
Gramps has no hard limits on the size of a database that it can handle. Starting with 2.0.0 release, Gramps no longer loads all data into memory, which allows it to work with a much larger database than before. In reality, however, there are practical limits. The main limiting factors are the available memory on the system. With common memory sizes these days, Gramps should have no problem using databases with tens of thousands of people.
|
||||
Gramps has no hard limits on the size of a database that it can handle. Starting with 2.0.0 release, Gramps no longer loads all data into memory, which allows it to work with a much larger database than before. In reality, however, there are practical limits. The main limiting factors are the available memory on the system and the cache size used for BSDDB database access. With common memory sizes these days, Gramps should have no problem using databases with tens of thousands of people.
|
||||
|
||||
|
||||
25. How many people can Gramps database handle?
|
||||
25. How many people can Gramps database handle?
|
||||
|
||||
See above. Again, this is dependent on how much memory you have, see [Gramps Performance] on wiki.
|
||||
|
||||
|
||||
26. My database is really big. Is there a way around loading all the data into memory?
|
||||
|
||||
Starting with 2.0.0 release, Gramps no longer loads all data into memory, which allows it to work with a much larger database than before.
|
||||
Starting with 2.0.0 release, Gramps no longer loads all data into memory, which allows it to work with a much larger database than before. The fileformat used is .grdb which means gramps database.
|
||||
|
||||
|
||||
27. Can I run Gramps from a database on a NFS share?
|
||||
@ -287,45 +283,55 @@ Starting with 2.0.0 release, Gramps no longer loads all data into memory, which
|
||||
Yes you can.
|
||||
|
||||
|
||||
28. Is the database format portable?
|
||||
28. Why is the database format not portable?
|
||||
|
||||
Prior to 5.0, Gramps used BSDDB as its database backend. The BSDDB database
|
||||
format is not portable.
|
||||
The biggest issue with Gramps portability lies with 'transactions'. With
|
||||
Gramps 2.2, we added support for atomic transactions to protect data.
|
||||
With atomic transactions, multiple changes are committed as a single
|
||||
unit. Either all the changes make it, or none of the changes make it.
|
||||
You are never left in a situation with a partial set of changes. A side
|
||||
benefit of using transactions is that database access (reads and writes)
|
||||
are faster.
|
||||
|
||||
Starting with 5.0, Gramps allowed the user to choose from other datbase
|
||||
backends, including SqLite. The SqLite database format is portable.
|
||||
The problem with transactions (at least using BSDDB) is that it does not
|
||||
allow all the data to be stored in a single file. Logging files are
|
||||
needed to keep track of things. These logging files are kept in a DB
|
||||
Environment directory. We need a separate directory for each file,
|
||||
otherwise the log files can interfere with each other.
|
||||
|
||||
In 2.2, we keep the log files under the ~/.gramps/ path directory,
|
||||
creating a unique directory for each database. The problem is that your
|
||||
GRDB file needs the log files, which are in a different directory.
|
||||
Copying the GRDB file is only copying a portion of the database.
|
||||
|
||||
As of 5.2, the BSDDB backend is no longer available. SqLite is used by default.
|
||||
|
||||
==Bugs and requests==
|
||||
|
||||
29. I found a bug and I want it fixed right now! What do I do?
|
||||
|
||||
The best thing you can do is to fix the bug and submit a pull request on
|
||||
GitHub :-)
|
||||
The best thing you can do is to fix the bug and send the patch to
|
||||
gramps-devel@lists.sf.net :-)
|
||||
|
||||
The next best thing would be to submit a good bug report. This can be done by
|
||||
filing your report with the bug tracker system at
|
||||
https://gramps-project.org/bugs/ (this function is also
|
||||
available by selecting "Help->Report a bug" from Gramps main menu).
|
||||
The next best thing would be to submit a good bug report. This can be done in
|
||||
one of the two ways: (1) send your report to gramps-bugs@lists.sf.net
|
||||
or (2) file your report with the bug tracker system at
|
||||
https://gramps-project.org/bugs/ (this function is also
|
||||
available by selecting "Help->Report a bug" from gramps main menu).
|
||||
|
||||
You may also discuss the problem first on our mailing list or Discourse forum.
|
||||
https://gramps-project.org/blog/contact
|
||||
|
||||
A good bug report would include:
|
||||
(1) Version of Gramps you were using when you encountered the bug
|
||||
A good bug report would include:
|
||||
(1) Version of gramps you were using when you encountered the bug
|
||||
(available through Help->About menu item)
|
||||
(2) Language under which Gramps was run
|
||||
(also available through Help->About menu item)
|
||||
(2) Language under which gramps was run
|
||||
(available by executing "echo $LANG" in your terminal)
|
||||
(3) Symptoms indicating that this is indeed a bug
|
||||
(4) Any Traceback messages, error messages, warnings, etc, that showed up
|
||||
in your terminal or a in separate traceback window
|
||||
|
||||
Most problems can be fixed quickly provided there is enough information.
|
||||
To ensure this, please follow up on your bug reports.
|
||||
Most problems can be fixed quickly provided there is enough information.
|
||||
To ensure this, please follow up on your bug reports.
|
||||
|
||||
If the above explanations seem vague, please follow this link:
|
||||
https://www.chiark.greenend.org.uk/~sgtatham/bugs.html
|
||||
http://www.chiark.greenend.org.uk/~sgtatham/bugs.html
|
||||
|
||||
|
||||
30. Gramps should be a .... type of application
|
||||
@ -333,7 +339,7 @@ https://www.chiark.greenend.org.uk/~sgtatham/bugs.html
|
||||
The surest way to see it happen is to get it done by yourself. Since Gramps is free/open source, nobody prevents you from taking all of the code and continuing its development in whatever direction you see fit. In doing so, you may consider giving your new project another name to avoid confusion with the continuing Gramps development. If you would like the Gramps project to provide advice, expertise, filters, etc., we will gladly cooperate with your new project, to ensure compatibility or import/export options to your new format of a project.
|
||||
|
||||
If, however, you would like the Gramps project to adopt your strategy, you would need to convince Gramps developers that your strategy is good for Gramps and superior to the present development strategy.
|
||||
|
||||
|
||||
HINT: if Gramps developers are still not convinced after about three
|
||||
messages sent to gramps-devel, maybe you are better off on your own
|
||||
rather than with a company of retards who can't fully realize the
|
||||
|
||||
38
INSTALL
38
INSTALL
@ -9,32 +9,29 @@ you need to remove the old version first. You can delete the old
|
||||
version by deleting the installed directories. For example, if your installation prefix is /usr/local, remove the following:
|
||||
/usr/local/share/gramps
|
||||
/usr/local/lib/pythonx.x/site-packages/gramps
|
||||
|
||||
If you installed with a package manager you might instead need to remove
|
||||
/usr/local/lib/pythonx.x/dist-packages/gramps
|
||||
|
||||
replacing pythonx.x with the Python version you used, e.g. python3.5.
|
||||
Also remove any gramps .egg files that are installed along with the Gramps
|
||||
replacing pythonx.x with the python version you used, e.g. python3.4.
|
||||
Also remove any gramps .egg files that are installed along with the gramps
|
||||
directory and the file /usr/local/bin/gramps.
|
||||
|
||||
|
||||
If you don't know the list of all files that Gramps installed, you can
|
||||
reinstall it with the --record option, and take a look at the list this
|
||||
produces (so python setup.py install --record grampsfiles.txt
|
||||
|
||||
Gramps is a Python application, so loading happens on reading the
|
||||
Gramps is a python application, so loading happens on reading the
|
||||
files, meaning that files of a previous version that are no longer
|
||||
present in the new version can still be loaded, making the new install
|
||||
unstable!
|
||||
|
||||
Distutils install
|
||||
distutils install
|
||||
-----------------
|
||||
We do not check all dependencies of Gramps, see README for a list of
|
||||
all required and optional dependencies. Missing dependencies will
|
||||
result in runtime errors.
|
||||
|
||||
To install all needed dependencies you can use (in Ubuntu):
|
||||
sudo apt-get build-dep gramps
|
||||
|
||||
To build and install, whether from a tarball or git repo:
|
||||
python3 setup.py build
|
||||
sudo python3 setup.py install
|
||||
@ -42,7 +39,7 @@ To build and install, whether from a tarball or git repo:
|
||||
You can avoid using sudo for the install step by specifying a prefix to which you have write priviledge. The default is /usr/local, which is usually owned by root. You can learn of more options with
|
||||
python3 setup.py --help
|
||||
|
||||
One can use Gramps from the command line without installing it by
|
||||
One can use gramps from the command line without installing it by
|
||||
setting the following environment variables, but that won't provide
|
||||
things like MIME type and desktop entries.
|
||||
|
||||
@ -51,19 +48,20 @@ things like MIME type and desktop entries.
|
||||
|
||||
See below for ways to invoke Gramps.
|
||||
|
||||
Typical install directories in linux (Ubuntu) are:
|
||||
* /usr/local/bin : the Gramps executable
|
||||
* /usr/local/lib/python3.5/dist-packages/gramps/ : the Gramps python module
|
||||
* /usr/local/share/doc/gramps : documentation, also example .gramps and .gedcom
|
||||
* /usr/local/share/icons/gnome : our icons
|
||||
* /usr/local/share/locale/xx/LC_MESSAGES : xx language code, translation
|
||||
* /usr/local/share/man/xx/man1 : xx language code, man file
|
||||
Typical install directories in linux (ubuntu) are:
|
||||
* /usr/local/lib/python3.4/dist-packages/gramps/ : the gramps python module
|
||||
* /usr/local/share/mime-info : mime info so gramps opens files automatically
|
||||
* /usr/local/share/icons/gnome : our icons
|
||||
* /usr/local/share/doc/gramps : documentation, also example .gramps and .gedcom
|
||||
* /usr/local/bin : the gramps executable
|
||||
* /usr/local/share/locale/xx/LC_MESSAGES : xx language code, translation
|
||||
* /usr/local/share/man/man1/xx/man1 : xx language code, man file
|
||||
* /usr/local/share/mime
|
||||
* /usr/local/share/mime-info : mime info so Gramps opens files automatically
|
||||
* /usr/local/share/mime-info
|
||||
|
||||
Running Gramps
|
||||
--------------
|
||||
Gramps is Python only, so no compilation is needed, you can even run Gramps
|
||||
Gramps is python only, so no compilation is needed, you can even run gramps
|
||||
from the source directory.
|
||||
|
||||
a) You installed Gramps, then you can run it with the command
|
||||
@ -78,7 +76,7 @@ from the source directory.
|
||||
The executable 'gramps' in /usr/local/bin or /usr/bin from a) does
|
||||
this for you.
|
||||
|
||||
c) You downloaded the Gramps source code to a directory, and want to run it.
|
||||
b) You downloaded the Gramps source code to a directory, and want to run it.
|
||||
You can start Gramps from the source code directory with
|
||||
|
||||
python3 Gramps.py
|
||||
@ -89,7 +87,7 @@ from the source directory.
|
||||
Custom directory installation
|
||||
-------------------------------------
|
||||
If you would like to install Gramps without being root, or in an
|
||||
alternative location on Windows, supply the --root argument to setup.py
|
||||
alternative location on windows, supply the --root argument to setup.py
|
||||
|
||||
For example:
|
||||
python3 setup.py install --root ~/test
|
||||
|
||||
@ -22,6 +22,9 @@ recursive-include test *
|
||||
recursive-include windows *
|
||||
|
||||
# Remove files created in the build
|
||||
exclude data/tips.xml
|
||||
exclude data/holidays.xml
|
||||
exclude po/.intltool-merge-cache
|
||||
global-exclude *.pyc
|
||||
global-exclude *.pyo
|
||||
|
||||
|
||||
122
NEWS
122
NEWS
@ -1,125 +1,3 @@
|
||||
2020-08-11
|
||||
Version 5.1.3
|
||||
* Update ca, de, fi, fr, ja, pl, ru, sl, sv, uk, zh_CN translation
|
||||
* Events View: "Main Participants" column does not show the full list
|
||||
of participants when expanded.
|
||||
* mac/gramps.modules: Use current Gtk release instead of Gtk-3.14.
|
||||
* mac/gramps.modules: Upgrade pymodules for Python 3.8 compatibility.
|
||||
* Fix XML export when 'Group-as" name contains XML invalid chars
|
||||
* Fix NarWeb: Province place-type is not displayed
|
||||
* Fix ManagedWindow so that new windows don't appear offscreen when
|
||||
system 'screen' sizes change in part time multi-monitor setups.
|
||||
* Fix menus when db fails to open due to upgrade/downgrade etc.
|
||||
* Fix issue with attach source tool, results panel
|
||||
* Fix GEDCOM export; don't include ADDR when address is missing
|
||||
* EditPlace: Allow Coordinates containing a comma instead of a period
|
||||
* NarrativeWeb:
|
||||
* Should show patronymic in individuals.
|
||||
In the individuals and in surnames pages, we should show the
|
||||
complete name like defined in the display tab from the narrative web
|
||||
configuration.
|
||||
* Fix Narrated Website Google Maps Output JS Warning SensorNotRequired
|
||||
* Fix incorrect link type for osm css files
|
||||
* Fix image size limit doesn't match tooltip
|
||||
* Update all translations for changes from 'Default' to 'Home' Person
|
||||
* Change GUI references to 'Home Person' instead of 'Default Person'
|
||||
* Use event attribute types in the event reference editor.
|
||||
In the event reference editor, custom event attribute types should
|
||||
be used rather than the default person attribute types.
|
||||
* Fix Verify tool bug caused by bad change in GObject introspection
|
||||
* Fix RemoveUnused tool for crash caused by Gtk introspection bug
|
||||
* Fix import test for change cause by previous change which was:
|
||||
Fix GEDCOM import for bad source title when sources precede references.
|
||||
* Fix GEDCOM import for bad source title when sources precede references.
|
||||
* Fix some reports for CLI where warning message about Value not found
|
||||
* Fix Genealogy Tree reports for crash in CLI
|
||||
* Add uistate to tree views filter initialization
|
||||
* Fix some Python syntax errors that appear in v3.8.x
|
||||
* Suppress age = 0 days in events list. If the reference event date is equal
|
||||
to the event date, don't show the age except if the date is estimated,
|
||||
calculated, etc.
|
||||
* Fix Dashboard Gramplets to update during db close when not shown
|
||||
* Fix Windows GUI mode startup for crash with some languages
|
||||
* Fix dbapi to support "Abandon Changes & Quit" feature
|
||||
* Fix GrampsType for comparison bug with empty string as one value
|
||||
* Fix Date Display so that it uses LC_TIME if defined
|
||||
* Fix StyledText so serialize will match for style list order changes
|
||||
* Try to fix exceptions on ManagedWindow close
|
||||
* Fix Mac SQLite3 locale bug when locale contains non-ascii characters
|
||||
* Fix issue when Person has Same date of birth and death; gives an error.
|
||||
* Geography: add a popup for a bad tiles path
|
||||
* Fix GEDCOM export of estimated/calculated dates with modifers
|
||||
* Bump to v5.1.3
|
||||
|
||||
2020-01-14
|
||||
Version 5.1.2
|
||||
* Narweb: Private notes for home, intro and contact. If the notes are private,
|
||||
we can't use them in these pages.
|
||||
* Referenced regions problems. When image width > 800, the referenced
|
||||
regions are incorrectly placed
|
||||
* Ancestor's tree display looks weird Solves the following:
|
||||
- Person boxes overlap
|
||||
- Some person boxes partially visible or hidden
|
||||
* some cleanup in ancestortree.css
|
||||
* ancestor tree and long names.
|
||||
* Adapt ancestor tree css file for all themes
|
||||
* dates not localised in place pages
|
||||
* Mainz problem with short text in one note, Issue occurs on the homepage
|
||||
and introduction page.
|
||||
* bad event links on media pages
|
||||
* Navweb: Don't use media regions in some case:
|
||||
- If we don't show families
|
||||
- If we don't show events
|
||||
- Don't show the media regions for a thumbnail
|
||||
* WEBCAL: home link translated to lowercase
|
||||
* Wrong web calendar title on home page. This solves the possibility to
|
||||
have ">", "<" in the title
|
||||
* Update LDS Temple list
|
||||
* Make GuiDestinationOption Folder Icon start in users directory
|
||||
* Allow import file filter to accept case insensitive extensions
|
||||
* Fix db to warn/prevent opening newer schema versions
|
||||
* Fix Progen import dialog and progress meter for correct parent window
|
||||
* Fix Progen import to correctly handle AKA surnames
|
||||
* Fix ExportPkg so errors are not lost, and has progress bar for media
|
||||
* Fix Export Assistant so error messages get correct parent window
|
||||
* Fix GEDCOM import when family is missing; import created a missing note
|
||||
* Fix Dashboard for adding Gramplet crash in Slovenian
|
||||
* Update cs, ca, fr, uk, he, fi, hr, de, sv translation
|
||||
* Update date parsing for czech locale
|
||||
* Fix Spanish translation for dates
|
||||
* fix private proxy tagref support. Add missing code for event, repository,
|
||||
source, citation and place
|
||||
* [Tree doc Tex] fix "-" char on place name "-" can lead to confusion,
|
||||
generating text out of the box with PDF file format
|
||||
* [Tree doc Tex] fix typo on custom size
|
||||
* Fix duplicated "døde døde" Norwegion Translation for libnarrate
|
||||
* Fix up Event Editors Place display for bidi text with Gramps ID
|
||||
* Fix issues with RTL languages and LAT/LONG
|
||||
* Fix display of GPS coordinates in Places view for RTL languages
|
||||
* Fix place editor lat/long entry for RTL languages
|
||||
* Fix GEDCOM export to avoid translated GrampsType strings
|
||||
* Allow Tools with Notbook tabs to expand to fill the window
|
||||
* Limit Age Stats gramplet settings to appropriate values.
|
||||
* Max ages should be divisible by 5 to avoid out of range errors.
|
||||
* The chart width should be greater than 45 to look right and
|
||||
avoid division by zero errors.
|
||||
* Fix the Preferences 'Age display precision' value getting lost
|
||||
* Fix Window family tree title for non-ASCII chars on Windows
|
||||
* Fix Preferences/Genealogical Symbols when only one font is present
|
||||
* Fix various Entry fields so Undo/Redo works
|
||||
* Fix tag colors on PedigreeView
|
||||
* Fix Gramps -v error when Gtk is not present
|
||||
* Fix for PedigreeView not reflecting changes to birthday or death
|
||||
* ODF DOC - Fix improper escaping in odt output for TOC/Bookmark etc.
|
||||
* Fix CLI parser to accept negative integers as valid
|
||||
* Fix Descendant Tree report for HandleError when no parents on family
|
||||
* Fix Reorder ID tool so subsequent db additions used next possible ID
|
||||
* Upgrade export VCalendar to v2.0, so can export all utf8 characters
|
||||
* Fix Preferences so <ctrl>PageUp/PageDn doesn't stick on Dates tab
|
||||
* Graphs: Escape for name, dates and places in graph reports with XML
|
||||
illegal characters
|
||||
* Fix 'Go' menu direct object selection, goes to wrong place
|
||||
|
||||
2019-09-14
|
||||
Version 5.1.1
|
||||
* Update translations: cs, de, fi, fr, he, hr, pt_PT, ru, sv
|
||||
|
||||
53
README.md
53
README.md
@ -1,4 +1,4 @@
|
||||
The Gramps Project ( https://gramps-project.org ) [](https://travis-ci.org/gramps-project/gramps)[](https://codecov.io/github/gramps-project/gramps?branch=master)[](https://hosted.weblate.org/engage/gramps-project)
|
||||
The Gramps Project ( https://gramps-project.org ) [](https://travis-ci.org/gramps-project/gramps)[](https://codecov.io/github/gramps-project/gramps?branch=master)
|
||||
===================
|
||||
We strive to produce a genealogy program that is both intuitive for hobbyists and feature-complete for professional genealogists.
|
||||
|
||||
@ -10,7 +10,7 @@ Requirements
|
||||
============
|
||||
The following packages **MUST** be installed in order for Gramps to work:
|
||||
|
||||
* **Python** 3.5 or greater - The programming language used by Gramps. https://www.python.org/
|
||||
* **Python** 3.3 or greater - The programming language used by Gramps. https://www.python.org/
|
||||
* **GTK** 3.12 or greater - A cross-platform widget toolkit for creating graphical user interfaces. http://www.gtk.org/
|
||||
* **pygobject** 3.12 or greater - Python Bindings for GLib/GObject/GIO/GTK+ https://wiki.gnome.org/Projects/PyGObject
|
||||
|
||||
@ -34,7 +34,7 @@ to your language:
|
||||
Translation of GTK elements to your language, with
|
||||
xx your language code; e.g. for Dutch you need
|
||||
language-pack-gnome-nl. The translation of the
|
||||
Gramps strings is included with the Gramps source.
|
||||
Gramps strings is included with the gramps source.
|
||||
|
||||
|
||||
The following packages are **STRONGLY RECOMMENDED** to be installed:
|
||||
@ -45,7 +45,7 @@ The following packages are **STRONGLY RECOMMENDED** to be installed:
|
||||
It may be osmgpsmap, osm-gps-map, or python-osmgpsmap,
|
||||
but the Python bindings for this must also be present, so gir1.2-osmgpsmap-1.0.
|
||||
Without this the GeoView will not be active, see
|
||||
https://gramps-project.org/wiki/index.php?title=Gramps_5.1_Wiki_Manual_-_Categories#Geography_Category
|
||||
https://gramps-project.org/wiki/index.php?title=Gramps_5.0_Wiki_Manual_-_Categories#Geography_Category
|
||||
|
||||
* **Graphviz**
|
||||
|
||||
@ -63,27 +63,27 @@ The following packages are **STRONGLY RECOMMENDED** to be installed:
|
||||
sorting is done through built-in libraries. PyICU is
|
||||
fairly widely available through the package managers of
|
||||
distributions. See http://pyicu.osafoundation.org/
|
||||
(These are Python bindings for the ICU package
|
||||
https://pypi.python.org/pypi/PyICU/).
|
||||
(These are Python bindings for the ICU package.
|
||||
https://pypi.python.org/pypi/PyICU/)
|
||||
|
||||
* **Ghostscript**
|
||||
|
||||
Used by Graphviz reports to help create PDF files.
|
||||
Used by Graphviz reports to help create PDF's
|
||||
|
||||
The following packages are optional:
|
||||
------------------------------------
|
||||
* **gtkspell**
|
||||
* **gtkspell**
|
||||
|
||||
Enable spell checking in the notes. Gtkspell depends on
|
||||
enchant. A version of gtkspell with gobject introspection
|
||||
is needed, so minimally version 3.0.0.
|
||||
is needed, so minimally version 3.0.0
|
||||
|
||||
* **rcs**
|
||||
|
||||
The GNU Revision Control System (RCS) can be used to manage
|
||||
multiple revisions of your family trees. See info at
|
||||
https://gramps-project.org/wiki/index.php?title=Gramps_5.1_Wiki_Manual_-_Manage_Family_Trees#Archiving_a_Family_Tree
|
||||
Only rcs is needed, NO python bindings are required.
|
||||
https://gramps-project.org/wiki/index.php?title=Gramps_5.0_Wiki_Manual_-_Manage_Family_Trees#Archiving_a_Family_Tree
|
||||
Only rcs is needed, NO python bindings are required
|
||||
|
||||
* **PIL**
|
||||
|
||||
@ -91,7 +91,7 @@ The following packages are optional:
|
||||
images and also to convert non-JPG images to
|
||||
JPG so as to include them in LaTeX output.
|
||||
(For Python3 a different source may be needed,
|
||||
python-imaging or python-pillow or python3-pillow).
|
||||
python-imaging or python-pillow or python3-pillow)
|
||||
|
||||
* **GExiv2**
|
||||
|
||||
@ -101,7 +101,7 @@ The following packages are optional:
|
||||
|
||||
* **ttf-freefont**
|
||||
|
||||
Provides genealogical symbols and more fonts for reports
|
||||
More font support in the reports
|
||||
|
||||
* **geocodeglib**
|
||||
|
||||
@ -120,24 +120,6 @@ The following packages are optional:
|
||||
Python bindings of fontconfig are required for displaying
|
||||
genealogical symbols
|
||||
|
||||
* **magic**
|
||||
|
||||
Python magic bindings required to have better performances with image
|
||||
processing.
|
||||
If this module is not available, we continue to use Gdk.
|
||||
This avoid to load the image in memory. This is a real improvement
|
||||
when we have many big images.
|
||||
Used in odfdoc, rtfdoc and webreport and tested with png, gif, jpeg, bmp, tiff
|
||||
#
|
||||
# file size with magic without (Gdk) ratio
|
||||
# example 1 : 256k 0.00080 0.00575 7
|
||||
# example 2 : 21M 0.00171 0.55860 326
|
||||
|
||||
Debian, Ubuntu, ... : python3-magic
|
||||
Fedora, Redhat, ... : python3-magic
|
||||
openSUSE : python-magic
|
||||
ArchLinux : python-magic
|
||||
|
||||
Optional packages required by Third-party Addons
|
||||
------------------------------------------------
|
||||
|
||||
@ -181,12 +163,3 @@ The User Manual is maintained on the Gramps website:
|
||||
|
||||
* https://www.gramps-project.org/wiki/index.php?title=User_manual
|
||||
|
||||
Issue Tracker
|
||||
-------------
|
||||
Gramps bug and issue tracker can be found [here](https://gramps-project.org/bugs/my_view_page.php).
|
||||
|
||||
Translation
|
||||
-------------
|
||||
Gramps uses Hosted Weblate for its translations:
|
||||
|
||||
* https://hosted.weblate.org/engage/gramps-project
|
||||
|
||||
@ -1,14 +1,14 @@
|
||||
/*
|
||||
*******************************************************************************
|
||||
**************************************************************************************************
|
||||
Copyright Holder and License
|
||||
*******************************************************************************
|
||||
**************************************************************************************************
|
||||
GRAMPS Cascading Style Sheet
|
||||
Style Name: Basic-Ash Stylesheet
|
||||
Style Author: Jason M. Simanek (2008)
|
||||
Note: Adapted from GRAMPS original Modern Style stylesheet
|
||||
*******************************************************************************
|
||||
**************************************************************************************************
|
||||
This website was created with GRAMPS <http://www.gramps-project.org/>
|
||||
-------------------------------------------------------------------------------
|
||||
--------------------------------------------------------------------------------------------------
|
||||
GRAMPS is a Free Software Project for Genealogy, offering a professional
|
||||
|
||||
genealogy program, and a wiki open to all. It is a community project, created,
|
||||
@ -16,7 +16,7 @@ developed and governed by genealogists.
|
||||
|
||||
Go to <http://gramps-project.org/> to learn more!
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
--------------------------------------------------------------------------------------------------
|
||||
Copyright 2008 Jason M. Simanek
|
||||
Copyright 2009 Stephane Charette
|
||||
Copyright (C) 2008-2011 Rob G. Healey <robhealey1@gmail.com>
|
||||
@ -36,10 +36,10 @@ 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
|
||||
GRAMPS. If not, see <http://www.gnu.org/licenses/>.
|
||||
-------------------------------------------------------------------------------
|
||||
--------------------------------------------------------------------------------------------------
|
||||
|
||||
Color Palette
|
||||
-------------------------------------------------------------------------------
|
||||
--------------------------------------------------------------------------------------------------
|
||||
|
||||
black #000
|
||||
gray dark #555
|
||||
@ -47,14 +47,14 @@ gray #999
|
||||
gray light #CCC
|
||||
gray very light #EEE
|
||||
white #FFF
|
||||
-------------------------------------------------------------------------------
|
||||
--------------------------------------------------------------------------------------------------
|
||||
Characteristic of this style is that it uses the full width of the browser
|
||||
window and that horizontal highlighting bars extend over the full width of
|
||||
the page.
|
||||
-------------------------------------------------------------------------------
|
||||
--------------------------------------------------------------------------------------------------
|
||||
|
||||
NarrativeWeb Styles
|
||||
-------------------------------------------------------------------------------
|
||||
------------------------------------------------------------------------------------------------
|
||||
|
||||
General Elements
|
||||
----------------------------------------------------- */
|
||||
@ -96,16 +96,6 @@ body > div {
|
||||
.content {
|
||||
padding: 0em 0.5em;
|
||||
}
|
||||
body#fullyearlinked table.calendar {
|
||||
float: none;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
@media only screen and (width > 1080px) {
|
||||
body#fullyearlinked table.calendar {
|
||||
float: left;
|
||||
width: 33.3%;
|
||||
}
|
||||
}
|
||||
|
||||
/* General Text
|
||||
@ -162,7 +152,6 @@ a[href]:hover, a[href]:active {
|
||||
----------------------------------------------------- */
|
||||
div#nav, #subnavigation {
|
||||
border: solid 1px #EEE; /* needed by IE7 */
|
||||
position: relative;
|
||||
}
|
||||
#subnavigation ul {
|
||||
overflow: hidden;
|
||||
@ -200,35 +189,6 @@ div#nav ul li.CurrentSection a {
|
||||
#subnavigation ul li.CurrentSection a {
|
||||
background-color: white;
|
||||
}
|
||||
div#nav li.lang {
|
||||
font-size: smaller;
|
||||
font-family: sans-serif;
|
||||
padding-top: .4em;
|
||||
padding-bottom: .2em;
|
||||
font-weight: bold;
|
||||
}
|
||||
div#nav li.lang:hover > ul {
|
||||
visibility: visible;
|
||||
opacity: 1;
|
||||
}
|
||||
div#nav ul.lang {
|
||||
position: absolute;
|
||||
visibility: hidden;
|
||||
opacity: 0;
|
||||
z-index: 999;
|
||||
background-color: #EEE;
|
||||
top: -1em;
|
||||
font-size: larger;
|
||||
font-family: sans-serif;
|
||||
}
|
||||
div#nav ul.lang:hover {
|
||||
float: initial;
|
||||
padding-left: 0px;
|
||||
}
|
||||
div#nav ul.lang li {
|
||||
float: none;
|
||||
padding: 2px;
|
||||
}
|
||||
/* Alphabet Navigation
|
||||
----------------------------------------------------- */
|
||||
div#alphanav {
|
||||
@ -265,7 +225,7 @@ div#alphanav ul li a:hover {
|
||||
}
|
||||
|
||||
/* Responsive navigation */
|
||||
button.navIcon {
|
||||
a.navIcon {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@ -291,6 +251,11 @@ div#nav::after {
|
||||
|
||||
.nav {
|
||||
background: none; /* Works in IE too. */
|
||||
/*
|
||||
width: 200px;
|
||||
position: absolute;
|
||||
z-index: 10;
|
||||
*/
|
||||
}
|
||||
|
||||
/* Undo some of the #nav styles - to enable the class .nav */
|
||||
@ -312,14 +277,11 @@ div#nav::after {
|
||||
.nav li {display: none;}
|
||||
.nav ul {display: none;}
|
||||
|
||||
button.navIcon {
|
||||
a.navIcon {
|
||||
font-size:1.3em;
|
||||
display: block;
|
||||
margin: 0.1em 0.4em 0.4em 0.4em;
|
||||
float: left;
|
||||
font-size:2.9em;
|
||||
line-height: 35px;
|
||||
border: 0px;
|
||||
color: #555;
|
||||
background-color: #EEE;
|
||||
}
|
||||
|
||||
.nav.responsive {position: absolute; display: block; z-index: 100;}
|
||||
@ -330,6 +292,7 @@ div#nav::after {
|
||||
margin-right: 10px;
|
||||
}
|
||||
.nav.responsive li {
|
||||
/* float: left; */
|
||||
display: block;
|
||||
text-align: left;
|
||||
background-color: #EEE;
|
||||
@ -346,21 +309,6 @@ div#nav::after {
|
||||
.content {
|
||||
padding: 0em 0.5em;
|
||||
}
|
||||
.lang {
|
||||
position: relative;
|
||||
}
|
||||
.lang > .lang {
|
||||
top: 0;
|
||||
left: 100%;
|
||||
margin-top: -6px;
|
||||
margin-left: -1px;
|
||||
-webkit-border-radius: 0 6px 6px 6px;
|
||||
-moz-border-radius: 0 6px 6px 6px;
|
||||
border-radius: 0 6px 6px 6px;
|
||||
}
|
||||
.lang:hover > .lang {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
/* Main Table
|
||||
@ -441,41 +389,18 @@ table#SortByCount thead th.ColumnQuantity a:after {
|
||||
table.surname td.ColumnName {
|
||||
background-color: #EEE;
|
||||
}
|
||||
table#SortByName tr:hover td.ColumnSurname,
|
||||
table#SortByCount tr:hover td.ColumnQuantity {
|
||||
background-color: #DDE;
|
||||
}
|
||||
table#SortByName tr:hover,
|
||||
table#SortByCount tr:hover,
|
||||
table#SortByName tr:hover td.ColumnQuantity,
|
||||
table#SortByCount tr:hover td.ColumnSurname {
|
||||
background-color: #DDE;
|
||||
}
|
||||
table.surname tr:hover,
|
||||
table.surname tr:hover td.ColumnName {
|
||||
background-color: #DDE;
|
||||
}
|
||||
|
||||
/* Individuals
|
||||
----------------------------------------------------- */
|
||||
table.IndividualList td.ColumnSurname {
|
||||
background-color: #EEE;
|
||||
}
|
||||
#parents table.infolist tr:hover,
|
||||
table.IndividualList tr:hover,
|
||||
table.IndividualList tr:hover td.ColumnSurname {
|
||||
background-color: #DDE;
|
||||
}
|
||||
|
||||
/* Places
|
||||
----------------------------------------------------- */
|
||||
#Places table.infolist td.ColumnName {
|
||||
background-color: #EEE;
|
||||
}
|
||||
#Places table.infolist tr:hover,
|
||||
#Places table.infolist tr:hover td.ColumnName {
|
||||
background-color: #DDE;
|
||||
}
|
||||
|
||||
/* Events
|
||||
----------------------------------------------------- */
|
||||
@ -491,10 +416,6 @@ table.IndividualList tr:hover td.ColumnSurname {
|
||||
#EventList td.ColumnPerson a {
|
||||
display: inline;
|
||||
}
|
||||
#EventList table.infolist tr:hover,
|
||||
#EventList table.infolist tr:hover td.ColumnType {
|
||||
background-color: #DDE;
|
||||
}
|
||||
#EventList td.ColumnPerson span.person:after,
|
||||
#EventList td.ColumnPerson span.father:after,
|
||||
#EventList td.ColumnPerson span.mother:after,
|
||||
@ -515,33 +436,10 @@ table.IndividualList tr:hover td.ColumnSurname {
|
||||
#EventDetail td.ColumnPerson span.mother:last-child:after {
|
||||
content: "";
|
||||
}
|
||||
table.eventlist tbody tr td:first-child,
|
||||
table.eventlist thead tr th:first-child {
|
||||
padding-left: 10px;
|
||||
}
|
||||
|
||||
table.eventlist tbody tr td.ColumnSources {
|
||||
width: 5%;
|
||||
}
|
||||
table.eventlist tbody tr td.ColumnDate {
|
||||
width: 15%;
|
||||
}
|
||||
table.eventlist td.ColumnEvent,
|
||||
table.eventlist td.ColumnDate,
|
||||
table.eventlist td.ColumnPlace {
|
||||
font-weight: bold;
|
||||
}
|
||||
#attributes table.infolist td.ColumnType {
|
||||
width: 10%;
|
||||
padding-left: 15px;
|
||||
}
|
||||
#attributes table.infolist td.ColumnSources {
|
||||
width: 5%;
|
||||
padding-left: 5px;
|
||||
}
|
||||
#WebLinks table.infolist td.ColumnType {
|
||||
width: 10%;
|
||||
padding-left: 15px;
|
||||
}
|
||||
|
||||
/* Gallery
|
||||
----------------------------------------------------- */
|
||||
@ -593,10 +491,6 @@ table.eventlist td.ColumnPlace {
|
||||
div#SourceDetail {
|
||||
margin: 0 auto;
|
||||
}
|
||||
#Sources table.infolist tr:hover,
|
||||
#Sources table.infolist tr:hover td.ColumnType {
|
||||
background-color: #DDE;
|
||||
}
|
||||
|
||||
/* Contact
|
||||
----------------------------------------------------- */
|
||||
@ -636,13 +530,11 @@ div#SourceDetail {
|
||||
|
||||
/* Subsection
|
||||
----------------------------------------------------- */
|
||||
#Home #GalleryDisplay, #Introduction #GalleryDisplay,
|
||||
#Contact #GalleryDisplay {
|
||||
#Home #GalleryDisplay, #Introduction #GalleryDisplay {
|
||||
float: right;
|
||||
margin: 1em;
|
||||
}
|
||||
#Home #GalleryDisplay img, #Introduction #GalleryDisplay img,
|
||||
#Contact #GalleryDisplay img {
|
||||
#Home #GalleryDisplay img, #Introduction #GalleryDisplay img {
|
||||
display: block;
|
||||
max-width: 950px;
|
||||
height: auto;
|
||||
@ -660,7 +552,7 @@ div#SourceDetail {
|
||||
}
|
||||
.subsection {
|
||||
clear: both;
|
||||
overflow-x: auto;
|
||||
overflow: hidden;
|
||||
}
|
||||
.subsection p {
|
||||
margin: 0px;
|
||||
@ -668,36 +560,18 @@ div#SourceDetail {
|
||||
|
||||
/* Subsection : Families
|
||||
----------------------------------------------------- */
|
||||
#families table.infolist td.ColumnValue.Child table.infolist tr:hover,
|
||||
table.relationships tr:hover {
|
||||
background-color: #DDE;
|
||||
}
|
||||
div.content table.tags {
|
||||
text-align: left;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
div#families table.fixed_subtables table.eventlist {
|
||||
table-layout: fixed;
|
||||
}
|
||||
div#families table.fixed_subtables table.eventlist th:first-child {
|
||||
width: 9em;
|
||||
}
|
||||
div#families table.fixed_subtables table.eventlist th.ColumnDate {
|
||||
width: 12%;
|
||||
}
|
||||
div#families table.fixed_subtables table.eventlist th.ColumnSources {
|
||||
div#families table.fixed_subtables table.eventlist th:last-child {
|
||||
width: 5em;
|
||||
}
|
||||
div#families table.attrlist td.ColumnType {
|
||||
color: black;
|
||||
}
|
||||
div#families table.fixed_subtables .Child table.eventlist .ColumnName {
|
||||
width: 60%;
|
||||
}
|
||||
div#families table.fixed_subtables .Child table.eventlist .ColumnDate {
|
||||
width: 20%;
|
||||
}
|
||||
|
||||
/* Subsection : Gallery
|
||||
----------------------------------------------------- */
|
||||
@ -707,12 +581,6 @@ div#families table.fixed_subtables .Child table.eventlist .ColumnDate {
|
||||
#indivgallery {
|
||||
background-color: white;
|
||||
}
|
||||
#indivgallery a {
|
||||
color: black;
|
||||
text-decoration: none;
|
||||
word-wrap: break-word;
|
||||
display: block;
|
||||
}
|
||||
#gallery .gallerycell {
|
||||
float: left;
|
||||
width: 130px;
|
||||
@ -729,8 +597,7 @@ div#families table.fixed_subtables .Child table.eventlist .ColumnDate {
|
||||
}
|
||||
#indivgallery .thumbnail {
|
||||
float: left;
|
||||
width: 160px;
|
||||
height: 220px;
|
||||
width: 130px;
|
||||
font-size: smaller;
|
||||
text-align: center;
|
||||
margin: 0.8em 0.5em;
|
||||
@ -744,6 +611,7 @@ div#families table.fixed_subtables .Child table.eventlist .ColumnDate {
|
||||
}
|
||||
#gallery div.indexno {
|
||||
float: right;
|
||||
width: 1.8em;
|
||||
font-size: large;
|
||||
text-align: center;
|
||||
background-color: #CCC;
|
||||
@ -791,23 +659,11 @@ div.snapshot div.thumbnail {
|
||||
h4 + div.grampsstylednote, a.familymap {
|
||||
margin: 1em 15px;
|
||||
}
|
||||
i.NoteType {
|
||||
font-weight: bold;
|
||||
font-size: .8em;
|
||||
}
|
||||
i + div.grampsstylednote p {
|
||||
margin: 0 0 0.3em 0;
|
||||
}
|
||||
div.grampsstylednote p {
|
||||
padding-bottom: 0.6em;
|
||||
}
|
||||
div.grampsstylednote a {
|
||||
text-decoration: underline;
|
||||
font-weight: bold;
|
||||
color: #555;
|
||||
}
|
||||
div.grampsstylednote a:visited {
|
||||
color: red;
|
||||
margin-bottom: 0.5em;
|
||||
}
|
||||
|
||||
/* Subsection : Family Map
|
||||
@ -815,46 +671,11 @@ div.grampsstylednote a:visited {
|
||||
a.familymap {
|
||||
display: block;
|
||||
}
|
||||
a.family_map {
|
||||
margin-left: 15px;
|
||||
}
|
||||
|
||||
/* Subsection : References
|
||||
----------------------------------------------------- */
|
||||
#references ol {
|
||||
margin-left: 2em;
|
||||
}
|
||||
|
||||
/* Subsection : Source References
|
||||
----------------------------------------------------- */
|
||||
#sourcerefs ol#srcr {
|
||||
counter-reset: itema;
|
||||
list-style-type: none;
|
||||
display: block;
|
||||
margin-top: .1em;
|
||||
}
|
||||
#sourcerefs ol#citr {
|
||||
counter-reset: itemb;
|
||||
list-style-type: none;
|
||||
}
|
||||
#sourcerefs ol#srcr > li::before {
|
||||
content: counter(itema);
|
||||
}
|
||||
#sourcerefs ol#citr > li::before {
|
||||
content: counter(itema)counter(itemb, lower-alpha);
|
||||
}
|
||||
#sourcerefs ol#srcr > li {
|
||||
counter-increment: itema;
|
||||
margin-top: .1em;
|
||||
}
|
||||
#sourcerefs ol#citr > li {
|
||||
counter-increment: itemb;
|
||||
margin-top: .1em;
|
||||
}
|
||||
#sourcerefs ol#citr ul {
|
||||
list-style: none;
|
||||
display: inline-block;
|
||||
vertical-align: top;
|
||||
#sourcerefs ol li ol {
|
||||
list-style-type: lower-alpha;
|
||||
}
|
||||
|
||||
/* Subsection : Pedigree
|
||||
@ -911,16 +732,10 @@ a.family_map {
|
||||
padding-right: 15px;
|
||||
}
|
||||
|
||||
/* Updates
|
||||
----------------------------------------------------- */
|
||||
#Updates table.list td.date {
|
||||
width: 20%;
|
||||
}
|
||||
|
||||
/* Overwritten
|
||||
----------------------------------------------------- */
|
||||
body#FamilyMap {
|
||||
background-color: #EEE !important;
|
||||
background-color: #EEE ! important;
|
||||
}
|
||||
|
||||
/* Calendar Styles
|
||||
@ -939,12 +754,16 @@ table.calendar {
|
||||
background-color: white;
|
||||
border-bottom-style: none;
|
||||
padding-top: 1em;
|
||||
vertical-align: top;
|
||||
height: 2em;
|
||||
}
|
||||
.calendar thead th abbr {
|
||||
border-bottom-style: none;
|
||||
}
|
||||
#CreatorInfo {
|
||||
float: right;
|
||||
margin: -1em 15px 0px 0px;
|
||||
font-weight: bold;
|
||||
color: #999;
|
||||
}
|
||||
.calendar tfoot tr td {
|
||||
border-top: solid 4px #999;
|
||||
vertical-align: middle;
|
||||
@ -953,6 +772,7 @@ table.calendar {
|
||||
/* Calendar : Date Numeral */
|
||||
.calendar div.date {
|
||||
float: right;
|
||||
width: 1.8em;
|
||||
font-size: large;
|
||||
text-align: center;
|
||||
background-color: #CCC;
|
||||
@ -961,7 +781,7 @@ table.calendar {
|
||||
|
||||
/* Calendar : Date Container */
|
||||
.calendar td {
|
||||
padding: 0px 5px 0px 1ex;
|
||||
padding: 0px 0px 0px 1ex;
|
||||
border-width: 1px 0px 0px 1px;
|
||||
border-style: solid;
|
||||
border-color: #CCC;
|
||||
@ -969,7 +789,7 @@ table.calendar {
|
||||
}
|
||||
.calendar td:first-child {
|
||||
border-left-style: none;
|
||||
padding: 0px 5px 0px 1ex;
|
||||
padding: 0px 0px 0px 1ex;
|
||||
}
|
||||
.calendar tbody tr:first-child td {
|
||||
border-top-style: none;
|
||||
@ -1013,6 +833,8 @@ body#fullyearlinked div.content {
|
||||
overflow: hidden;
|
||||
}
|
||||
body#fullyearlinked table.calendar {
|
||||
float: left;
|
||||
width: 33.3%;
|
||||
height: 18em;
|
||||
border: solid 1px black;
|
||||
}
|
||||
@ -1029,88 +851,3 @@ body#fullyearlinked table.calendar tbody td {
|
||||
body#OneDay div.content {
|
||||
overflow: hidden;
|
||||
}
|
||||
body#OneDay h3 {
|
||||
font-size: xx-large;
|
||||
vertical-align: top;
|
||||
height: 2em;
|
||||
}
|
||||
#WebCal table.calendar tfoot {
|
||||
display: none;
|
||||
}
|
||||
#WebCal table.calendar tr td {
|
||||
word-wrap: break-word;
|
||||
padding: 2px;
|
||||
}
|
||||
#WebCal .calendar tr td .empty {
|
||||
border: 5px solid rgba(255,255,255,.0);
|
||||
}
|
||||
#WebCal .calendar tr td .clickable {
|
||||
border: 5px solid rgba(255,255,255,.0);
|
||||
}
|
||||
#WebCal .calendar tr td .clickable:hover {
|
||||
display: block;
|
||||
overflow:auto;
|
||||
word-wrap: break-word;
|
||||
cursor: text;
|
||||
border-radius: 10px 0px 10px 10px;
|
||||
border: 5px solid #555;
|
||||
padding: 0px;
|
||||
}
|
||||
body#fullyearlinked #YearGlance tbody td {
|
||||
height:48px;
|
||||
vertical-align: middle;
|
||||
text-align: center;
|
||||
padding-left: 6px;
|
||||
}
|
||||
body#fullyearlinked #YearGlance tbody td .date {
|
||||
font-size: 30px;
|
||||
vertical-align: middle;
|
||||
text-align: center;
|
||||
border-radius: 45px;
|
||||
float: none;
|
||||
border: 5px solid rgba(0,0,0,.0);
|
||||
}
|
||||
body#fullyearlinked #YearGlance tbody td:hover .date {
|
||||
border-radius: 45px;
|
||||
border: 5px solid;
|
||||
}
|
||||
h4 button.icon {
|
||||
width: 0.9em;
|
||||
border: 0px solid;
|
||||
padding: 0;
|
||||
opacity: 1;
|
||||
transform: rotate(90deg);
|
||||
transition: transform 200ms ease-out 0s;
|
||||
background: transparent;
|
||||
}
|
||||
h4 button.icon-close {
|
||||
transform: rotate(90deg);
|
||||
transition: transform 0.2s linear;
|
||||
}
|
||||
h4 button.icon-open {
|
||||
transform: rotate(180deg);
|
||||
transition: transform 0.2s linear;
|
||||
}
|
||||
svg {
|
||||
fill: black;
|
||||
}
|
||||
/* Go to the top of the page */
|
||||
#gototop {
|
||||
display: none;
|
||||
position: fixed;
|
||||
bottom: 10px;
|
||||
right: 20px;
|
||||
z-index: 999;
|
||||
border: none;
|
||||
background-color: transparent;
|
||||
color: black;
|
||||
cursor: pointer;
|
||||
border-radius: 4px;
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
#gototop:hover {
|
||||
background-color: #CCC;
|
||||
}
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
# 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,
|
||||
# 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.
|
||||
@ -119,16 +119,6 @@ img {
|
||||
.content {
|
||||
padding: 0em 0.5em;
|
||||
}
|
||||
body#fullyearlinked table.calendar {
|
||||
float: none;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
@media only screen and (width > 1080px) {
|
||||
body#fullyearlinked table.calendar {
|
||||
float: left;
|
||||
width: 33.3%;
|
||||
}
|
||||
}
|
||||
|
||||
/* General Text
|
||||
@ -139,6 +129,7 @@ h1 {
|
||||
h2 {
|
||||
font: bold 1em sans-serif;
|
||||
text-align: center;
|
||||
float: center;
|
||||
}
|
||||
h3 {
|
||||
font: bold italic 1.6em serif;
|
||||
@ -254,7 +245,6 @@ p#user_header {
|
||||
div#nav, #subnavigation {
|
||||
border: solid 1px #EEE; /* needed by IE7 */
|
||||
background-color: #13A926;
|
||||
position: relative;
|
||||
}
|
||||
#subnavigation ul {
|
||||
overflow: hidden;
|
||||
@ -292,33 +282,6 @@ div#nav ul li.CurrentSection a {
|
||||
#nav ul li.CurrentSection a:hover {
|
||||
background-color: #903;
|
||||
}
|
||||
div#nav li.lang {
|
||||
font-size: 12px;
|
||||
font-weight: bold;
|
||||
padding-top: .5em;
|
||||
}
|
||||
div#nav li.lang:hover > ul {
|
||||
visibility: visible;
|
||||
opacity: 1;
|
||||
}
|
||||
div#nav ul.lang {
|
||||
position: absolute;
|
||||
visibility: hidden;
|
||||
opacity: 0;
|
||||
z-index: 999;
|
||||
background-color: #EEE;
|
||||
border-bottom: solid 1px #999;
|
||||
padding: 2px 1px;
|
||||
top: -1em;
|
||||
}
|
||||
div#nav ul.lang:hover {
|
||||
float: initial;
|
||||
}
|
||||
div#nav ul.lang li {
|
||||
float: none;
|
||||
font-size: larger;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
/* Webcal
|
||||
----------------------------------------------------- */
|
||||
@ -376,7 +339,7 @@ div#footer p#copyright img {
|
||||
}
|
||||
|
||||
/* Responsive navigation */
|
||||
button.navIcon {
|
||||
a.navIcon {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@ -386,12 +349,6 @@ div#header::after {
|
||||
display: table;
|
||||
}
|
||||
|
||||
/* Updates
|
||||
----------------------------------------------------- */
|
||||
#Updates table.list td.date {
|
||||
width: 20%;
|
||||
}
|
||||
|
||||
/* Alphabet Navigation
|
||||
----------------------------------------------------- */
|
||||
div#alphanav {
|
||||
@ -444,6 +401,11 @@ div#nav::after {
|
||||
|
||||
.nav {
|
||||
background: none; /* Works in IE too. */
|
||||
/*
|
||||
width: 200px;
|
||||
position: absolute;
|
||||
z-index: 10;
|
||||
*/
|
||||
}
|
||||
|
||||
/* Undo some of the #nav styles - to enable the class .nav */
|
||||
@ -465,23 +427,22 @@ div#nav::after {
|
||||
.nav li {display: none;}
|
||||
.nav ul {display: none;}
|
||||
|
||||
button.navIcon {
|
||||
a.navIcon {
|
||||
font-size:1.3em;
|
||||
display: block;
|
||||
margin: 0.1em 0.4em 0.4em 0.4em;
|
||||
float: left;
|
||||
font-size:2.9em;
|
||||
line-height: 60px;
|
||||
border: 0px;
|
||||
color: #FFF;
|
||||
background-color: #00029D;
|
||||
}
|
||||
|
||||
.nav.responsive {position: absolute; display: block; z-index: 100;}
|
||||
.nav.responsive a.icon {
|
||||
/* position: absolute; */
|
||||
right: 0;
|
||||
top: 0;
|
||||
margin-right: 10px;
|
||||
}
|
||||
.nav.responsive li {
|
||||
/* float: left; */
|
||||
display: block;
|
||||
text-align: left;
|
||||
background-color: #13A926;
|
||||
@ -498,21 +459,6 @@ div#nav::after {
|
||||
.content {
|
||||
padding: 0em 0.5em;
|
||||
}
|
||||
.lang {
|
||||
position: relative;
|
||||
}
|
||||
.lang > .lang {
|
||||
top: 0;
|
||||
left: 100%;
|
||||
margin-top: -6px;
|
||||
margin-left: -1px;
|
||||
-webkit-border-radius: 0 6px 6px 6px;
|
||||
-moz-border-radius: 0 6px 6px 6px;
|
||||
border-radius: 0 6px 6px 6px;
|
||||
}
|
||||
.lang:hover > .lang {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
/* Main Table
|
||||
@ -557,12 +503,13 @@ table.infolist tr td.ColumnRowLabel a {
|
||||
}
|
||||
table.infolist tr td.ColumnType {
|
||||
width: 6%;
|
||||
padding-left: 20px;
|
||||
}
|
||||
table.infolist tr td.ColumnAttribute {
|
||||
width: 10%;
|
||||
}
|
||||
table.infolist tr td.ColumnValue {
|
||||
width: 30%;
|
||||
width: 40%;
|
||||
}
|
||||
table.infolist tr td.ColumnName {
|
||||
width: 30%;
|
||||
@ -577,7 +524,7 @@ table.infolist tr td.ColumnPartner {
|
||||
table.infolist tr td.ColumnParents {
|
||||
width: 30%;
|
||||
}
|
||||
table.infolist tbody tr td.ColumnParents span.father,
|
||||
table.infolist tbody tr td.ColumnParents span.father,
|
||||
table.infolist tbody tr td.ColumnParents span.mother {
|
||||
display: block;
|
||||
}
|
||||
@ -638,9 +585,6 @@ div#IndividualDetail table.infolist tbody tr td.ColumnAttribute {
|
||||
#familymap a.familymap {
|
||||
margin-left:20px;
|
||||
}
|
||||
a.family_map {
|
||||
margin-left: 20px;
|
||||
}
|
||||
|
||||
/* Surnames
|
||||
----------------------------------------------------- */
|
||||
@ -648,11 +592,11 @@ a.family_map {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
table.surnamelist thead tr th.ColumnSurname,
|
||||
table.surnamelist thead tr th.ColumnSurname,
|
||||
#Surnames table.surnamelist tbody tr td.ColumnSurname {
|
||||
width: 50%;
|
||||
}
|
||||
table#SortByName thead tr th.ColumnSurname,
|
||||
table#SortByName thead tr th.ColumnSurname,
|
||||
table#SortByCount thead tr th.ColumnQuantity {
|
||||
background-color: #00029D;
|
||||
color: #FFF;
|
||||
@ -663,7 +607,7 @@ table.surnamelist thead tr th.ColumnSurname a {
|
||||
table.surnamelist thead tr th.ColumnSurname a:hover {
|
||||
color: #000;
|
||||
}
|
||||
table#SortByName thead tr th.ColumnSurname a:after,
|
||||
table#SortByName thead tr th.ColumnSurname a:after,
|
||||
table#SortByCount thead tr th.ColumnQuantity a:after {
|
||||
content: " ↓";
|
||||
}
|
||||
@ -695,10 +639,6 @@ div#RelationshipList, div#RelationshipDetail {
|
||||
div#RelationshipDetail div#FamilyDetail table.infolist tbody tr td {
|
||||
border: none;
|
||||
}
|
||||
div.content table.tags {
|
||||
text-align: left;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
/* Places
|
||||
=================================================----- */
|
||||
@ -718,9 +658,11 @@ div#Places table.infolist tbody tr td.ColumnLongitude {
|
||||
}
|
||||
div#PlaceDetail h5 {
|
||||
font: bold .7cm serif;
|
||||
float: center;
|
||||
text-align: center;
|
||||
border-bottom: double 4px #13A926;
|
||||
}
|
||||
|
||||
|
||||
/* EventList and EventDetail
|
||||
------------------------------------------------------ */
|
||||
@ -731,40 +673,18 @@ div#EventList, div#EventDetail {
|
||||
table.eventlist tbody tr td.ColumnEvent {
|
||||
width: 10%;
|
||||
}
|
||||
table.eventlist tbody tr td.ColumnPlace {
|
||||
width: 25%;
|
||||
}
|
||||
table.eventlist tbody tr td.ColumnNotes {
|
||||
width: 20%;
|
||||
}
|
||||
table.eventlist tbody tr td.ColumnSources {
|
||||
vertical-align: top;
|
||||
width: 5%;
|
||||
}
|
||||
table.eventlist tbody tr td.ColumnPerson {
|
||||
width: 35%;
|
||||
}
|
||||
table.eventlist th.ColumnDate {
|
||||
width: 15%;
|
||||
}
|
||||
table.eventlist td.ColumnEvent,
|
||||
table.eventlist td.ColumnDate,
|
||||
table.eventlist td.ColumnPlace {
|
||||
font-weight: bold;
|
||||
}
|
||||
#attributes table.infolist td.ColumnType {
|
||||
width: 10%;
|
||||
padding-left: 15px;
|
||||
}
|
||||
#attributes table.infolist td.ColumnSources {
|
||||
width: 5%;
|
||||
padding-left: 5px;
|
||||
}
|
||||
#WebLinks table.infolist td.ColumnType {
|
||||
width: 10%;
|
||||
padding-left: 15px;
|
||||
}
|
||||
#families table.infolist th.ColumnEvent {
|
||||
width: 10%;
|
||||
padding-left: 0px;
|
||||
}
|
||||
#families table.infolist td.ColumnAttribute {
|
||||
padding-left: 0px;
|
||||
}
|
||||
div#IndividualDetail div#families table.eventlist tr td {
|
||||
border-bottom: dashed 1px #000;
|
||||
}
|
||||
@ -796,7 +716,7 @@ div#EventList table.alphaevent tbody tr td.ColumnGRAMPSID {
|
||||
div#EventList table.alphaevent tbody tr td.ColumnPerson {
|
||||
width: 50%;
|
||||
}
|
||||
div#EventList table.alphaevent tbody tr td.ColumnPerson span.father,
|
||||
div#EventList table.alphaevent tbody tr td.ColumnPerson span.father,
|
||||
div#EventList table.alphaevent tbody tr td.ColumnPerson span.mother {
|
||||
display:block;
|
||||
}
|
||||
@ -821,14 +741,14 @@ div#EventDetail table.eventlist tbody tr td.ColumnAttribute {
|
||||
div#EventDetail table.eventlist tbody tr td.ColumnDate {
|
||||
border-top: solid 1px #000;
|
||||
}
|
||||
|
||||
|
||||
/* Events
|
||||
----------------------------------------------------- */
|
||||
#EventList table.infolist tr td a,
|
||||
#EventDetail table.infolist tr td a {
|
||||
display: inline;
|
||||
}
|
||||
#EventList table.infolist tr td span.father,
|
||||
#EventList table.infolist tr td span.father,
|
||||
#EventList table.infolist tr td span.mother,
|
||||
#EventDetail table.infolist tr td span.father,
|
||||
#EventDetail table.infolist tr td span.mother {
|
||||
@ -940,6 +860,7 @@ div#EventDetail table.eventlist tbody tr td.ColumnDate {
|
||||
}
|
||||
#GalleryDetail div#summaryarea table.gallery {
|
||||
padding-bottom: 0;
|
||||
margin: 1 .5em 0 0;
|
||||
border-style: solid;
|
||||
border-width: 2px 0 1px 0;
|
||||
border-color: #000;
|
||||
@ -1025,9 +946,9 @@ body#ThumbnailPreview div#references table.infolist tbody tr td.ColumnName {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
/* Download
|
||||
/* Download
|
||||
----------------------------------------------------- */
|
||||
div#Download {
|
||||
div#Download {
|
||||
margin: 0;
|
||||
width: 100%;
|
||||
}
|
||||
@ -1041,7 +962,7 @@ div#Download table.download {
|
||||
div#Download table.download tbody tr#Row02 {
|
||||
border-bottom: solid 2px #000;
|
||||
}
|
||||
div#Download table.download tbody tr td {
|
||||
div#Download table.download tbody tr td {
|
||||
border: solid 1px #000;
|
||||
text-align: left;
|
||||
}
|
||||
@ -1065,9 +986,6 @@ div#Download table.download td.ColumnModified {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
#Sources table.infolist tr td.ColumnName {
|
||||
width: 70%;
|
||||
}
|
||||
div#SourceDetail {
|
||||
min-height: 900px
|
||||
}
|
||||
@ -1176,14 +1094,8 @@ div#events h4 {
|
||||
#IndividualDetail div#events table.eventtable {
|
||||
width: 100%;
|
||||
}
|
||||
#families table.eventlist tbody tr td.ColumnEvent {
|
||||
vertical-align: top;
|
||||
width: 8%;
|
||||
}
|
||||
div#RelationshipDetail table.infolist tbody tr td.ColumnAttribute,
|
||||
div#IndividualDetail table.infolist tbody tr td.ColumnAttribute {
|
||||
vertical-align: top;
|
||||
width: 10%;
|
||||
table.eventlist tbody tr td.ColumnEvent {
|
||||
width: 12%;
|
||||
}
|
||||
#IndividualDetail div#events table.infolist tbody tr td {
|
||||
padding-top: .4em;
|
||||
@ -1270,10 +1182,6 @@ div#Families table.infolist tbody tr td.ColumnAttribute {
|
||||
}
|
||||
div#families table.infolist tbody tr td.ColumnValue p {
|
||||
margin-top: 0;
|
||||
margin-left: 0;
|
||||
}
|
||||
div#families table.infolist tbody tr td.ColumnValue {
|
||||
width: 70%;
|
||||
}
|
||||
div#families table.infolist tbody tr td.ColumnValue ol {
|
||||
margin: 0;
|
||||
@ -1288,22 +1196,6 @@ div#families table.infolist tbody tr td.ColumnValue ol li a {
|
||||
div#families table.fixed_subtables table.eventlist {
|
||||
table-layout:fixed;
|
||||
}
|
||||
div#families table.fixed_subtables table.eventlist th.ColumnDate {
|
||||
width: 12%;
|
||||
}
|
||||
div#families table.fixed_subtables table.eventlist th.ColumnSources {
|
||||
width: 5em;
|
||||
}
|
||||
div#families table.fixed_subtables .Child table.eventlist .ColumnName {
|
||||
width: 60%;
|
||||
}
|
||||
div#families table.fixed_subtables .Child table.eventlist .ColumnDate {
|
||||
width: 20%;
|
||||
}
|
||||
div#families table.fixed_subtables .BeginFamily .ColumnType {
|
||||
width: 7em;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
/* Subsection: Families: Attributes
|
||||
------------------------------------------------- */
|
||||
@ -1320,14 +1212,17 @@ SourcesType {
|
||||
div#families table.infolist tbody tr td.Value {
|
||||
width: 15%;
|
||||
}
|
||||
div#families table.infolist tr td.Notes {
|
||||
width: 40%;
|
||||
}
|
||||
div#families table.infolist tbody tr td.Sources {
|
||||
width: 5%;
|
||||
width: 15%;
|
||||
}
|
||||
|
||||
/* Subsection: Families: LDS Ordinance
|
||||
------------------------------------------------------ */
|
||||
div#families table.infolist {
|
||||
font: normal .9em sans;
|
||||
font: normal .8em sans;
|
||||
}
|
||||
div#families table.infolist tbody tr.BeginOrdinance {
|
||||
border-top: solid 1px #000;
|
||||
@ -1440,8 +1335,7 @@ div.Residence table.infolist tr td {
|
||||
#indivgallery .thumbnail {
|
||||
margin: 0;
|
||||
float: left;
|
||||
width: 160px;
|
||||
height: 220px;
|
||||
width: 130px;
|
||||
text-align: center;
|
||||
background-color: white;
|
||||
}
|
||||
@ -1469,6 +1363,7 @@ div.Residence table.infolist tr td {
|
||||
}
|
||||
#gallery div.indexno {
|
||||
float: right;
|
||||
width: 1.8em;
|
||||
font-size: large;
|
||||
text-align: center;
|
||||
background-color: #CCC;
|
||||
@ -1513,22 +1408,9 @@ div.narrative {
|
||||
font: normal .9em/1.4em sans-serif;
|
||||
margin: 0.1em 0 0.2em 0;
|
||||
}
|
||||
i.NoteType {
|
||||
font-weight: bold;
|
||||
font-size: .8em;
|
||||
}
|
||||
i + div.grampsstylednote p {
|
||||
margin: 0.1em 0 0.2em 0;
|
||||
}
|
||||
div.grampsstylednote p {
|
||||
padding-bottom: 0.6em;
|
||||
}
|
||||
|
||||
/* Subsection : References
|
||||
----------------------------------------------------- */
|
||||
#references ol {
|
||||
margin-left: 3em;
|
||||
}
|
||||
|
||||
/* Subsections : References
|
||||
----------------------------------------------------- */
|
||||
@ -1540,34 +1422,18 @@ div#References {
|
||||
|
||||
/* Subsections : Source References
|
||||
----------------------------------------------------- */
|
||||
#sourcerefs ol#srcr {
|
||||
counter-reset: itema;
|
||||
list-style-type: none;
|
||||
display: block;
|
||||
margin-top: .1em;
|
||||
div#sourcerefs {
|
||||
padding: 0;
|
||||
margin: 0 auto;
|
||||
}
|
||||
#sourcerefs ol#citr {
|
||||
counter-reset: itemb;
|
||||
list-style-type: none;
|
||||
div#sourcerefs ol {
|
||||
list-style-type: decimal;
|
||||
}
|
||||
#sourcerefs ol#srcr > li::before {
|
||||
content: counter(itema);
|
||||
div#sourcerefs ol li ol {
|
||||
list-style-type: lower-alpha;
|
||||
}
|
||||
#sourcerefs ol#citr > li::before {
|
||||
content: counter(itema)counter(itemb, lower-alpha);
|
||||
}
|
||||
#sourcerefs ol#srcr > li {
|
||||
counter-increment: itema;
|
||||
margin-top: .1em;
|
||||
}
|
||||
#sourcerefs ol#citr > li {
|
||||
counter-increment: itemb;
|
||||
margin-top: .1em;
|
||||
}
|
||||
#sourcerefs ol#citr ul {
|
||||
list-style: none;
|
||||
display: inline-block;
|
||||
vertical-align: top;
|
||||
div#sourcerefs ol li a {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
/* Subsections : Summary Area
|
||||
@ -1584,9 +1450,6 @@ div#summaryarea table.infolist tr td, div#summaryarea table.infolist tr td p {
|
||||
font: normal .9em/1.2em sans-serif;
|
||||
vertical-align: top;
|
||||
}
|
||||
div#summaryarea table.infolist tr td.ColumnValue {
|
||||
width: 70%;
|
||||
}
|
||||
div#summaryarea table.infolist tr td a, div#summaryarea table.infolist tr td p a {
|
||||
display:inline;
|
||||
}
|
||||
@ -1616,7 +1479,7 @@ table.WebLinks tbody tr td.ColumnPath {
|
||||
width: 50%;
|
||||
}
|
||||
table.weblinks tbody tr td.ColumnDescription {
|
||||
width: 80%;
|
||||
width: 30%;
|
||||
}
|
||||
|
||||
/* Subsections : Pedigree
|
||||
@ -1670,7 +1533,7 @@ div#pedigree {
|
||||
/* Calendar Styles
|
||||
-------------------------------------------------------------------------------------------- */
|
||||
#OneDay, #WebCal, #YearGlance {
|
||||
width: 100%
|
||||
width: 95%
|
||||
}
|
||||
/* Calendar : General */
|
||||
.calendar {
|
||||
@ -1699,10 +1562,19 @@ div#pedigree {
|
||||
color: #542;
|
||||
padding:.3em 0 .2em 0;
|
||||
background-color: #FFF;
|
||||
vertical-align: top;
|
||||
height: 2em;
|
||||
}
|
||||
.calendar thead tr th.weekend,
|
||||
#CreatorInfo {
|
||||
float:right;
|
||||
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;
|
||||
color: #000;
|
||||
@ -1725,8 +1597,8 @@ div#pedigree {
|
||||
font-size:1.2em;
|
||||
line-height:100%;
|
||||
text-align:center;
|
||||
border: 5px solid rgba(0,0,0,.0);
|
||||
color: #542;
|
||||
margin:0 0 0 .5em;
|
||||
padding:.2em 0;
|
||||
background-color: #D8F3D6;
|
||||
}
|
||||
@ -1766,12 +1638,9 @@ div#pedigree {
|
||||
display:block;
|
||||
width:92%;
|
||||
margin:0 4%;
|
||||
padding:.6em 0 .3em 0;
|
||||
padding:.2em 0 .3em 0;
|
||||
border-top: dashed 1px #000;
|
||||
}
|
||||
.calendar tbody tr td ul li:first-child {
|
||||
border-top: 10px;
|
||||
}
|
||||
|
||||
/* Calendar : Birthday, Anniversary, Highlight */
|
||||
.calendar tbody tr td ul li em {
|
||||
@ -1789,9 +1658,9 @@ div#pedigree {
|
||||
}
|
||||
|
||||
/* Calendar : Previous-Next Month */
|
||||
.calendar tbody tr td.previous,
|
||||
.calendar tbody tr td.next,
|
||||
.calendar tbody tr td.previous div.date,
|
||||
.calendar tbody tr td.previous,
|
||||
.calendar tbody tr td.next,
|
||||
.calendar tbody tr td.previous div.date,
|
||||
.calendar tbody tr td.next div.date {
|
||||
color: #333;
|
||||
background-color: #D8F3D6;
|
||||
@ -1802,10 +1671,13 @@ body#fullyearlinked {
|
||||
background-color: #FFF;
|
||||
}
|
||||
body#fullyearlinked div.content {
|
||||
width:963px;
|
||||
margin:0 auto;
|
||||
padding:15px 0 2px 2px;
|
||||
}
|
||||
body#fullyearlinked table.calendar {
|
||||
float:left;
|
||||
width:320px;
|
||||
height:18em;
|
||||
border:solid 1px #000;
|
||||
}
|
||||
@ -1820,8 +1692,10 @@ body#fullyearlinked table.calendar thead tr th.monthName {
|
||||
padding:2px 0;
|
||||
border-bottom: solid 1px #000;
|
||||
}
|
||||
body#fullyearlinked table.calendar tbody tr td {
|
||||
height:3em;
|
||||
}
|
||||
body#fullyearlinked table.calendar tbody tr td.emptyDays {
|
||||
height:52px;
|
||||
background-color: #FFF;
|
||||
}
|
||||
body#fullyearlinked table.calendar tbody tr td.saturday {
|
||||
@ -1859,83 +1733,3 @@ table.oneday tbody tr td.ColumnText {
|
||||
table.oneday tbody tr td.ColumnEvent {
|
||||
width: 10%;
|
||||
}
|
||||
#WebCal table.calendar tfoot {
|
||||
display: none;
|
||||
}
|
||||
#WebCal table.calendar tr td {
|
||||
word-wrap: break-word;
|
||||
padding: 2px;
|
||||
}
|
||||
#WebCal .calendar tr td .empty {
|
||||
border: 5px solid rgba(255,255,255,.0);
|
||||
}
|
||||
#WebCal .calendar tr td .clickable {
|
||||
border: 5px solid rgba(255,255,255,.0);
|
||||
}
|
||||
#WebCal .calendar tr td .clickable:hover {
|
||||
display: block;
|
||||
overflow:auto;
|
||||
word-wrap: break-word;
|
||||
cursor: text;
|
||||
border-radius: 10px 0px 10px 10px;
|
||||
border: 5px solid #000290;
|
||||
padding: 0px;
|
||||
}
|
||||
body#fullyearlinked #YearGlance tbody td {
|
||||
height:48px;
|
||||
vertical-align: middle;
|
||||
text-align: center;
|
||||
padding-left: 3px;
|
||||
}
|
||||
body#fullyearlinked #YearGlance tbody td .date {
|
||||
font-size: 30px;
|
||||
vertical-align: middle;
|
||||
text-align: center;
|
||||
border-radius: 45px;
|
||||
float: none;
|
||||
border: 5px solid rgba(0,0,0,.0);
|
||||
}
|
||||
body#fullyearlinked #YearGlance tbody td:hover .date {
|
||||
border-radius: 45px;
|
||||
border: 5px solid;
|
||||
}
|
||||
h4 button.icon {
|
||||
width: 0.9em;
|
||||
border: 0px solid;
|
||||
padding: 0;
|
||||
opacity: 1;
|
||||
transform: rotate(90deg);
|
||||
transition: transform 200ms ease-out 0s;
|
||||
background: transparent;
|
||||
}
|
||||
h4 button.icon-close {
|
||||
transform: rotate(90deg);
|
||||
transition: transform 0.2s linear;
|
||||
}
|
||||
h4 button.icon-open {
|
||||
transform: rotate(180deg);
|
||||
transition: transform 0.2s linear;
|
||||
}
|
||||
svg {
|
||||
fill: #13A926;
|
||||
}
|
||||
/* Go to the top of the page */
|
||||
#gototop {
|
||||
display: none;
|
||||
position: fixed;
|
||||
bottom: 10px;
|
||||
right: 20px;
|
||||
z-index: 999;
|
||||
border: none;
|
||||
background-color: transparent;
|
||||
color: black;
|
||||
cursor: pointer;
|
||||
border-radius: 4px;
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
#gototop:hover {
|
||||
background-color: #BCEAF6;
|
||||
}
|
||||
|
||||
@ -1,15 +1,14 @@
|
||||
/*
|
||||
*******************************************************************************
|
||||
**************************************************************************************************
|
||||
Copyright Holder and License
|
||||
*******************************************************************************
|
||||
**************************************************************************************************
|
||||
GRAMPS Cascading Style Sheet
|
||||
Style Name: Basic - Cypress
|
||||
Style Author: Jason Simanek (2008)
|
||||
Note: Adapted from GRAMPS original Modern Style stylesheet with colors from the
|
||||
original 'Tranquil' stylesheet
|
||||
*******************************************************************************
|
||||
Note: Adapted from GRAMPS original Modern Style stylesheet with colors from the original 'Tranquil' stylesheet
|
||||
**************************************************************************************************
|
||||
This website was created with GRAMPS <http://www.gramps-project.org/>
|
||||
-------------------------------------------------------------------------------
|
||||
--------------------------------------------------------------------------------------------------
|
||||
GRAMPS is a Free Software Project for Genealogy, offering a professional
|
||||
|
||||
genealogy program, and a wiki open to all. It is a community project, created,
|
||||
@ -17,7 +16,7 @@ developed and governed by genealogists.
|
||||
|
||||
Go to <http://gramps-project.org/> to learn more!
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
--------------------------------------------------------------------------------------------------
|
||||
Copyright 2008 Jason M. Simanek
|
||||
Copyright 2009 Stephane Charette
|
||||
Copyright (C) 2008-2011 Rob G. Healey <robhealey1@gmail.com>
|
||||
@ -37,10 +36,10 @@ 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
|
||||
GRAMPS. If not, see <http://www.gnu.org/licenses/>.
|
||||
-------------------------------------------------------------------------------
|
||||
--------------------------------------------------------------------------------------------------
|
||||
|
||||
Color Palette
|
||||
-------------------------------------------------------------------------------
|
||||
--------------------------------------------------------------------------------------------------
|
||||
|
||||
black #000
|
||||
slate dark #454
|
||||
@ -48,14 +47,14 @@ slate #7C8F7C
|
||||
slate light #9DBF9D
|
||||
slate very light #E0E6E0
|
||||
white #FFF
|
||||
-------------------------------------------------------------------------------
|
||||
--------------------------------------------------------------------------------------------------
|
||||
Characteristic of this style is that it uses the full width of the browser
|
||||
window and that horizontal highlighting bars extend over the full width of
|
||||
the page.
|
||||
-------------------------------------------------------------------------------
|
||||
--------------------------------------------------------------------------------------------------
|
||||
|
||||
NarrativeWeb Styles
|
||||
-------------------------------------------------------------------------------
|
||||
------------------------------------------------------------------------------------------------
|
||||
|
||||
General Elements
|
||||
----------------------------------------------------- */
|
||||
@ -97,16 +96,6 @@ body > div {
|
||||
.content {
|
||||
padding: 0em 0.5em;
|
||||
}
|
||||
body#fullyearlinked table.calendar {
|
||||
float: none;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
@media only screen and (width > 1080px) {
|
||||
body#fullyearlinked table.calendar {
|
||||
float: left;
|
||||
width: 33.3%;
|
||||
}
|
||||
}
|
||||
|
||||
/* General Text
|
||||
@ -163,7 +152,6 @@ a[href]:hover, a[href]:active {
|
||||
----------------------------------------------------- */
|
||||
div#nav, #subnavigation {
|
||||
border: solid 1px #454; /* needed by IE7 */
|
||||
position: relative;
|
||||
}
|
||||
#subnavigation ul {
|
||||
overflow: hidden;
|
||||
@ -204,36 +192,6 @@ div#nav ul li.CurrentSection a {
|
||||
color: #454;
|
||||
background-color: white;
|
||||
}
|
||||
div#nav li.lang {
|
||||
color: #E0E6E0;
|
||||
font-size: smaller;
|
||||
font-family: sans-serif;
|
||||
padding-top: .3em;
|
||||
padding-bottom: .3em;
|
||||
font-weight: bold;
|
||||
}
|
||||
div#nav li.lang:hover > ul {
|
||||
visibility: visible;
|
||||
opacity: 1;
|
||||
}
|
||||
div#nav ul.lang {
|
||||
position: absolute;
|
||||
visibility: hidden;
|
||||
opacity: 0;
|
||||
z-index: 999;
|
||||
padding: 0px;
|
||||
background-color: #454;
|
||||
top: -1em;
|
||||
font-size: larger;
|
||||
font-family: sans-serif;
|
||||
}
|
||||
div#nav ul.lang:hover {
|
||||
float: initial;
|
||||
}
|
||||
div#nav ul.lang li {
|
||||
float: none;
|
||||
padding: 1px 2px;
|
||||
}
|
||||
/* Alphabet Navigation
|
||||
----------------------------------------------------- */
|
||||
div#alphanav {
|
||||
@ -271,7 +229,7 @@ div#alphanav ul li a:hover {
|
||||
}
|
||||
|
||||
/* Responsive navigation */
|
||||
button.navIcon {
|
||||
a.navIcon {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@ -297,6 +255,11 @@ div#nav::after {
|
||||
|
||||
.nav {
|
||||
background: none; /* Works in IE too. */
|
||||
/*
|
||||
width: 200px;
|
||||
position: absolute;
|
||||
z-index: 10;
|
||||
*/
|
||||
}
|
||||
|
||||
/* Undo some of the #nav styles - to enable the class .nav */
|
||||
@ -318,14 +281,11 @@ div#nav::after {
|
||||
.nav li {display: none;}
|
||||
.nav ul {display: none;}
|
||||
|
||||
button.navIcon {
|
||||
a.navIcon {
|
||||
font-size:1.3em;
|
||||
display: block;
|
||||
margin: 0.1em 0.4em 0.4em 0.4em;
|
||||
float: left;
|
||||
font-size:2.9em;
|
||||
line-height: 35px;
|
||||
border: 0px;
|
||||
color: #E0E6E0;
|
||||
background-color: #454;
|
||||
}
|
||||
|
||||
.nav.responsive {position: absolute; display: block; z-index: 100;}
|
||||
@ -336,10 +296,11 @@ div#nav::after {
|
||||
margin-right: 10px;
|
||||
}
|
||||
.nav.responsive li {
|
||||
/* float: left; */
|
||||
display: block;
|
||||
text-align: left;
|
||||
color: #454;
|
||||
background-color: #454;
|
||||
background-color: #E0E6E0;
|
||||
/* required by IE */
|
||||
float: left;
|
||||
clear: both;
|
||||
@ -357,21 +318,6 @@ div#nav::after {
|
||||
.content {
|
||||
padding: 0em 0.5em;
|
||||
}
|
||||
.lang {
|
||||
position: relative;
|
||||
}
|
||||
.lang > .lang {
|
||||
top: 0;
|
||||
left: 100%;
|
||||
margin-top: -6px;
|
||||
margin-left: -1px;
|
||||
-webkit-border-radius: 0 6px 6px 6px;
|
||||
-moz-border-radius: 0 6px 6px 6px;
|
||||
border-radius: 0 6px 6px 6px;
|
||||
}
|
||||
.lang:hover > .lang {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
/* Main Table
|
||||
@ -423,6 +369,9 @@ td.ColumnLetter, td.ColumnRowLabel {
|
||||
td.ColumnEvent, td.ColumnDate {
|
||||
white-space: nowrap;
|
||||
}
|
||||
td.ColumnPlace, td.ColumnDescription {
|
||||
width: 20%
|
||||
}
|
||||
/* end of customizations by Stephane */
|
||||
td.ColumnBirth, td.ColumnDeath, td.ColumnPartner, td.ColumnParents {
|
||||
font-size: 90%;
|
||||
@ -481,31 +430,12 @@ table.surname td.ColumnName {
|
||||
table.surname td.ColumnName > a {
|
||||
padding-left: 15px;
|
||||
}
|
||||
table#SortByName tr:hover td.ColumnSurname,
|
||||
table#SortByCount tr:hover td.ColumnQuantity {
|
||||
background-color: #9DBF9D;
|
||||
}
|
||||
table#SortByName tr:hover,
|
||||
table#SortByCount tr:hover,
|
||||
table#SortByName tr:hover td.ColumnQuantity,
|
||||
table#SortByCount tr:hover td.ColumnSurname {
|
||||
background-color: #9DBF9D;
|
||||
}
|
||||
table.surname tr:hover,
|
||||
table.surname tr:hover td.ColumnName {
|
||||
background-color: #9DBF9D;
|
||||
}
|
||||
|
||||
/* Individuals
|
||||
----------------------------------------------------- */
|
||||
table.IndividualList td.ColumnSurname {
|
||||
background-color: #E0E6E0;
|
||||
}
|
||||
#parents table.infolist tr:hover,
|
||||
table.IndividualList tr:hover,
|
||||
table.IndividualList tr:hover td.ColumnSurname {
|
||||
background-color: #9DBF9D;
|
||||
}
|
||||
|
||||
/* Places
|
||||
----------------------------------------------------- */
|
||||
@ -519,10 +449,6 @@ table.IndividualList tr:hover td.ColumnSurname {
|
||||
#Places table.infolist td.ColumnName > a {
|
||||
padding-left: 1ex;
|
||||
}
|
||||
#Places table.infolist tr:hover,
|
||||
#Places table.infolist tr:hover td.ColumnName {
|
||||
background-color: #9DBF9D;
|
||||
}
|
||||
|
||||
/* Events
|
||||
----------------------------------------------------- */
|
||||
@ -538,10 +464,6 @@ table.IndividualList tr:hover td.ColumnSurname {
|
||||
#EventList td.ColumnPerson a {
|
||||
display: inline;
|
||||
}
|
||||
#EventList table.infolist tr:hover,
|
||||
#EventList table.infolist tr:hover td.ColumnType {
|
||||
background-color: #9DBF9D;
|
||||
}
|
||||
#EventList td.ColumnPerson span.person:after,
|
||||
#EventList td.ColumnPerson span.father:after,
|
||||
#EventList td.ColumnPerson span.mother:after,
|
||||
@ -562,49 +484,10 @@ table.IndividualList tr:hover td.ColumnSurname {
|
||||
#EventDetail td.ColumnPerson span.mother:last-child:after {
|
||||
content: "";
|
||||
}
|
||||
table.eventlist tbody tr td:first-child,
|
||||
table.eventlist thead tr th:first-child {
|
||||
padding-left: 15px;
|
||||
}
|
||||
#attributes table.infolist td.ColumnType {
|
||||
width: 10%;
|
||||
padding-left: 15px;
|
||||
}
|
||||
#attributes table.infolist td.ColumnValue {
|
||||
width: 15%;
|
||||
}
|
||||
#attributes table.infolist td.ColumnSources {
|
||||
width: 5%;
|
||||
padding-left: 5px;
|
||||
}
|
||||
#WebLinks table.infolist td.ColumnType {
|
||||
width: 10%;
|
||||
padding-left: 15px;
|
||||
}
|
||||
#events table.eventlist td.ColumnDate {
|
||||
padding-left: 15px;
|
||||
}
|
||||
#families table.eventlist tbody tr td:first-child,
|
||||
#families table.eventlist thead tr th:first-child {
|
||||
width: 10%;
|
||||
padding-left: 0px;
|
||||
}
|
||||
#families table.eventlist tbody tr td.ColumnDate,
|
||||
#families table.eventlist tbody tr td.ColumnNotes {
|
||||
padding-left: 15px;
|
||||
}
|
||||
|
||||
table.eventlist tbody tr td.ColumnSources {
|
||||
width: 5%;
|
||||
}
|
||||
table.eventlist th.ColumnDate {
|
||||
padding-left: 15px;
|
||||
width: 15%;
|
||||
}
|
||||
table.eventlist td.ColumnEvent,
|
||||
table.eventlist td.ColumnDate,
|
||||
table.eventlist td.ColumnPlace {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* Gallery
|
||||
----------------------------------------------------- */
|
||||
@ -659,10 +542,6 @@ table.eventlist td.ColumnPlace {
|
||||
div#SourceDetail {
|
||||
margin: 0 auto;
|
||||
}
|
||||
#Sources table.infolist tr:hover,
|
||||
#Sources table.infolist tr:hover td.ColumnType {
|
||||
background-color: #9DBF9D;
|
||||
}
|
||||
|
||||
/* Contact
|
||||
----------------------------------------------------- */
|
||||
@ -724,7 +603,7 @@ div#SourceDetail {
|
||||
}
|
||||
.subsection {
|
||||
clear: both;
|
||||
overflow-x: auto;
|
||||
overflow: hidden;
|
||||
}
|
||||
.subsection p {
|
||||
margin: 0px;
|
||||
@ -732,14 +611,6 @@ div#SourceDetail {
|
||||
|
||||
/* Subsection : Families
|
||||
----------------------------------------------------- */
|
||||
#families table.infolist td.ColumnValue.Child table.infolist tr:hover,
|
||||
table.relationships tr:hover {
|
||||
background-color: #9DBF9D;
|
||||
}
|
||||
div.content table.tags {
|
||||
text-align: left;
|
||||
width: auto;
|
||||
}
|
||||
div#families table.fixed_subtables table.eventlist {
|
||||
table-layout: fixed;
|
||||
}
|
||||
@ -761,12 +632,6 @@ div#families table.attrlist td.ColumnType {
|
||||
#indivgallery {
|
||||
background-color: white;
|
||||
}
|
||||
#indivgallery a {
|
||||
color: black;
|
||||
text-decoration: none;
|
||||
word-wrap: break-word;
|
||||
display: block;
|
||||
}
|
||||
#gallery .gallerycell {
|
||||
float: left;
|
||||
width: 130px;
|
||||
@ -783,8 +648,7 @@ div#families table.attrlist td.ColumnType {
|
||||
}
|
||||
#indivgallery .thumbnail {
|
||||
float: left;
|
||||
width: 160px;
|
||||
height: 220px;
|
||||
width: 130px;
|
||||
font-size: smaller;
|
||||
text-align: center;
|
||||
margin: 0.8em 0.5em;
|
||||
@ -798,6 +662,7 @@ div#families table.attrlist td.ColumnType {
|
||||
}
|
||||
#gallery div.indexno {
|
||||
float: right;
|
||||
width: 1.8em;
|
||||
font-size: large;
|
||||
text-align: center;
|
||||
background-color: #CCC;
|
||||
@ -845,29 +710,11 @@ div.snapshot div.thumbnail {
|
||||
h4 + div.grampsstylednote, a.familymap {
|
||||
margin: 1em 15px;
|
||||
}
|
||||
i.NoteType {
|
||||
font-weight: bold;
|
||||
font-size: .8em;
|
||||
}
|
||||
i + div.grampsstylednote p {
|
||||
margin: 0 0 0.3em 0;
|
||||
}
|
||||
div.grampsstylednote p {
|
||||
padding-bottom: 0.6em;
|
||||
}
|
||||
div.grampsstylednote a {
|
||||
text-decoration: underline;
|
||||
font-weight: bold;
|
||||
color: #9DBF9D;
|
||||
}
|
||||
div.grampsstylednote a:visited {
|
||||
color: red;
|
||||
}
|
||||
|
||||
/* Subsection : References
|
||||
----------------------------------------------------- */
|
||||
#references ol {
|
||||
margin-left: 2em;
|
||||
margin-bottom: 0.5em;
|
||||
}
|
||||
|
||||
/* Subsection : Family Map
|
||||
@ -875,40 +722,11 @@ div.grampsstylednote a:visited {
|
||||
a.familymap {
|
||||
display: block;
|
||||
}
|
||||
a.family_map {
|
||||
margin-left: 15px;
|
||||
}
|
||||
|
||||
/* Subsection : Source References
|
||||
----------------------------------------------------- */
|
||||
#sourcerefs ol#srcr {
|
||||
counter-reset: itema;
|
||||
list-style-type: none;
|
||||
display: block;
|
||||
margin-top: .1em;
|
||||
}
|
||||
#sourcerefs ol#citr {
|
||||
counter-reset: itemb;
|
||||
list-style-type: none;
|
||||
}
|
||||
#sourcerefs ol#srcr > li::before {
|
||||
content: counter(itema);
|
||||
}
|
||||
#sourcerefs ol#citr > li::before {
|
||||
content: counter(itema)counter(itemb, lower-alpha);
|
||||
}
|
||||
#sourcerefs ol#srcr > li {
|
||||
counter-increment: itema;
|
||||
margin-top: .1em;
|
||||
}
|
||||
#sourcerefs ol#citr > li {
|
||||
counter-increment: itemb;
|
||||
margin-top: .1em;
|
||||
}
|
||||
#sourcerefs ol#citr ul {
|
||||
list-style: none;
|
||||
display: inline-block;
|
||||
vertical-align: top;
|
||||
#sourcerefs ol li ol {
|
||||
list-style-type: lower-alpha;
|
||||
}
|
||||
|
||||
/* Subsection : Pedigree
|
||||
@ -969,16 +787,10 @@ a.family_map {
|
||||
padding-right: 15px;
|
||||
}
|
||||
|
||||
/* Updates
|
||||
----------------------------------------------------- */
|
||||
#Updates table.list td.date {
|
||||
width: 20%;
|
||||
}
|
||||
|
||||
/* Overwritten
|
||||
----------------------------------------------------- */
|
||||
body#FamilyMap {
|
||||
background-color: #454 !important;
|
||||
background-color: #454 ! important;
|
||||
}
|
||||
|
||||
/* Calendar Styles
|
||||
@ -997,12 +809,16 @@ table.calendar {
|
||||
background-color: white;
|
||||
border-bottom-style: none;
|
||||
padding-top: 1em;
|
||||
vertical-align: top;
|
||||
height: 2em;
|
||||
}
|
||||
.calendar thead th abbr {
|
||||
border-bottom-style: none;
|
||||
}
|
||||
#CreatorInfo {
|
||||
float: right;
|
||||
margin: -1em 15px 0px 0px;
|
||||
font-weight: bold;
|
||||
color: #7C8F7C;
|
||||
}
|
||||
.calendar tfoot tr td {
|
||||
border-top: solid 4px #7C8F7C;
|
||||
vertical-align: middle;
|
||||
@ -1020,7 +836,7 @@ table.calendar {
|
||||
|
||||
/* Calendar : Date Container */
|
||||
.calendar td {
|
||||
padding: 0px 5px 0px 1ex;
|
||||
padding: 0px 0px 0px 1ex;
|
||||
border-width: 1px 0px 0px 1px;
|
||||
border-style: solid;
|
||||
border-color: #9DBF9D;
|
||||
@ -1028,7 +844,7 @@ table.calendar {
|
||||
}
|
||||
.calendar td:first-child {
|
||||
border-left-style: none;
|
||||
padding: 0px 5px 0px 1ex;
|
||||
padding: 0px 0px 0px 1ex;
|
||||
}
|
||||
.calendar tbody tr:first-child td {
|
||||
border-top-style: none;
|
||||
@ -1076,6 +892,8 @@ body#fullyearlinked div.content {
|
||||
overflow: hidden;
|
||||
}
|
||||
body#fullyearlinked table.calendar {
|
||||
float: left;
|
||||
width: 33.3%;
|
||||
height: 18em;
|
||||
border: solid 1px black;
|
||||
}
|
||||
@ -1092,87 +910,3 @@ body#fullyearlinked table.calendar tbody td {
|
||||
body#OneDay div.content {
|
||||
overflow: hidden;
|
||||
}
|
||||
body#OneDay h3 {
|
||||
font-size: xx-large;
|
||||
vertical-align: top;
|
||||
height: 2em;
|
||||
}
|
||||
#WebCal table.calendar tfoot {
|
||||
display: none;
|
||||
}
|
||||
#WebCal table.calendar tr td {
|
||||
word-wrap: break-word;
|
||||
padding: 2px;
|
||||
}
|
||||
#WebCal .calendar tr td .empty {
|
||||
border: 5px solid rgba(255,255,255,.0);
|
||||
}
|
||||
#WebCal .calendar tr td .clickable {
|
||||
border: 5px solid rgba(255,255,255,.0);
|
||||
}
|
||||
#WebCal .calendar tr td .clickable:hover {
|
||||
display: block;
|
||||
overflow:auto;
|
||||
word-wrap: break-word;
|
||||
cursor: text;
|
||||
border-radius: 10px 0px 10px 10px;
|
||||
border: 5px solid #454;
|
||||
}
|
||||
body#fullyearlinked #YearGlance tbody td {
|
||||
height:48px;
|
||||
vertical-align: middle;
|
||||
text-align: center;
|
||||
padding-left: 6px;
|
||||
}
|
||||
body#fullyearlinked #YearGlance tbody td .date {
|
||||
font-size: 30px;
|
||||
vertical-align: middle;
|
||||
text-align: center;
|
||||
border-radius: 45px;
|
||||
float: none;
|
||||
border: 5px solid rgba(0,0,0,.0);
|
||||
}
|
||||
body#fullyearlinked #YearGlance tbody td:hover .date {
|
||||
border-radius: 45px;
|
||||
border: 5px solid;
|
||||
}
|
||||
h4 button.icon {
|
||||
width: 0.9em;
|
||||
border: 0px solid;
|
||||
padding: 0;
|
||||
opacity: 1;
|
||||
transform: rotate(90deg);
|
||||
transition: transform 200ms ease-out 0s;
|
||||
background: transparent;
|
||||
}
|
||||
h4 button.icon-close {
|
||||
transform: rotate(90deg);
|
||||
transition: transform 0.2s linear;
|
||||
}
|
||||
h4 button.icon-open {
|
||||
transform: rotate(180deg);
|
||||
transition: transform 0.2s linear;
|
||||
}
|
||||
svg {
|
||||
fill: #9DBF9D;
|
||||
}
|
||||
/* Go to the top of the page */
|
||||
#gototop {
|
||||
display: none;
|
||||
position: fixed;
|
||||
bottom: 10px;
|
||||
right: 20px;
|
||||
z-index: 999;
|
||||
border: none;
|
||||
background-color: white;
|
||||
color: black;
|
||||
cursor: pointer;
|
||||
border-radius: 4px;
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
#gototop:hover {
|
||||
background-color: #E0E6E0;
|
||||
}
|
||||
|
||||
@ -1,15 +1,14 @@
|
||||
/*
|
||||
*******************************************************************************
|
||||
**************************************************************************************************
|
||||
Copyright Holder and License
|
||||
*******************************************************************************
|
||||
**************************************************************************************************
|
||||
GRAMPS Cascading Style Sheet
|
||||
Style Name: Basic - Lilac
|
||||
Style Author: Jason M. Simanek (2008)
|
||||
Note: Adapted from GRAMPS original Modern Style stylesheet with colors from the
|
||||
original 'Business' stylesheet
|
||||
*******************************************************************************
|
||||
Note: Adapted from GRAMPS original Modern Style stylesheet with colors from the original 'Business' stylesheet
|
||||
**************************************************************************************************
|
||||
This website was created with GRAMPS <http://www.gramps-project.org/>
|
||||
-------------------------------------------------------------------------------
|
||||
--------------------------------------------------------------------------------------------------
|
||||
GRAMPS is a Free Software Project for Genealogy, offering a professional
|
||||
|
||||
genealogy program, and a wiki open to all. It is a community project, created,
|
||||
@ -17,7 +16,7 @@ developed and governed by genealogists.
|
||||
|
||||
Go to <http://gramps-project.org/> to learn more!
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
--------------------------------------------------------------------------------------------------
|
||||
Copyright 2008 Jason M. Simanek
|
||||
Copyright 2009 Stephane Charette
|
||||
Copyright (C) 2008-2011 Rob G. Healey <robhealey1@gmail.com>
|
||||
@ -37,10 +36,10 @@ 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
|
||||
GRAMPS. If not, see <http://www.gnu.org/licenses/>.
|
||||
-------------------------------------------------------------------------------
|
||||
--------------------------------------------------------------------------------------------------
|
||||
|
||||
Color Palette
|
||||
-------------------------------------------------------------------------------
|
||||
--------------------------------------------------------------------------------------------------
|
||||
|
||||
black #000
|
||||
lilac dark #2E2E61
|
||||
@ -48,14 +47,14 @@ lilac #669
|
||||
lilac light #B4B4CB
|
||||
lilac very light #E0E0E9
|
||||
white #FAFAFF
|
||||
-------------------------------------------------------------------------------
|
||||
--------------------------------------------------------------------------------------------------
|
||||
Characteristic of this style is that it uses the full width of the browser
|
||||
window and that horizontal highlighting bars extend over the full width of
|
||||
the page.
|
||||
-------------------------------------------------------------------------------
|
||||
--------------------------------------------------------------------------------------------------
|
||||
|
||||
NarrativeWeb Styles
|
||||
-------------------------------------------------------------------------------
|
||||
------------------------------------------------------------------------------------------------
|
||||
|
||||
General Elements
|
||||
----------------------------------------------------- */
|
||||
@ -97,16 +96,6 @@ body > div {
|
||||
.content {
|
||||
padding: 0em 0.5em;
|
||||
}
|
||||
body#fullyearlinked table.calendar {
|
||||
float: none;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
@media only screen and (width > 1080px) {
|
||||
body#fullyearlinked table.calendar {
|
||||
float: left;
|
||||
width: 33.3%;
|
||||
}
|
||||
}
|
||||
|
||||
/* General Text
|
||||
@ -164,7 +153,6 @@ a[href]:hover, a[href]:active {
|
||||
----------------------------------------------------- */
|
||||
div#nav, #subnavigation {
|
||||
border: solid 1px #E0E0E9; /* needed by IE7 */
|
||||
position: relative;
|
||||
}
|
||||
#subnavigation ul {
|
||||
overflow: hidden;
|
||||
@ -202,35 +190,6 @@ div#nav ul li.CurrentSection a {
|
||||
#subnavigation ul li.CurrentSection a {
|
||||
background-color: #FAFAFF;
|
||||
}
|
||||
div#nav li.lang {
|
||||
font-size: smaller;
|
||||
font-family: sans-serif;
|
||||
padding-top: .3em;
|
||||
padding-bottom: .3em;
|
||||
font-weight: bold;
|
||||
}
|
||||
div#nav li.lang:hover > ul {
|
||||
visibility: visible;
|
||||
opacity: 1;
|
||||
}
|
||||
div#nav ul.lang {
|
||||
position: absolute;
|
||||
visibility: hidden;
|
||||
opacity: 0;
|
||||
z-index: 999;
|
||||
padding: 2px;
|
||||
background-color: #E0E0E9;
|
||||
top: -1em;
|
||||
font-size: larger;
|
||||
font-family: sans-serif;
|
||||
}
|
||||
div#nav ul.lang:hover {
|
||||
float: initial;
|
||||
}
|
||||
div#nav ul.lang li {
|
||||
float: none;
|
||||
padding: 1px 2px;
|
||||
}
|
||||
|
||||
/* Alphabet Navigation
|
||||
----------------------------------------------------- */
|
||||
@ -268,7 +227,7 @@ div#alphanav ul li a:hover {
|
||||
}
|
||||
|
||||
/* Responsive navigation */
|
||||
button.navIcon {
|
||||
a.navIcon {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@ -294,6 +253,11 @@ div#nav::after {
|
||||
|
||||
.nav {
|
||||
background: none; /* Works in IE too. */
|
||||
/*
|
||||
width: 200px;
|
||||
position: absolute;
|
||||
z-index: 10;
|
||||
*/
|
||||
}
|
||||
|
||||
/* Undo some of the #nav styles - to enable the class .nav */
|
||||
@ -315,14 +279,11 @@ div#nav::after {
|
||||
.nav li {display: none;}
|
||||
.nav ul {display: none;}
|
||||
|
||||
button.navIcon {
|
||||
a.navIcon {
|
||||
font-size:1.3em;
|
||||
display: block;
|
||||
margin: 0.1em 0.4em 0.4em 0.4em;
|
||||
float: left;
|
||||
font-size:2.9em;
|
||||
line-height: 35px;
|
||||
border: 0px;
|
||||
color: #2E2E61;
|
||||
background-color: #E0E0E9;
|
||||
}
|
||||
|
||||
.nav.responsive {position: absolute; display: block; z-index: 100;}
|
||||
@ -333,6 +294,7 @@ div#nav::after {
|
||||
margin-right: 10px;
|
||||
}
|
||||
.nav.responsive li {
|
||||
/* float: left; */
|
||||
display: block;
|
||||
text-align: left;
|
||||
background-color: #669;
|
||||
@ -349,21 +311,6 @@ div#nav::after {
|
||||
.content {
|
||||
padding: 0em 0.5em;
|
||||
}
|
||||
.lang {
|
||||
position: relative;
|
||||
}
|
||||
.lang > .lang {
|
||||
top: 0;
|
||||
left: 100%;
|
||||
margin-top: -6px;
|
||||
margin-left: -1px;
|
||||
-webkit-border-radius: 0 6px 6px 6px;
|
||||
-moz-border-radius: 0 6px 6px 6px;
|
||||
border-radius: 0 6px 6px 6px;
|
||||
}
|
||||
.lang:hover > .lang {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
/* Main Table
|
||||
@ -468,31 +415,12 @@ table.surname td.ColumnName {
|
||||
table.surname td.ColumnName > a {
|
||||
padding-left: 15px;
|
||||
}
|
||||
table#SortByName tr:hover td.ColumnSurname,
|
||||
table#SortByCount tr:hover td.ColumnQuantity {
|
||||
background-color: #B4B4CB;
|
||||
}
|
||||
table#SortByName tr:hover,
|
||||
table#SortByCount tr:hover,
|
||||
table#SortByName tr:hover td.ColumnQuantity,
|
||||
table#SortByCount tr:hover td.ColumnSurname {
|
||||
background-color: #B4B4CB;
|
||||
}
|
||||
table.surname tr:hover,
|
||||
table.surname tr:hover td.ColumnName {
|
||||
background-color: #B4B4CB;
|
||||
}
|
||||
|
||||
/* Individuals
|
||||
----------------------------------------------------- */
|
||||
table.IndividualList td.ColumnSurname {
|
||||
background-color: #E0E0E9;
|
||||
}
|
||||
#parents table.infolist tr:hover,
|
||||
table.IndividualList tr:hover,
|
||||
table.IndividualList tr:hover td.ColumnSurname {
|
||||
background-color: #B4B4CB;
|
||||
}
|
||||
|
||||
/* Places
|
||||
----------------------------------------------------- */
|
||||
@ -509,10 +437,6 @@ table.IndividualList tr:hover td.ColumnSurname {
|
||||
#Places table.infolist td.ColumnName > a {
|
||||
padding-left: 1ex;
|
||||
}
|
||||
#Places table.infolist tr:hover,
|
||||
#Places table.infolist tr:hover td.ColumnName {
|
||||
background-color: #B4B4CB;
|
||||
}
|
||||
|
||||
/* Events
|
||||
----------------------------------------------------- */
|
||||
@ -528,10 +452,6 @@ table.IndividualList tr:hover td.ColumnSurname {
|
||||
#EventList td.ColumnPerson a {
|
||||
display: inline;
|
||||
}
|
||||
#EventList table.infolist tr:hover,
|
||||
#EventList table.infolist tr:hover td.ColumnType {
|
||||
background-color: #B4B4CB;
|
||||
}
|
||||
#EventList td.ColumnPerson span.person:after,
|
||||
#EventList td.ColumnPerson span.father:after,
|
||||
#EventList td.ColumnPerson span.mother:after,
|
||||
@ -552,55 +472,10 @@ table.IndividualList tr:hover td.ColumnSurname {
|
||||
#EventDetail td.ColumnPerson span.mother:last-child:after {
|
||||
content: "";
|
||||
}
|
||||
#attributes table.infolist td.ColumnType {
|
||||
width: 10%;
|
||||
padding-left: 15px;
|
||||
}
|
||||
#attributes table.infolist td.ColumnValue {
|
||||
width: 15%;
|
||||
}
|
||||
#attributes table.infolist td.ColumnSources {
|
||||
width: 5%;
|
||||
padding-left: 5px;
|
||||
}
|
||||
#WebLinks table.infolist td.ColumnType {
|
||||
width: 10%;
|
||||
padding-left: 15px;
|
||||
}
|
||||
#events table.eventlist td.ColumnDate {
|
||||
width: 15%;
|
||||
padding-left: 10px;
|
||||
}
|
||||
#families table.eventlist td.ColumnDate {
|
||||
width: 15%;
|
||||
padding-left: 10px;
|
||||
}
|
||||
#families table.eventlist tbody tr td:first-child,
|
||||
#families table.eventlist thead tr th:first-child {
|
||||
width: 10%;
|
||||
padding-left: 0px;
|
||||
}
|
||||
#families table.eventlist tbody tr td.ColumnDate,
|
||||
#families table.eventlist tbody tr td.ColumnNotes {
|
||||
padding-left: 20px;
|
||||
}
|
||||
table.eventlist tbody tr td:first-child,
|
||||
table.eventlist thead tr th:first-child {
|
||||
padding-left: 10px;
|
||||
}
|
||||
|
||||
table.eventlist tbody tr td.ColumnSources {
|
||||
padding-left: 20px;
|
||||
width: 5%;
|
||||
}
|
||||
#families table.eventlist th.ColumnDate {
|
||||
padding-left: 20px;
|
||||
width: 15%;
|
||||
}
|
||||
table.eventlist td.ColumnEvent,
|
||||
table.eventlist td.ColumnDate,
|
||||
table.eventlist td.ColumnPlace {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* Gallery
|
||||
----------------------------------------------------- */
|
||||
@ -655,10 +530,6 @@ table.eventlist td.ColumnPlace {
|
||||
div#SourceDetail {
|
||||
margin: 0 auto;
|
||||
}
|
||||
#Sources table.infolist tr:hover,
|
||||
#Sources table.infolist tr:hover td.ColumnType {
|
||||
background-color: #B4B4CB;
|
||||
}
|
||||
|
||||
/* Contact
|
||||
----------------------------------------------------- */
|
||||
@ -720,7 +591,7 @@ div#SourceDetail {
|
||||
}
|
||||
.subsection {
|
||||
clear: both;
|
||||
overflow-x: auto;
|
||||
overflow: hidden;
|
||||
}
|
||||
.subsection p {
|
||||
margin: 0px;
|
||||
@ -728,14 +599,6 @@ div#SourceDetail {
|
||||
|
||||
/* Subsection : Families
|
||||
----------------------------------------------------- */
|
||||
#families table.infolist td.ColumnValue.Child table.infolist tr:hover,
|
||||
table.relationships tr:hover {
|
||||
background-color: #B4B4CB;
|
||||
}
|
||||
div.content table.tags {
|
||||
text-align: left;
|
||||
width: auto;
|
||||
}
|
||||
div#families table.fixed_subtables table.eventlist {
|
||||
table-layout: fixed;
|
||||
}
|
||||
@ -757,12 +620,6 @@ div#families table.attrlist td.ColumnType {
|
||||
#indivgallery {
|
||||
background-color: white;
|
||||
}
|
||||
#indivgallery a {
|
||||
color: black;
|
||||
text-decoration: none;
|
||||
word-wrap: break-word;
|
||||
display: block;
|
||||
}
|
||||
#gallery .gallerycell {
|
||||
float: left;
|
||||
width: 130px;
|
||||
@ -779,8 +636,7 @@ div#families table.attrlist td.ColumnType {
|
||||
}
|
||||
#indivgallery .thumbnail {
|
||||
float: left;
|
||||
width: 160px;
|
||||
height: 220px;
|
||||
width: 130px;
|
||||
font-size: smaller;
|
||||
text-align: center;
|
||||
margin: 0.8em 0.5em;
|
||||
@ -794,6 +650,7 @@ div#families table.attrlist td.ColumnType {
|
||||
}
|
||||
#gallery div.indexno {
|
||||
float: right;
|
||||
width: 1.8em;
|
||||
font-size: large;
|
||||
text-align: center;
|
||||
background-color: #CCC;
|
||||
@ -841,29 +698,11 @@ div.snapshot div.thumbnail {
|
||||
h4 + div.grampsstylednote, a.familymap {
|
||||
margin: 1em 15px;
|
||||
}
|
||||
i.NoteType {
|
||||
font-weight: bold;
|
||||
font-size: .8em;
|
||||
}
|
||||
i + div.grampsstylednote p {
|
||||
margin: 0 0 0.3em 0;
|
||||
}
|
||||
div.grampsstylednote p {
|
||||
padding-bottom: 0.6em;
|
||||
}
|
||||
div.grampsstylednote a {
|
||||
text-decoration: underline;
|
||||
font-weight: bold;
|
||||
color: #2E2E61;
|
||||
}
|
||||
div.grampsstylednote a:visited {
|
||||
color: red;
|
||||
}
|
||||
|
||||
/* Subsection : References
|
||||
----------------------------------------------------- */
|
||||
#references ol {
|
||||
margin-left: 2em;
|
||||
margin-bottom: 0.5em;
|
||||
}
|
||||
|
||||
/* Subsection : Family Map
|
||||
@ -871,40 +710,11 @@ div.grampsstylednote a:visited {
|
||||
a.familymap {
|
||||
display: block;
|
||||
}
|
||||
a.family_map {
|
||||
margin-left: 15px;
|
||||
}
|
||||
|
||||
/* Subsection : Source References
|
||||
----------------------------------------------------- */
|
||||
#sourcerefs ol#srcr {
|
||||
counter-reset: itema;
|
||||
list-style-type: none;
|
||||
display: block;
|
||||
margin-top: .1em;
|
||||
}
|
||||
#sourcerefs ol#citr {
|
||||
counter-reset: itemb;
|
||||
list-style-type: none;
|
||||
}
|
||||
#sourcerefs ol#srcr > li::before {
|
||||
content: counter(itema);
|
||||
}
|
||||
#sourcerefs ol#citr > li::before {
|
||||
content: counter(itema)counter(itemb, lower-alpha);
|
||||
}
|
||||
#sourcerefs ol#srcr > li {
|
||||
counter-increment: itema;
|
||||
margin-top: .1em;
|
||||
}
|
||||
#sourcerefs ol#citr > li {
|
||||
counter-increment: itemb;
|
||||
margin-top: .1em;
|
||||
}
|
||||
#sourcerefs ol#citr ul {
|
||||
list-style: none;
|
||||
display: inline-block;
|
||||
vertical-align: top;
|
||||
#sourcerefs ol li ol {
|
||||
list-style-type: lower-alpha;
|
||||
}
|
||||
|
||||
/* Subsection : Pedigree
|
||||
@ -964,16 +774,10 @@ a.family_map {
|
||||
background-color: #B4B4CB;
|
||||
}
|
||||
|
||||
/* Updates
|
||||
----------------------------------------------------- */
|
||||
#Updates table.list td.date {
|
||||
width: 20%;
|
||||
}
|
||||
|
||||
/* Overwritten
|
||||
----------------------------------------------------- */
|
||||
body#FamilyMap {
|
||||
background-color: #E0E0E9 !important;
|
||||
background-color: #E0E0E9 ! important;
|
||||
}
|
||||
|
||||
/* Calendar Styles
|
||||
@ -992,12 +796,19 @@ table.calendar {
|
||||
background-color: #FAFAFF;
|
||||
border-bottom-style: none;
|
||||
padding-top: 1em;
|
||||
vertical-align: top;
|
||||
height: 2em;
|
||||
}
|
||||
.calendar thead th abbr {
|
||||
border-bottom-style: none;
|
||||
}
|
||||
#CreatorInfo {
|
||||
float: right;
|
||||
margin: -1em 15px 0px 0px;
|
||||
font-weight: bold;
|
||||
color: #669;
|
||||
}
|
||||
#CreatorInfo a[href]:hover {
|
||||
background-color: #B4B4CB;
|
||||
}
|
||||
.calendar tfoot tr td {
|
||||
border-top: solid 4px #669;
|
||||
vertical-align: middle;
|
||||
@ -1015,7 +826,7 @@ table.calendar {
|
||||
|
||||
/* Calendar : Date Container */
|
||||
.calendar td {
|
||||
padding: 0px 5px 0px 1ex;
|
||||
padding: 0px 0px 0px 1ex;
|
||||
border-width: 1px 0px 0px 1px;
|
||||
border-style: solid;
|
||||
border-color: #B4B4CB;
|
||||
@ -1023,7 +834,7 @@ table.calendar {
|
||||
}
|
||||
.calendar td:first-child {
|
||||
border-left-style: none;
|
||||
padding: 0px 5px 0px 1ex;
|
||||
padding: 0px 0px 0px 1ex;
|
||||
}
|
||||
.calendar tbody tr:first-child td {
|
||||
border-top-style: none;
|
||||
@ -1074,6 +885,8 @@ body#fullyearlinked div.content {
|
||||
overflow: hidden;
|
||||
}
|
||||
body#fullyearlinked table.calendar {
|
||||
float: left;
|
||||
width: 33.3%;
|
||||
height: 18em;
|
||||
border: solid 1px black;
|
||||
}
|
||||
@ -1090,88 +903,3 @@ body#fullyearlinked table.calendar tbody td {
|
||||
body#OneDay div.content {
|
||||
overflow: hidden;
|
||||
}
|
||||
body#OneDay h3 {
|
||||
font-size: xx-large;
|
||||
vertical-align: top;
|
||||
height: 2em;
|
||||
}
|
||||
#WebCal table.calendar tfoot {
|
||||
display: none;
|
||||
}
|
||||
#WebCal table.calendar tr td {
|
||||
word-wrap: break-word;
|
||||
padding: 2px;
|
||||
}
|
||||
#WebCal .calendar tr td .empty {
|
||||
border: 5px solid rgba(255,255,255,.0);
|
||||
}
|
||||
#WebCal .calendar tr td .clickable {
|
||||
border: 5px solid rgba(255,255,255,.0);
|
||||
}
|
||||
#WebCal .calendar tr td .clickable:hover {
|
||||
display: block;
|
||||
overflow:auto;
|
||||
word-wrap: break-word;
|
||||
cursor: text;
|
||||
border-radius: 10px 0px 10px 10px;
|
||||
border: 5px solid #2E2E61;
|
||||
padding: 0px;
|
||||
}
|
||||
body#fullyearlinked #YearGlance tbody td {
|
||||
height:48px;
|
||||
vertical-align: middle;
|
||||
text-align: center;
|
||||
padding-left: 6px;
|
||||
}
|
||||
body#fullyearlinked #YearGlance tbody td .date {
|
||||
font-size: 30px;
|
||||
vertical-align: middle;
|
||||
text-align: center;
|
||||
border-radius: 45px;
|
||||
float: none;
|
||||
border: 5px solid rgba(0,0,0,.0);
|
||||
}
|
||||
body#fullyearlinked #YearGlance tbody td:hover .date {
|
||||
border-radius: 45px;
|
||||
border: 5px solid;
|
||||
}
|
||||
h4 button.icon {
|
||||
width: 0.9em;
|
||||
border: 0px solid;
|
||||
padding: 0;
|
||||
opacity: 1;
|
||||
transform: rotate(90deg);
|
||||
transition: transform 200ms ease-out 0s;
|
||||
background: transparent;
|
||||
}
|
||||
h4 button.icon-close {
|
||||
transform: rotate(90deg);
|
||||
transition: transform 0.2s linear;
|
||||
}
|
||||
h4 button.icon-open {
|
||||
transform: rotate(180deg);
|
||||
transition: transform 0.2s linear;
|
||||
}
|
||||
svg {
|
||||
fill: #2E2E61;
|
||||
}
|
||||
/* Go to the top of the page */
|
||||
#gototop {
|
||||
display: none;
|
||||
position: fixed;
|
||||
bottom: 10px;
|
||||
right: 20px;
|
||||
z-index: 999;
|
||||
border: none;
|
||||
background-color: transparent;
|
||||
color: black;
|
||||
cursor: pointer;
|
||||
border-radius: 4px;
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
#gototop:hover {
|
||||
background-color: #E0E0E9;
|
||||
}
|
||||
|
||||
@ -1,15 +1,14 @@
|
||||
/*
|
||||
*******************************************************************************
|
||||
**************************************************************************************************
|
||||
Copyright Holder and License
|
||||
*******************************************************************************
|
||||
**************************************************************************************************
|
||||
GRAMPS Cascading Style Sheet
|
||||
Style Name: Basic-Peach Stylesheet
|
||||
Style Author: Jason M. Simanek (2008)
|
||||
Note: Adapted from GRAMPS original Modern Style stylesheet with a new orange
|
||||
color scheme.
|
||||
*******************************************************************************
|
||||
Note: Adapted from GRAMPS original Modern Style stylesheet with a new orange color scheme.
|
||||
**************************************************************************************************
|
||||
This website was created with GRAMPS <http://www.gramps-project.org/>
|
||||
-------------------------------------------------------------------------------
|
||||
--------------------------------------------------------------------------------------------------
|
||||
GRAMPS is a Free Software Project for Genealogy, offering a professional
|
||||
|
||||
genealogy program, and a wiki open to all. It is a community project, created,
|
||||
@ -17,7 +16,7 @@ developed and governed by genealogists.
|
||||
|
||||
Go to <http://gramps-project.org/> to learn more!
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
--------------------------------------------------------------------------------------------------
|
||||
Copyright 2008 Jason M. Simanek
|
||||
Copyright 2009 Stephane Charette
|
||||
Copyright (C) 2008-2011 Rob G. Healey <robhealey1@gmail.com>
|
||||
@ -37,10 +36,10 @@ 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
|
||||
GRAMPS. If not, see <http://www.gnu.org/licenses/>.
|
||||
-------------------------------------------------------------------------------
|
||||
--------------------------------------------------------------------------------------------------
|
||||
|
||||
Color Palette
|
||||
-------------------------------------------------------------------------------
|
||||
--------------------------------------------------------------------------------------------------
|
||||
|
||||
black #36220B
|
||||
brown #8C581C
|
||||
@ -48,14 +47,14 @@ orange dark #EA8414
|
||||
orange #FFC35E
|
||||
orange light #FFE09F
|
||||
yellow light #FFFBE7
|
||||
-------------------------------------------------------------------------------
|
||||
--------------------------------------------------------------------------------------------------
|
||||
Characteristic of this style is that it uses the full width of the browser
|
||||
window and that horizontal highlighting bars extend over the full width of
|
||||
the page.
|
||||
-------------------------------------------------------------------------------
|
||||
--------------------------------------------------------------------------------------------------
|
||||
|
||||
NarrativeWeb Styles
|
||||
-------------------------------------------------------------------------------
|
||||
------------------------------------------------------------------------------------------------
|
||||
|
||||
General Elements
|
||||
----------------------------------------------------- */
|
||||
@ -97,16 +96,6 @@ body > div {
|
||||
.content {
|
||||
padding: 0em 0.5em;
|
||||
}
|
||||
body#fullyearlinked table.calendar {
|
||||
float: none;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
@media only screen and (width > 1080px) {
|
||||
body#fullyearlinked table.calendar {
|
||||
float: left;
|
||||
width: 33.3%;
|
||||
}
|
||||
}
|
||||
|
||||
/* General Text
|
||||
@ -164,7 +153,6 @@ a[href]:hover, a[href]:active {
|
||||
----------------------------------------------------- */
|
||||
div#nav, #subnavigation {
|
||||
border: solid 1px #FFE09F; /* needed by IE7 */
|
||||
position: relative;
|
||||
}
|
||||
#subnavigation ul {
|
||||
overflow: hidden;
|
||||
@ -202,35 +190,6 @@ div#nav ul li.CurrentSection a {
|
||||
#subnavigation ul li.CurrentSection a {
|
||||
background-color: #FFFBE7;
|
||||
}
|
||||
div#nav li.lang {
|
||||
font-size: smaller;
|
||||
font-family: sans-serif;
|
||||
padding-top: .3em;
|
||||
padding-bottom: .3em;
|
||||
font-weight: bold;
|
||||
}
|
||||
div#nav li.lang:hover > ul {
|
||||
visibility: visible;
|
||||
opacity: 1;
|
||||
}
|
||||
div#nav ul.lang {
|
||||
position: absolute;
|
||||
visibility: hidden;
|
||||
opacity: 0;
|
||||
z-index: 999;
|
||||
padding: 5px 2px;
|
||||
background-color: #FFE09F;
|
||||
top: -1em;
|
||||
font-size: larger;
|
||||
font-family: sans-serif;
|
||||
}
|
||||
div#nav ul.lang:hover {
|
||||
float: initial;
|
||||
}
|
||||
div#nav ul.lang li {
|
||||
float: none;
|
||||
padding: 1px 2px;
|
||||
}
|
||||
|
||||
/* Alphabet Navigation
|
||||
----------------------------------------------------- */
|
||||
@ -268,7 +227,7 @@ div#alphanav ul li a:hover {
|
||||
}
|
||||
|
||||
/* Responsive navigation */
|
||||
button.navIcon {
|
||||
a.navIcon {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@ -294,6 +253,11 @@ div#nav::after {
|
||||
|
||||
.nav {
|
||||
background: none; /* Works in IE too. */
|
||||
/*
|
||||
width: 200px;
|
||||
position: absolute;
|
||||
z-index: 10;
|
||||
*/
|
||||
}
|
||||
|
||||
/* Undo some of the #nav styles - to enable the class .nav */
|
||||
@ -315,14 +279,11 @@ div#nav::after {
|
||||
.nav li {display: none;}
|
||||
.nav ul {display: none;}
|
||||
|
||||
button.navIcon {
|
||||
a.navIcon {
|
||||
font-size:1.3em;
|
||||
display: block;
|
||||
margin: 0.1em 0.4em 0.4em 0.4em;
|
||||
float: left;
|
||||
font-size:2.9em;
|
||||
line-height: 35px;
|
||||
border: 0px;
|
||||
color: #EA8414;
|
||||
background-color: #FFE09F;
|
||||
}
|
||||
|
||||
.nav.responsive {position: absolute; display: block; z-index: 100;}
|
||||
@ -333,6 +294,7 @@ div#nav::after {
|
||||
margin-right: 10px;
|
||||
}
|
||||
.nav.responsive li {
|
||||
/* float: left; */
|
||||
display: block;
|
||||
text-align: left;
|
||||
background-color: #FFC35E;
|
||||
@ -349,21 +311,6 @@ div#nav::after {
|
||||
.content {
|
||||
padding: 0em 0.5em;
|
||||
}
|
||||
.lang {
|
||||
position: relative;
|
||||
}
|
||||
.lang > .lang {
|
||||
top: 0;
|
||||
left: 100%;
|
||||
margin-top: -6px;
|
||||
margin-left: -1px;
|
||||
-webkit-border-radius: 0 6px 6px 6px;
|
||||
-moz-border-radius: 0 6px 6px 6px;
|
||||
border-radius: 0 6px 6px 6px;
|
||||
}
|
||||
.lang:hover > .lang {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
/* Main Table
|
||||
@ -468,31 +415,12 @@ table.surname td.ColumnName {
|
||||
table.surname td.ColumnName > a {
|
||||
padding-left: 15px;
|
||||
}
|
||||
table#SortByName tr:hover td.ColumnSurname,
|
||||
table#SortByCount tr:hover td.ColumnQuantity {
|
||||
background-color: #FFC35E;
|
||||
}
|
||||
table#SortByName tr:hover,
|
||||
table#SortByCount tr:hover,
|
||||
table#SortByName tr:hover td.ColumnQuantity,
|
||||
table#SortByCount tr:hover td.ColumnSurname {
|
||||
background-color: #FFC35E;
|
||||
}
|
||||
table.surname tr:hover,
|
||||
table.surname tr:hover td.ColumnName {
|
||||
background-color: #FFC35E;
|
||||
}
|
||||
|
||||
/* Individuals
|
||||
----------------------------------------------------- */
|
||||
table.IndividualList td.ColumnSurname {
|
||||
background-color: #FFE09F;
|
||||
}
|
||||
#parents table.infolist tr:hover,
|
||||
table.IndividualList tr:hover,
|
||||
table.IndividualList tr:hover td.ColumnSurname {
|
||||
background-color: #FFC35E;
|
||||
}
|
||||
|
||||
/* Places
|
||||
----------------------------------------------------- */
|
||||
@ -509,10 +437,6 @@ table.IndividualList tr:hover td.ColumnSurname {
|
||||
#Places table.infolist td.ColumnName > a {
|
||||
padding-left: 1ex;
|
||||
}
|
||||
#Places table.infolist tr:hover,
|
||||
#Places table.infolist tr:hover td.ColumnName {
|
||||
background-color: #FFC35E;
|
||||
}
|
||||
|
||||
/* Events
|
||||
----------------------------------------------------- */
|
||||
@ -528,10 +452,6 @@ table.IndividualList tr:hover td.ColumnSurname {
|
||||
#EventList td.ColumnPerson a {
|
||||
display: inline;
|
||||
}
|
||||
#EventList table.infolist tr:hover,
|
||||
#EventList table.infolist tr:hover td.ColumnType {
|
||||
background-color: #FFC35E;
|
||||
}
|
||||
#EventList td.ColumnPerson span.person:after,
|
||||
#EventList td.ColumnPerson span.father:after,
|
||||
#EventList td.ColumnPerson span.mother:after,
|
||||
@ -552,57 +472,10 @@ table.IndividualList tr:hover td.ColumnSurname {
|
||||
#EventDetail td.ColumnPerson span.mother:last-child:after {
|
||||
content: "";
|
||||
}
|
||||
#attributes table.infolist td.ColumnType {
|
||||
width: 10%;
|
||||
padding-left: 15px;
|
||||
}
|
||||
#attributes table.infolist td.ColumnValue {
|
||||
width: 15%;
|
||||
}
|
||||
#attributes table.infolist td.ColumnSources {
|
||||
width: 5%;
|
||||
padding-left: 5px;
|
||||
}
|
||||
#WebLinks table.infolist td.ColumnType {
|
||||
width: 10%;
|
||||
padding-left: 15px;
|
||||
}
|
||||
#events table.eventlist td.ColumnDate {
|
||||
width: 15%;
|
||||
padding-left: 10px;
|
||||
}
|
||||
#families table.eventlist th.ColumnDate {
|
||||
width: 15%;
|
||||
padding-left: 20px;
|
||||
}
|
||||
#families table.eventlist td.ColumnDate {
|
||||
width: 15%;
|
||||
padding-left: 10px;
|
||||
}
|
||||
#families table.eventlist tbody tr td:first-child,
|
||||
#families table.eventlist thead tr th:first-child {
|
||||
width: 10%;
|
||||
padding-left: 0px;
|
||||
}
|
||||
#families table.eventlist tbody tr td.ColumnDate,
|
||||
#families table.eventlist tbody tr td.ColumnNotes {
|
||||
padding-left: 20px;
|
||||
}
|
||||
table.eventlist tbody tr td:first-child,
|
||||
table.eventlist thead tr th:first-child {
|
||||
padding-left: 10px;
|
||||
}
|
||||
|
||||
table.eventlist tbody tr td.ColumnSources {
|
||||
width: 5%;
|
||||
}
|
||||
table.eventlist th.ColumnDate {
|
||||
width: 15%;
|
||||
}
|
||||
table.eventlist td.ColumnEvent,
|
||||
table.eventlist td.ColumnDate,
|
||||
table.eventlist td.ColumnPlace {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* Gallery
|
||||
----------------------------------------------------- */
|
||||
@ -656,10 +529,6 @@ table.eventlist td.ColumnPlace {
|
||||
div#SourceDetail {
|
||||
margin: 0 auto;
|
||||
}
|
||||
#Sources table.infolist tr:hover,
|
||||
#Sources table.infolist tr:hover td.ColumnType {
|
||||
background-color: #FFC35E;
|
||||
}
|
||||
|
||||
/* Contact
|
||||
----------------------------------------------------- */
|
||||
@ -721,7 +590,7 @@ div#SourceDetail {
|
||||
}
|
||||
.subsection {
|
||||
clear: both;
|
||||
overflow-x: auto;
|
||||
overflow: visible;
|
||||
}
|
||||
.subsection p {
|
||||
margin: 0px;
|
||||
@ -729,14 +598,6 @@ div#SourceDetail {
|
||||
|
||||
/* Subsection : Families
|
||||
----------------------------------------------------- */
|
||||
#families table.infolist td.ColumnValue.Child table.infolist tr:hover,
|
||||
table.relationships tr:hover {
|
||||
background-color: #FFC35E;
|
||||
}
|
||||
div.content table.tags {
|
||||
text-align: left;
|
||||
width: auto;
|
||||
}
|
||||
div#families table.fixed_subtables table.eventlist {
|
||||
table-layout: fixed;
|
||||
}
|
||||
@ -758,12 +619,6 @@ div#families table.attrlist td.ColumnType {
|
||||
#indivgallery {
|
||||
background-color: white;
|
||||
}
|
||||
#indivgallery a {
|
||||
color: #36220B;
|
||||
text-decoration: none;
|
||||
word-wrap: break-word;
|
||||
display: block;
|
||||
}
|
||||
#gallery .gallerycell {
|
||||
float: left;
|
||||
width: 130px;
|
||||
@ -780,8 +635,7 @@ div#families table.attrlist td.ColumnType {
|
||||
}
|
||||
#indivgallery .thumbnail {
|
||||
float: left;
|
||||
width: 160px;
|
||||
height: 220px;
|
||||
width: 130px;
|
||||
font-size: smaller;
|
||||
text-align: center;
|
||||
margin: 0.8em 0.5em;
|
||||
@ -795,6 +649,7 @@ div#families table.attrlist td.ColumnType {
|
||||
}
|
||||
#gallery div.indexno {
|
||||
float: right;
|
||||
width: 1.8em;
|
||||
font-size: large;
|
||||
text-align: center;
|
||||
background-color: #CCC;
|
||||
@ -842,29 +697,11 @@ div.snapshot div.thumbnail {
|
||||
h4 + div.grampsstylednote, a.familymap {
|
||||
margin: 1em 15px;
|
||||
}
|
||||
i.NoteType {
|
||||
font-weight: bold;
|
||||
font-size: .8em;
|
||||
}
|
||||
i + div.grampsstylednote p {
|
||||
margin: 0 0 0.3em 0;
|
||||
}
|
||||
div.grampsstylednote p {
|
||||
padding-bottom: 0.6em;
|
||||
}
|
||||
div.grampsstylednote a {
|
||||
text-decoration: underline;
|
||||
font-weight: bold;
|
||||
color: #EA8414;
|
||||
}
|
||||
div.grampsstylednote a:visited {
|
||||
color: red;
|
||||
}
|
||||
|
||||
/* Subsection : References
|
||||
----------------------------------------------------- */
|
||||
#references ol {
|
||||
margin-left: 2em;
|
||||
margin-bottom: 0.5em;
|
||||
}
|
||||
|
||||
/* Subsection : Family Map
|
||||
@ -872,40 +709,11 @@ div.grampsstylednote a:visited {
|
||||
a.familymap {
|
||||
display: block;
|
||||
}
|
||||
a.family_map {
|
||||
margin-left: 15px;
|
||||
}
|
||||
|
||||
/* Subsection : Source References
|
||||
----------------------------------------------------- */
|
||||
#sourcerefs ol#srcr {
|
||||
counter-reset: itema;
|
||||
list-style-type: none;
|
||||
display: block;
|
||||
margin-top: .1em;
|
||||
}
|
||||
#sourcerefs ol#citr {
|
||||
counter-reset: itemb;
|
||||
list-style-type: none;
|
||||
}
|
||||
#sourcerefs ol#srcr > li::before {
|
||||
content: counter(itema);
|
||||
}
|
||||
#sourcerefs ol#citr > li::before {
|
||||
content: counter(itema)counter(itemb, lower-alpha);
|
||||
}
|
||||
#sourcerefs ol#srcr > li {
|
||||
counter-increment: itema;
|
||||
margin-top: .1em;
|
||||
}
|
||||
#sourcerefs ol#citr > li {
|
||||
counter-increment: itemb;
|
||||
margin-top: .1em;
|
||||
}
|
||||
#sourcerefs ol#citr ul {
|
||||
list-style: none;
|
||||
display: inline-block;
|
||||
vertical-align: top;
|
||||
#sourcerefs ol li ol {
|
||||
list-style-type: lower-alpha;
|
||||
}
|
||||
|
||||
/* Subsection : Pedigree
|
||||
@ -965,17 +773,11 @@ a.family_map {
|
||||
background-color: #FFC35E;
|
||||
}
|
||||
|
||||
/* Updates
|
||||
----------------------------------------------------- */
|
||||
#Updates table.list td.date {
|
||||
width: 20%;
|
||||
}
|
||||
|
||||
/* Overwritten
|
||||
----------------------------------------------------- */
|
||||
button#drop {
|
||||
background-color: #FFE09F;
|
||||
border: solid 1px #EA8414 !important;
|
||||
border: solid 1px #EA8414 ! important;
|
||||
}
|
||||
button#drop:hover {
|
||||
background-color: #FFC35E;
|
||||
@ -1003,12 +805,19 @@ table.calendar {
|
||||
background-color: #FFFBE7;
|
||||
border-bottom-style: none;
|
||||
padding-top: 1em;
|
||||
vertical-align: top;
|
||||
height: 2em;
|
||||
}
|
||||
.calendar thead th abbr {
|
||||
border-bottom-style: none;
|
||||
}
|
||||
#CreatorInfo {
|
||||
float: right;
|
||||
margin: -1em 15px 0px 0px;
|
||||
font-weight: bold;
|
||||
color: #8C581C;
|
||||
}
|
||||
#CreatorInfo a[href]:hover {
|
||||
background-color: #FFC35E;
|
||||
}
|
||||
.calendar tfoot tr td {
|
||||
border-top: solid 4px #8C581C;
|
||||
vertical-align: middle;
|
||||
@ -1017,6 +826,7 @@ table.calendar {
|
||||
/* Calendar : Date Numeral */
|
||||
.calendar div.date {
|
||||
float: right;
|
||||
width: 1.8em;
|
||||
font-size: large;
|
||||
text-align: center;
|
||||
background-color: #FFC35E;
|
||||
@ -1025,7 +835,7 @@ table.calendar {
|
||||
|
||||
/* Calendar : Date Container */
|
||||
.calendar td {
|
||||
padding: 0px 5px 0px 1ex;
|
||||
padding: 0px 0px 0px 1ex;
|
||||
border-width: 1px 0px 0px 1px;
|
||||
border-style: solid;
|
||||
border-color: #FFC35E;
|
||||
@ -1033,7 +843,7 @@ table.calendar {
|
||||
}
|
||||
.calendar td:first-child {
|
||||
border-left-style: none;
|
||||
padding: 0px 5px 0px 1ex;
|
||||
padding: 0px 0px 0px 1ex;
|
||||
}
|
||||
.calendar tbody tr:first-child td {
|
||||
border-top-style: none;
|
||||
@ -1084,6 +894,8 @@ body#fullyearlinked div.content {
|
||||
overflow: hidden;
|
||||
}
|
||||
body#fullyearlinked table.calendar {
|
||||
float: left;
|
||||
width: 33.3%;
|
||||
height: 18em;
|
||||
border: solid 1px #36220B;
|
||||
}
|
||||
@ -1100,88 +912,3 @@ body#fullyearlinked table.calendar tbody td {
|
||||
body#OneDay div.content {
|
||||
overflow: hidden;
|
||||
}
|
||||
body#OneDay h3 {
|
||||
font-size: xx-large;
|
||||
vertical-align: top;
|
||||
height: 2em;
|
||||
}
|
||||
#WebCal table.calendar tfoot {
|
||||
display: none;
|
||||
}
|
||||
#WebCal table.calendar tr td {
|
||||
word-wrap: break-word;
|
||||
padding: 2px;
|
||||
}
|
||||
#WebCal .calendar tr td .empty {
|
||||
border: 5px solid rgba(255,255,255,.0);
|
||||
}
|
||||
#WebCal .calendar tr td .clickable {
|
||||
border: 5px solid rgba(255,255,255,.0);
|
||||
}
|
||||
#WebCal .calendar tr td .clickable:hover {
|
||||
display: block;
|
||||
overflow:auto;
|
||||
word-wrap: break-word;
|
||||
cursor: text;
|
||||
border-radius: 10px 0px 10px 10px;
|
||||
border: 5px solid #EA8414;
|
||||
padding: 0px;
|
||||
}
|
||||
body#fullyearlinked #YearGlance tbody td {
|
||||
height:48px;
|
||||
vertical-align: middle;
|
||||
text-align: center;
|
||||
padding-left: 6px;
|
||||
}
|
||||
body#fullyearlinked #YearGlance tbody td .date {
|
||||
font-size: 30px;
|
||||
vertical-align: middle;
|
||||
text-align: center;
|
||||
border-radius: 45px;
|
||||
float: none;
|
||||
border: 5px solid rgba(0,0,0,.0);
|
||||
}
|
||||
body#fullyearlinked #YearGlance tbody td:hover .date {
|
||||
border-radius: 45px;
|
||||
border: 5px solid;
|
||||
}
|
||||
h4 button.icon {
|
||||
width: 0.9em;
|
||||
border: 0px solid;
|
||||
padding: 0;
|
||||
opacity: 1;
|
||||
transform: rotate(90deg);
|
||||
transition: transform 200ms ease-out 0s;
|
||||
background: transparent;
|
||||
}
|
||||
h4 button.icon-close {
|
||||
transform: rotate(90deg);
|
||||
transition: transform 0.2s linear;
|
||||
}
|
||||
h4 button.icon-open {
|
||||
transform: rotate(180deg);
|
||||
transition: transform 0.2s linear;
|
||||
}
|
||||
svg {
|
||||
fill: #EA8414;
|
||||
}
|
||||
/* Go to the top of the page */
|
||||
#gototop {
|
||||
display: none;
|
||||
position: fixed;
|
||||
bottom: 10px;
|
||||
right: 20px;
|
||||
z-index: 999;
|
||||
border: none;
|
||||
background-color: transparent;
|
||||
color: black;
|
||||
cursor: pointer;
|
||||
border-radius: 4px;
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
#gototop:hover {
|
||||
background-color: #FFE09F;
|
||||
}
|
||||
|
||||
@ -1,15 +1,14 @@
|
||||
/*
|
||||
*******************************************************************************
|
||||
**************************************************************************************************
|
||||
Copyright Holder and License
|
||||
*******************************************************************************
|
||||
**************************************************************************************************
|
||||
GRAMPS Cascading Style Sheet
|
||||
Style Name: Basic-Spruce Stylesheet
|
||||
Style Author: Jason M. Simanek (2008)
|
||||
Note: Adapted from GRAMPS original Modern Style stylesheet with a new blue
|
||||
color scheme.
|
||||
*******************************************************************************
|
||||
Note: Adapted from GRAMPS original Modern Style stylesheet with a new blue color scheme.
|
||||
**************************************************************************************************
|
||||
This website was created with GRAMPS <http://www.gramps-project.org/>
|
||||
-------------------------------------------------------------------------------
|
||||
--------------------------------------------------------------------------------------------------
|
||||
GRAMPS is a Free Software Project for Genealogy, offering a professional
|
||||
|
||||
genealogy program, and a wiki open to all. It is a community project, created,
|
||||
@ -17,7 +16,7 @@ developed and governed by genealogists.
|
||||
|
||||
Go to <http://gramps-project.org/> to learn more!
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
--------------------------------------------------------------------------------------------------
|
||||
Copyright 2008 Jason M. Simanek
|
||||
Copyright 2009 Stephane Charette
|
||||
Copyright (C) 2008-2011 Rob G. Healey <robhealey1@gmail.com>
|
||||
@ -38,10 +37,10 @@ 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
|
||||
GRAMPS. If not, see <http://www.gnu.org/licenses/>.
|
||||
-------------------------------------------------------------------------------
|
||||
--------------------------------------------------------------------------------------------------
|
||||
|
||||
Color Palette
|
||||
-------------------------------------------------------------------------------
|
||||
--------------------------------------------------------------------------------------------------
|
||||
|
||||
black #000
|
||||
blue dark #204D91
|
||||
@ -49,14 +48,14 @@ blue #7CA3DD
|
||||
blue light #BFD0EA
|
||||
blue very light #EAEEF4
|
||||
white #FFF
|
||||
-------------------------------------------------------------------------------
|
||||
--------------------------------------------------------------------------------------------------
|
||||
Characteristic of this style is that it uses the full width of the browser
|
||||
window and that horizontal highlighting bars extend over the full width of
|
||||
the page.
|
||||
-------------------------------------------------------------------------------
|
||||
--------------------------------------------------------------------------------------------------
|
||||
|
||||
NarrativeWeb Styles
|
||||
-------------------------------------------------------------------------------
|
||||
------------------------------------------------------------------------------------------------
|
||||
|
||||
General Elements
|
||||
----------------------------------------------------- */
|
||||
@ -98,16 +97,6 @@ body > div {
|
||||
.content {
|
||||
padding: 0em 0.5em;
|
||||
}
|
||||
body#fullyearlinked table.calendar {
|
||||
float: none;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
@media only screen and (width > 1080px) {
|
||||
body#fullyearlinked table.calendar {
|
||||
float: left;
|
||||
width: 33.3%;
|
||||
}
|
||||
}
|
||||
|
||||
/* General Text
|
||||
@ -165,7 +154,6 @@ a[href]:hover, a[href]:active {
|
||||
----------------------------------------------------- */
|
||||
div#nav, #subnavigation {
|
||||
border: solid 1px #EAEEF4; /* needed by IE7 */
|
||||
position: relative;
|
||||
}
|
||||
#subnavigation ul {
|
||||
overflow: hidden;
|
||||
@ -203,35 +191,6 @@ div#nav ul li.CurrentSection a {
|
||||
#subnavigation ul li.CurrentSection a {
|
||||
background-color: #FFF;
|
||||
}
|
||||
div#nav li.lang {
|
||||
font-size: smaller;
|
||||
font-family: sans-serif;
|
||||
padding-top: .3em;
|
||||
padding-bottom: .3em;
|
||||
font-weight: bold;
|
||||
}
|
||||
div#nav li.lang:hover > ul {
|
||||
visibility: visible;
|
||||
opacity: 1;
|
||||
}
|
||||
div#nav ul.lang {
|
||||
position: absolute;
|
||||
visibility: hidden;
|
||||
padding: 0px;
|
||||
opacity: 0;
|
||||
z-index: 999;
|
||||
background-color: #EAEEF4;
|
||||
top: -1em;
|
||||
font-size: larger;
|
||||
font-family: sans-serif;
|
||||
}
|
||||
div#nav ul.lang:hover {
|
||||
float: initial;
|
||||
}
|
||||
div#nav ul.lang li {
|
||||
float: none;
|
||||
padding: 1px 2px;
|
||||
}
|
||||
|
||||
/* Alphabet Navigation
|
||||
----------------------------------------------------- */
|
||||
@ -269,7 +228,7 @@ div#alphanav ul li a:hover {
|
||||
}
|
||||
|
||||
/* Responsive navigation */
|
||||
button.navIcon {
|
||||
a.navIcon {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@ -295,6 +254,11 @@ div#nav::after {
|
||||
|
||||
.nav {
|
||||
background: none; /* Works in IE too. */
|
||||
/*
|
||||
width: 200px;
|
||||
position: absolute;
|
||||
z-index: 10;
|
||||
*/
|
||||
}
|
||||
|
||||
/* Undo some of the #nav styles - to enable the class .nav */
|
||||
@ -316,14 +280,11 @@ div#nav::after {
|
||||
.nav li {display: none;}
|
||||
.nav ul {display: none;}
|
||||
|
||||
button.navIcon {
|
||||
a.navIcon {
|
||||
font-size:1.3em;
|
||||
display: block;
|
||||
margin: 0.1em 0.4em 0.4em 0.4em;
|
||||
float: left;
|
||||
font-size:2.9em;
|
||||
line-height: 35px;
|
||||
border: 0px;
|
||||
color: #204D91;
|
||||
background-color: #EAEEF4;
|
||||
}
|
||||
|
||||
.nav.responsive {position: absolute; display: block; z-index: 100;}
|
||||
@ -334,6 +295,7 @@ div#nav::after {
|
||||
margin-right: 10px;
|
||||
}
|
||||
.nav.responsive li {
|
||||
/* float: left; */
|
||||
display: block;
|
||||
text-align: left;
|
||||
background-color: #EEE;
|
||||
@ -350,21 +312,6 @@ div#nav::after {
|
||||
.content {
|
||||
padding: 0em 0.5em;
|
||||
}
|
||||
.lang {
|
||||
position: relative;
|
||||
}
|
||||
.lang > .lang {
|
||||
top: 0;
|
||||
left: 100%;
|
||||
margin-top: -6px;
|
||||
margin-left: -1px;
|
||||
-webkit-border-radius: 0 6px 6px 6px;
|
||||
-moz-border-radius: 0 6px 6px 6px;
|
||||
border-radius: 0 6px 6px 6px;
|
||||
}
|
||||
.lang:hover > .lang {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
/* Main Table
|
||||
@ -469,31 +416,12 @@ table.surname td.ColumnName {
|
||||
table.surname td.ColumnName > a {
|
||||
padding-left: 15px;
|
||||
}
|
||||
table#SortByName tr:hover td.ColumnSurname,
|
||||
table#SortByCount tr:hover td.ColumnQuantity {
|
||||
background-color: #BFD0EA;
|
||||
}
|
||||
table#SortByName tr:hover,
|
||||
table#SortByCount tr:hover,
|
||||
table#SortByName tr:hover td.ColumnQuantity,
|
||||
table#SortByCount tr:hover td.ColumnSurname {
|
||||
background-color: #BFD0EA;
|
||||
}
|
||||
table.surname tr:hover,
|
||||
table.surname tr:hover td.ColumnName {
|
||||
background-color: #BFD0EA;
|
||||
}
|
||||
|
||||
/* Individuals
|
||||
----------------------------------------------------- */
|
||||
table.IndividualList td.ColumnSurname {
|
||||
background-color: #EAEEF4;
|
||||
}
|
||||
#parents table.infolist tr:hover,
|
||||
table.IndividualList tr:hover,
|
||||
table.IndividualList tr:hover td.ColumnSurname {
|
||||
background-color: #EAEEF4;
|
||||
}
|
||||
|
||||
/* Places
|
||||
----------------------------------------------------- */
|
||||
@ -510,10 +438,6 @@ table.IndividualList tr:hover td.ColumnSurname {
|
||||
#Places table.infolist td.ColumnName > a {
|
||||
padding-left: 1ex;
|
||||
}
|
||||
#Places table.infolist tr:hover,
|
||||
#Places table.infolist tr:hover td.ColumnName {
|
||||
background-color: #BFD0EA;
|
||||
}
|
||||
|
||||
/* Events
|
||||
----------------------------------------------------- */
|
||||
@ -529,10 +453,6 @@ table.IndividualList tr:hover td.ColumnSurname {
|
||||
#EventList td.ColumnPerson a {
|
||||
display: inline;
|
||||
}
|
||||
#EventList table.infolist tr:hover,
|
||||
#EventList table.infolist tr:hover td.ColumnType {
|
||||
background-color: #BFD0EA;
|
||||
}
|
||||
#EventList td.ColumnPerson span.person:after,
|
||||
#EventList td.ColumnPerson span.father:after,
|
||||
#EventList td.ColumnPerson span.mother:after,
|
||||
@ -553,57 +473,10 @@ table.IndividualList tr:hover td.ColumnSurname {
|
||||
#EventDetail td.ColumnPerson span.mother:last-child:after {
|
||||
content: "";
|
||||
}
|
||||
#attributes table.infolist td.ColumnType {
|
||||
width: 10%;
|
||||
padding-left: 15px;
|
||||
}
|
||||
#attributes table.infolist td.ColumnValue {
|
||||
width: 15%;
|
||||
}
|
||||
#attributes table.infolist td.ColumnSources {
|
||||
width: 5%;
|
||||
padding-left: 5px;
|
||||
}
|
||||
#WebLinks table.infolist td.ColumnType {
|
||||
width: 10%;
|
||||
padding-left: 15px;
|
||||
}
|
||||
#events table.eventlist td.ColumnDate {
|
||||
width: 15%;
|
||||
padding-left: 10px;
|
||||
}
|
||||
#families table.eventlist th.ColumnDate {
|
||||
width: 15%;
|
||||
padding-left: 20px;
|
||||
}
|
||||
#families table.eventlist td.ColumnDate {
|
||||
width: 15%;
|
||||
padding-left: 10px;
|
||||
}
|
||||
#families table.eventlist tbody tr td:first-child,
|
||||
#families table.eventlist thead tr th:first-child {
|
||||
width: 10%;
|
||||
padding-left: 0px;
|
||||
}
|
||||
#families table.eventlist tbody tr td.ColumnDate,
|
||||
#families table.eventlist tbody tr td.ColumnNotes {
|
||||
padding-left: 20px;
|
||||
}
|
||||
table.eventlist tbody tr td:first-child,
|
||||
table.eventlist thead tr th:first-child {
|
||||
padding-left: 10px;
|
||||
}
|
||||
|
||||
table.eventlist tbody tr td.ColumnSources {
|
||||
width: 5%;
|
||||
}
|
||||
table.eventlist th.ColumnDate {
|
||||
width: 15%;
|
||||
}
|
||||
table.eventlist td.ColumnEvent,
|
||||
table.eventlist td.ColumnDate,
|
||||
table.eventlist td.ColumnPlace {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* Gallery
|
||||
----------------------------------------------------- */
|
||||
@ -633,7 +506,7 @@ table.eventlist td.ColumnPlace {
|
||||
font-weight: normal;
|
||||
}
|
||||
#GalleryDisplay {
|
||||
margin: 10px auto;
|
||||
margin: 0px auto;
|
||||
position: relative;
|
||||
}
|
||||
#GalleryDisplay img {
|
||||
@ -657,10 +530,6 @@ table.eventlist td.ColumnPlace {
|
||||
div#SourceDetail {
|
||||
margin: 0 auto;
|
||||
}
|
||||
#Sources table.infolist tr:hover,
|
||||
#Sources table.infolist tr:hover td.ColumnType {
|
||||
background-color: #BFD0EA;
|
||||
}
|
||||
|
||||
/* Contact
|
||||
----------------------------------------------------- */
|
||||
@ -707,7 +576,6 @@ div#SourceDetail {
|
||||
#Contact #GalleryDisplay img {
|
||||
display: block;
|
||||
max-width: 950px;
|
||||
width: 100%;
|
||||
height: auto;
|
||||
float: right;
|
||||
}
|
||||
@ -718,12 +586,12 @@ div#SourceDetail {
|
||||
max-width: 100%;
|
||||
}
|
||||
}
|
||||
#Home p, #Introduction p, #Contact p {
|
||||
#Home p, #Introduction p {
|
||||
padding-left: 15px;
|
||||
}
|
||||
.subsection {
|
||||
clear: both;
|
||||
overflow-x: auto;
|
||||
overflow: hidden;
|
||||
}
|
||||
.subsection p {
|
||||
margin: 0px;
|
||||
@ -731,14 +599,6 @@ div#SourceDetail {
|
||||
|
||||
/* Subsection : Families
|
||||
----------------------------------------------------- */
|
||||
#families table.infolist td.ColumnValue.Child table.infolist tr:hover,
|
||||
table.relationships tr:hover {
|
||||
background-color: #BFD0EA;
|
||||
}
|
||||
div.content table.tags {
|
||||
text-align: left;
|
||||
width: auto;
|
||||
}
|
||||
div#families table.fixed_subtables table.eventlist {
|
||||
table-layout: fixed;
|
||||
}
|
||||
@ -760,16 +620,10 @@ div#families table.attrlist td.ColumnType {
|
||||
#indivgallery {
|
||||
background-color: white;
|
||||
}
|
||||
#indivgallery a {
|
||||
color: black;
|
||||
text-decoration: none;
|
||||
word-wrap: break-word;
|
||||
display: block;
|
||||
}
|
||||
#gallery .gallerycell {
|
||||
float: left;
|
||||
width: 130px;
|
||||
height: 160px;
|
||||
height: 150px;
|
||||
text-align: center;
|
||||
margin: 0;
|
||||
background-color: white;
|
||||
@ -782,8 +636,7 @@ div#families table.attrlist td.ColumnType {
|
||||
}
|
||||
#indivgallery .thumbnail {
|
||||
float: left;
|
||||
width: 160px;
|
||||
height: 220px;
|
||||
width: 130px;
|
||||
font-size: smaller;
|
||||
text-align: center;
|
||||
margin: 0.8em 0.5em;
|
||||
@ -797,6 +650,7 @@ div#families table.attrlist td.ColumnType {
|
||||
}
|
||||
#gallery div.indexno {
|
||||
float: right;
|
||||
width: 1.8em;
|
||||
font-size: large;
|
||||
text-align: center;
|
||||
background-color: #CCC;
|
||||
@ -844,29 +698,11 @@ div.snapshot div.thumbnail {
|
||||
h4 + div.grampsstylednote, a.familymap {
|
||||
margin: 1em 15px;
|
||||
}
|
||||
i.NoteType {
|
||||
font-weight: bold;
|
||||
font-size: .8em;
|
||||
}
|
||||
i + div.grampsstylednote p {
|
||||
margin: 0 0 0.3em 0;
|
||||
}
|
||||
div.grampsstylednote p {
|
||||
padding-bottom: 0.6em;
|
||||
}
|
||||
div.grampsstylednote a {
|
||||
text-decoration: underline;
|
||||
font-weight: bold;
|
||||
color: #204D91;
|
||||
}
|
||||
div.grampsstylednote a:visited {
|
||||
color: red;
|
||||
}
|
||||
|
||||
/* Subsection : References
|
||||
----------------------------------------------------- */
|
||||
#references ol {
|
||||
margin-left: 2em;
|
||||
margin-bottom: 0.5em;
|
||||
}
|
||||
|
||||
/* Subsection : Family Map
|
||||
@ -874,40 +710,11 @@ div.grampsstylednote a:visited {
|
||||
a.familymap {
|
||||
display: block;
|
||||
}
|
||||
a.family_map {
|
||||
margin-left: 15px;
|
||||
}
|
||||
|
||||
/* Subsection : Source References
|
||||
----------------------------------------------------- */
|
||||
#sourcerefs ol#srcr {
|
||||
counter-reset: itema;
|
||||
list-style-type: none;
|
||||
display: block;
|
||||
margin-top: .1em;
|
||||
}
|
||||
#sourcerefs ol#citr {
|
||||
counter-reset: itemb;
|
||||
list-style-type: none;
|
||||
}
|
||||
#sourcerefs ol#srcr > li::before {
|
||||
content: counter(itema);
|
||||
}
|
||||
#sourcerefs ol#citr > li::before {
|
||||
content: counter(itema)counter(itemb, lower-alpha);
|
||||
}
|
||||
#sourcerefs ol#srcr > li {
|
||||
counter-increment: itema;
|
||||
margin-top: .1em;
|
||||
}
|
||||
#sourcerefs ol#citr > li {
|
||||
counter-increment: itemb;
|
||||
margin-top: .1em;
|
||||
}
|
||||
#sourcerefs ol#citr ul {
|
||||
list-style: none;
|
||||
display: inline-block;
|
||||
vertical-align: top;
|
||||
#sourcerefs ol li ol {
|
||||
list-style-type: lower-alpha;
|
||||
}
|
||||
|
||||
/* Subsection : Pedigree
|
||||
@ -967,16 +774,10 @@ a.family_map {
|
||||
background-color: #BFD0EA;
|
||||
}
|
||||
|
||||
/* Updates
|
||||
----------------------------------------------------- */
|
||||
#Updates table.list td.date {
|
||||
width: 20%;
|
||||
}
|
||||
|
||||
/* Overwritten
|
||||
----------------------------------------------------- */
|
||||
body#FamilyMap {
|
||||
background-color: #EAEEF4 !important;
|
||||
background-color: #EAEEF4 ! important;
|
||||
}
|
||||
|
||||
/* Calendar Styles
|
||||
@ -995,12 +796,19 @@ table.calendar {
|
||||
background-color: #FFF;
|
||||
border-bottom-style: none;
|
||||
padding-top: 1em;
|
||||
vertical-align: top;
|
||||
height: 2em;
|
||||
}
|
||||
.calendar thead th abbr {
|
||||
border-bottom-style: none;
|
||||
}
|
||||
#CreatorInfo {
|
||||
float: right;
|
||||
margin: -1em 15px 0px 0px;
|
||||
font-weight: bold;
|
||||
color: #7CA3DD;
|
||||
}
|
||||
#CreatorInfo a[href]:hover {
|
||||
background-color: #BFD0EA;
|
||||
}
|
||||
.calendar tfoot tr td {
|
||||
border-top: solid 4px #7CA3DD;
|
||||
vertical-align: middle;
|
||||
@ -1018,7 +826,7 @@ table.calendar {
|
||||
|
||||
/* Calendar : Date Container */
|
||||
.calendar td {
|
||||
padding: 0px 5px 0px 1ex;
|
||||
padding: 0px 0px 0px 1ex;
|
||||
border-width: 1px 0px 0px 1px;
|
||||
border-style: solid;
|
||||
border-color: #BFD0EA;
|
||||
@ -1026,7 +834,7 @@ table.calendar {
|
||||
}
|
||||
.calendar td:first-child {
|
||||
border-left-style: none;
|
||||
padding: 0px 5px 0px 1ex;
|
||||
padding: 0px 0px 0px 1ex;
|
||||
}
|
||||
.calendar tbody tr:first-child td {
|
||||
border-top-style: none;
|
||||
@ -1077,6 +885,8 @@ body#fullyearlinked div.content {
|
||||
overflow: hidden;
|
||||
}
|
||||
body#fullyearlinked table.calendar {
|
||||
float: left;
|
||||
width: 33.3%;
|
||||
height: 18em;
|
||||
border: solid 1px black;
|
||||
}
|
||||
@ -1093,88 +903,3 @@ body#fullyearlinked table.calendar tbody td {
|
||||
body#OneDay div.content {
|
||||
overflow: hidden;
|
||||
}
|
||||
body#OneDay h3 {
|
||||
font-size: xx-large;
|
||||
vertical-align: top;
|
||||
height: 2em;
|
||||
}
|
||||
#WebCal table.calendar tfoot {
|
||||
display: none;
|
||||
}
|
||||
#WebCal table.calendar tr td {
|
||||
word-wrap: break-word;
|
||||
padding: 2px;
|
||||
}
|
||||
#WebCal .calendar tr td .empty {
|
||||
border: 5px solid rgba(255,255,255,.0);
|
||||
}
|
||||
#WebCal .calendar tr td .clickable {
|
||||
border: 5px solid rgba(255,255,255,.0);
|
||||
}
|
||||
#WebCal .calendar tr td .clickable:hover {
|
||||
display: block;
|
||||
overflow:auto;
|
||||
word-wrap: break-word;
|
||||
cursor: text;
|
||||
border-radius: 10px 0px 10px 10px;
|
||||
border: 5px solid #204D91;
|
||||
padding: 0px;
|
||||
}
|
||||
body#fullyearlinked #YearGlance tbody td {
|
||||
height:48px;
|
||||
vertical-align: middle;
|
||||
text-align: center;
|
||||
padding-left: 6px;
|
||||
}
|
||||
body#fullyearlinked #YearGlance tbody td .date {
|
||||
font-size: 30px;
|
||||
vertical-align: middle;
|
||||
text-align: center;
|
||||
border-radius: 45px;
|
||||
float: none;
|
||||
border: 5px solid rgba(0,0,0,.0);
|
||||
}
|
||||
body#fullyearlinked #YearGlance tbody td:hover .date {
|
||||
border-radius: 45px;
|
||||
border: 5px solid;
|
||||
}
|
||||
h4 button.icon {
|
||||
width: 0.9em;
|
||||
border: 0px solid;
|
||||
padding: 0;
|
||||
opacity: 1;
|
||||
transform: rotate(90deg);
|
||||
transition: transform 200ms ease-out 0s;
|
||||
background: transparent;
|
||||
}
|
||||
h4 button.icon-close {
|
||||
transform: rotate(90deg);
|
||||
transition: transform 0.2s linear;
|
||||
}
|
||||
h4 button.icon-open {
|
||||
transform: rotate(180deg);
|
||||
transition: transform 0.2s linear;
|
||||
}
|
||||
svg {
|
||||
fill: #204D91;
|
||||
}
|
||||
/* Go to the top of the page */
|
||||
#gototop {
|
||||
display: none;
|
||||
position: fixed;
|
||||
bottom: 10px;
|
||||
right: 20px;
|
||||
z-index: 999;
|
||||
border: none;
|
||||
background-color: transparent;
|
||||
color: black;
|
||||
cursor: pointer;
|
||||
border-radius: 4px;
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
#gototop:hover {
|
||||
background-color: #EAEEF4;
|
||||
}
|
||||
|
||||
@ -10,7 +10,7 @@
|
||||
# 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,
|
||||
# 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.
|
||||
|
||||
@ -9,7 +9,7 @@
|
||||
# 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,
|
||||
# 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.
|
||||
@ -77,7 +77,8 @@ ul#dropmenu li:hover > a {
|
||||
color: #fafafa
|
||||
}
|
||||
|
||||
*html ul#dropmenu li a:hover /* IE6 */ {
|
||||
*html ul#dropmenu li a:hover /* IE6 */
|
||||
{
|
||||
color: #fafafa
|
||||
}
|
||||
ul#dropmenu li:hover > ul {
|
||||
@ -128,11 +129,13 @@ ul#dropmenu ul a {
|
||||
float: none;
|
||||
text-transform: none;
|
||||
}
|
||||
*html ul#dropmenu ul a /* IE6 */ {
|
||||
*html ul#dropmenu ul a /* IE6 */
|
||||
{
|
||||
height: 10px;
|
||||
width: 150px;
|
||||
}
|
||||
*:first-child+html ul#dropmenu ul a /* IE7 */ {
|
||||
*:first-child+html ul#dropmenu ul a /* IE7 */
|
||||
{
|
||||
height: 10px;
|
||||
width: 150px;
|
||||
}
|
||||
|
||||
@ -9,7 +9,7 @@
|
||||
# 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,
|
||||
# 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.
|
||||
|
||||
@ -10,7 +10,7 @@
|
||||
# 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,
|
||||
# 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.
|
||||
|
||||
@ -58,7 +58,7 @@ Middle Light images/Web_Mainz_MidLight.png
|
||||
|
||||
|
||||
NarrativeWeb Styles
|
||||
----------------------------------------------------------------------------
|
||||
--------------------------------------------------------------------------------------------
|
||||
|
||||
General Elements
|
||||
-----------------------------------------------------------------*/
|
||||
@ -69,6 +69,7 @@ body {
|
||||
background: url(../images/Web_Mainz_Bkgd.png) black repeat;
|
||||
}
|
||||
body > div {
|
||||
width: 85%;
|
||||
margin: 0px auto;
|
||||
overflow: hidden;
|
||||
}
|
||||
@ -99,18 +100,9 @@ div.snapshot a {
|
||||
.content {
|
||||
padding: 0em 0.5em;
|
||||
}
|
||||
body#fullyearlinked table.calendar {
|
||||
float: none;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
@media only screen and (width > 1080px) {
|
||||
body#fullyearlinked table.calendar {
|
||||
float: left;
|
||||
width: 33.3%;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* General Text
|
||||
-----------------------------------------------------------------*/
|
||||
h1 {
|
||||
@ -150,8 +142,7 @@ a {
|
||||
word-wrap: break-word;
|
||||
}
|
||||
a[href]:hover, a[href]:active {
|
||||
background-color: #D8C19F;
|
||||
font-style: italic;
|
||||
background-color: #FFFFE7;
|
||||
}
|
||||
.grampsid {
|
||||
font-family: monospace;
|
||||
@ -168,8 +159,7 @@ a[href]:hover, a[href]:active {
|
||||
/* Navigation
|
||||
-----------------------------------------------------------------*/
|
||||
div#nav, #subnavigation {
|
||||
background: url(../images/Web_Mainz_Mid.png) repeat-x top left;
|
||||
position: relative;
|
||||
background: url(../images/Web_Mainz_MidLight.png) #FFF2C6 repeat;
|
||||
}
|
||||
div#nav ul, #subnavigation ul {
|
||||
list-style-type: none;
|
||||
@ -200,31 +190,6 @@ div#nav ul li.CurrentSection a, #subnavigation ul li.CurrentSection a {
|
||||
#subnavigation ul li.CurrentSection a {
|
||||
border-width: 0px 1px 1px 1px;
|
||||
}
|
||||
div#nav li.lang {
|
||||
font-size: smaller;
|
||||
padding-top: 2px;
|
||||
padding-bottom: 1px;
|
||||
}
|
||||
div#nav li.lang:hover > ul {
|
||||
visibility: visible;
|
||||
opacity: 1;
|
||||
}
|
||||
div#nav ul.lang {
|
||||
position: absolute;
|
||||
visibility: hidden;
|
||||
opacity: 0;
|
||||
z-index: 999;
|
||||
background-color: #D8C19F;
|
||||
top: -1em;
|
||||
font-family: sans-serif;
|
||||
}
|
||||
div#nav ul.lang:hover {
|
||||
float: initial;
|
||||
}
|
||||
div#nav ul.lang li {
|
||||
float: none;
|
||||
font-size: larger;
|
||||
}
|
||||
|
||||
/* Alphabet Navigation
|
||||
-----------------------------------------------------------------*/
|
||||
@ -260,7 +225,7 @@ div#alphanav ul li a:hover {
|
||||
}
|
||||
|
||||
/* Responsive navigation */
|
||||
button.navIcon {
|
||||
a.navIcon {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@ -286,6 +251,11 @@ div#nav::after {
|
||||
|
||||
.nav {
|
||||
background: none; /* Works in IE too. */
|
||||
/*
|
||||
width: 200px;
|
||||
position: absolute;
|
||||
z-index: 10;
|
||||
*/
|
||||
}
|
||||
|
||||
/* Undo some of the #nav styles - to enable the class .nav */
|
||||
@ -307,17 +277,14 @@ div#nav::after {
|
||||
.nav li {display: none;}
|
||||
.nav ul {display: none;}
|
||||
|
||||
button.navIcon {
|
||||
a.navIcon {
|
||||
font-size:1.3em;
|
||||
display: block;
|
||||
margin: 0.1em 0.4em 0.4em 0.4em;
|
||||
float: left;
|
||||
font-size:2.9em;
|
||||
line-height: 80px;
|
||||
border: 0px;
|
||||
color: #7D5925;
|
||||
background: url(../images/Web_Mainz_Mid.png) #FFF2C6 repeat;
|
||||
}
|
||||
|
||||
.nav.responsive {position: relative; display: block; z-index: 100;}
|
||||
.nav.responsive {position: absolute; display: block; z-index: 100;}
|
||||
.nav.responsive a.icon {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
@ -325,8 +292,8 @@ div#nav::after {
|
||||
margin-right: 10px;
|
||||
}
|
||||
.nav.responsive li {
|
||||
/* float: left; */
|
||||
display: block;
|
||||
height:1.4em;
|
||||
text-align: left;
|
||||
background-color: #D8C19F;
|
||||
/* required by IE */
|
||||
@ -337,27 +304,11 @@ div#nav::after {
|
||||
|
||||
div#nav ul, #subnavigation ul {
|
||||
padding-left: 0px;
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
.content {
|
||||
padding: 0em 0.5em;
|
||||
}
|
||||
.lang {
|
||||
position: relative;
|
||||
}
|
||||
.lang > .lang {
|
||||
top: 0;
|
||||
left: 100%;
|
||||
margin-top: -6px;
|
||||
margin-left: -1px;
|
||||
-webkit-border-radius: 0 6px 6px 6px;
|
||||
-moz-border-radius: 0 6px 6px 6px;
|
||||
border-radius: 0 6px 6px 6px;
|
||||
}
|
||||
.lang:hover > .lang {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
/* Main Table
|
||||
@ -426,40 +377,12 @@ table#SortByName thead th.ColumnSurname a:after,
|
||||
table#SortByCount thead th.ColumnQuantity a:after {
|
||||
content: " \2193";
|
||||
}
|
||||
table#SortByName tr:hover td.ColumnSurname,
|
||||
table#SortByCount tr:hover td.ColumnQuantity {
|
||||
background-color: #D8C19F;
|
||||
}
|
||||
table#SortByName tbody tr:hover,
|
||||
table#SortByCount tbody tr:hover,
|
||||
table#SortByName tr:hover td.ColumnQuantity,
|
||||
table#SortByCount tr:hover td.ColumnSurname {
|
||||
background-color: #D8C19F;
|
||||
}
|
||||
table.surname tbody tr:hover,
|
||||
table.surname tr:hover td.ColumnName {
|
||||
background-color: #D8C19F;
|
||||
}
|
||||
#SurnameDetail h3 {
|
||||
border-bottom-width: 0px;
|
||||
padding-bottom: 0px;
|
||||
margin: 0px;
|
||||
}
|
||||
|
||||
/* Individuals
|
||||
----------------------------------------------------- */
|
||||
#parents table.infolist tbody tr:hover,
|
||||
table.IndividualList tbody tr:hover,
|
||||
table.IndividualList tr:hover td.ColumnSurname {
|
||||
background-color: #D8C19F;
|
||||
}
|
||||
|
||||
/* Places
|
||||
----------------------------------------------------- */
|
||||
#Places table.infolist tbody tr:hover,
|
||||
#Places table.infolist tr:hover td.ColumnName {
|
||||
background-color: #D8C19F;
|
||||
}
|
||||
/* Events
|
||||
-----------------------------------------------------------------*/
|
||||
#EventList tr.BeginType td {
|
||||
@ -473,10 +396,6 @@ table.IndividualList tr:hover td.ColumnSurname {
|
||||
#EventList td.ColumnPerson a {
|
||||
display: inline;
|
||||
}
|
||||
#EventList table.infolist tbody tr:hover,
|
||||
#EventList table.infolist tr:hover td.ColumnType {
|
||||
background-color: #D8C19F;
|
||||
}
|
||||
/* Family events, put mother on next line */
|
||||
#EventList td.ColumnPerson span.father,
|
||||
#EventList td.ColumnPerson span.mother,
|
||||
@ -500,57 +419,9 @@ table.IndividualList tr:hover td.ColumnSurname {
|
||||
#EventDetail td.ColumnPerson span.mother:last-child:after {
|
||||
content: "";
|
||||
}
|
||||
#attributes table.infolist td.ColumnType {
|
||||
width: 10%;
|
||||
padding-left: 15px;
|
||||
}
|
||||
#attributes table.infolist td.ColumnValue {
|
||||
width: 15%;
|
||||
}
|
||||
#attributes table.infolist td.ColumnSources {
|
||||
|
||||
table.eventlist tbody tr td.ColumnSources {
|
||||
width: 5%;
|
||||
padding-left: 5px;
|
||||
}
|
||||
#WebLinks table.infolist td.ColumnType {
|
||||
width: 10%;
|
||||
padding-left: 15px;
|
||||
}
|
||||
#events table.eventlist td.ColumnDate {
|
||||
width: 15%;
|
||||
padding-left: 10px;
|
||||
}
|
||||
#families table.eventlist th.ColumnDate {
|
||||
width: 15%;
|
||||
padding-left: 25px;
|
||||
}
|
||||
#families table.eventlist td.ColumnDate {
|
||||
width: 15%;
|
||||
padding-left: 20px;
|
||||
}
|
||||
#families table.eventlist tbody tr td:first-child,
|
||||
#families table.eventlist thead tr th:first-child {
|
||||
width: 10%;
|
||||
padding-left: 0px;
|
||||
}
|
||||
#families table.eventlist tbody tr td.ColumnDate,
|
||||
#families table.eventlist tbody tr td.ColumnNotes {
|
||||
padding-left: 25px;
|
||||
}
|
||||
#IndividualDetail div table.eventlist td.ColumnEvent {
|
||||
padding-right: 0px;
|
||||
width: 8%;
|
||||
}
|
||||
#IndividualDetail div table.eventlist td.ColumnSources {
|
||||
width: 5%;
|
||||
}
|
||||
#IndividualDetail div table.eventlist td.ColumnDate {
|
||||
padding-right: 0px;
|
||||
width: 15%;
|
||||
}
|
||||
#IndividualDetail div table.eventlist td.ColumnEvent,
|
||||
#IndividualDetail div table.eventlist td.ColumnDate,
|
||||
#IndividualDetail div table.eventlist td.ColumnPlace {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* Gallery
|
||||
@ -594,7 +465,7 @@ table.IndividualList tr:hover td.ColumnSurname {
|
||||
position: relative;
|
||||
}
|
||||
#GalleryDisplay img {
|
||||
margin: 10px auto;
|
||||
margin: 0px auto;
|
||||
display:block;
|
||||
border: solid 1px #7D5925;
|
||||
height: auto;
|
||||
@ -611,10 +482,6 @@ table.IndividualList tr:hover td.ColumnSurname {
|
||||
div#SourceDetail {
|
||||
margin: 0 auto;
|
||||
}
|
||||
#Sources table.infolist tbody tr:hover,
|
||||
#Sources table.infolist tr:hover td.ColumnType {
|
||||
background-color: #D8C19F;
|
||||
}
|
||||
|
||||
/* Contact
|
||||
-----------------------------------------------------------------*/
|
||||
@ -623,6 +490,11 @@ div#SourceDetail {
|
||||
padding-bottom: 0px;
|
||||
margin: 0px;
|
||||
}
|
||||
#Contact #summaryarea #GalleryDisplay img {
|
||||
display: block;
|
||||
margin: 0px auto 1em auto;
|
||||
border: solid 1px #7D5925;
|
||||
}
|
||||
#Contact #researcher {
|
||||
text-align: center;
|
||||
}
|
||||
@ -648,19 +520,17 @@ div#SourceDetail {
|
||||
float: right;
|
||||
margin-left: 10px;
|
||||
margin-right: 10px;
|
||||
margin: 10px auto;
|
||||
}
|
||||
#Home #GalleryDisplay img, #Introduction #GalleryDisplay img,
|
||||
#Contact #GalleryDisplay img {
|
||||
#Contact #GalleryDisplay {
|
||||
display: block;
|
||||
max-width: 950px;
|
||||
width: 100%;
|
||||
height: auto;
|
||||
float: right;
|
||||
}
|
||||
@media only screen and (max-width: 1080px) {
|
||||
#Home #GalleryDisplay img, #Introduction #GalleryDisplay img,
|
||||
#Contact #GalleryDisplay img {
|
||||
#Contact #GalleryDisplay {
|
||||
margin: 0 auto;
|
||||
max-width: 100%;
|
||||
}
|
||||
@ -670,7 +540,7 @@ div#SourceDetail {
|
||||
}
|
||||
.subsection {
|
||||
clear: both;
|
||||
overflow-x: auto;
|
||||
overflow: hidden;
|
||||
}
|
||||
.subsection p {
|
||||
margin: 0px;
|
||||
@ -678,14 +548,6 @@ div#SourceDetail {
|
||||
|
||||
/* SubSection : Families
|
||||
-----------------------------------------------------------------*/
|
||||
#families table.infolist td.ColumnValue.Child table.infolist tbody tr:hover,
|
||||
table.relationships tr:hover td {
|
||||
background-color: #D8C19F;
|
||||
}
|
||||
div.content table.tags {
|
||||
text-align: left;
|
||||
width: auto;
|
||||
}
|
||||
div#families table.fixed_subtables table.eventlist {
|
||||
table-layout: fixed;
|
||||
}
|
||||
@ -704,12 +566,16 @@ div#families .infolist h4 {
|
||||
#gallery {
|
||||
background-color: green;
|
||||
}
|
||||
#indivgallery {
|
||||
background-color: white;
|
||||
}
|
||||
#gallery .gallerycell {
|
||||
float: left;
|
||||
width: 130px;
|
||||
height: 150px;
|
||||
text-align: center;
|
||||
margin: 0;
|
||||
background-color: white;
|
||||
border-top: solid 1px #999;
|
||||
border-right: solid 1px #999;
|
||||
}
|
||||
@ -721,21 +587,13 @@ div#families .infolist h4 {
|
||||
/* float container stretch, see www.quirksmode.org/css/clearing.html */
|
||||
overflow: hidden;
|
||||
}
|
||||
div#indivgallery div.thumbnail a,
|
||||
div#gallerycell div.thumbnail a {
|
||||
color: #7D5925;
|
||||
text-decoration: none;
|
||||
word-wrap: break-word;
|
||||
width: 160px;
|
||||
display: block;
|
||||
}
|
||||
#indivgallery .thumbnail {
|
||||
float: left;
|
||||
width: 160px;
|
||||
height: 220px;
|
||||
width: 130px;
|
||||
font-size: smaller;
|
||||
text-align: center;
|
||||
margin: 0.5em;
|
||||
background-color: white;
|
||||
}
|
||||
#indivgallery img {
|
||||
border: solid 1px #7D5925;
|
||||
@ -746,6 +604,7 @@ div#gallerycell div.thumbnail a {
|
||||
}
|
||||
#gallery div.indexno {
|
||||
float: right;
|
||||
width: 1.8em;
|
||||
font-size: large;
|
||||
text-align: center;
|
||||
background-color: #CCC;
|
||||
@ -787,73 +646,18 @@ h4 + div.grampsstylednote, a.familymap {
|
||||
margin-left: 10px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
a.family_map {
|
||||
margin-left: 10px;
|
||||
}
|
||||
i.NoteType {
|
||||
font-weight: bold;
|
||||
font-size: .8em;
|
||||
}
|
||||
i + div.grampsstylednote p {
|
||||
margin: 0 0 0.3em 0;
|
||||
}
|
||||
div.grampsstylednote p {
|
||||
padding-bottom: 0.6em;
|
||||
}
|
||||
div.grampsstylednote a {
|
||||
text-decoration: underline;
|
||||
font-weight: bold;
|
||||
color: #7D5925;
|
||||
}
|
||||
div.grampsstylednote a:visited {
|
||||
color: red;
|
||||
}
|
||||
|
||||
/* Subsection : References
|
||||
----------------------------------------------------- */
|
||||
#references ol {
|
||||
margin-left: 2em;
|
||||
margin-bottom: 0.5em;
|
||||
}
|
||||
|
||||
/* SubSection : Source References
|
||||
-----------------------------------------------------------------*/
|
||||
#sourcerefs ol#srcr {
|
||||
counter-reset: itema;
|
||||
list-style-type: none;
|
||||
display: block;
|
||||
margin-top: .1em;
|
||||
#sourcerefs ol li ol {
|
||||
list-style-type: lower-alpha;
|
||||
}
|
||||
#sourcerefs ol#citr {
|
||||
counter-reset: itemb;
|
||||
list-style-type: none;
|
||||
}
|
||||
#sourcerefs ol#srcr > li::before {
|
||||
content: counter(itema);
|
||||
}
|
||||
#sourcerefs ol#citr > li::before {
|
||||
content: counter(itema)counter(itemb, lower-alpha);
|
||||
}
|
||||
#sourcerefs ol#srcr > li {
|
||||
counter-increment: itema;
|
||||
margin-top: .1em;
|
||||
}
|
||||
#sourcerefs ol#citr > li {
|
||||
counter-increment: itemb;
|
||||
margin-top: .1em;
|
||||
}
|
||||
#sourcerefs ol#citr ul {
|
||||
list-style: none;
|
||||
display: inline-block;
|
||||
vertical-align: top;
|
||||
}
|
||||
/*
|
||||
#sourcerefs a {
|
||||
color: #767D25;
|
||||
}
|
||||
#sourcerefs a:visited {
|
||||
color: red;
|
||||
}
|
||||
*/
|
||||
|
||||
/* SubSection : Pedigree
|
||||
-----------------------------------------------------------------*/
|
||||
@ -914,22 +718,16 @@ div.grampsstylednote a:visited {
|
||||
background: url(../images/Web_Mainz_MidLight.png) #FFF2C6;
|
||||
}
|
||||
|
||||
/* Updates
|
||||
----------------------------------------------------- */
|
||||
#Updates table.list td.date {
|
||||
width: 20%;
|
||||
}
|
||||
|
||||
/* Overwritten
|
||||
-----------------------------------------------------------------*/
|
||||
button#drop {
|
||||
font-style: italic;
|
||||
color: #FFF2C6;
|
||||
background: url(../images/Web_Mainz_Bkgd.png) #7D5925 repeat;
|
||||
border: outset 3px black !important;
|
||||
border: outset 3px black ! important;
|
||||
}
|
||||
div#map_canvas {
|
||||
border-color: #7D5925 !important;
|
||||
border-color: #7D5925 ! important;
|
||||
}
|
||||
|
||||
/* Calendar Styles
|
||||
@ -949,24 +747,28 @@ table.calendar {
|
||||
.calendar thead th.monthName {
|
||||
font-size: xx-large;
|
||||
color: #767D25;
|
||||
vertical-align: top;
|
||||
height: 2em;
|
||||
border-bottom-style: none;
|
||||
border-bottom-color: #7D5925;
|
||||
}
|
||||
.calendar thead th abbr {
|
||||
border-bottom-style: none;
|
||||
}
|
||||
#CreatorInfo {
|
||||
float: right;
|
||||
margin: -1em 0px 0px 0px;
|
||||
font-weight: bold;
|
||||
font-style: italic;
|
||||
}
|
||||
.calendar tfoot td {
|
||||
border-top: double 4px #7D5925;
|
||||
}
|
||||
|
||||
/* Calendar : Date Numeral */
|
||||
.calendar div.date {
|
||||
width: 1.5em;
|
||||
float: right;
|
||||
width: 1.8em;
|
||||
font-size: large;
|
||||
font-style: italic;
|
||||
text-align: center;
|
||||
margin-top: 1px;
|
||||
background: url(../images/Web_Mainz_MidLight.png) #FFF2C6 repeat;
|
||||
}
|
||||
|
||||
@ -1010,11 +812,10 @@ table.calendar {
|
||||
color: #767D25;
|
||||
}
|
||||
.calendar td ul li span.yearsmarried em {
|
||||
color: #767D25;
|
||||
color: black;
|
||||
}
|
||||
.calendar td.highlight div.date {
|
||||
color: #767D25;
|
||||
margin-top: 1px;
|
||||
background-image: none;
|
||||
background-color: #FFFFE7;
|
||||
}
|
||||
@ -1027,6 +828,8 @@ table.calendar {
|
||||
|
||||
/* Calendar : Full Year */
|
||||
body#fullyearlinked table.calendar {
|
||||
float: left;
|
||||
width: 315px;
|
||||
height: 18em;
|
||||
border: solid 1px #7D5925;
|
||||
}
|
||||
@ -1039,98 +842,3 @@ body#fullyearlinked table.calendar thead th.monthName {
|
||||
body#fullyearlinked table.calendar tbody td {
|
||||
height: 3em;
|
||||
}
|
||||
body#OneDay h3 {
|
||||
font-size: xx-large;
|
||||
vertical-align: top;
|
||||
height: 2em;
|
||||
text-align: center;
|
||||
}
|
||||
#WebCal table.calendar tfoot {
|
||||
display: none;
|
||||
}
|
||||
#WebCal table.calendar tr td {
|
||||
word-wrap: break-word;
|
||||
padding: 2px;
|
||||
}
|
||||
#WebCal .calendar tr td .empty {
|
||||
border: 5px solid rgba(255,255,255,.0);
|
||||
}
|
||||
#WebCal .calendar tr td .clickable {
|
||||
border: 5px solid rgba(255,255,255,.0);
|
||||
}
|
||||
#WebCal .calendar tr td .clickable:hover {
|
||||
display: block;
|
||||
overflow:auto;
|
||||
word-wrap: break-word;
|
||||
cursor: text;
|
||||
border-radius: 10px 0px 10px 10px;
|
||||
border: 5px solid #7D5925;
|
||||
padding: 0px;
|
||||
}
|
||||
body#fullyearlinked #YearGlance tbody td {
|
||||
vertical-align: middle;
|
||||
text-align: center;
|
||||
padding-left: 8px;
|
||||
}
|
||||
body#fullyearlinked #YearGlance tbody td .date {
|
||||
font-size: 30px;
|
||||
vertical-align: middle;
|
||||
text-align: center;
|
||||
border-radius: 45px;
|
||||
float: none;
|
||||
border: 5px solid rgba(0,0,0,.0);
|
||||
}
|
||||
body#fullyearlinked #YearGlance tbody td.previous .date:hover,
|
||||
body#fullyearlinked #YearGlance tbody td.next .date:hover {
|
||||
border-radius: 10px;
|
||||
border: 5px solid;
|
||||
}
|
||||
body#fullyearlinked #YearGlance tbody td div.empty .date:hover {
|
||||
border-radius: 10px;
|
||||
border: 5px solid;
|
||||
}
|
||||
body#fullyearlinked #YearGlance tbody td.highlight .date:hover {
|
||||
border-radius: 45px;
|
||||
border: 5px solid;
|
||||
background: url(../images/Web_Mainz_Bkgd.png) black repeat;
|
||||
}
|
||||
h4 button.icon {
|
||||
width: 0.9em;
|
||||
border: 0px solid;
|
||||
padding: 0;
|
||||
opacity: 1;
|
||||
transform: rotate(90deg);
|
||||
transition: transform 200ms ease-out 0s;
|
||||
background: transparent;
|
||||
}
|
||||
h4 button.icon-close {
|
||||
transform: rotate(90deg);
|
||||
transition: transform 0.2s linear;
|
||||
}
|
||||
h4 button.icon-open {
|
||||
transform: rotate(180deg);
|
||||
transition: transform 0.2s linear;
|
||||
}
|
||||
svg {
|
||||
fill: #7D5925;
|
||||
}
|
||||
/* Go to the top of the page */
|
||||
#gototop {
|
||||
display: none;
|
||||
position: fixed;
|
||||
bottom: 10px;
|
||||
right: 20px;
|
||||
z-index: 999;
|
||||
border: none;
|
||||
background-color: transparent;
|
||||
color: black;
|
||||
cursor: pointer;
|
||||
border-radius: 4px;
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
#gototop:hover {
|
||||
background-color: #FFF2C6;
|
||||
}
|
||||
|
||||
@ -1,21 +1,21 @@
|
||||
/*
|
||||
*******************************************************************************
|
||||
**************************************************************************************************
|
||||
Copyright Holder and License
|
||||
*******************************************************************************
|
||||
**************************************************************************************************
|
||||
GRAMPS Cascading Style Sheet
|
||||
Style Name: Nebraska Default Stylesheet
|
||||
Style Author: Jason M. Simanek (2008)
|
||||
|
||||
*******************************************************************************
|
||||
**************************************************************************************************
|
||||
This website was created with GRAMPS <http://www.gramps-project.org/>
|
||||
-------------------------------------------------------------------------------
|
||||
--------------------------------------------------------------------------------------------------
|
||||
GRAMPS is a Free Software Project for Genealogy, offering a professional
|
||||
genealogy program, and a wiki open to all. It is a community project, created,
|
||||
developed and governed by genealogists.
|
||||
|
||||
Go to <http://gramps-project.org/> to learn more!
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
--------------------------------------------------------------------------------------------------
|
||||
Copyright 2008 Jason M. Simanek
|
||||
Copyright 2009 Stephane Charette
|
||||
Copyright (C) 2008-2011 Rob G. Healey <robhealey1@gmail.com>
|
||||
@ -34,10 +34,10 @@ 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
|
||||
GRAMPS. If not, see <http://www.gnu.org/licenses/>.
|
||||
-------------------------------------------------------------------------------
|
||||
--------------------------------------------------------------------------------------------------
|
||||
|
||||
Color Palette
|
||||
-------------------------------------------------------------------------------
|
||||
--------------------------------------------------------------------------------------------------
|
||||
brown darkest #453619
|
||||
brown dark #542
|
||||
brown #A97
|
||||
@ -45,14 +45,14 @@ brown light #C1B398
|
||||
brown lightest #F6F2EE
|
||||
gray #696969
|
||||
green #5D835F
|
||||
-------------------------------------------------------------------------------
|
||||
--------------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
NarrativeWeb Styles
|
||||
-------------------------------------------------------------------------------
|
||||
--------------------------------------------------------------------------------------------
|
||||
|
||||
General Elements
|
||||
---------------------------------------------------------------------------- */
|
||||
----------------------------------------------------- */
|
||||
|
||||
body {
|
||||
color:#000;
|
||||
@ -118,16 +118,6 @@ img {
|
||||
.content {
|
||||
padding: 0em 0.5em;
|
||||
}
|
||||
body#fullyearlinked table.calendar {
|
||||
float: none;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
@media only screen and (width > 1080px) {
|
||||
body#fullyearlinked table.calendar {
|
||||
float: left;
|
||||
width: 33.3%;
|
||||
}
|
||||
}
|
||||
.fullclear {
|
||||
width:100%;
|
||||
@ -172,7 +162,7 @@ p#description {
|
||||
background-color:#FFF;
|
||||
}
|
||||
p a {
|
||||
color:#542;
|
||||
color:#FFF;
|
||||
text-decoration:underline;
|
||||
}
|
||||
sup {
|
||||
@ -238,10 +228,10 @@ div#alphanav, div#nav, div#subnavigation {
|
||||
width: 100%;
|
||||
margin: 0;
|
||||
background-color: #A97;
|
||||
position: relative;
|
||||
}
|
||||
div#alphanav ul, div#nav ul, div#subnavigation ul {
|
||||
list-style: none;
|
||||
min-width: 770px;
|
||||
height: 24px;
|
||||
margin: 0;
|
||||
padding: 0px 0px 0px 16px;
|
||||
@ -282,46 +272,9 @@ div#nav ul li.CurrentSection a:hover {
|
||||
div#subnavigation ul li.CurrentSection a {
|
||||
border-width: 0 0 1px 0;
|
||||
}
|
||||
div#nav li.lang {
|
||||
position: relative;
|
||||
padding-top: 3px;
|
||||
padding-left: 8px;
|
||||
font: bold .7em sans;
|
||||
}
|
||||
div#nav li.lang:hover > ul {
|
||||
visibility: visible;
|
||||
opacity: 1;
|
||||
}
|
||||
div#nav ul.lang {
|
||||
position: absolute;
|
||||
visibility: hidden;
|
||||
opacity: 0;
|
||||
height: auto;
|
||||
width: auto;
|
||||
z-index: 999;
|
||||
overflow: visible;
|
||||
background-color: #A97;
|
||||
top: -1em;
|
||||
border-width: 2px 0px 1px 0px;
|
||||
padding: 0px;
|
||||
}
|
||||
div#nav ul.lang li:after {
|
||||
content: "";
|
||||
}
|
||||
div#nav li.lang ul.lang li {
|
||||
float: none;
|
||||
background-color: #A97;
|
||||
margin-left: 10px;
|
||||
padding: 0px 0px;
|
||||
}
|
||||
div#nav li.lang ul.lang li a {
|
||||
float: none;
|
||||
width: auto;
|
||||
font: bold .9em sans;
|
||||
}
|
||||
|
||||
/* Responsive navigation */
|
||||
button.navIcon {
|
||||
a.navIcon {
|
||||
display: none;
|
||||
color: #FFF;
|
||||
}
|
||||
@ -348,6 +301,11 @@ div#nav::after {
|
||||
|
||||
.nav {
|
||||
background: none; /* Works in IE too. */
|
||||
/*
|
||||
width: 200px;
|
||||
position: absolute;
|
||||
z-index: 10;
|
||||
*/
|
||||
}
|
||||
|
||||
/* Undo some of the #nav styles - to enable the class .nav */
|
||||
@ -369,14 +327,12 @@ div#nav::after {
|
||||
.nav li {display: none;}
|
||||
.nav ul {display: none;}
|
||||
|
||||
button.navIcon {
|
||||
a.navIcon {
|
||||
font-size:1.3em;
|
||||
display: block;
|
||||
margin: 0.1em 0.4em 0.4em 0.4em;
|
||||
float: left;
|
||||
font-size:2.9em;
|
||||
line-height: 70px;
|
||||
border: 0px;
|
||||
background-color: #542;
|
||||
color: #FFF;
|
||||
color: #FFF;
|
||||
}
|
||||
|
||||
.nav.responsive {position: absolute; display: block; z-index: 100;}
|
||||
@ -384,6 +340,7 @@ div#nav::after {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 0;
|
||||
margin-right: 10px;
|
||||
}
|
||||
.nav.responsive ::after {
|
||||
/* need to remove the "|" when we are in the dropdown menu. */
|
||||
@ -391,6 +348,7 @@ div#nav::after {
|
||||
background-color: #A97;
|
||||
}
|
||||
.nav.responsive li {
|
||||
/* float: left; */
|
||||
display: block;
|
||||
text-align: left;
|
||||
background-color: #A97;
|
||||
@ -407,28 +365,6 @@ div#nav::after {
|
||||
.content {
|
||||
padding: 0em 0.5em;
|
||||
}
|
||||
div#nav ul li.lang {
|
||||
padding-top: 3px;
|
||||
padding-bottom: 6px;
|
||||
padding-left: 0px;
|
||||
}
|
||||
.lang {
|
||||
position: relative;
|
||||
padding-top: 3px;
|
||||
padding-left: 8px;
|
||||
}
|
||||
.lang > .lang {
|
||||
top: 0;
|
||||
left: 100%;
|
||||
margin-top: -6px;
|
||||
margin-left: -1px;
|
||||
-webkit-border-radius: 0 6px 6px 6px;
|
||||
-moz-border-radius: 0 6px 6px 6px;
|
||||
border-radius: 0 6px 6px 6px;
|
||||
}
|
||||
.lang:hover > .lang {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
/* Main Table
|
||||
@ -516,20 +452,6 @@ table.surnamelist tr th a, table.surnamelist tr th a:visited {
|
||||
table.surnamelist tr th:hover {
|
||||
background-color:#C1B398;
|
||||
}
|
||||
table#SortByName tr:hover td.ColumnSurname,
|
||||
table#SortByCount tr:hover td.ColumnQuantity {
|
||||
background-color:#C1B398;
|
||||
}
|
||||
table#SortByName tr:hover,
|
||||
table#SortByCount tr:hover,
|
||||
table#SortByName tr:hover td.ColumnQuantity,
|
||||
table#SortByCount tr:hover td.ColumnSurname {
|
||||
background-color:#C1B398;
|
||||
}
|
||||
table.surname tr:hover,
|
||||
table.surname tr:hover td.ColumnName {
|
||||
background-color:#C1B398;
|
||||
}
|
||||
table.surnamelist thead tr th.ColumnLetter {
|
||||
padding-left:20px;
|
||||
padding-right:10px;
|
||||
@ -585,11 +507,6 @@ table.surname thead tr th.ColumnParents, table.surname tbody tr td.ColumnParents
|
||||
|
||||
/* Individuals
|
||||
----------------------------------------------------- */
|
||||
#parents table.infolist tr:hover,
|
||||
table.IndividualList tr:hover,
|
||||
table.IndividualList tr:hover td.ColumnSurname {
|
||||
background-color:#C1B398;
|
||||
}
|
||||
#Individuals { }
|
||||
#Individuals table.IndividualList {
|
||||
border-bottom:solid 1px #A97;
|
||||
@ -633,7 +550,6 @@ table.IndividualList tbody tr td.ColumnName a:hover {
|
||||
#IndividualDetail div table.infolist tr td {
|
||||
font:normal .9em/1.2em sans-serif;
|
||||
vertical-align:top;
|
||||
padding-left: 5px;
|
||||
}
|
||||
#IndividualDetail div table.infolist tr td a {
|
||||
display:inline;
|
||||
@ -646,15 +562,11 @@ table.IndividualList tbody tr td.ColumnName a:hover {
|
||||
color:#696969;
|
||||
}
|
||||
#IndividualDetail div.subsection table tr td:first-child {
|
||||
color:#696969;
|
||||
padding-left:20px;
|
||||
}
|
||||
#familymap a.familymap {
|
||||
margin-left:20px;
|
||||
}
|
||||
a.family_map {
|
||||
margin-left: 20px;
|
||||
}
|
||||
|
||||
/* Subsections : Attributes
|
||||
----------------------------------------------------- */
|
||||
@ -687,10 +599,6 @@ table.attrlist tbody tr td.ColumnSources {
|
||||
|
||||
/* Sources
|
||||
----------------------------------------------------- */
|
||||
#Sources table.infolist tr:hover,
|
||||
#Sources table.infolist tr:hover td.ColumnType {
|
||||
background-color:#C1B398;
|
||||
}
|
||||
#Sources { }
|
||||
#Sources table.infolist tbody tr td.ColumnRowLabel {
|
||||
padding-bottom:0;
|
||||
@ -739,10 +647,6 @@ table.relationships tbody tr td.ColumnPartner a:hover {
|
||||
#Places table.infolist tbody tr td.ColumnName {
|
||||
padding:0;
|
||||
}
|
||||
#Places table.infolist tr:hover,
|
||||
#Places table.infolist tr:hover td.ColumnName {
|
||||
background-color:#C1B398;
|
||||
}
|
||||
#Places table.infolist tbody tr td.ColumnName a {
|
||||
padding:.1em 10px .3em 10px;
|
||||
}
|
||||
@ -762,11 +666,7 @@ table.relationships tbody tr td.ColumnPartner a:hover {
|
||||
#EventDetail table.infolist tr td a {
|
||||
display: inline;
|
||||
}
|
||||
#EventList table.infolist tr:hover,
|
||||
#EventList table.infolist tr:hover td.ColumnType {
|
||||
background-color:#C1B398;
|
||||
}
|
||||
#EventList table.infolist tr td span.father,
|
||||
#EventList table.infolist tr td span.father,
|
||||
#EventList table.infolist tr td span.mother,
|
||||
#EventDetail table.infolist tr td span.father,
|
||||
#EventDetail table.infolist tr td span.mother {
|
||||
@ -788,27 +688,10 @@ table.relationships tbody tr td.ColumnPartner a:hover {
|
||||
#EventDetail table.infolist tr td span.mother:last-child:after {
|
||||
content: "";
|
||||
}
|
||||
#IndividualDetail div table.eventlist tbody tr td:first-child,
|
||||
#IndividualDetail div table.eventlist thead tr th:first-child {
|
||||
padding-left: 10px;
|
||||
}
|
||||
#IndividualDetail div table.eventlist tbody tr td.ColumnSources {
|
||||
padding-left: 5px;
|
||||
|
||||
table.eventlist tbody tr td.ColumnSources {
|
||||
width: 5%;
|
||||
}
|
||||
#IndividualDetail div table.eventlist tbody tr td.ColumnEvent {
|
||||
padding-right: 0px;
|
||||
width: 8%;
|
||||
}
|
||||
#IndividualDetail div table.eventlist tbody tr td.ColumnDate {
|
||||
padding-left: 10px;
|
||||
width: 15%;
|
||||
}
|
||||
#IndividualDetail div table.eventlist td.ColumnEvent,
|
||||
#IndividualDetail div table.eventlist td.ColumnDate,
|
||||
#IndividualDetail div table.eventlist td.ColumnPlace {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* Gallery
|
||||
----------------------------------------------------- */
|
||||
@ -960,9 +843,9 @@ body#ThumbnailPreview div#references table.infolist tbody tr td.ColumnName {
|
||||
text-decoration:underline;
|
||||
}
|
||||
|
||||
/* Download
|
||||
/* Download
|
||||
----------------------------------------------------- */
|
||||
#Download {
|
||||
#Download {
|
||||
padding:1cm;
|
||||
height:396px;
|
||||
}
|
||||
@ -982,7 +865,7 @@ table.download thead tr th {
|
||||
table.download tbody tr#Row02 {
|
||||
border-bottom:solid 2px #000;
|
||||
}
|
||||
table.download thead tr th, table.download tbody tr td {
|
||||
table.download thead tr th, table.download tbody tr td {
|
||||
padding-left:10px;
|
||||
padding-top:20px;
|
||||
border-style:solid;
|
||||
@ -1085,6 +968,9 @@ div#events h4 {
|
||||
padding-bottom:4px;
|
||||
background-color:#A97;
|
||||
}
|
||||
#IndividualDetail div#events table.infolist thead tr th:first-child {
|
||||
padding-left:20px;
|
||||
}
|
||||
#IndividualDetail div#events table.infolist tbody tr td {
|
||||
padding-top:.4em;
|
||||
padding-bottom:.8em;
|
||||
@ -1100,51 +986,6 @@ table.infolist tbody tr td.ColumnValue p {
|
||||
color:#696969;
|
||||
margin:.2em 0 0 2em;
|
||||
}
|
||||
#attributes table.infolist td.ColumnType {
|
||||
width: 10%;
|
||||
padding-left: 15px;
|
||||
}
|
||||
#attributes table.infolist td.ColumnValue {
|
||||
width: 15%;
|
||||
}
|
||||
#attributes table.infolist td.ColumnSources {
|
||||
width: 5%;
|
||||
padding-left: 5px;
|
||||
}
|
||||
#WebLinks table.weblinks tbody tr td:first-child {
|
||||
vertical-align:middle;
|
||||
}
|
||||
#WebLinks table.weblinks td.ColumnType,
|
||||
#WebLinks table.weblinks td.ColumnDescription {
|
||||
}
|
||||
#events table.eventlist td.ColumnDate {
|
||||
width: 15%;
|
||||
padding-left: 10px;
|
||||
}
|
||||
#families table.eventlist th.ColumnDate {
|
||||
width: 15%;
|
||||
padding-left: 10px;
|
||||
}
|
||||
#families table.eventlist td.ColumnEvent,
|
||||
#families table.eventlist td.ColumnDate,
|
||||
#families table.eventlist td.ColumnPlace,
|
||||
#families table.eventlist td.ColumnDescription,
|
||||
#families table.eventlist td.ColumnSources {
|
||||
padding-top:.4em;
|
||||
padding-bottom:.8em;
|
||||
}
|
||||
#families table.eventlist td.ColumnDate {
|
||||
width: 15%;
|
||||
padding-left: 20px;
|
||||
}
|
||||
#families table.eventlist td.ColumnNotes {
|
||||
font:normal 1.1em/1.4em sans-serif;
|
||||
}
|
||||
#families table.eventlist tbody tr td:first-child,
|
||||
#families table.eventlist thead tr th:first-child {
|
||||
width: 10%;
|
||||
padding-left: 0px;
|
||||
}
|
||||
|
||||
/* Subsections : Attributes
|
||||
----------------------------------------------------- */
|
||||
@ -1167,19 +1008,10 @@ div#parents table.infolist tbody tr td.ColumnValue ol li {
|
||||
|
||||
/* Subsections : Families
|
||||
----------------------------------------------------- */
|
||||
#families table.infolist td.ColumnValue.Child table.infolist tr:hover,
|
||||
table.relationships tr:hover {
|
||||
background-color:#C1B398;
|
||||
}
|
||||
div.content table.tags {
|
||||
text-align: left;
|
||||
width: auto;
|
||||
}
|
||||
div#families table.infolist {
|
||||
margin-top:.5em;
|
||||
}
|
||||
div#families table.infolist tbody tr td.ColumnValue p {
|
||||
margin-left:0;
|
||||
margin-top:0;
|
||||
}
|
||||
div#families table.infolist tbody tr td.ColumnValue ol {
|
||||
@ -1227,6 +1059,9 @@ div#Addresses table.infolist tr td a, div#Addresses table.infolist tr td p a {
|
||||
#gallery {
|
||||
background-color: green;
|
||||
}
|
||||
#indivgallery {
|
||||
background-color: white;
|
||||
}
|
||||
#gallery .gallerycell {
|
||||
float: left;
|
||||
width: 130px;
|
||||
@ -1247,13 +1082,13 @@ div#Addresses table.infolist tr td a, div#Addresses table.infolist tr td p a {
|
||||
#indivgallery .thumbnail {
|
||||
margin:0;
|
||||
float:left;
|
||||
width:160px;
|
||||
height:220px;
|
||||
width:130px;
|
||||
text-align:center;
|
||||
background-color: #F6F2EE;
|
||||
background-color: white;
|
||||
}
|
||||
#gallery div.indexno {
|
||||
float: right;
|
||||
width: 1.8em;
|
||||
font-size: large;
|
||||
text-align: center;
|
||||
background-color: #CCC;
|
||||
@ -1316,65 +1151,24 @@ div.snapshot div.thumbnail {
|
||||
div.narrative {
|
||||
padding-bottom:0;
|
||||
}
|
||||
i.NoteType {
|
||||
font-weight: bold;
|
||||
font-size: .8em;
|
||||
}
|
||||
i + div.grampsstylednote p {
|
||||
margin: 0.1em 0 0.2em 0;
|
||||
}
|
||||
div.grampsstylednote p {
|
||||
padding-bottom: 0.6em;
|
||||
}
|
||||
div.grampsstylednote a {
|
||||
text-decoration: underline;
|
||||
font-weight: bold;
|
||||
color: #542;
|
||||
}
|
||||
div.grampsstylednote a:visited {
|
||||
color: red;
|
||||
}
|
||||
.narrative p {
|
||||
margin: 0.1em 0 0.2em 0;
|
||||
font:normal .9em/1.4em sans-serif;
|
||||
}
|
||||
|
||||
/* Subsection : References
|
||||
/* Subsections : References
|
||||
----------------------------------------------------- */
|
||||
#references ol {
|
||||
margin-left: 3em;
|
||||
}
|
||||
|
||||
/* Subsections : Source References
|
||||
----------------------------------------------------- */
|
||||
#sourcerefs ol#srcr {
|
||||
counter-reset: itema;
|
||||
list-style-type: none;
|
||||
display: block;
|
||||
margin-top: .1em;
|
||||
div#sourcerefs ol {
|
||||
list-style-type:decimal;
|
||||
}
|
||||
#sourcerefs ol#citr {
|
||||
counter-reset: itemb;
|
||||
list-style-type: none;
|
||||
}
|
||||
#sourcerefs ol#srcr > li::before {
|
||||
content: counter(itema);
|
||||
}
|
||||
#sourcerefs ol#citr > li::before {
|
||||
content: counter(itema)counter(itemb, lower-alpha);
|
||||
}
|
||||
#sourcerefs ol#srcr > li {
|
||||
counter-increment: itema;
|
||||
margin-top: .1em;
|
||||
}
|
||||
#sourcerefs ol#citr > li {
|
||||
counter-increment: itemb;
|
||||
margin-top: .1em;
|
||||
}
|
||||
#sourcerefs ol#citr ul {
|
||||
list-style: none;
|
||||
display: inline-block;
|
||||
vertical-align: top;
|
||||
div#sourcerefs ol li ol {
|
||||
list-style-type:lower-alpha;
|
||||
}
|
||||
|
||||
/* Subsections : Summary Area
|
||||
@ -1508,12 +1302,6 @@ div#pedigree {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/* Updates
|
||||
----------------------------------------------------- */
|
||||
#Updates table.list td.date {
|
||||
width: 20%;
|
||||
}
|
||||
|
||||
/* Calendar Styles
|
||||
-------------------------------------------------------------------------------------------- */
|
||||
/* Calendar : General */
|
||||
@ -1548,15 +1336,18 @@ body#WebCal {
|
||||
color:#542;
|
||||
padding:.3em 0 .2em 0;
|
||||
background-color:#FFF;
|
||||
vertical-align: top;
|
||||
height: 2em;
|
||||
}
|
||||
.calendar thead tr th.weekend,
|
||||
#CreatorInfo {
|
||||
float:right;
|
||||
color:#FFF;
|
||||
margin:-24px 10px 0 0;
|
||||
}
|
||||
.calendar thead tr th.weekend,
|
||||
.calendar thead tr th.weekday {
|
||||
color:#542;
|
||||
background-color:#A97;
|
||||
}
|
||||
.calendar thead tr th.saturday,
|
||||
.calendar thead tr th.saturday,
|
||||
.calendar thead tr th.sunday { }
|
||||
.calendar tfoot tr td {
|
||||
padding:.7em 5% 1em 5%;
|
||||
@ -1570,12 +1361,14 @@ body#WebCal {
|
||||
|
||||
/* Calendar : Date Numeral */
|
||||
.calendar tbody tr td div.date {
|
||||
float:none;
|
||||
float:right;
|
||||
display:block;
|
||||
width:1.8em;
|
||||
font-size:1.2em;
|
||||
line-height:100%;
|
||||
text-align:center;
|
||||
color:#542;
|
||||
margin:0 0 0 .5em;
|
||||
padding:.2em 0;
|
||||
background-color:#F6F2EE;
|
||||
}
|
||||
@ -1638,25 +1431,26 @@ body#WebCal {
|
||||
.calendar tbody tr td.highlight div.date {
|
||||
color:#0A65B5;
|
||||
background-color:#C2E1FE;
|
||||
border: 5px solid rgba(255,255,255,.0);
|
||||
}
|
||||
|
||||
/* Calendar : Previous-Next Month */
|
||||
.calendar tbody tr td.previous,
|
||||
.calendar tbody tr td.next,
|
||||
.calendar tbody tr td.previous div.date,
|
||||
.calendar tbody tr td.previous,
|
||||
.calendar tbody tr td.next,
|
||||
.calendar tbody tr td.previous div.date,
|
||||
.calendar tbody tr td.next div.date {
|
||||
color:#A97;
|
||||
background-color:#F6F2EE;
|
||||
border: 5px solid rgba(255,255,255,.0);
|
||||
}
|
||||
|
||||
/* Calendar : Full Year */
|
||||
body#fullyearlinked div.content {
|
||||
width:963px;
|
||||
margin:0 auto;
|
||||
padding:5px 0 2px 2px;
|
||||
padding:15px 0 2px 2px;
|
||||
}
|
||||
body#fullyearlinked table.calendar {
|
||||
float:left;
|
||||
width:320px;
|
||||
height:18em;
|
||||
border:solid 1px #7D5925;
|
||||
}
|
||||
@ -1670,99 +1464,3 @@ body#fullyearlinked table.calendar thead tr th.monthName {
|
||||
body#fullyearlinked table.calendar tbody tr td {
|
||||
height:3em;
|
||||
}
|
||||
body#OneDay h3 {
|
||||
font-size: xx-large;
|
||||
vertical-align: top;
|
||||
height: 2em;
|
||||
}
|
||||
#WebCal table.calendar tfoot {
|
||||
display: none;
|
||||
}
|
||||
#WebCal table.calendar tr td {
|
||||
word-wrap: break-word;
|
||||
border-bottom:solid 1px #7D5925;
|
||||
border-right:solid 1px #7D5925;
|
||||
padding-left: 0px;
|
||||
}
|
||||
#WebCal .calendar tr td .empty {
|
||||
border: 5px solid rgba(255,255,255,.0);
|
||||
}
|
||||
#WebCal .calendar tr td .clickable {
|
||||
border: 5px solid rgba(255,255,255,.0);
|
||||
}
|
||||
#WebCal .calendar tr td .clickable:hover {
|
||||
display: block;
|
||||
overflow:auto;
|
||||
word-wrap: break-word;
|
||||
cursor: text;
|
||||
border-radius: 10px 0px 10px 10px;
|
||||
border: 5px solid #453619;
|
||||
padding: 0px;
|
||||
}
|
||||
body#fullyearlinked #YearGlance tbody td {
|
||||
height:48px;
|
||||
vertical-align: middle;
|
||||
text-align: center;
|
||||
}
|
||||
body#fullyearlinked #YearGlance tbody td.previous {
|
||||
border-width:0px 1px 1px 0px;
|
||||
border-color:#C1B398;
|
||||
}
|
||||
body#fullyearlinked #YearGlance tbody td.next {
|
||||
border-width:1px 0px 0px 1px;
|
||||
border-color:#C1B398;
|
||||
}
|
||||
body#fullyearlinked #YearGlance tbody td .date {
|
||||
font-size: 30px;
|
||||
vertical-align: middle;
|
||||
text-align: center;
|
||||
border-radius: 45px;
|
||||
margin-left: 5px;
|
||||
margin-right: 5px;
|
||||
float: none;
|
||||
border: 5px solid rgba(0,0,0,.0);
|
||||
}
|
||||
body#fullyearlinked #YearGlance tbody td:hover .date {
|
||||
border-radius: 45px;
|
||||
border: 5px solid;
|
||||
}
|
||||
h4 button.icon {
|
||||
width: 0.9em;
|
||||
border: 0px solid;
|
||||
padding: 0;
|
||||
opacity: 1;
|
||||
transform: rotate(90deg);
|
||||
transition: transform 200ms ease-out 0s;
|
||||
background: transparent;
|
||||
}
|
||||
h4 button.icon-close {
|
||||
transform: rotate(90deg);
|
||||
transition: transform 0.2s linear;
|
||||
}
|
||||
h4 button.icon-open {
|
||||
transform: rotate(180deg);
|
||||
transition: transform 0.2s linear;
|
||||
}
|
||||
svg {
|
||||
fill: #542;
|
||||
}
|
||||
/* Go to the top of the page */
|
||||
#gototop {
|
||||
display: none;
|
||||
position: fixed;
|
||||
bottom: 10px;
|
||||
right: 20px;
|
||||
z-index: 999;
|
||||
border: none;
|
||||
background-color: transparent;
|
||||
color: black;
|
||||
cursor: pointer;
|
||||
border-radius: 4px;
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
#gototop:hover {
|
||||
background-color: #696969;
|
||||
}
|
||||
|
||||
@ -1,22 +1,22 @@
|
||||
/*
|
||||
*******************************************************************************
|
||||
**************************************************************************************************
|
||||
Copyright Holder and License
|
||||
*******************************************************************************
|
||||
**************************************************************************************************
|
||||
GRAMPS Cascading Style Sheet
|
||||
Style Name: Print Style Sheet
|
||||
Style Author: Jason M. Simanek (2008)
|
||||
Modified by Rob G. Healey, July 2008
|
||||
|
||||
*******************************************************************************
|
||||
**************************************************************************************************
|
||||
This website was created with GRAMPS <http://www.gramps-project.org/>
|
||||
-------------------------------------------------------------------------------
|
||||
--------------------------------------------------------------------------------------------------
|
||||
GRAMPS is a Free Software Project for Genealogy, offering a professional
|
||||
genealogy program, and a wiki open to all. It is a community project, created,
|
||||
developed and governed by genealogists.
|
||||
|
||||
'Go to <http://gramps-project.org/> to learn more!
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
--------------------------------------------------------------------------------------------------
|
||||
Copyright (C) 2008-2011 Rob G. Healey <robhealey1@gmail.com>
|
||||
|
||||
This file is part of the GRAMPS program.
|
||||
@ -31,21 +31,21 @@ 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
|
||||
GRAMPS. If not, see <http://www.gnu.org/licenses/>.
|
||||
-------------------------------------------------------------------------------
|
||||
--------------------------------------------------------------------------------------------------
|
||||
|
||||
Color Palette
|
||||
-------------------------------------------------------------------------------
|
||||
--------------------------------------------------------------------------------------------------
|
||||
gray #A7A7A7
|
||||
red #520
|
||||
black #000
|
||||
white #FFF
|
||||
-------------------------------------------------------------------------------
|
||||
---------------------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
NarrativeWeb Styles
|
||||
-------------------------------------------------------------------------------
|
||||
--------------------------------------------------------------------------------------------
|
||||
|
||||
General Elements
|
||||
General Elements
|
||||
----------------------------------------------------- */
|
||||
|
||||
body {
|
||||
@ -419,7 +419,7 @@ body#ThumbnailPreview div#references table.infolist tbody tr td.ColumnName {
|
||||
width: 90%;
|
||||
}
|
||||
|
||||
/* Contact
|
||||
/* Contact
|
||||
----------------------------------------------------- */
|
||||
#researcher {
|
||||
margin:16pt 0 0 0;
|
||||
@ -456,13 +456,13 @@ body#ThumbnailPreview div#references table.infolist tbody tr td.ColumnName {
|
||||
clear:left;
|
||||
}
|
||||
|
||||
/* Subsections
|
||||
/* Subsections
|
||||
----------------------------------------------------- */
|
||||
#Home, #Introduction, #Download, #Contact {
|
||||
padding:3em 20px;
|
||||
}
|
||||
|
||||
/* Subsections : Events
|
||||
/* Subsections : Events
|
||||
----------------------------------------------------- */
|
||||
#IndividualDetail .ColumnValue {
|
||||
padding:4pt 0;
|
||||
@ -472,7 +472,7 @@ body#ThumbnailPreview div#references table.infolist tbody tr td.ColumnName {
|
||||
margin:1pt 0 0 18pt;
|
||||
}
|
||||
|
||||
/* Subsections : Gallery
|
||||
/* Subsections : Gallery
|
||||
----------------------------------------------------- */
|
||||
#indivgallery h4 {
|
||||
margin-bottom:1em;
|
||||
@ -532,7 +532,7 @@ table.attrlist tbody tr td.ColumnSources {
|
||||
width: 10%;
|
||||
}
|
||||
|
||||
/* Subsections : Pedigree
|
||||
/* Subsections : Pedigree
|
||||
----------------------------------------------------- */
|
||||
#pedigree a {
|
||||
text-decoration:none;
|
||||
@ -574,7 +574,7 @@ table.attrlist tbody tr td.ColumnSources {
|
||||
font-weight:bold;
|
||||
}
|
||||
|
||||
/* Subsections : Ancestors Tree
|
||||
/* Subsections : Ancestors Tree
|
||||
----------------------------------------------------- */
|
||||
#tree {
|
||||
page-break-before:always;
|
||||
@ -674,7 +674,7 @@ p#createdate {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* Calendar Styles
|
||||
/* Calendar Styles
|
||||
-------------------------------------------------------------------------------------------- */
|
||||
/* Calendar : General */
|
||||
body#WebCal h1#SiteTitle {
|
||||
@ -719,6 +719,10 @@ body#WebCal h1#SiteTitle {
|
||||
padding:5pt;
|
||||
border-width:0;
|
||||
}
|
||||
#CreatorInfo {
|
||||
float:right;
|
||||
margin:0 10px 0 0;
|
||||
}
|
||||
body#WebCal a {
|
||||
text-decoration:none;
|
||||
color:#000;
|
||||
@ -791,9 +795,9 @@ body#WebCal a {
|
||||
}
|
||||
|
||||
/* Calendar : Previous-Next Month */
|
||||
.calendar tbody tr td.previous,
|
||||
.calendar tbody tr td.next,
|
||||
.calendar tbody tr td.previous div.date,
|
||||
.calendar tbody tr td.previous,
|
||||
.calendar tbody tr td.next,
|
||||
.calendar tbody tr td.previous div.date,
|
||||
.calendar tbody tr td.next div.date {
|
||||
font-weight:normal;
|
||||
font-size:12pt;
|
||||
|
||||
@ -10,7 +10,7 @@
|
||||
# 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,
|
||||
# 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.
|
||||
@ -20,18 +20,17 @@
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
|
||||
*******************************************************************************
|
||||
**************************************************************************************************
|
||||
GRAMPS Cascading Style Sheet
|
||||
Style Name: Web_Navigation-Vertical.css Stylesheet
|
||||
*******************************************************************************
|
||||
***************************************************************************************************
|
||||
|
||||
# $Id: Web_Navigation-Vertical.css 15241 2010-04-19 11:07:00Z robhealey1 $
|
||||
|
||||
Body Element
|
||||
----------------------------------------------------- */
|
||||
body {
|
||||
background: -webkit-gradient (linear, left top, left bottom,
|
||||
from(#ccc), to(#fff));
|
||||
body { background: -webkit-gradient
|
||||
(linear, left top, left bottom, from(#ccc), to(#fff));
|
||||
color: #000;
|
||||
padding: 60px 0px 0px 146px;
|
||||
}
|
||||
|
||||
@ -10,7 +10,7 @@
|
||||
# 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,
|
||||
# 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.
|
||||
@ -20,15 +20,15 @@
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
|
||||
*******************************************************************************
|
||||
**************************************************************************************************
|
||||
GRAMPS Cascading Style Sheet
|
||||
Style Name: Visually Impaired Stylesheet
|
||||
Style Author: Jason M. Simanek (2008)
|
||||
*******************************************************************************
|
||||
***************************************************************************************************
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
--------------------------------------------------------------------------------------------------
|
||||
Color Palette
|
||||
-------------------------------------------------------------------------------
|
||||
--------------------------------------------------------------------------------------------------
|
||||
brown dark #453619, #542
|
||||
brown light #C1B398
|
||||
gray #696969
|
||||
@ -47,7 +47,7 @@ Females Web_Gender_Female.png
|
||||
|
||||
|
||||
NarrativeWeb Styles
|
||||
---------------------------------------------------------------------------- */
|
||||
-------------------------------------------------------------------------------------------- */
|
||||
div#alphabet ul li {
|
||||
background-color: #6AF364;
|
||||
}
|
||||
@ -96,6 +96,8 @@ img {
|
||||
background:none;
|
||||
}
|
||||
.content {
|
||||
overflow: auto;
|
||||
width:965px;
|
||||
margin:0 auto;
|
||||
padding-bottom: .2em;
|
||||
}
|
||||
@ -347,7 +349,7 @@ table.infolist tbody tr td.ColumnPartner a {
|
||||
table.infolist tbody tr td.ColumnParents {
|
||||
font-size:.9em;
|
||||
}
|
||||
table.infolist tbody tr td.ColumnParents span.father,
|
||||
table.infolist tbody tr td.ColumnParents span.father,
|
||||
table.infolist tbody tr td.ColumnParents span.mother {
|
||||
display:block;
|
||||
}
|
||||
@ -364,7 +366,7 @@ table.infolist tbody tr td.ColumnParents span.mother:before {
|
||||
#SurnameDetail p#description {
|
||||
padding-top:0;
|
||||
}
|
||||
table.surnamelist thead tr th.ColumnSurname,
|
||||
table.surnamelist thead tr th.ColumnSurname,
|
||||
#Surnames table.surnamelist tbody tr td.ColumnSurname {
|
||||
width:50%;
|
||||
}
|
||||
@ -389,11 +391,11 @@ table.surnamelist tbody tr td.ColumnLetter a {
|
||||
table.surnamelist tbody tr td.ColumnSurname {
|
||||
background-color: #FFF;
|
||||
}
|
||||
table#SortByName thead tr th.ColumnSurname,
|
||||
table#SortByName thead tr th.ColumnSurname,
|
||||
table#SortByCount thead tr th.ColumnQuantity {
|
||||
background-color: #C1B398;
|
||||
}
|
||||
table#SortByName thead tr th.ColumnSurname a:after,
|
||||
table#SortByName thead tr th.ColumnSurname a:after,
|
||||
table#SortByCount thead tr th.ColumnQuantity a:after {
|
||||
content:" ↓";
|
||||
}
|
||||
@ -441,7 +443,7 @@ table.surname tbody tr td.ColumnPartner a {
|
||||
display:block;
|
||||
padding:.6em 10px .6em 0px;
|
||||
}
|
||||
table.surname thead tr th.ColumnParents,
|
||||
table.surname thead tr th.ColumnParents,
|
||||
table.surname tbody tr td.ColumnParents {
|
||||
width:25%;
|
||||
}
|
||||
@ -463,7 +465,7 @@ div#Individuals table.IndividualList tbody tr td a {
|
||||
display: block;
|
||||
padding: .6em 10px;
|
||||
}
|
||||
div#Individuals table.IndividualList tbody tr td.ColumnSurname a:hover,
|
||||
div#Individuals table.IndividualList tbody tr td.ColumnSurname a:hover,
|
||||
div#Individuals table.IndividualList tbody tr td.ColumnSurname a:active {
|
||||
cursor:default;
|
||||
color: #000;
|
||||
@ -664,7 +666,7 @@ div#EventList table.alphaevent tbody tr td.ColumnDate {
|
||||
div#EventList table.alphaevent tbody tr td.ColumnPerson {
|
||||
width: 60%;
|
||||
}
|
||||
div#EventList table.alphaevent tbody tr td.ColumnPerson span.father,
|
||||
div#EventList table.alphaevent tbody tr td.ColumnPerson span.father,
|
||||
div#EventList table.alphaevent tbody tr td.ColumnPerson span.mother {
|
||||
display:block;
|
||||
}
|
||||
@ -694,7 +696,7 @@ div#EventDetail table.eventlist tbody tr td.ColumnDate {
|
||||
div#EventDetail table.eventlist tbody tr td.ColumnPerson {
|
||||
background-color: #D8F3D6;
|
||||
}
|
||||
|
||||
|
||||
/* Events
|
||||
----------------------------------------------------- */
|
||||
#EventList table.infolist tr.BeginType td {
|
||||
@ -707,7 +709,7 @@ div#EventDetail table.eventlist tbody tr td.ColumnPerson {
|
||||
#EventDetail table.infolist tr td a {
|
||||
display: inline;
|
||||
}
|
||||
#EventList table.infolist tr td span.father,
|
||||
#EventList table.infolist tr td span.father,
|
||||
#EventList table.infolist tr td span.mother,
|
||||
#EventDetail table.infolist tr td span.father,
|
||||
#EventDetail table.infolist tr td span.mother {
|
||||
@ -729,20 +731,6 @@ div#EventDetail table.eventlist tbody tr td.ColumnPerson {
|
||||
#EventDetail table.infolist tr td span.mother:last-child:after {
|
||||
content: "";
|
||||
}
|
||||
#IndividualDetail div table.eventlist td.ColumnSources {
|
||||
width: 5%;
|
||||
}
|
||||
#IndividualDetail div table.eventlist td.ColumnDate {
|
||||
width: 15%;
|
||||
}
|
||||
#IndividualDetail div table.eventlist td.ColumnEvent {
|
||||
width: 8%;
|
||||
}
|
||||
#IndividualDetail div table.eventlist td.ColumnEvent,
|
||||
#IndividualDetail div table.eventlist td.ColumnDate,
|
||||
#IndividualDetail div table.eventlist td.ColumnPlace {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* Gallery
|
||||
----------------------------------------------------- */
|
||||
@ -911,7 +899,7 @@ body#ThumbnailPreview div#references table.infolist tbody tr td.ColumnName {
|
||||
text-decoration:none;
|
||||
}
|
||||
|
||||
/* Download
|
||||
/* Download
|
||||
----------------------------------------------------- */
|
||||
div#Download {
|
||||
margin: 0;
|
||||
@ -924,7 +912,7 @@ div#Download table.download {
|
||||
div#Download table.download tbody tr#Row02 {
|
||||
border-bottom: solid 1px #000;
|
||||
}
|
||||
div#Download table.download tbody tr td {
|
||||
div#Download table.download tbody tr td {
|
||||
border: solid 1px #000;
|
||||
text-align: left;
|
||||
padding: 5px 0px 5px 0px;
|
||||
@ -1209,7 +1197,6 @@ div#families table.infolist tbody tr td.ColumnValue {
|
||||
}
|
||||
div#families table.infolist tbody tr td.ColumnValue p {
|
||||
margin-top:0;
|
||||
margin-left:0;
|
||||
}
|
||||
div#families table.infolist tbody tr td.ColumnValue ol {
|
||||
margin:0;
|
||||
@ -1499,10 +1486,19 @@ body#WebCal {
|
||||
color: #542;
|
||||
padding:.3em 0 .2em 0;
|
||||
background-color: #FFF;
|
||||
vertical-align: top;
|
||||
height: 2em;
|
||||
}
|
||||
.calendar thead tr th.weekend,
|
||||
#CreatorInfo {
|
||||
float:right;
|
||||
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;
|
||||
color: #000;
|
||||
@ -1594,9 +1590,9 @@ body#WebCal {
|
||||
}
|
||||
|
||||
/* Calendar : Previous-Next Month */
|
||||
.calendar tbody tr td.previous,
|
||||
.calendar tbody tr td.next,
|
||||
.calendar tbody tr td.previous div.date,
|
||||
.calendar tbody tr td.previous,
|
||||
.calendar tbody tr td.next,
|
||||
.calendar tbody tr td.previous div.date,
|
||||
.calendar tbody tr td.next div.date {
|
||||
color: #333;
|
||||
background-color: #D8F3D6;
|
||||
@ -1662,7 +1658,7 @@ table.oneday tbody tr td.ColumnText {
|
||||
width: 85%;
|
||||
}
|
||||
table.oneday tbody tr td.ColumnEvent {
|
||||
width: 10%;
|
||||
width; 10%;
|
||||
}
|
||||
|
||||
/* PlaceMaps
|
||||
|
||||
@ -33,24 +33,19 @@ Unknown #000
|
||||
===== Web Graphics =====
|
||||
Males Web_Gender_Male.png
|
||||
Females Web_Gender_Female.png
|
||||
# -------------------------------------------------------------------------- */
|
||||
# -------------------------------------------------------------------------- #
|
||||
/* Subsections : Ancestors Tree -------------------------------------------- */
|
||||
#tree {
|
||||
page-break-before:always;
|
||||
margin:0;
|
||||
padding:0;
|
||||
background:none;
|
||||
overflow-x:auto;
|
||||
}
|
||||
#toggle_anc {
|
||||
margin:0;
|
||||
padding:0;
|
||||
background:none;
|
||||
overflow-x:auto;
|
||||
}
|
||||
#treeContainer {
|
||||
position:relative;
|
||||
display: table-cell;
|
||||
vertical-align: middle;
|
||||
overflow: visible;
|
||||
z-index:1;
|
||||
}
|
||||
#treeContainer div.boxbg {
|
||||
|
||||
@ -31,7 +31,7 @@ body#FamilyMap {
|
||||
margin-left: 10px;
|
||||
margin-right: 10px;
|
||||
border: solid 4px #000;
|
||||
margin: 20px auto;
|
||||
margin: 0px auto;
|
||||
width: 800px;
|
||||
height: 400px;
|
||||
max-width: 90%;
|
||||
@ -64,25 +64,25 @@ div#FamilyMapDetail div#references table.infolist {
|
||||
width: 100%;
|
||||
}
|
||||
div#FamilyMapDetail div#references table.infolist tbody tr td.ColumnPlace {
|
||||
width: 70%;
|
||||
width: 40%;
|
||||
}
|
||||
|
||||
|
||||
/* Subsection: popup
|
||||
------------------------------------------------------ */
|
||||
#map_canvas .ol-popup {
|
||||
.ol-popup {
|
||||
position: absolute;
|
||||
background-color: white;
|
||||
-webkit-filter: drop-shadow(0 1px 4px rgba(0,0,0,0.2));
|
||||
filter: drop-shadow(0 1px 4px rgba(0,0,0,0.2));
|
||||
padding: 5px;
|
||||
border-radius: 8px;
|
||||
padding: 15px;
|
||||
border-radius: 10px;
|
||||
border: 2px solid #111111;
|
||||
bottom: 8px;
|
||||
left: -10px;
|
||||
min-width: 500px;
|
||||
bottom: 12px;
|
||||
left: -50px;
|
||||
min-width: 450px;
|
||||
}
|
||||
#map_canvas .ol-popup:after, #map_canvas .ol-popup:before {
|
||||
.ol-popup:after, .ol-popup:before {
|
||||
top: 100%;
|
||||
border: solid transparent;
|
||||
height: 0;
|
||||
@ -90,88 +90,24 @@ div#FamilyMapDetail div#references table.infolist tbody tr td.ColumnPlace {
|
||||
position: absolute;
|
||||
pointer-events: none;
|
||||
}
|
||||
#map_canvas .ol-popup:after {
|
||||
.ol-popup:after {
|
||||
border-top-color: white;
|
||||
border-width: 10px;
|
||||
left: 48px;
|
||||
margin-left: -10px;
|
||||
}
|
||||
#map_canvas .ol-popup:before {
|
||||
.ol-popup:before {
|
||||
border-top-color: #cccccc;
|
||||
border-width: 11px;
|
||||
left: 48px;
|
||||
margin-left: -11px;
|
||||
}
|
||||
#map_canvas .ol-popup-closer {
|
||||
.ol-popup-closer {
|
||||
text-decoration: none;
|
||||
position: absolute;
|
||||
top: 2px;
|
||||
right: 8px;
|
||||
}
|
||||
#map_canvas .ol-popup-title {
|
||||
background-color: #ededed;
|
||||
padding: 0 0.5em;
|
||||
}
|
||||
#map_canvas .ol-popup-content {
|
||||
color: #111;
|
||||
font: bold 0.9em sans-serif;
|
||||
max-height: 200px;
|
||||
overflow-y: auto;
|
||||
padding: 5px 0.5em 5px 0.5em;
|
||||
}
|
||||
#map_canvas .thumbnail {
|
||||
padding: 5px 5px;
|
||||
text-align: center;
|
||||
}
|
||||
#map_canvas img {
|
||||
max-height: 300px;
|
||||
max-width: 400px;
|
||||
}
|
||||
#map_canvas .ol-popup-content a {
|
||||
color: #111;
|
||||
}
|
||||
#map_canvas .ol-popup-content a:visited {
|
||||
color: green;
|
||||
}
|
||||
#map_canvas .ol-popup-content a:hover {
|
||||
color: red;
|
||||
}
|
||||
#map_canvas .ol-popup-closer:after {
|
||||
.ol-popup-closer:after {
|
||||
content: "✖";
|
||||
}
|
||||
#map_canvas .ol-control {
|
||||
position: absolute;
|
||||
background-color: rgba(255,255,255,0.1);
|
||||
bottom: .1em;
|
||||
left: .1em;
|
||||
height: 4%;
|
||||
width: 100%;
|
||||
margin-top: 1px;
|
||||
margin-bottom: 1px;
|
||||
padding-left: 1px;
|
||||
}
|
||||
#map_canvas .ol-rotate {
|
||||
display: none;
|
||||
}
|
||||
#map_canvas .ol-zoom, #map_canvas .ol-zoom-in, #map_canvas .ol-zoom-out {
|
||||
top: .5em;
|
||||
left: .5em;
|
||||
border-left-width: 1px;
|
||||
padding-left: 1px;
|
||||
padding-right: 1px;
|
||||
}
|
||||
#map_canvas .ol-attribution ul {
|
||||
list-style-type: none;
|
||||
font-size:0.8em;
|
||||
float: left;
|
||||
margin-top: 1px;
|
||||
margin-bottom: 1px;
|
||||
padding-left: 5px;
|
||||
}
|
||||
#map_canvas .ol-attribution li {
|
||||
float: left;
|
||||
padding-left: 5px;
|
||||
}
|
||||
#map_canvas .ol-attribution button {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@ -1,22 +1,22 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<component type="desktop-application">
|
||||
<id>org.gramps.gramps</id>
|
||||
<metadata_license>CC0-1.0</metadata_license>
|
||||
<name>Gramps</name>
|
||||
<summary>Manage genealogical information, perform genealogical research and analysis</summary>
|
||||
<summary>Genealogical research program</summary>
|
||||
|
||||
<description>
|
||||
<p>Gramps is a genealogy program that is both intuitive for hobbyists and feature-complete for professional genealogists.</p>
|
||||
<p>It gives you the ability to record the many details of the life of an individual as well as the complex relationships between various people, places and events.</p>
|
||||
<p>All of your research is kept organized, searchable and as precise as you need it to be.</p>
|
||||
<_p>Gramps is a genealogy program that is both intuitive for hobbyists and feature-complete for professional genealogists.</_p>
|
||||
<_p>It gives you the ability to record the many details of the life of an individual as well as the complex relationships between various people, places and events.</_p>
|
||||
<_p>All of your research is kept organized, searchable and as precise as you need it to be.</_p>
|
||||
</description>
|
||||
|
||||
<developer_name>Gramps Development Team</developer_name>
|
||||
<project_license>GPL-2.0-or-later</project_license>
|
||||
<metadata_license>CC0-1.0</metadata_license>
|
||||
|
||||
<launchable type="desktop-id">gramps.desktop</launchable>
|
||||
<url type="homepage">https://gramps-project.org/</url>
|
||||
<url type="bugtracker">https://gramps-project.org/bugs/</url>
|
||||
<url type="help">https://gramps-project.org/wiki/index.php?title=Main_page</url>
|
||||
<url type="translate">https://www.gramps-project.org/wiki/index.php?title=Translating_Gramps</url>
|
||||
<project_license>GPL-2.0+</project_license>
|
||||
<developer_name>Gramps Development Team</developer_name>
|
||||
|
||||
<screenshots>
|
||||
<screenshot>
|
||||
@ -36,23 +36,8 @@
|
||||
</screenshot>
|
||||
</screenshots>
|
||||
|
||||
<launchable type="desktop-id">gramps.desktop</launchable>
|
||||
<provides>
|
||||
<binary>gramps</binary>
|
||||
</provides>
|
||||
|
||||
<translation type="gettext">gramps</translation>
|
||||
|
||||
<content_rating type="oars-1.1" />
|
||||
|
||||
<releases>
|
||||
<release date="2020-08-12" version="5.1.3" />
|
||||
<release date="2020-01-10" version="5.1.2" />
|
||||
<release date="2019-09-15" version="5.1.1" />
|
||||
<release date="2019-08-21" version="5.1.0" />
|
||||
<release date="2019-08-18" version="5.0.2" />
|
||||
<release date="2018-12-20" version="5.0.1" />
|
||||
<release date="2018-07-24" version="5.0.0" />
|
||||
</releases>
|
||||
|
||||
</component>
|
||||
|
||||
7
data/gramps.applications
Normal file
7
data/gramps.applications
Normal file
@ -0,0 +1,7 @@
|
||||
gramps
|
||||
command=gramps
|
||||
name=GRAMPS
|
||||
can_open_multiple_files=false
|
||||
expects_uris=false
|
||||
requires_terminal=false
|
||||
mime_types=application/x-gramps,application/x-gedcom,application/x-gramps-package,application/x-gramps-xml,application/x-geneweb
|
||||
@ -1,13 +1,13 @@
|
||||
[Desktop Entry]
|
||||
Name=Gramps
|
||||
GenericName=Genealogy System
|
||||
X-GNOME-FullName=Gramps Genealogy System
|
||||
Comment=Manage genealogical information, perform genealogical research and analysis
|
||||
_Name=Gramps
|
||||
_GenericName=Genealogy System
|
||||
_X-GNOME-FullName=Gramps Genealogy System
|
||||
_Comment=Manage genealogical information, perform genealogical research and analysis
|
||||
Icon=gramps
|
||||
Terminal=false
|
||||
Type=Application
|
||||
StartupNotify=true
|
||||
Categories=GTK;Office;
|
||||
Keywords=Genealogy;Family History;Research;Family Tree;GEDCOM;
|
||||
_Keywords=Genealogy;Family History;Research;Family Tree;GEDCOM;
|
||||
MimeType=application/x-gramps;application/x-gedcom;application/x-gramps-package;application/x-gramps-xml;
|
||||
Exec=gramps %F
|
||||
|
||||
54
data/gramps.keys.in
Normal file
54
data/gramps.keys.in
Normal file
@ -0,0 +1,54 @@
|
||||
application/x-gramps:
|
||||
_description=Gramps database
|
||||
default_action_type=application
|
||||
short_list_application_ids=gramps
|
||||
short_list_application_ids_for_novice_user_level=gramps
|
||||
short_list_application_ids_for_intermediate_user_level=gramps
|
||||
short_list_application_ids_for_advanced_user_level=gramps
|
||||
category=Documents/Genealogy
|
||||
icon-filename=/usr/share/gramps/gramps.png
|
||||
open=gramps %f
|
||||
|
||||
application/x-gramps-package:
|
||||
_description=Gramps package
|
||||
default_action_type=application
|
||||
short_list_application_ids=gramps
|
||||
short_list_application_ids_for_novice_user_level=gramps
|
||||
short_list_application_ids_for_intermediate_user_level=gramps
|
||||
short_list_application_ids_for_advanced_user_level=gramps
|
||||
category=Documents/Genealogy
|
||||
icon-filename=/usr/share/gramps/gramps.png
|
||||
open=gramps %f
|
||||
|
||||
application/x-gramps-xml:
|
||||
_description=Gramps XML database
|
||||
default_action_type=application
|
||||
short_list_application_ids=gramps
|
||||
short_list_application_ids_for_novice_user_level=gramps
|
||||
short_list_application_ids_for_intermediate_user_level=gramps
|
||||
short_list_application_ids_for_advanced_user_level=gramps
|
||||
category=Documents/Genealogy
|
||||
icon-filename=/usr/share/gramps/gramps.png
|
||||
open=gramps %f
|
||||
|
||||
application/x-gedcom:
|
||||
_description=GEDCOM
|
||||
default_action_type=application
|
||||
short_list_application_ids=gramps
|
||||
short_list_application_ids_for_novice_user_level=gramps
|
||||
short_list_application_ids_for_intermediate_user_level=gramps
|
||||
short_list_application_ids_for_advanced_user_level=gramps
|
||||
category=Documents/Genealogy
|
||||
icon-filename=/usr/share/gramps/gramps.png
|
||||
open=gramps %f
|
||||
|
||||
application/x-geneweb:
|
||||
_description=GeneWeb
|
||||
default_action_type=application
|
||||
short_list_application_ids=gramps
|
||||
short_list_application_ids_for_novice_user_level=gramps
|
||||
short_list_application_ids_for_intermediate_user_level=gramps
|
||||
short_list_application_ids_for_advanced_user_level=gramps
|
||||
category=Documents/Genealogy
|
||||
icon-filename=/usr/share/gramps/gramps.png
|
||||
open=gramps %f
|
||||
14
data/gramps.mime
Normal file
14
data/gramps.mime
Normal file
@ -0,0 +1,14 @@
|
||||
application/x-gramps
|
||||
ext: grdb
|
||||
|
||||
application/x-gramps-xml
|
||||
ext: gramps
|
||||
|
||||
application/x-gramps-package
|
||||
ext: gpkg
|
||||
|
||||
application/x-gedcom
|
||||
ext: ged gedcom GED GEDCOM
|
||||
|
||||
application/x-geneweb
|
||||
ext: gw GW
|
||||
@ -3,11 +3,11 @@
|
||||
|
||||
<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
|
||||
<mime-type type="application/x-gramps">
|
||||
<comment>Gramps database</comment>
|
||||
<_comment>Gramps database</_comment>
|
||||
<glob pattern="*.grdb"/>
|
||||
</mime-type>
|
||||
<mime-type type="application/x-gedcom">
|
||||
<comment>GEDCOM</comment>
|
||||
<_comment>GEDCOM</_comment>
|
||||
<glob pattern="*.ged"/>
|
||||
<glob pattern="*.gedcom"/>
|
||||
<glob pattern="*.GED"/>
|
||||
@ -17,11 +17,11 @@
|
||||
</magic>
|
||||
</mime-type>
|
||||
<mime-type type="application/x-gramps-package">
|
||||
<comment>Gramps package</comment>
|
||||
<_comment>Gramps package</_comment>
|
||||
<glob pattern="*.gpkg"/>
|
||||
</mime-type>
|
||||
<mime-type type="application/x-gramps-xml">
|
||||
<comment>Gramps XML database</comment>
|
||||
<_comment>Gramps XML database</_comment>
|
||||
<glob pattern="*.gramps"/>
|
||||
<magic priority="80">
|
||||
<match type="string" value="<!DOCTYPE database" offset="0:256"/>
|
||||
@ -29,7 +29,7 @@
|
||||
</magic>
|
||||
</mime-type>
|
||||
<mime-type type="application/x-geneweb">
|
||||
<comment>GeneWeb source file</comment>
|
||||
<_comment>GeneWeb source file</_comment>
|
||||
<glob pattern="*.gw"/>
|
||||
<glob pattern="*.GW"/>
|
||||
<magic priority="80">
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<calendar>
|
||||
<country name="Bulgaria">
|
||||
<country _name="Bulgaria">
|
||||
<date name="Нова Година" value="*/1/1" type="national" />
|
||||
<date name="Освобождение на България от Османско иго" value="*/3/3" type="national" />
|
||||
<date name="Ден на труда" value="*/5/1" type="national" />
|
||||
@ -49,7 +49,7 @@
|
||||
<date name="Възнесение господне" value="2011/6/2" type="religious" />
|
||||
<date name="Възнесение господне" value="2012/5/24" type="religious" />
|
||||
</country>
|
||||
<country name="Canada">
|
||||
<country _name="Canada">
|
||||
<date name="New Year's Day" value="*/1/1" type="national" />
|
||||
<date name="Groundhog Day" value="*/2/2" type="secular" />
|
||||
<date name="Valentine's Day" value="*/2/14" type="secular" />
|
||||
@ -81,7 +81,22 @@
|
||||
<date name="Christmas" value="*/12/25" type="national" />
|
||||
<date name="Boxing Day" value="*/12/26" type="national" />
|
||||
</country>
|
||||
<country name="Chile">
|
||||
<country _name="Czech Republic">
|
||||
<date name="Nový rok" value="*/1/1" type="national" />
|
||||
<date name="Den obnovy samostatného českého státu" value="*/1/1" type="national" />
|
||||
<date name="Velikonoce" type="religious" value="> easter(y)" />
|
||||
<date name="Svátek práce" value="*/5/1" type="national" />
|
||||
<date name="Den osvobození od fašismu" value="*/5/8" type="national" />
|
||||
<date name="Den slovanských věrozvěstů Cyrila a Metoděje" value="*/7/5" type="national" />
|
||||
<date name="Den upálení mistra Jana Husa" value="*/7/6" type="national" />
|
||||
<date name="Den české státnosti" value="*/9/28" type="national" />
|
||||
<date name="Den vzniku samostatného československého státu" value="*/10/28" type="national" />
|
||||
<date name="Den boje za svobodu a demokracii" value="*/11/17" type="national" />
|
||||
<date name="Štědrý den" value="*/12/24" type="religious" />
|
||||
<date name="1. svátek vánoční" value="*/12/25" type="national" />
|
||||
<date name="2. svátek vánoční" value="*/12/26" type="national" />
|
||||
</country>
|
||||
<country _name="Chile">
|
||||
<date name="Año nuevo" value="*/1/1" type="national" />
|
||||
<date name="Viernes Santo" value="2007/4/6" type="religious" />
|
||||
<date name="Viernes Santo" value="2008/3/21" type="religious" />
|
||||
@ -104,10 +119,10 @@
|
||||
<date name="Inmaculada Concepción" value="*/12/8" type="religious" />
|
||||
<date name="Navidad" value="*/12/25" type="national" />
|
||||
</country>
|
||||
<country name="China">
|
||||
<country _name="China">
|
||||
<date name="Chinese New Year" value="2006/1/29" type="national" />
|
||||
</country>
|
||||
<country name="Croatia">
|
||||
<country _name="Croatia">
|
||||
<date name="Nova godina" value="*/1/1" type="national" />
|
||||
<date name="Sveta tri kralja" value="*/1/6" type="national" />
|
||||
<date name="Uskrs" value="> easter(y)" type="national" />
|
||||
@ -123,22 +138,7 @@
|
||||
<date name="Božić" value="*/12/25" type="national" />
|
||||
<date name="Sveti Stjepan" value="*/12/26" type="national" />
|
||||
</country>
|
||||
<country name="Czech Republic">
|
||||
<date name="Nový rok" value="*/1/1" type="national" />
|
||||
<date name="Den obnovy samostatného českého státu" value="*/1/1" type="national" />
|
||||
<date name="Velikonoce" type="religious" value="> easter(y)" />
|
||||
<date name="Svátek práce" value="*/5/1" type="national" />
|
||||
<date name="Den osvobození od fašismu" value="*/5/8" type="national" />
|
||||
<date name="Den slovanských věrozvěstů Cyrila a Metoděje" value="*/7/5" type="national" />
|
||||
<date name="Den upálení mistra Jana Husa" value="*/7/6" type="national" />
|
||||
<date name="Den české státnosti" value="*/9/28" type="national" />
|
||||
<date name="Den vzniku samostatného československého státu" value="*/10/28" type="national" />
|
||||
<date name="Den boje za svobodu a demokracii" value="*/11/17" type="national" />
|
||||
<date name="Štědrý den" value="*/12/24" type="religious" />
|
||||
<date name="1. svátek vánoční" value="*/12/25" type="national" />
|
||||
<date name="2. svátek vánoční" value="*/12/26" type="national" />
|
||||
</country>
|
||||
<country name="England">
|
||||
<country _name="England">
|
||||
<date name="New Year's Day" value="*/1/1" type="national" />
|
||||
<date name="Bank Holiday" value="*/1/1" offset="+1" if="dow(y, m, d) == 7" type="national" />
|
||||
<date name="Bank Holiday" value="*/1/1" offset="+2" if="dow(y, m, d) == 6" type="national" />
|
||||
@ -168,7 +168,7 @@
|
||||
<date name="Armistice Day" value="*/11/11" type="secular" />
|
||||
<date name="Remembrance Sunday" value="*/2/sun/nov" type="secular" />
|
||||
</country>
|
||||
<country name="Finland">
|
||||
<country _name="Finland">
|
||||
<date name="Loppiainen" value="*/1/6" type="religious" if="not(y>=1973)" />
|
||||
<date name="Loppiainen" value="*/1/6" offset="sat" type="religious" if="(y>=1973) and not(y>=1992)" />
|
||||
<date name="Loppiainen" value="*/1/6" type="religious" if="(y>=1992)" />
|
||||
@ -262,7 +262,7 @@
|
||||
<date name="Jean Sibeliuksen päivä" value="*/12/8" type="national" if="(y>=2011)" />
|
||||
<date name="Uudenvuodenaatto" value="*/12/31" type="national" if="(y>=1846)" />
|
||||
</country>
|
||||
<country name="France">
|
||||
<country _name="France">
|
||||
<date name="Jour de l'an" value="*/1/1" type="national" />
|
||||
<date name="Fête du travail" value="*/5/1" type="national" />
|
||||
<date name="Victoire 1945" value="*/5/8" type="national" />
|
||||
@ -298,7 +298,7 @@
|
||||
<date name="début Ramadan" value="2016/06/08" type="religious" />
|
||||
<date name="Saint Étienne (Alsace/Moselle)" value="*/12/26" type="religious" />
|
||||
</country>
|
||||
<country name="Germany">
|
||||
<country _name="Germany">
|
||||
<date name="Neujahr" type="national" value="*/1/1" />
|
||||
<date name="Hl. Drei Könige BW,BY,ST" type="religious" value="*/1/6" />
|
||||
<date name="Karfreitag" type="religious" value="> easter(y)" offset="-2" />
|
||||
@ -315,7 +315,7 @@
|
||||
<date name="1. Weihnachtsfeiertag" type="religious" value="*/12/25" />
|
||||
<date name="2. Weihnachtsfeiertag" type="religious" value="*/12/26" />
|
||||
</country>
|
||||
<country name="Japan">
|
||||
<country _name="Japan">
|
||||
<date name="元日" value="*/1/1" />
|
||||
<date name="成人の日" value="*/2/mon/jan" />
|
||||
<date name="建国記念の日" value="*/2/11" />
|
||||
@ -338,99 +338,7 @@
|
||||
<date name="天皇(明仁)即位記念" value="1990/11/12" />
|
||||
<date name="皇太子徳仁親王の結婚" value="1993/6/9" />
|
||||
</country>
|
||||
<country name="Jewish Holidays">
|
||||
<date name="Purim" value="> passover(y)" offset="-30"/>
|
||||
<date name="Passover" value="> passover(y)" offset="0"/>
|
||||
<date name="2 of Passover" value="> passover(y)" offset="1"/>
|
||||
<date name="3 of Passover" value="> passover(y)" offset="2"/>
|
||||
<date name="4 of Passover" value="> passover(y)" offset="3"/>
|
||||
<date name="5 of Passover" value="> passover(y)" offset="4"/>
|
||||
<date name="6 of Passover" value="> passover(y)" offset="5"/>
|
||||
<date name="7 of Passover" value="> passover(y)" offset="6"/>
|
||||
<date name="Shavuot" value="> passover(y)" offset="50"/>
|
||||
<date name="Rosh Ha'Shana" value="> passover(y)" offset="163"/>
|
||||
<date name="Rosh Ha'Shana 2" value="> passover(y)" offset="164"/>
|
||||
<date name="Yom Kippur" value="> passover(y)" offset="172"/>
|
||||
<date name="Sukot" value="> passover(y)" offset="177"/>
|
||||
<date name="2 of Sukot" value="> passover(y)" offset="178"/>
|
||||
<date name="3 of Sukot" value="> passover(y)" offset="179"/>
|
||||
<date name="4 of Sukot" value="> passover(y)" offset="180"/>
|
||||
<date name="5 of Sukot" value="> passover(y)" offset="181"/>
|
||||
<date name="6 of Sukot" value="> passover(y)" offset="182"/>
|
||||
<date name="7 of Sukot" value="> passover(y)" offset="183"/>
|
||||
<date name="Simhat Tora" value="> passover(y)" offset="184"/>
|
||||
<date name="Hanuka" value="> hanuka(y)" offset="0"/>
|
||||
<date name="2 of Hanuka" value="> hanuka(y)" offset="1"/>
|
||||
<date name="3 of Hanuka" value="> hanuka(y)" offset="2"/>
|
||||
<date name="4 of Hanuka" value="> hanuka(y)" offset="3"/>
|
||||
<date name="5 of Hanuka" value="> hanuka(y)" offset="4"/>
|
||||
<date name="6 of Hanuka" value="> hanuka(y)" offset="5"/>
|
||||
<date name="7 of Hanuka" value="> hanuka(y)" offset="6"/>
|
||||
<date name="8 of Hanuka" value="> hanuka(y)" offset="7"/>
|
||||
</country>
|
||||
<country name="New Zealand">
|
||||
<date value="*/1/1" type="national" name="New Year's Day"/>
|
||||
<date value="*/1/2" type="national" name="Day After New Year's Day"/>
|
||||
<date value="*/1/1" type="national" offset="+1" name="New Years Day Holiday" if="dow(y, m, d) == 7"/>
|
||||
<date value="*/1/1" type="national" offset="+2" name="Day After New Years Day Holiday" if="dow(y, m, d) == 6"/>
|
||||
<date value="*/feb/6" type="national" name="Waitangi Day"/>
|
||||
<date value="> easter(y)" type="national" offset="-2" name="Good Friday"/>
|
||||
<date value="> easter(y)" type="national" offset="+1" name="Easter Monday"/>
|
||||
<date value="*/apr/25" type="national" name="ANZAC Day"/>
|
||||
<date value="*/-1/mon/jun" type="national" name="Queen's Birthday Holiday"/>
|
||||
<date value="*/-4/mon/oct" type="national" name="Labour Day"/>
|
||||
<date value="*/dec/25" type="national" name="Christmas Day"/>
|
||||
<date value="*/dec/26" type="national" name="Boxing Day"/>
|
||||
<date value="*/dec/25" type="national" offset="+2" name="Christmas Day Holiday" if="dow(y, m, d) > 5"/>
|
||||
<date value="*/dec/26" type="national" offset="+2" name="Boxing Day Holiday" if="dow(y, m, d) > 5"/>
|
||||
</country>
|
||||
<country name="Russia">
|
||||
<date value="*/1/7" type="religious" name="Рождество Христово" />
|
||||
<date value="*/1/19" type="religious" name="Крещение Господне" />
|
||||
<date value="*/2/23" type="national" name="День Защитника Отечества" />
|
||||
<date value="*/3/8" type="national" name="Международный женский день" />
|
||||
<date value="*/4/12" type="national" name="День Космонавтики" />
|
||||
<date value="*/5/1" type="national" name="Праздник Весны и Труда" />
|
||||
<date value="*/5/9" type="national" name="День Победы" />
|
||||
<date value="*/6/1" type="national" name="День защиты детей" />
|
||||
<date value="*/6/12" type="national" name="День России" />
|
||||
<date value="*/6/22" type="national" name="День памяти и скорби" />
|
||||
<date value="*/-4/sun/jul" type="national" name="День ВМФ" />
|
||||
<date value="*/9/1" type="national" name="День знаний" />
|
||||
<date value="*/11/4" type="national" name="День народного единства" />
|
||||
<date value="*/12/31" offset="+2" type="national" name="Новый год" />
|
||||
</country>
|
||||
<country name="Serbia">
|
||||
<date value="*/1/1" type="national" name="Нова Година" />
|
||||
<date value="*/1/7" type="religious" name="Божић" />
|
||||
<date value="*/2/15" type="national" name="Дан државности Србије" />
|
||||
<date value="> julian_easter(y)" type="religious" offset="-2" name="Велики петак" />
|
||||
<date value="> julian_easter(y)" type="religious" name="Васкрс" />
|
||||
<date value="> julian_easter(y)" type="religious" offset="1" name="Васкрсни понедељак" />
|
||||
<date value="*/5/1" type="national" name="Празник рада" />
|
||||
<date value="*/11/11" type="national" name="Дан примирја" />
|
||||
<date value="*/1/27" type="religious" name="Свети Сава" />
|
||||
<date value="*/4/22" type="national" name="Дан сећања на жртве холокауста" />
|
||||
<date value="*/5/9" type="national" name="Дан победе" />
|
||||
<date value="*/6/28" type="religious" name="Видовдан" />
|
||||
<date value="*/10/21" type="national" name="Дан сећања на српске жртве у Другом светском рату" />
|
||||
</country>
|
||||
<country name="Serbia (Latin)">
|
||||
<date value="*/1/1" type="national" name="Nova godina" />
|
||||
<date value="*/1/7" type="religious" name="Božić" />
|
||||
<date value="*/2/15" type="national" name="Dan državnosti Srbije" />
|
||||
<date value="> julian_easter(y)" type="religious" offset="-2" name="Veliki petak" />
|
||||
<date value="> julian_easter(y)" type="religious" name="Vaskrs" />
|
||||
<date value="> julian_easter(y)" type="religious" offset="1" name="Vaskrsni ponedeljak" />
|
||||
<date value="*/5/1" type="national" name="Praznik rada" />
|
||||
<date value="*/11/11" type="national" name="Dan primirja" />
|
||||
<date value="*/1/27" type="religious" name="Sveti Sava" />
|
||||
<date value="*/4/22" type="national" name="Dan sećanja na žrtve holokausta" />
|
||||
<date value="*/5/9" type="national" name="Dan pobede" />
|
||||
<date value="*/6/28" type="religious" name="Vidovdan" />
|
||||
<date value="*/10/21" type="national" name="Dan sećanja na srpske žrtve u Drugom svetskom ratu" />
|
||||
</country>
|
||||
<country name="Slovakia">
|
||||
<country _name="Slovakia">
|
||||
<date name="Deň vzniku Slovenskej republiky" value="*/1/1" type="national" />
|
||||
<date name="Zjavenie Pána (Traja králi)" value="*/1/6" type="religious" />
|
||||
<date name="Veľký piatok" value="> easter(y)" offset="-2" type="religious" />
|
||||
@ -447,7 +355,7 @@
|
||||
<date name="Prvý sviatok vianočný" value="*/12/25" type="national" />
|
||||
<date name="Druhý sviatok vianočný" value="*/12/26" type="national" />
|
||||
</country>
|
||||
<country name="Sweden">
|
||||
<country _name="Sweden">
|
||||
<date name="Nyårsafton" value="*/12/31" type="national" />
|
||||
<date name="Trettondedag jul" value="*/1/6" type="religious" />
|
||||
<date name="Alla helgons dag" value="*/oct/31" offset="sat" type="religious" if="(y>=1953)" />
|
||||
@ -474,34 +382,7 @@
|
||||
<date name="Midsommardagen" value="*/jun/24" type="religious" if="not(y>=1953)" />
|
||||
<date name="Fars dag" value="*/2/sun/nov" type="national" />
|
||||
</country>
|
||||
<country name="Ukraine">
|
||||
<date value="*/1/1" type="national" name="Новий Рік"/>
|
||||
<date value="*/1/6" type="religious" name="Святий Вечір"/>
|
||||
<date value="*/1/7" type="religious" name="Різдво"/>
|
||||
<date value="*/1/13" type="religious" name="Маланка"/>
|
||||
<date value="*/1/14" type="religious" name="Старий Новий рік, Щедрий вечір"/>
|
||||
<date value="*/1/19" type="religious" name="Водохреща"/>
|
||||
<date value="*/1/22" type="national" name="День Соборності України"/>
|
||||
<date value="*/2/14" type="secular" name="День закоханих"/>
|
||||
<date value="*/2/15" type="religious" name="Стрітення"/>
|
||||
<date value="*/3/8" type="secular" name="Міжнародний жіночий день"/>
|
||||
<date value="*/3/20" type="secular" name="Весняне Рівнодення"/>
|
||||
<date value="*/4/1" type="secular" name="День сміху"/>
|
||||
<date value="*/4/7" type="religious" name="Благовіщення"/>
|
||||
<date value="> julian_easter(y)" type="religious" name="Великдень"/>
|
||||
<date value="*/5/1" type="national" name="День Праці"/>
|
||||
<date value="*/6/21" type="secular" name="Весняне Сонцестояння"/>
|
||||
<date value="*/6/28" type="national" name="День Конституції України"/>
|
||||
<date value="*/7/7" type="religious" name="Івана Купала"/>
|
||||
<date value="*/8/19" type="religious" name="Спаса"/>
|
||||
<date value="*/8/24" type="national" name="День Незалежності України"/>
|
||||
<date value="*/9/22" type="secular" name="Осіннє Рівнодення"/>
|
||||
<date value="*/10/14" type="religious" name="Покрова, День Українського козацтва"/>
|
||||
<date value="*/12/13" type="religious" name="Андрія"/>
|
||||
<date value="*/12/19" type="religious" name="Миколая"/>
|
||||
<date value="*/12/21" type="secular" name="Осіннє Сонцестояння"/>
|
||||
</country>
|
||||
<country name="United States of America">
|
||||
<country _name="United States of America">
|
||||
<date name="New Year's Eve" value="*/12/31" type="national" />
|
||||
<date name="New Year's Day" value="*/1/1" type="national" />
|
||||
<date name="ML Kings's Birthday" value="*/3/mon/jan" type="secular" />
|
||||
@ -551,4 +432,107 @@
|
||||
<date name="Christmas" value="*/12/25" type="religious" />
|
||||
<date name="Kwanzaa begins" value="*/12/26" type="religious" />
|
||||
</country>
|
||||
<country _name="Jewish Holidays">
|
||||
<date _name="Purim" value="> passover(y)" offset="-30"/>
|
||||
<date _name="Passover" value="> passover(y)" offset="0"/>
|
||||
<date _name="2 of Passover" value="> passover(y)" offset="1"/>
|
||||
<date _name="3 of Passover" value="> passover(y)" offset="2"/>
|
||||
<date _name="4 of Passover" value="> passover(y)" offset="3"/>
|
||||
<date _name="5 of Passover" value="> passover(y)" offset="4"/>
|
||||
<date _name="6 of Passover" value="> passover(y)" offset="5"/>
|
||||
<date _name="7 of Passover" value="> passover(y)" offset="6"/>
|
||||
<date _name="Shavuot" value="> passover(y)" offset="50"/>
|
||||
<date _name="Rosh Ha'Shana" value="> passover(y)" offset="163"/>
|
||||
<date _name="Rosh Ha'Shana 2" value="> passover(y)" offset="164"/>
|
||||
<date _name="Yom Kippur" value="> passover(y)" offset="172"/>
|
||||
<date _name="Sukot" value="> passover(y)" offset="177"/>
|
||||
<date _name="2 of Sukot" value="> passover(y)" offset="178"/>
|
||||
<date _name="3 of Sukot" value="> passover(y)" offset="179"/>
|
||||
<date _name="4 of Sukot" value="> passover(y)" offset="180"/>
|
||||
<date _name="5 of Sukot" value="> passover(y)" offset="181"/>
|
||||
<date _name="6 of Sukot" value="> passover(y)" offset="182"/>
|
||||
<date _name="7 of Sukot" value="> passover(y)" offset="183"/>
|
||||
<date _name="Simhat Tora" value="> passover(y)" offset="184"/>
|
||||
<date _name="Hanuka" value="> hanuka(y)" offset="0"/>
|
||||
<date _name="2 of Hanuka" value="> hanuka(y)" offset="1"/>
|
||||
<date _name="3 of Hanuka" value="> hanuka(y)" offset="2"/>
|
||||
<date _name="4 of Hanuka" value="> hanuka(y)" offset="3"/>
|
||||
<date _name="5 of Hanuka" value="> hanuka(y)" offset="4"/>
|
||||
<date _name="6 of Hanuka" value="> hanuka(y)" offset="5"/>
|
||||
<date _name="7 of Hanuka" value="> hanuka(y)" offset="6"/>
|
||||
<date _name="8 of Hanuka" value="> hanuka(y)" offset="7"/>
|
||||
</country>
|
||||
<country _name="New Zealand">
|
||||
<date value="*/1/1" type="national" name="New Year's Day"/>
|
||||
<date value="*/1/2" type="national" name="Day After New Year's Day"/>
|
||||
<date value="*/1/1" type="national" offset="+1" name="New Years Day Holiday" if="dow(y, m, d) == 7"/>
|
||||
<date value="*/1/1" type="national" offset="+2" name="Day After New Years Day Holiday" if="dow(y, m, d) == 6"/>
|
||||
<date value="*/feb/6" type="national" name="Waitangi Day"/>
|
||||
<date value="> easter(y)" type="national" offset="-2" name="Good Friday"/>
|
||||
<date value="> easter(y)" type="national" offset="+1" name="Easter Monday"/>
|
||||
<date value="*/apr/25" type="national" name="ANZAC Day"/>
|
||||
<date value="*/-1/mon/jun" type="national" name="Queen's Birthday Holiday"/>
|
||||
<date value="*/-4/mon/oct" type="national" name="Labour Day"/>
|
||||
<date value="*/dec/25" type="national" name="Christmas Day"/>
|
||||
<date value="*/dec/26" type="national" name="Boxing Day"/>
|
||||
<date value="*/dec/25" type="national" offset="+2" name="Christmas Day Holiday" if="dow(y, m, d) > 5"/>
|
||||
<date value="*/dec/26" type="national" offset="+2" name="Boxing Day Holiday" if="dow(y, m, d) > 5"/>
|
||||
</country>
|
||||
<country _name="Ukraine">
|
||||
<date value="*/1/1" type="national" name="Новий Рік"/>
|
||||
<date value="*/1/6" type="religious" name="Святий Вечір"/>
|
||||
<date value="*/1/7" type="religious" name="Різдво"/>
|
||||
<date value="*/1/13" type="religious" name="Маланка"/>
|
||||
<date value="*/1/14" type="religious" name="Старий Новий рік, Щедрий вечір"/>
|
||||
<date value="*/1/19" type="religious" name="Водохреща"/>
|
||||
<date value="*/1/22" type="national" name="День Соборності України"/>
|
||||
<date value="*/2/14" type="secular" name="День закоханих"/>
|
||||
<date value="*/2/15" type="religious" name="Стрітення"/>
|
||||
<date value="*/3/8" type="secular" name="Міжнародний жіночий день"/>
|
||||
<date value="*/3/20" type="secular" name="Весняне Рівнодення"/>
|
||||
<date value="*/4/1" type="secular" name="День сміху"/>
|
||||
<date value="*/4/7" type="religious" name="Благовіщення"/>
|
||||
<date value="> julian_easter(y)" type="religious" name="Великдень"/>
|
||||
<date value="*/5/1" type="national" name="День Праці"/>
|
||||
<date value="*/6/21" type="secular" name="Весняне Сонцестояння"/>
|
||||
<date value="*/6/28" type="national" name="День Конституції України"/>
|
||||
<date value="*/7/7" type="religious" name="Івана Купала"/>
|
||||
<date value="*/8/19" type="religious" name="Спаса"/>
|
||||
<date value="*/8/24" type="national" name="День Незалежності України"/>
|
||||
<date value="*/9/22" type="secular" name="Осіннє Рівнодення"/>
|
||||
<date value="*/10/14" type="religious" name="Покрова, День Українського козацтва"/>
|
||||
<date value="*/12/13" type="religious" name="Андрія"/>
|
||||
<date value="*/12/19" type="religious" name="Миколая"/>
|
||||
<date value="*/12/21" type="secular" name="Осіннє Сонцестояння"/>
|
||||
</country>
|
||||
<country _name="Serbia">
|
||||
<date value="*/1/1" type="national" name="Нова Година" />
|
||||
<date value="*/1/7" type="religious" name="Божић" />
|
||||
<date value="*/2/15" type="national" name="Дан државности Србије" />
|
||||
<date value="> julian_easter(y)" type="religious" offset="-2" name="Велики петак" />
|
||||
<date value="> julian_easter(y)" type="religious" name="Васкрс" />
|
||||
<date value="> julian_easter(y)" type="religious" offset="1" name="Васкрсни понедељак" />
|
||||
<date value="*/5/1" type="national" name="Празник рада" />
|
||||
<date value="*/11/11" type="national" name="Дан примирја" />
|
||||
<date value="*/1/27" type="religious" name="Свети Сава" />
|
||||
<date value="*/4/22" type="national" name="Дан сећања на жртве холокауста" />
|
||||
<date value="*/5/9" type="national" name="Дан победе" />
|
||||
<date value="*/6/28" type="religious" name="Видовдан" />
|
||||
<date value="*/10/21" type="national" name="Дан сећања на српске жртве у Другом светском рату" />
|
||||
</country>
|
||||
<country _name="Serbia (Latin)">
|
||||
<date value="*/1/1" type="national" name="Nova godina" />
|
||||
<date value="*/1/7" type="religious" name="Božić" />
|
||||
<date value="*/2/15" type="national" name="Dan državnosti Srbije" />
|
||||
<date value="> julian_easter(y)" type="religious" offset="-2" name="Veliki petak" />
|
||||
<date value="> julian_easter(y)" type="religious" name="Vaskrs" />
|
||||
<date value="> julian_easter(y)" type="religious" offset="1" name="Vaskrsni ponedeljak" />
|
||||
<date value="*/5/1" type="national" name="Praznik rada" />
|
||||
<date value="*/11/11" type="national" name="Dan primirja" />
|
||||
<date value="*/1/27" type="religious" name="Sveti Sava" />
|
||||
<date value="*/4/22" type="national" name="Dan sećanja na žrtve holokausta" />
|
||||
<date value="*/5/9" type="national" name="Dan pobede" />
|
||||
<date value="*/6/28" type="religious" name="Vidovdan" />
|
||||
<date value="*/10/21" type="national" name="Dan sećanja na srpske žrtve u Drugom svetskom ratu" />
|
||||
</country>
|
||||
</calendar>
|
||||
96
data/lds.xml
96
data/lds.xml
@ -20,9 +20,6 @@
|
||||
<code>SAMOA</code>
|
||||
<code>AP</code>
|
||||
</temple>
|
||||
<temple name="Arequipa Peru Temple">
|
||||
<code>AREQU</code>
|
||||
</temple>
|
||||
<temple name="Asuncion, Paraguay">
|
||||
<code>ASUNC</code>
|
||||
</temple>
|
||||
@ -30,9 +27,6 @@
|
||||
<code>ATLAN</code>
|
||||
<code>AT</code>
|
||||
</temple>
|
||||
<temple name="Barranquilla Colombia Temple">
|
||||
<code>BARRA</code>
|
||||
</temple>
|
||||
<temple name="Baton Rouge, Louisiana">
|
||||
<code>BROUG</code>
|
||||
</temple>
|
||||
@ -63,9 +57,6 @@
|
||||
<temple name="Bountiful, Utah">
|
||||
<code>BOUNT</code>
|
||||
</temple>
|
||||
<temple name="Brigham City Utah Temple">
|
||||
<code>BRIGH</code>
|
||||
</temple>
|
||||
<temple name="Brisbane, Australia">
|
||||
<code>BRISB</code>
|
||||
</temple>
|
||||
@ -88,12 +79,8 @@
|
||||
<code>ALBR</code>
|
||||
</temple>
|
||||
<temple name="Cebu, Philippines">
|
||||
<code>CEBUP</code>
|
||||
<code>CEBU</code>
|
||||
</temple>
|
||||
<temple name="Cedar City Utah">
|
||||
<code>CEDAR</code>
|
||||
</temple>
|
||||
<temple name="Chicago, Illinois">
|
||||
<code>CHICA</code>
|
||||
<code>CH</code>
|
||||
@ -107,18 +94,15 @@
|
||||
<temple name="Colonia Juarez, Chihuahua, Mexico">
|
||||
<code>COLJU</code>
|
||||
</temple>
|
||||
<temple name="Columbia River, Washington">
|
||||
<code>CRIVE</code>
|
||||
</temple>
|
||||
<temple name="Columbia, South Carolina">
|
||||
<code>COLSC</code>
|
||||
</temple>
|
||||
<temple name="Columbia River, Washington">
|
||||
<code>CRIVE</code>
|
||||
</temple>
|
||||
<temple name="Columbus, Ohio">
|
||||
<code>COLUM</code>
|
||||
</temple>
|
||||
<temple name="Concepción Chile">
|
||||
<code>CONCE</code>
|
||||
</temple>
|
||||
<temple name="Copenhagen, Denmark">
|
||||
<code>COPEN</code>
|
||||
</temple>
|
||||
@ -145,19 +129,6 @@
|
||||
<temple name="Edmonton, Alberta">
|
||||
<code>EDMON</code>
|
||||
</temple>
|
||||
<temple name="Endowment House">
|
||||
<code>EHOUS</code>
|
||||
<code>EH</code>
|
||||
</temple>
|
||||
<temple name="Fort Collins Colorado">
|
||||
<code>FORTC</code>
|
||||
</temple>
|
||||
<temple name="Fort Lauderdale Florida">
|
||||
<code>FORTL</code>
|
||||
</temple>
|
||||
<temple name="Fortaleza Brazil">
|
||||
<code>FORTA</code>
|
||||
</temple>
|
||||
<temple name="Frankfurt, Germany">
|
||||
<code>FRANK</code>
|
||||
<code>FR</code>
|
||||
@ -220,9 +191,6 @@
|
||||
<code>IFALL</code>
|
||||
<code>IF</code>
|
||||
</temple>
|
||||
<temple name="Indianapolis Indiana">
|
||||
<code>INDIA</code>
|
||||
</temple>
|
||||
<temple name="Johannesburg, South Africa">
|
||||
<code>JOHAN</code>
|
||||
<code>JO</code>
|
||||
@ -234,14 +202,10 @@
|
||||
<temple name="Kansas City, Missouri">
|
||||
<code>KANSA</code>
|
||||
</temple>
|
||||
<temple name="Kinshasa Democratic Republic of the Congo">
|
||||
<code>KINSH</code>
|
||||
</temple>
|
||||
<temple name="Kona, Hawaii">
|
||||
<code>KONA</code>
|
||||
</temple>
|
||||
<temple name="Kiev, Ukraine">
|
||||
<code>KYIV</code>
|
||||
<code>KIEV</code>
|
||||
</temple>
|
||||
<temple name="Kirtland, Ohio">
|
||||
@ -259,9 +223,6 @@
|
||||
<code>LIMA</code>
|
||||
<code>LI</code>
|
||||
</temple>
|
||||
<temple name="Lisbon Portugal">
|
||||
<code>LISBO</code>
|
||||
</temple>
|
||||
<temple name="Logan, Utah">
|
||||
<code>LOGAN</code>
|
||||
<code>LG</code>
|
||||
@ -309,9 +270,6 @@
|
||||
<temple name="Merida, Mexico">
|
||||
<code>MERID</code>
|
||||
</temple>
|
||||
<temple name="Meridian Idaho">
|
||||
<code>MIDAH</code>
|
||||
</temple>
|
||||
<temple name="Mesa, Arizona">
|
||||
<code>ARIZO</code>
|
||||
<code>AZ</code>
|
||||
@ -367,7 +325,6 @@
|
||||
<code>OKLAH</code>
|
||||
</temple>
|
||||
<temple name="Oquirrh Mountain, Utah">
|
||||
<code>OQUIR</code>
|
||||
<code>OMOUN</code>
|
||||
</temple>
|
||||
<temple name="Orlando, Florida">
|
||||
@ -383,12 +340,6 @@
|
||||
<code>PAPEE</code>
|
||||
<code>TA</code>
|
||||
</temple>
|
||||
<temple name="Paris France">
|
||||
<code>PARIS</code>
|
||||
</temple>
|
||||
<temple name="Payson Utah">
|
||||
<code>PAYSO</code>
|
||||
</temple>
|
||||
<temple name="Perth, Australia">
|
||||
<code>PERTH</code>
|
||||
</temple>
|
||||
@ -398,9 +349,6 @@
|
||||
<temple name="Phoenix, Arizona">
|
||||
<code>PHOEN</code>
|
||||
</temple>
|
||||
<temple name="Port-au-Prince Haiti">
|
||||
<code>PORTA</code>
|
||||
</temple>
|
||||
<temple name="Portland, Oregon">
|
||||
<code>PORTL</code>
|
||||
<code>PT</code>
|
||||
@ -411,9 +359,6 @@
|
||||
<temple name="Preston, England">
|
||||
<code>PREST</code>
|
||||
</temple>
|
||||
<temple name="Provo City Center, Utah">
|
||||
<code>PROCC</code>
|
||||
</temple>
|
||||
<temple name="Provo, Utah">
|
||||
<code>PROVO</code>
|
||||
<code>PV</code>
|
||||
@ -440,7 +385,6 @@
|
||||
<code>REXBU</code>
|
||||
</temple>
|
||||
<temple name="Rome, Italy">
|
||||
<code>ROMEI</code>
|
||||
<code>ROME</code>
|
||||
</temple>
|
||||
<temple name="Sacramento, California">
|
||||
@ -450,6 +394,12 @@
|
||||
<code>SGEOR</code>
|
||||
<code>SG</code>
|
||||
</temple>
|
||||
<temple name="St. Louis, Missouri">
|
||||
<code>SLOUI</code>
|
||||
</temple>
|
||||
<temple name="St. Paul, Minnesota">
|
||||
<code>SPMIN</code>
|
||||
</temple>
|
||||
<temple name="Salt Lake City, Utah">
|
||||
<code>SLAKE</code>
|
||||
<code>SL</code>
|
||||
@ -465,7 +415,6 @@
|
||||
<code>SJOSE</code>
|
||||
</temple>
|
||||
<temple name="San Salvador, El Salvador">
|
||||
<code>SANSA</code>
|
||||
<code>SSALV</code>
|
||||
</temple>
|
||||
<temple name="Santiago, Chile">
|
||||
@ -479,9 +428,6 @@
|
||||
<code>SPAUL</code>
|
||||
<code>SP</code>
|
||||
</temple>
|
||||
<temple name="Sapporo Japan">
|
||||
<code>SAPPO</code>
|
||||
</temple>
|
||||
<temple name="Seattle, Washington">
|
||||
<code>SEATT</code>
|
||||
<code>SE</code>
|
||||
@ -496,15 +442,6 @@
|
||||
<temple name="Spokane, Washington">
|
||||
<code>SPOKA</code>
|
||||
</temple>
|
||||
<temple name="St. Louis, Missouri">
|
||||
<code>SLOUI</code>
|
||||
</temple>
|
||||
<temple name="St. Paul, Minnesota">
|
||||
<code>SPMIN</code>
|
||||
</temple>
|
||||
<temple name="Star Valley Wyoming">
|
||||
<code>STARV</code>
|
||||
</temple>
|
||||
<temple name="Stockholm, Sweden">
|
||||
<code>STOCK</code>
|
||||
<code>ST</code>
|
||||
@ -526,15 +463,9 @@
|
||||
<temple name="Tegucigalpa, Honduras">
|
||||
<code>TEGUC</code>
|
||||
</temple>
|
||||
<temple name="The Gila Valley Arizona">
|
||||
<code>GILAV</code>
|
||||
</temple>
|
||||
<temple name="The Hague, Netherlands">
|
||||
<code>HAGUE</code>
|
||||
</temple>
|
||||
<temple name="Tijuana Mexico">
|
||||
<code>TIJUA</code>
|
||||
</temple>
|
||||
<temple name="Tokyo, Japan">
|
||||
<code>TOKYO</code>
|
||||
<code>TK</code>
|
||||
@ -543,19 +474,16 @@
|
||||
<code>TORON</code>
|
||||
<code>TORNO</code>
|
||||
<code>TR</code>
|
||||
</temple>
|
||||
<temple name="Trujillo, Peru">
|
||||
<code>TRUJI</code>
|
||||
</temple>
|
||||
<temple name="Tucson Arizona">
|
||||
<code>TUCSO</code>
|
||||
</temple>
|
||||
<temple name="Tuxtla Gutierrez, Mexico">
|
||||
<code>TGUTI</code>
|
||||
</temple>
|
||||
<temple name="Twin Falls, Idaho">
|
||||
<code>TWINF</code>
|
||||
<code>TFALL</code>
|
||||
<code>TWINF</code>
|
||||
</temple>
|
||||
<temple name="Vancouver, British Columbia">
|
||||
<code>VANCO</code>
|
||||
@ -577,6 +505,10 @@
|
||||
<code>WINTE</code>
|
||||
<code>WQUAR</code>
|
||||
</temple>
|
||||
<temple name="Endowment House">
|
||||
<code>EHOUS</code>
|
||||
<code>EH</code>
|
||||
</temple>
|
||||
<temple name="President's Office">
|
||||
<code>POFFI</code>
|
||||
<code>PO</code>
|
||||
|
||||
@ -1,12 +1,12 @@
|
||||
0 HEAD
|
||||
1 SOUR Gramps
|
||||
2 VERS 5.1.2
|
||||
2 VERS 5.0.2
|
||||
2 NAME Gramps
|
||||
1 DATE 7 JAN 2020
|
||||
2 TIME 13:39:43
|
||||
1 DATE 4 AUG 2019
|
||||
2 TIME 15:26:44
|
||||
1 SUBM @SUBM@
|
||||
1 FILE C:\Users\prc\AppData\Roaming\gramps\temp\exp_sample_ged.ged
|
||||
1 COPR Copyright (c) 2020 Alex Roitman,,,.
|
||||
1 COPR Copyright (c) 2019 Alex Roitman,,,.
|
||||
1 GEDC
|
||||
2 VERS 5.5.1
|
||||
2 FORM LINEAGE-LINKED
|
||||
@ -911,7 +911,7 @@
|
||||
2 DATE I think 1970 to 1971
|
||||
2 PLAC San Francisco, San Francisco Co., CA
|
||||
1 SLGC
|
||||
2 DATE ABT 1999
|
||||
2 DATE EST ABT 1999
|
||||
2 FAMC @F0016@
|
||||
2 TEMP DENVE
|
||||
2 PLAC Denver, Denver Co., CO, Denver Co., Colorado, USA
|
||||
@ -1424,7 +1424,7 @@
|
||||
0 @N0018@ NOTE Another Citation Note
|
||||
0 @N0019@ NOTE A bad photo for sure
|
||||
0 @O0000@ OBJE
|
||||
1 FILE d:\users\prc\documents\gramps\data\tests\O0.jpg
|
||||
1 FILE c:\users\prc\workspace\grampsm\main\data\tests\O0.jpg
|
||||
2 FORM jpg
|
||||
2 TITL Michael O'Toole 2015-11
|
||||
1 NOTE @N0019@
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
"http://gramps-project.org/xml/1.7.1/grampsxml.dtd">
|
||||
<database xmlns="http://gramps-project.org/xml/1.7.1/">
|
||||
<header>
|
||||
<created date="1999-12-25" version="5.1.3"/>
|
||||
<created date="2019-08-04" version="5.0.2"/>
|
||||
<researcher>
|
||||
<resname>Alex Roitman,,,</resname>
|
||||
<resaddr>Not Provided</resaddr>
|
||||
@ -1302,7 +1302,7 @@
|
||||
</reporef>
|
||||
</source>
|
||||
<source handle="_0000008500000085" change="1" id="S0000">
|
||||
<stitle>Marriage Certificae</stitle>
|
||||
<stitle>@S0@</stitle>
|
||||
<noteref hlink="_000000e7000000e7"/>
|
||||
<reporef hlink="_000000e6000000e6" callno="what-321-ever" medium="Photo"/>
|
||||
</source>
|
||||
@ -1705,7 +1705,7 @@ Unknown tag Line 1111:
|
||||
<range start="0" end="163"/>
|
||||
</style>
|
||||
</note>
|
||||
<note handle="_000000f9000000f9" change="1591544255" id="N0036" type="General">
|
||||
<note handle="_000000f9000000f9" change="1564950708" id="N0036" type="General">
|
||||
<text>Objects referenced by this note were missing in a file imported on 12/25/1999 12:00:00 AM.</text>
|
||||
</note>
|
||||
</notes>
|
||||
|
||||
130
data/tips.xml
130
data/tips.xml
@ -1,130 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<tips>
|
||||
|
||||
<tip number="1"><b>Working with Dates</b><br/>A range of dates can be given by using the format "between January 4, 2000 and March 20, 2003". You can also indicate the level of confidence in a date and even choose between seven different calendars. Try the button next to the date field in the Events Editor.</tip>
|
||||
|
||||
<tip number="2"><b>Editing Objects</b><br/>In most cases double clicking on a name, source, place or media entry will bring up a window to allow you to edit the object. Note that the result can be dependent on context. For example, in the Family View clicking on a parent or child will bring up the Relationship Editor.</tip>
|
||||
|
||||
<tip number="3"><b>Adding Images</b><br/>An image can be added to any gallery or the Media View by dragging and dropping it from a file manager or a web browser. Actually you can add any type of file like this, useful for scans of documents and other digital sources.</tip>
|
||||
|
||||
<tip number="4"><b>Ordering Children in a Family</b><br/>The birth order of children in a family can be set by using drag and drop. This order is preserved even when they do not have birth dates.</tip>
|
||||
|
||||
<tip number="5"><b>Talk to Relatives Before It Is Too Late</b><br/>Your oldest relatives can be your most important source of information. They usually know things about the family that haven't been written down. They might tell you nuggets about people that may one day lead to a new avenue of research. At the very least, you will get to hear some great stories. Don't forget to record the conversations!</tip>
|
||||
|
||||
<tip number="7"><b>Filtering People</b><br/>In the People View, you can 'filter' individuals based on many criteria. To define a new filter go to "Edit > Person Filter Editor". There you can name your filter and add and combine rules using the many preset rules. For example, you can define a filter to find all adopted people in the family tree. People without a birth date mentioned can also be filtered. To get the results save your filter and select it at the bottom of the Filter Sidebar, then click Apply. If the Filter Sidebar is not visible, select View > Filter.</tip>
|
||||
|
||||
<tip number="8"><b>Inverted Filtering</b><br/>Filters can easily be reversed by using the 'invert' option. For instance, by inverting the 'People with children' filter you can select all people without children.</tip>
|
||||
|
||||
<tip number="9"><b>Locating People</b><br/>By default, each surname in the People View is listed only once. By clicking on the arrow to the left of a name, the list will expand to show all individuals with that last name. To locate any Family Name from a long list, select a Family Name (not a person) and start typing. The view will jump to the first Family Name matching the letters you enter.</tip>
|
||||
|
||||
<tip number="10"><b>The Family View</b><br/>The Family View is used to display a typical family unit as two parents and their children.</tip>
|
||||
|
||||
<tip number="11"><b>Changing the Active Person</b><br/>Changing the Active Person in views is easy. In the Relationship view just click on anyone. In the Ancestry View doubleclick on the person or right click to select any of their spouses, siblings, children or parents.</tip>
|
||||
|
||||
<tip number="12"><b>Who Was Born When?</b><br/>Under "Tools > Analysis and exploration > Compare Individual Events..." you can compare the data of individuals in your database. This is useful, say, if you wish to list the birth dates of everyone in your database. You can use a custom filter to narrow the results.</tip>
|
||||
|
||||
<tip number="13"><b>Gramps Tools</b><br/>Gramps comes with a rich set of tools. These allow you to undertake operations such as checking the database for errors and consistency. There are research and analysis tools such as event comparison, finding duplicate people, interactive descendant browser, and many others. All tools can be accessed through the "Tools" menu.</tip>
|
||||
|
||||
<tip number="14"><b>Calculating Relationships</b><br/>To check if two people in the database are related (by blood, not marriage) try the tool under "Tools > Utilities > Relationship Calculator...". The exact relationship as well as all common ancestors are reported.</tip>
|
||||
|
||||
<tip number="15"><b>SoundEx can help with family research</b><br/>SoundEx solves a long standing problem in genealogy, how to handle spelling variations. The SoundEx Gramplet takes a surname and generates a simplified form that is equivalent for similar sounding names. Knowing the SoundEx Code for a surname is very helpful for researching Census Data files (microfiche) at a library or other research facility. To view the SoundEx codes for surnames in your database, add the SoundEx Gramplet.</tip>
|
||||
|
||||
<tip number="16"><b>Setting Your Preferences</b><br/>"Edit > Preferences..." lets you modify a number of settings, such as the path to your media files, and allows you to adjust many aspects of the Gramps presentation to your needs. Each separate view can also be configured under "View > Configure View..."</tip>
|
||||
|
||||
<tip number="17"><b>Gramps Reports</b><br/>Gramps offers a wide variety of reports. The Graphical Reports and Graphs can present complex relationships easily and the Text Reports are particularly useful if you want to send the results of your family tree to members of the family via email. If you're ready to make a website for your family tree then there's a report for that as well.</tip>
|
||||
|
||||
<tip number="18"><b>Starting a New Family Tree</b><br/>A good way to start a new family tree is to enter all the members of the family into the database using the Person View (use "Edit > Add..." or click on the Add a new person button from the People View). Then go to the Relationship View and create relationships between people.</tip>
|
||||
|
||||
<tip number="19"><b>What's That For?</b><br/>Unsure what a button does? Simply hold the mouse over a button and a tooltip will appear.</tip>
|
||||
|
||||
<tip number="20"><b>Unsure of a Date?</b><br/>If you're unsure about the date an event occurred, Gramps allows you to enter a wide range of date formats based on a guess or an estimate. For instance, "about 1908" is a valid entry for a birth date in Gramps. Click the Date button next to the date field and see the Gramps Manual to learn more.</tip>
|
||||
|
||||
<tip number="21"><b>Duplicate Entries</b><br/>"Tools > Database Processing > Find Possible Duplicate People..." allows you to locate (and merge) entries of the same person entered more than once in the database.</tip>
|
||||
|
||||
<tip number="22"><b>Merging Entries</b><br/>The function "Edit > Compare and Merge..." allows you to combine separately listed people into one. Select the second entry by holding the Control key as you click. This is very useful for combining two databases with overlapping people, or combining erroneously entered differing names for one individual. This also works for the Places, Sources and Repositories views.</tip>
|
||||
|
||||
<tip number="23"><b>Organising the Views</b><br/>Many of the views can present your data as either a hierarchical tree or as a simple list. Each view can also be configured to the way you like it. Have a look to the right of the top toolbar or under the "View" menu.</tip>
|
||||
|
||||
<tip number="24"><b>Navigating Back and Forward</b><br/>Gramps maintains a list of previous active objects such as People and Events. You can move forward and backward through the list using "Go > Forward" and "Go > Back" or the arrow buttons.</tip>
|
||||
|
||||
<tip number="25"><b>Keyboard Shortcuts</b><br/>Tired of having to take your hand off the keyboard to use the mouse? Many functions in Gramps have keyboard shortcuts. If one exists for a function it is displayed on the right side of the menu.</tip>
|
||||
|
||||
<tip number="26"><b>Read the Manual</b><br/>Don't forget to read the Gramps manual, "Help > User Manual". The developers have worked hard to make most operations intuitive but the manual is full of information that will make your time spent on genealogy more productive.</tip>
|
||||
|
||||
<tip number="27"><b>Adding Children</b><br/>To add children in Gramps there are two options. You can find one of their parents in the Families View and open the family. Then choose to create a new person or add an existing person. You can also add children (or siblings) from inside the Family Editor.</tip>
|
||||
|
||||
<tip number="28"><b>Editing the Parent-Child Relationship</b><br/> You can edit the relationship of a child to its parents by double clicking the child in the Family Editor. Relationships can be any of Adopted, Birth, Foster, None, Sponsored, Stepchild and Unknown.</tip>
|
||||
|
||||
<tip number="29"><b>Show All Checkbutton</b><br/>When adding an existing person as a spouse, the list of people shown is filtered to display only people who could realistically fit the role (based on dates in the database). In case Gramps is wrong in making this choice, you can override the filter by checking the Show All checkbutton.</tip>
|
||||
|
||||
<tip number="31"><b>Improving Gramps</b><br/>Users are encouraged to request enhancements to Gramps. Requesting an enhancement can be done either through the gramps-users or gramps-devel mailing lists, or by going to https://gramps-project.org/bugs/ and creating a Feature Request. Filing a Feature Request is preferred but it can be good to discuss your ideas on the email lists.</tip>
|
||||
|
||||
<tip number="32"><b>Gramps Mailing Lists</b><br/>Want answers to your questions about Gramps? Check out the gramps-users email list. Many helpful people are on the list, so you're likely to get an answer quickly. If you have questions related to the development of Gramps, try the gramps-devel list. You can see the lists by selecting "Help > Gramps Mailing Lists".</tip>
|
||||
|
||||
<tip number="33"><b>Contributing to Gramps</b><br/>Want to help with Gramps but can't write programs? Not a problem! A project as large as Gramps requires people with a wide variety of skills. Contributions can be anything from writing documentation to testing development versions and helping with the web site. Start by subscribing to the Gramps developers mailing list, gramps-devel, and introducing yourself. Subscription information can be found at "Help > Gramps Mailing Lists"</tip>
|
||||
|
||||
<tip number="34"><b>So What's in a Name?</b><br/>The name Gramps was suggested to the original developer, Don Allingham, by his father. It stands for <i>Genealogical Research and Analysis Management Program System</i>. It is a full-featured genealogy program letting you store, edit, and research genealogical data. The Gramps database back end is so robust that some users are managing genealogies containing hundreds of thousands of people.</tip>
|
||||
|
||||
<tip number="36"><b>Bookmarking Individuals</b><br/>The Bookmarks menu is a convenient place to store the names of frequently used individuals. Selecting a bookmark will make that person the Active Person. To bookmark someone make them the Active Person then go to "Bookmarks > Add Bookmark" or press Ctrl+D. You can also bookmark most of the other objects.</tip>
|
||||
|
||||
<tip number="37"><b>Incorrect Dates</b><br/>Everyone occasionally enters dates with an invalid format. Incorrect date formats will show up in Gramps with a either a reddish background or a red dot on the right edge of the field. You can fix the date using the Date Selection dialog which can be opened by clicking on the date button. The format of the date is set under "Edit > Preferences > Display".</tip>
|
||||
|
||||
<tip number="38"><b>Listing Events</b><br/>Events are added using the editor opened with "Person > Edit Person > Events". There is a long list of preset event types. You can add your own event types by typing in the text field, they will be added to the available events, but not translated.</tip>
|
||||
|
||||
<tip number="39"><b>Managing Names</b><br/>It is easy to manage people with several names in Gramps. In the Person Editor select the Names tab. You can add names of different types and set the preferred name by dragging it to the Preferred Name section.</tip>
|
||||
|
||||
<tip number="40"><b>Ancestor View</b><br/>The Ancestry View displays a traditional pedigree chart. Hold the mouse over an individual to see more information about them or right click on an individual to access other family members and settings. Play with the settings to see the different options.</tip>
|
||||
|
||||
<tip number="41"><b>Managing Sources</b><br/>The Sources View shows a list of all sources in a single window. From here you can edit your sources, merge duplicates and see which individuals reference each source. You can use filters to group your sources.</tip>
|
||||
|
||||
<tip number="42"><b>Managing Places</b><br/>The Places View shows a list of all places in the database. The list can be sorted by a number of different criteria, such as City, County or State.</tip>
|
||||
|
||||
<tip number="43"><b>Media View</b><br/>The Media View shows a list of all media entered in the database. These can be graphic images, videos, sound clips, spreadsheets, documents, and more.</tip>
|
||||
|
||||
<tip number="44"><b>Filters</b><br/>Filters allow you to limit the people seen in the People View. In addition to the many preset filters, Custom Filters can be created limited only by your imagination. Custom filters are created from "Edit > Person Filter Editor".</tip>
|
||||
|
||||
<tip number="45"><b>The GEDCOM File Format</b><br/>Gramps allows you to import from, and export to, the GEDCOM format. There is extensive support for the industry standard GEDCOM version 5.5, so you can exchange Gramps information to and from users of most other genealogy programs. Filters exist that make importing and exporting GEDCOM files trivial.</tip>
|
||||
|
||||
<tip number="46"><b>The Gramps XML Package</b><br/>You can export your Family Tree as a Gramps XML Package. This is a compressed file containing your family tree data and all the media files connected to the database (images for example). This file is completely portable so is useful for backups or sharing with other Gramps users. This format has the key advantage over GEDCOM that no information is ever lost when exporting and importing.</tip>
|
||||
|
||||
<tip number="48"><b>Web Family Tree Format</b><br/>Gramps can export data to the Web Family Tree (WFT) format. This format allows a family tree to be displayed online using a single file, instead of many html files.</tip>
|
||||
|
||||
<tip number="49"><b>Making a Genealogy Website</b><br/>You can easily export your family tree to a web page. Select the entire database, family lines or selected individuals to a collection of web pages ready for upload to the World Wide Web.</tip>
|
||||
|
||||
<tip number="50"><b>Reporting Bugs in Gramps</b><br/>The best way to report a bug in Gramps is to use the Gramps bug tracking system at https://gramps-project.org/bugs/</tip>
|
||||
|
||||
<tip number="51"><b>The Gramps Homepage</b><br/>The Gramps homepage is at http://gramps-project.org/</tip>
|
||||
|
||||
<tip number="53"><b>Privacy in Gramps</b><br/>Gramps helps you to keep personal information secure by allowing you to mark information as private. Data marked as private can be excluded from reports and data exports. Look for the padlock which toggles records between private and public.</tip>
|
||||
|
||||
<tip number="54"><b>Keeping Good Records</b><br/>Be accurate when recording genealogical information. Don't make assumptions while recording primary information; write it exactly as you see it. Use bracketed comments to indicate your additions, deletions or comments. Use of the Latin 'sic' is recommended to confirm the accurate transcription of what appears to be an error in a source.</tip>
|
||||
|
||||
<tip number="57"><b>Extra Reports and Tools</b><br/>Extra tools and reports can be added to Gramps with the "Addon" system. See them under "Help > Extra Reports/Tools". This is the best way for advanced users to experiment and create new functionality.</tip>
|
||||
|
||||
<tip number="58"><b>Book Reports</b><br/>The Book report under "Reports > Books > Book Report...", allows you to collect a variety of reports into a single document. This single report is easier to distribute than multiple reports, especially when printed.</tip>
|
||||
|
||||
<tip number="59"><b>Gramps Announcements</b><br/>Interested in getting notified when a new version of Gramps is released? Join the Gramps-announce mailing list at "Help > Gramps Mailing Lists"</tip>
|
||||
|
||||
<tip number="60"><b>Record Your Sources</b><br/>Information collected about your family is only as good as the source it came from. Take the time and trouble to record all the details of where the information came from. Whenever possible get a copy of original documents.</tip>
|
||||
|
||||
<tip number="61"><b>Directing Your Research</b><br/>Go from what you know to what you do not. Always record everything that is known before making conjectures. Often the facts at hand suggest plenty of direction for more research. Don't waste time looking through thousands of records hoping for a trail when you have other unexplored leads.</tip>
|
||||
|
||||
<tip number="62"><b>The 'How and Why' of Your Genealogy</b><br/> Genealogy isn't only about dates and names. It is about people. Be descriptive. Include why things happened, and how descendants might have been shaped by the events they went through. Narratives go a long way in making your family history come alive.</tip>
|
||||
|
||||
<tip number="63"><b>Don't speak English?</b><br/>Volunteers have translated Gramps into more than 40 languages. If Gramps supports your language and it is not being displayed, set the default language in your operating system and restart Gramps.</tip>
|
||||
|
||||
<tip number="64"><b>Gramps Translators</b><br/>Gramps has been designed so that new translations can easily be added with little development effort. If you are interested in participating please email gramps-devel@lists.sf.net</tip>
|
||||
|
||||
<tip number="66"><b>Hello, привет or 喂</b><br/>Whatever script you use Gramps offers full Unicode support. Characters for all languages are properly displayed.</tip>
|
||||
|
||||
<tip number="67"><b>The Home Person</b><br/>Anyone can be chosen as the Home Person in Gramps. Use "Edit > Set Home Person" in the Person View. The home person is the person who is selected when the database is opened or when the home button is pressed.</tip>
|
||||
|
||||
<tip number="70"><b>The Gramps Code</b><br/>Gramps is written in a computer language called Python using the GTK and GNOME libraries for the graphical interface. Gramps is supported on any computer system where these programs have been ported. Gramps is known to be run on Linux, BSD, Solaris, Windows and Mac OS X.</tip>
|
||||
|
||||
<tip number="71"><b>Open Source Software</b><br/>The Free/Libre and Open Source Software (FLOSS) development model means Gramps can be extended by any programmer since all of the source code is freely available under its license. So it's not just about free beer, it's also about freedom to study and change the tool. For more about Open Source software lookup the Free Software Foundation and the Open Source Initiative.</tip>
|
||||
|
||||
<tip number="72"><b>The Gramps Software License</b><br/>You are free to use and share Gramps with others. Gramps is freely distributable under the GNU General Public License, see http://www.gnu.org/licenses/licenses.html#GPL to read about the rights and restrictions of this license.</tip>
|
||||
|
||||
<tip number="73"><b>Gramps for Gnome or KDE?</b><br/>For Linux users Gramps works with whichever desktop environment you prefer. As long as the required GTK libraries are installed it will run fine.</tip>
|
||||
|
||||
</tips>
|
||||
130
data/tips.xml.in
Normal file
130
data/tips.xml.in
Normal file
@ -0,0 +1,130 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<tips>
|
||||
|
||||
<_tip number="1"><b>Working with Dates</b><br/>A range of dates can be given by using the format "between January 4, 2000 and March 20, 2003". You can also indicate the level of confidence in a date and even choose between seven different calendars. Try the button next to the date field in the Events Editor.</_tip>
|
||||
|
||||
<_tip number="2"><b>Editing Objects</b><br/>In most cases double clicking on a name, source, place or media entry will bring up a window to allow you to edit the object. Note that the result can be dependent on context. For example, in the Family View clicking on a parent or child will bring up the Relationship Editor.</_tip>
|
||||
|
||||
<_tip number="3"><b>Adding Images</b><br/>An image can be added to any gallery or the Media View by dragging and dropping it from a file manager or a web browser. Actually you can add any type of file like this, useful for scans of documents and other digital sources.</_tip>
|
||||
|
||||
<_tip number="4"><b>Ordering Children in a Family</b><br/>The birth order of children in a family can be set by using drag and drop. This order is preserved even when they do not have birth dates.</_tip>
|
||||
|
||||
<_tip number="5"><b>Talk to Relatives Before It Is Too Late</b><br/>Your oldest relatives can be your most important source of information. They usually know things about the family that haven't been written down. They might tell you nuggets about people that may one day lead to a new avenue of research. At the very least, you will get to hear some great stories. Don't forget to record the conversations!</_tip>
|
||||
|
||||
<_tip number="7"><b>Filtering People</b><br/>In the People View, you can 'filter' individuals based on many criteria. To define a new filter go to "Edit > Person Filter Editor". There you can name your filter and add and combine rules using the many preset rules. For example, you can define a filter to find all adopted people in the family tree. People without a birth date mentioned can also be filtered. To get the results save your filter and select it at the bottom of the Filter Sidebar, then click Apply. If the Filter Sidebar is not visible, select View > Filter.</_tip>
|
||||
|
||||
<_tip number="8"><b>Inverted Filtering</b><br/>Filters can easily be reversed by using the 'invert' option. For instance, by inverting the 'People with children' filter you can select all people without children.</_tip>
|
||||
|
||||
<_tip number="9"><b>Locating People</b><br/>By default, each surname in the People View is listed only once. By clicking on the arrow to the left of a name, the list will expand to show all individuals with that last name. To locate any Family Name from a long list, select a Family Name (not a person) and start typing. The view will jump to the first Family Name matching the letters you enter.</_tip>
|
||||
|
||||
<_tip number="10"><b>The Family View</b><br/>The Family View is used to display a typical family unit as two parents and their children.</_tip>
|
||||
|
||||
<_tip number="11"><b>Changing the Active Person</b><br/>Changing the Active Person in views is easy. In the Relationship view just click on anyone. In the Ancestry View doubleclick on the person or right click to select any of their spouses, siblings, children or parents.</_tip>
|
||||
|
||||
<_tip number="12"><b>Who Was Born When?</b><br/>Under "Tools > Analysis and exploration > Compare Individual Events..." you can compare the data of individuals in your database. This is useful, say, if you wish to list the birth dates of everyone in your database. You can use a custom filter to narrow the results.</_tip>
|
||||
|
||||
<_tip number="13"><b>Gramps Tools</b><br/>Gramps comes with a rich set of tools. These allow you to undertake operations such as checking the database for errors and consistency. There are research and analysis tools such as event comparison, finding duplicate people, interactive descendant browser, and many others. All tools can be accessed through the "Tools" menu.</_tip>
|
||||
|
||||
<_tip number="14"><b>Calculating Relationships</b><br/>To check if two people in the database are related (by blood, not marriage) try the tool under "Tools > Utilities > Relationship Calculator...". The exact relationship as well as all common ancestors are reported.</_tip>
|
||||
|
||||
<_tip number="15"><b>SoundEx can help with family research</b><br/>SoundEx solves a long standing problem in genealogy, how to handle spelling variations. The SoundEx Gramplet takes a surname and generates a simplified form that is equivalent for similar sounding names. Knowing the SoundEx Code for a surname is very helpful for researching Census Data files (microfiche) at a library or other research facility. To view the SoundEx codes for surnames in your database, add the SoundEx Gramplet.</_tip>
|
||||
|
||||
<_tip number="16"><b>Setting Your Preferences</b><br/>"Edit > Preferences..." lets you modify a number of settings, such as the path to your media files, and allows you to adjust many aspects of the Gramps presentation to your needs. Each separate view can also be configured under "View > Configure View..."</_tip>
|
||||
|
||||
<_tip number="17"><b>Gramps Reports</b><br/>Gramps offers a wide variety of reports. The Graphical Reports and Graphs can present complex relationships easily and the Text Reports are particularly useful if you want to send the results of your family tree to members of the family via email. If you're ready to make a website for your family tree then there's a report for that as well.</_tip>
|
||||
|
||||
<_tip number="18"><b>Starting a New Family Tree</b><br/>A good way to start a new family tree is to enter all the members of the family into the database using the Person View (use "Edit > Add..." or click on the Add a new person button from the People View). Then go to the Relationship View and create relationships between people.</_tip>
|
||||
|
||||
<_tip number="19"><b>What's That For?</b><br/>Unsure what a button does? Simply hold the mouse over a button and a tooltip will appear.</_tip>
|
||||
|
||||
<_tip number="20"><b>Unsure of a Date?</b><br/>If you're unsure about the date an event occurred, Gramps allows you to enter a wide range of date formats based on a guess or an estimate. For instance, "about 1908" is a valid entry for a birth date in Gramps. Click the Date button next to the date field and see the Gramps Manual to learn more.</_tip>
|
||||
|
||||
<_tip number="21"><b>Duplicate Entries</b><br/>"Tools > Database Processing > Find Possible Duplicate People..." allows you to locate (and merge) entries of the same person entered more than once in the database.</_tip>
|
||||
|
||||
<_tip number="22"><b>Merging Entries</b><br/>The function "Edit > Compare and Merge..." allows you to combine separately listed people into one. Select the second entry by holding the Control key as you click. This is very useful for combining two databases with overlapping people, or combining erroneously entered differing names for one individual. This also works for the Places, Sources and Repositories views.</_tip>
|
||||
|
||||
<_tip number="23"><b>Organising the Views</b><br/>Many of the views can present your data as either a hierarchical tree or as a simple list. Each view can also be configured to the way you like it. Have a look to the right of the top toolbar or under the "View" menu.</_tip>
|
||||
|
||||
<_tip number="24"><b>Navigating Back and Forward</b><br/>Gramps maintains a list of previous active objects such as People and Events. You can move forward and backward through the list using "Go > Forward" and "Go > Back" or the arrow buttons.</_tip>
|
||||
|
||||
<_tip number="25"><b>Keyboard Shortcuts</b><br/>Tired of having to take your hand off the keyboard to use the mouse? Many functions in Gramps have keyboard shortcuts. If one exists for a function it is displayed on the right side of the menu.</_tip>
|
||||
|
||||
<_tip number="26"><b>Read the Manual</b><br/>Don't forget to read the Gramps manual, "Help > User Manual". The developers have worked hard to make most operations intuitive but the manual is full of information that will make your time spent on genealogy more productive.</_tip>
|
||||
|
||||
<_tip number="27"><b>Adding Children</b><br/>To add children in Gramps there are two options. You can find one of their parents in the Families View and open the family. Then choose to create a new person or add an existing person. You can also add children (or siblings) from inside the Family Editor.</_tip>
|
||||
|
||||
<_tip number="28"><b>Editing the Parent-Child Relationship</b><br/> You can edit the relationship of a child to its parents by double clicking the child in the Family Editor. Relationships can be any of Adopted, Birth, Foster, None, Sponsored, Stepchild and Unknown.</_tip>
|
||||
|
||||
<_tip number="29"><b>Show All Checkbutton</b><br/>When adding an existing person as a spouse, the list of people shown is filtered to display only people who could realistically fit the role (based on dates in the database). In case Gramps is wrong in making this choice, you can override the filter by checking the Show All checkbutton.</_tip>
|
||||
|
||||
<_tip number="31"><b>Improving Gramps</b><br/>Users are encouraged to request enhancements to Gramps. Requesting an enhancement can be done either through the gramps-users or gramps-devel mailing lists, or by going to https://gramps-project.org/bugs/ and creating a Feature Request. Filing a Feature Request is preferred but it can be good to discuss your ideas on the email lists.</_tip>
|
||||
|
||||
<_tip number="32"><b>Gramps Mailing Lists</b><br/>Want answers to your questions about Gramps? Check out the gramps-users email list. Many helpful people are on the list, so you're likely to get an answer quickly. If you have questions related to the development of Gramps, try the gramps-devel list. You can see the lists by selecting "Help > Gramps Mailing Lists".</_tip>
|
||||
|
||||
<_tip number="33"><b>Contributing to Gramps</b><br/>Want to help with Gramps but can't write programs? Not a problem! A project as large as Gramps requires people with a wide variety of skills. Contributions can be anything from writing documentation to testing development versions and helping with the web site. Start by subscribing to the Gramps developers mailing list, gramps-devel, and introducing yourself. Subscription information can be found at "Help > Gramps Mailing Lists"</_tip>
|
||||
|
||||
<_tip number="34"><b>So What's in a Name?</b><br/>The name Gramps was suggested to the original developer, Don Allingham, by his father. It stands for <i>Genealogical Research and Analysis Management Program System</i>. It is a full-featured genealogy program letting you store, edit, and research genealogical data. The Gramps database back end is so robust that some users are managing genealogies containing hundreds of thousands of people.</_tip>
|
||||
|
||||
<_tip number="36"><b>Bookmarking Individuals</b><br/>The Bookmarks menu is a convenient place to store the names of frequently used individuals. Selecting a bookmark will make that person the Active Person. To bookmark someone make them the Active Person then go to "Bookmarks > Add Bookmark" or press Ctrl+D. You can also bookmark most of the other objects.</_tip>
|
||||
|
||||
<_tip number="37"><b>Incorrect Dates</b><br/>Everyone occasionally enters dates with an invalid format. Incorrect date formats will show up in Gramps with a either a reddish background or a red dot on the right edge of the field. You can fix the date using the Date Selection dialog which can be opened by clicking on the date button. The format of the date is set under "Edit > Preferences > Display".</_tip>
|
||||
|
||||
<_tip number="38"><b>Listing Events</b><br/>Events are added using the editor opened with "Person > Edit Person > Events". There is a long list of preset event types. You can add your own event types by typing in the text field, they will be added to the available events, but not translated.</_tip>
|
||||
|
||||
<_tip number="39"><b>Managing Names</b><br/>It is easy to manage people with several names in Gramps. In the Person Editor select the Names tab. You can add names of different types and set the preferred name by dragging it to the Preferred Name section.</_tip>
|
||||
|
||||
<_tip number="40"><b>Ancestor View</b><br/>The Ancestry View displays a traditional pedigree chart. Hold the mouse over an individual to see more information about them or right click on an individual to access other family members and settings. Play with the settings to see the different options.</_tip>
|
||||
|
||||
<_tip number="41"><b>Managing Sources</b><br/>The Sources View shows a list of all sources in a single window. From here you can edit your sources, merge duplicates and see which individuals reference each source. You can use filters to group your sources.</_tip>
|
||||
|
||||
<_tip number="42"><b>Managing Places</b><br/>The Places View shows a list of all places in the database. The list can be sorted by a number of different criteria, such as City, County or State.</_tip>
|
||||
|
||||
<_tip number="43"><b>Media View</b><br/>The Media View shows a list of all media entered in the database. These can be graphic images, videos, sound clips, spreadsheets, documents, and more.</_tip>
|
||||
|
||||
<_tip number="44"><b>Filters</b><br/>Filters allow you to limit the people seen in the People View. In addition to the many preset filters, Custom Filters can be created limited only by your imagination. Custom filters are created from "Edit > Person Filter Editor".</_tip>
|
||||
|
||||
<_tip number="45"><b>The GEDCOM File Format</b><br/>Gramps allows you to import from, and export to, the GEDCOM format. There is extensive support for the industry standard GEDCOM version 5.5, so you can exchange Gramps information to and from users of most other genealogy programs. Filters exist that make importing and exporting GEDCOM files trivial.</_tip>
|
||||
|
||||
<_tip number="46"><b>The Gramps XML Package</b><br/>You can export your Family Tree as a Gramps XML Package. This is a compressed file containing your family tree data and all the media files connected to the database (images for example). This file is completely portable so is useful for backups or sharing with other Gramps users. This format has the key advantage over GEDCOM that no information is ever lost when exporting and importing.</_tip>
|
||||
|
||||
<_tip number="48"><b>Web Family Tree Format</b><br/>Gramps can export data to the Web Family Tree (WFT) format. This format allows a family tree to be displayed online using a single file, instead of many html files.</_tip>
|
||||
|
||||
<_tip number="49"><b>Making a Genealogy Website</b><br/>You can easily export your family tree to a web page. Select the entire database, family lines or selected individuals to a collection of web pages ready for upload to the World Wide Web.</_tip>
|
||||
|
||||
<_tip number="50"><b>Reporting Bugs in Gramps</b><br/>The best way to report a bug in Gramps is to use the Gramps bug tracking system at https://gramps-project.org/bugs/</_tip>
|
||||
|
||||
<_tip number="51"><b>The Gramps Homepage</b><br/>The Gramps homepage is at http://gramps-project.org/</_tip>
|
||||
|
||||
<_tip number="53"><b>Privacy in Gramps</b><br/>Gramps helps you to keep personal information secure by allowing you to mark information as private. Data marked as private can be excluded from reports and data exports. Look for the padlock which toggles records between private and public.</_tip>
|
||||
|
||||
<_tip number="54"><b>Keeping Good Records</b><br/>Be accurate when recording genealogical information. Don't make assumptions while recording primary information; write it exactly as you see it. Use bracketed comments to indicate your additions, deletions or comments. Use of the Latin 'sic' is recommended to confirm the accurate transcription of what appears to be an error in a source.</_tip>
|
||||
|
||||
<_tip number="57"><b>Extra Reports and Tools</b><br/>Extra tools and reports can be added to Gramps with the "Addon" system. See them under "Help > Extra Reports/Tools". This is the best way for advanced users to experiment and create new functionality.</_tip>
|
||||
|
||||
<_tip number="58"><b>Book Reports</b><br/>The Book report under "Reports > Books > Book Report...", allows you to collect a variety of reports into a single document. This single report is easier to distribute than multiple reports, especially when printed.</_tip>
|
||||
|
||||
<_tip number="59"><b>Gramps Announcements</b><br/>Interested in getting notified when a new version of Gramps is released? Join the Gramps-announce mailing list at "Help > Gramps Mailing Lists"</_tip>
|
||||
|
||||
<_tip number="60"><b>Record Your Sources</b><br/>Information collected about your family is only as good as the source it came from. Take the time and trouble to record all the details of where the information came from. Whenever possible get a copy of original documents.</_tip>
|
||||
|
||||
<_tip number="61"><b>Directing Your Research</b><br/>Go from what you know to what you do not. Always record everything that is known before making conjectures. Often the facts at hand suggest plenty of direction for more research. Don't waste time looking through thousands of records hoping for a trail when you have other unexplored leads.</_tip>
|
||||
|
||||
<_tip number="62"><b>The 'How and Why' of Your Genealogy</b><br/> Genealogy isn't only about dates and names. It is about people. Be descriptive. Include why things happened, and how descendants might have been shaped by the events they went through. Narratives go a long way in making your family history come alive.</_tip>
|
||||
|
||||
<_tip number="63"><b>Don't speak English?</b><br/>Volunteers have translated Gramps into more than 40 languages. If Gramps supports your language and it is not being displayed, set the default language in your operating system and restart Gramps.</_tip>
|
||||
|
||||
<_tip number="64"><b>Gramps Translators</b><br/>Gramps has been designed so that new translations can easily be added with little development effort. If you are interested in participating please email gramps-devel@lists.sf.net</_tip>
|
||||
|
||||
<_tip number="66"><b>Hello, привет or 喂</b><br/>Whatever script you use Gramps offers full Unicode support. Characters for all languages are properly displayed.</_tip>
|
||||
|
||||
<_tip number="67"><b>The Home Person</b><br/>Anyone can be chosen as the Home Person in Gramps. Use "Edit > Set Home Person" in the Person View. The home person is the person who is selected when the database is opened or when the home button is pressed.</_tip>
|
||||
|
||||
<_tip number="70"><b>The Gramps Code</b><br/>Gramps is written in a computer language called Python using the GTK and GNOME libraries for the graphical interface. Gramps is supported on any computer system where these programs have been ported. Gramps is known to be run on Linux, BSD, Solaris, Windows and Mac OS X.</_tip>
|
||||
|
||||
<_tip number="71"><b>Open Source Software</b><br/>The Free/Libre and Open Source Software (FLOSS) development model means Gramps can be extended by any programmer since all of the source code is freely available under its license. So it's not just about free beer, it's also about freedom to study and change the tool. For more about Open Source software lookup the Free Software Foundation and the Open Source Initiative.</_tip>
|
||||
|
||||
<_tip number="72"><b>The Gramps Software License</b><br/>You are free to use and share Gramps with others. Gramps is freely distributable under the GNU General Public License, see http://www.gnu.org/licenses/licenses.html#GPL to read about the rights and restrictions of this license.</_tip>
|
||||
|
||||
<_tip number="73"><b>Gramps for Gnome or KDE?</b><br/>For Linux users Gramps works with whichever desktop environment you prefer. As long as the required GTK libraries are installed it will run fine.</_tip>
|
||||
|
||||
</tips>
|
||||
6
debian/changelog
vendored
6
debian/changelog
vendored
@ -1,9 +1,3 @@
|
||||
gramps (5.1.2-1) unstable; urgency=medium
|
||||
|
||||
* New release
|
||||
|
||||
-- Ross Gammon <rossgammon@debian.org> Sat, 11 Jan 2020 19:07:08 +0100
|
||||
|
||||
gramps (5.1.1-1) unstable; urgency=medium
|
||||
|
||||
* New release
|
||||
|
||||
@ -445,7 +445,7 @@ class ArgHandler:
|
||||
line_list = [(_('"%s"') % summary[_("Family Tree")])]
|
||||
for item in sorted(summary):
|
||||
if item != _("Family Tree"):
|
||||
# Translators: used in French+Russian, ignore otherwise
|
||||
# translators: used in French+Russian, ignore otherwise
|
||||
line_list += [(_('"%s"') % summary[item])]
|
||||
print("\t".join(line_list))
|
||||
return
|
||||
|
||||
@ -383,7 +383,7 @@ class ArgParser:
|
||||
converter = get_type_converter(setting_value)
|
||||
new_value = converter(new_value)
|
||||
config.set(cfg_name, new_value)
|
||||
# Translators: indent "New" to match "Current"
|
||||
# translators: indent "New" to match "Current"
|
||||
print(_(" New Gramps config setting: "
|
||||
"%(name)s:%(value)s"
|
||||
) % {'name' : cfg_name,
|
||||
|
||||
@ -197,7 +197,7 @@ class CLIDbManager:
|
||||
print(_('Family Tree "%s":') % summary[_("Family Tree")])
|
||||
for item in sorted(summary):
|
||||
if item != "Family Tree":
|
||||
# Translators: needed for French, ignore otherwise
|
||||
# translators: needed for French, ignore otherwise
|
||||
print(' ' + _("%(str1)s: %(str2)s"
|
||||
) % {'str1' : item,
|
||||
'str2' : summary[item]})
|
||||
|
||||
@ -52,9 +52,14 @@ from gramps.gen.db.utils import make_database
|
||||
from gramps.gen.errors import DbError
|
||||
from gramps.gen.dbstate import DbState
|
||||
from gramps.gen.db.exceptions import (DbUpgradeRequiredError,
|
||||
DbSupportedError,
|
||||
BsddbDowngradeError,
|
||||
DbVersionError,
|
||||
DbPythonError,
|
||||
DbEnvironmentError,
|
||||
BsddbUpgradeRequiredError,
|
||||
BsddbDowngradeRequiredError,
|
||||
PythonUpgradeRequiredError,
|
||||
PythonDowngradeError,
|
||||
DbConnectionError)
|
||||
from gramps.gen.plug import BasePluginManager
|
||||
from gramps.gen.utils.config import get_researcher
|
||||
@ -102,7 +107,7 @@ class CLIDbLoader:
|
||||
_("Low level database corruption detected")
|
||||
+ '\n' +
|
||||
_("Gramps has detected a problem in the underlying "
|
||||
"database. This can sometimes be repaired from "
|
||||
"Berkeley database. This can be repaired from "
|
||||
"the Family Tree Manager. Select the database and "
|
||||
'click on the Repair button'
|
||||
) + '\n\n' + str(msg))
|
||||
@ -171,8 +176,34 @@ class CLIDbLoader:
|
||||
try:
|
||||
self.dbstate.db.load(filename, self._pulse_progress, mode,
|
||||
username=username, password=password)
|
||||
except (DbConnectionError, DbSupportedError, DbUpgradeRequiredError,
|
||||
DbVersionError, DbPythonError, DbConnectionError) as msg:
|
||||
except DbEnvironmentError as msg:
|
||||
self.dbstate.no_database()
|
||||
self._errordialog(_("Cannot open database"), str(msg))
|
||||
except BsddbUpgradeRequiredError as msg:
|
||||
self.dbstate.no_database()
|
||||
self._errordialog(_("Cannot open database"), str(msg))
|
||||
except BsddbDowngradeRequiredError as msg:
|
||||
self.dbstate.no_database()
|
||||
self._errordialog(_("Cannot open database"), str(msg))
|
||||
except BsddbDowngradeError as msg:
|
||||
self.dbstate.no_database()
|
||||
self._errordialog(_("Cannot open database"), str(msg))
|
||||
except DbUpgradeRequiredError as msg:
|
||||
self.dbstate.no_database()
|
||||
self._errordialog(_("Cannot open database"), str(msg))
|
||||
except PythonDowngradeError as msg:
|
||||
self.dbstate.no_database()
|
||||
self._errordialog(_("Cannot open database"), str(msg))
|
||||
except PythonUpgradeRequiredError as msg:
|
||||
self.dbstate.no_database()
|
||||
self._errordialog(_("Cannot open database"), str(msg))
|
||||
except DbVersionError as msg:
|
||||
self.dbstate.no_database()
|
||||
self._errordialog(_("Cannot open database"), str(msg))
|
||||
except DbPythonError as msg:
|
||||
self.dbstate.no_database()
|
||||
self._errordialog(_("Cannot open database"), str(msg))
|
||||
except DbConnectionError as msg:
|
||||
self.dbstate.no_database()
|
||||
self._errordialog(_("Cannot open database"), str(msg))
|
||||
except OSError as msg:
|
||||
|
||||
@ -412,7 +412,7 @@ class CommandLineReport:
|
||||
father = self.database.get_person_from_handle(fhandle)
|
||||
if father:
|
||||
fname = name_displayer.display(father)
|
||||
# Translators: needed for French, Hebrew and Arabic
|
||||
# translators: needed for French, Hebrew and Arabic
|
||||
text = _("%(id)s:\t%(father)s, %(mother)s"
|
||||
) % {'id': family.get_gramps_id(),
|
||||
'father': fname, 'mother': mname}
|
||||
@ -519,8 +519,8 @@ class CommandLineReport:
|
||||
self.format = tree_format["class"]
|
||||
if self.format is None:
|
||||
# Pick the first one as the default.
|
||||
self.format = treedoc.FORMATS[0]["class"]
|
||||
_chosen_format = treedoc.FORMATS[0]["type"]
|
||||
self.format = tree_format.FORMATS[0]["class"]
|
||||
_chosen_format = tree_format.FORMATS[0]["type"]
|
||||
else:
|
||||
self.format = None
|
||||
if _chosen_format and _format_str:
|
||||
|
||||
@ -22,8 +22,20 @@
|
||||
""" Unittest for argparser.py """
|
||||
|
||||
import unittest
|
||||
from unittest.mock import Mock
|
||||
from ..argparser import ArgParser
|
||||
import sys
|
||||
|
||||
try:
|
||||
if sys.version_info < (3,3):
|
||||
from mock import Mock
|
||||
else:
|
||||
from unittest.mock import Mock
|
||||
|
||||
MOCKING = True
|
||||
|
||||
except:
|
||||
MOCKING = False
|
||||
print ("Mocking disabled", sys.exc_info()[0:2])
|
||||
|
||||
class TestArgParser(unittest.TestCase):
|
||||
def setUp(self):
|
||||
|
||||
@ -22,10 +22,21 @@
|
||||
""" Unittest for user.py """
|
||||
|
||||
import unittest
|
||||
from unittest.mock import Mock, patch
|
||||
from .. import user
|
||||
import sys
|
||||
|
||||
try:
|
||||
if sys.version_info < (3,3):
|
||||
from mock import Mock, patch
|
||||
else:
|
||||
from unittest.mock import Mock, patch
|
||||
|
||||
MOCKING = True
|
||||
|
||||
except:
|
||||
MOCKING = False
|
||||
print ("Mocking disabled", sys.exc_info()[0:2])
|
||||
|
||||
class TestUser:
|
||||
TITLE = "Testing prompt"
|
||||
MSG = "Choices are hard. Nevertheless, please choose!"
|
||||
@ -35,9 +46,10 @@ class TestUser:
|
||||
class TestUser_prompt(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.real_user = user.User()
|
||||
self.user = user.User()
|
||||
self.user._fileout = Mock(spec=sys.stderr)
|
||||
self.user._input = Mock(spec=input)
|
||||
if MOCKING:
|
||||
self.user = user.User()
|
||||
self.user._fileout = Mock(spec=sys.stderr)
|
||||
self.user._input = Mock(spec=input)
|
||||
|
||||
def test_default_fileout_has_write(self):
|
||||
assert hasattr(self.real_user._fileout, 'write')
|
||||
@ -45,6 +57,7 @@ class TestUser_prompt(unittest.TestCase):
|
||||
def test_default_input(self):
|
||||
assert self.real_user._input.__name__.endswith('input')
|
||||
|
||||
@unittest.skipUnless(MOCKING, "Requires unittest.mock to run")
|
||||
def test_prompt_returns_True_if_ACCEPT_entered(self):
|
||||
self.user._input.configure_mock(return_value = TestUser.ACCEPT)
|
||||
assert self.user.prompt(
|
||||
@ -52,6 +65,7 @@ class TestUser_prompt(unittest.TestCase):
|
||||
), "True expected!"
|
||||
self.user._input.assert_called_once_with()
|
||||
|
||||
@unittest.skipUnless(MOCKING, "Requires unittest.mock to run")
|
||||
def test_prompt_returns_False_if_REJECT_entered(self):
|
||||
self.user._input.configure_mock(return_value = TestUser.REJECT)
|
||||
assert not self.user.prompt(
|
||||
@ -73,24 +87,37 @@ class TestUser_prompt(unittest.TestCase):
|
||||
"'{}' never printed in prompt: {}".format(
|
||||
text, self.user._fileout.method_calls))
|
||||
|
||||
@unittest.skipUnless(MOCKING, "Requires unittest.mock to run")
|
||||
def test_prompt_contains_title_text(self):
|
||||
self.assert_prompt_contains_text(TestUser.TITLE)
|
||||
|
||||
@unittest.skipUnless(MOCKING, "Requires unittest.mock to run")
|
||||
def test_prompt_contains_msg_text(self):
|
||||
self.assert_prompt_contains_text(TestUser.MSG)
|
||||
|
||||
@unittest.skipUnless(MOCKING, "Requires unittest.mock to run")
|
||||
def test_prompt_contains_accept_text(self):
|
||||
self.assert_prompt_contains_text(TestUser.ACCEPT)
|
||||
|
||||
@unittest.skipUnless(MOCKING, "Requires unittest.mock to run")
|
||||
def test_prompt_contains_reject_text(self):
|
||||
self.assert_prompt_contains_text(TestUser.REJECT)
|
||||
|
||||
@unittest.skipUnless(MOCKING, "Requires unittest.mock to run")
|
||||
def test_prompt_strips_underscore_in_accept(self):
|
||||
self.assert_prompt_contains_text("accepT", accept="accep_T")
|
||||
|
||||
@unittest.skipUnless(MOCKING, "Requires unittest.mock to run")
|
||||
def test_prompt_strips_underscore_in_reject(self):
|
||||
self.assert_prompt_contains_text("reJect", reject="re_Ject")
|
||||
|
||||
if not MOCKING: #don't use SKIP, to avoid counting a skipped test
|
||||
def test_manual_run(self):
|
||||
b = self.real_user.prompt(
|
||||
TestUser.TITLE, TestUser.MSG, TestUser.ACCEPT, TestUser.REJECT)
|
||||
print ("Returned: {}".format(b))
|
||||
|
||||
@unittest.skipUnless(MOCKING, "Requires unittest.mock to run")
|
||||
def test_auto_accept_accepts_without_prompting(self):
|
||||
u = user.User(auto_accept=True)
|
||||
u._fileout = Mock(spec=sys.stderr)
|
||||
@ -99,6 +126,7 @@ class TestUser_prompt(unittest.TestCase):
|
||||
), "True expected!"
|
||||
assert len(u._fileout.method_calls) == 0, list(u._fileout.method_calls)
|
||||
|
||||
@unittest.skipUnless(MOCKING, "Requires unittest.mock to run")
|
||||
def test_EOFError_in_prompt_caught_as_False(self):
|
||||
self.user._input.configure_mock(
|
||||
side_effect = EOFError,
|
||||
@ -108,6 +136,7 @@ class TestUser_prompt(unittest.TestCase):
|
||||
), "False expected!"
|
||||
self.user._input.assert_called_once_with()
|
||||
|
||||
@unittest.skipUnless(MOCKING, "Requires unittest.mock to run")
|
||||
class TestUser_quiet(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.user = user.User(quiet=True)
|
||||
@ -123,6 +152,7 @@ class TestUser_quiet(unittest.TestCase):
|
||||
assert len(self.user._fileout.method_calls
|
||||
) == 0, list(self.user._fileout.method_calls)
|
||||
|
||||
@unittest.skipUnless(MOCKING, "Requires unittest.mock to run")
|
||||
class TestUser_progress(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
|
||||
@ -199,7 +199,7 @@ class User(user.UserBase):
|
||||
self.notify_error(
|
||||
_("Low level database corruption detected"),
|
||||
_("Gramps has detected a problem in the underlying "
|
||||
"database. This can sometimes be repaired from "
|
||||
"Berkeley database. This can be repaired from "
|
||||
"the Family Tree Manager. Select the database and "
|
||||
'click on the Repair button') + '\n\n' + error)
|
||||
|
||||
|
||||
@ -47,8 +47,8 @@ from .const import GRAMPS_LOCALE as glocale
|
||||
_ = glocale.translation.gettext
|
||||
|
||||
# _T_ is a gramps-defined keyword -- see po/update_po.py and po/genpot.sh
|
||||
def _T_(value, context=''): # enable deferred translations
|
||||
return "%s\x04%s" % (context, value) if context else value
|
||||
def _T_(value): # enable deferred translations (see Python docs 22.1.3.4)
|
||||
return value
|
||||
|
||||
#---------------------------------------------------------------
|
||||
#
|
||||
@ -133,6 +133,7 @@ register('behavior.addmedia-image-dir', '')
|
||||
register('behavior.addmedia-relative-path', False)
|
||||
register('behavior.autoload', False)
|
||||
register('behavior.avg-generation-gap', 20)
|
||||
register('behavior.betawarn', False)
|
||||
register('behavior.check-for-addon-updates', 0)
|
||||
register('behavior.check-for-addon-update-types', ["new"])
|
||||
register('behavior.last-check-for-addon-updates', "1970/01/01")
|
||||
@ -156,7 +157,7 @@ register('behavior.translator-needed', True)
|
||||
register('behavior.use-tips', False)
|
||||
register('behavior.welcome', 100)
|
||||
register('behavior.web-search-url', 'http://google.com/#&q=%(text)s')
|
||||
register('behavior.addons-url', "https://raw.githubusercontent.com/gramps-project/addons/master/gramps52")
|
||||
register('behavior.addons-url', "https://raw.githubusercontent.com/gramps-project/addons/master/gramps51")
|
||||
|
||||
register('database.backend', 'sqlite')
|
||||
register('database.compress-backup', True)
|
||||
@ -185,7 +186,6 @@ register('geography.zoom_when_center', 12)
|
||||
register('geography.show_cross', False)
|
||||
register('geography.path', "")
|
||||
register('geography.use-keypad', True)
|
||||
register('geography.personal-map', "")
|
||||
|
||||
# note that other calls to "register" are done in realtime (when
|
||||
# needed), for instance to four 'interface.clipboard' variables --
|
||||
@ -316,7 +316,7 @@ register('utf8.selected-font', "")
|
||||
register('utf8.death-symbol', 13)
|
||||
|
||||
if __debug__: # enable a simple CLI test to see if the datestrings exist
|
||||
register('test.january', _("|January", "localized lexeme inflections"))
|
||||
register('test.january', _("localized lexeme inflections||January"))
|
||||
|
||||
#---------------------------------------------------------------
|
||||
#
|
||||
@ -368,5 +368,3 @@ if not os.path.exists(CONFIGMAN.filename):
|
||||
CONFIGMAN.load()
|
||||
|
||||
config = CONFIGMAN
|
||||
if config.get('database.backend') == 'bsddb':
|
||||
config.set('database.backend', 'sqlite')
|
||||
|
||||
@ -41,7 +41,7 @@ import uuid
|
||||
#-------------------------------------------------------------------------
|
||||
from .git_revision import get_git_revision
|
||||
from .constfunc import get_env_var
|
||||
from ..version import VERSION, VERSION_TUPLE, major_version, DEV_VERSION
|
||||
from ..version import VERSION, VERSION_TUPLE, major_version
|
||||
from .utils.resourcepath import ResourcePath
|
||||
from .utils.grampslocale import GrampsLocale
|
||||
|
||||
@ -145,8 +145,7 @@ sys.path.insert(0, ROOT_DIR)
|
||||
git_revision = get_git_revision(ROOT_DIR).replace('\n', '')
|
||||
if sys.platform == 'win32' and git_revision == "":
|
||||
git_revision = get_git_revision(os.path.split(ROOT_DIR)[1])
|
||||
if DEV_VERSION:
|
||||
VERSION += git_revision
|
||||
VERSION += git_revision
|
||||
#VERSION += "-1"
|
||||
|
||||
#
|
||||
@ -226,7 +225,7 @@ GTK_GETTEXT_DOMAIN = 'gtk30'
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
COPYRIGHT_MSG = "© 2001-2006 Donald N. Allingham\n" \
|
||||
"© 2007-2020 The Gramps Developers"
|
||||
"© 2007-2019 The Gramps Developers"
|
||||
COMMENTS = _("Gramps\n (Genealogical Research and Analysis "
|
||||
"Management Programming System)\n"
|
||||
"is a personal genealogy program.")
|
||||
@ -257,12 +256,12 @@ DOCUMENTERS = [
|
||||
THUMBSCALE = 96.0
|
||||
THUMBSCALE_LARGE = 180.0
|
||||
XMLFILE = "data.gramps"
|
||||
NO_SURNAME = "(%s)" % _("none", "surname")
|
||||
NO_GIVEN = "(%s)" % _("none", "given-name")
|
||||
NO_SURNAME = "(%s)" % _("surname|none")
|
||||
NO_GIVEN = "(%s)" % _("given-name|none")
|
||||
ARABIC_COMMA = "،"
|
||||
ARABIC_SEMICOLON = "؛"
|
||||
DOCGEN_OPTIONS = 'Docgen Options'
|
||||
COLON = _(':') # Translators: needed for French, ignore otherwise
|
||||
COLON = _(':') # translators: needed for French, ignore otherwise
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
|
||||
@ -35,7 +35,6 @@ import logging
|
||||
# Gramps modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
from ..utils.grampslocale import GrampsLocale
|
||||
from ..const import GRAMPS_LOCALE as glocale
|
||||
_ = glocale.translation.sgettext
|
||||
# import prerequisites for localized handlers
|
||||
@ -73,20 +72,16 @@ from . import _date_uk
|
||||
from . import _date_zh_CN
|
||||
from . import _date_zh_TW
|
||||
|
||||
# the following makes sure we use the LC_TIME value for date display & parsing
|
||||
dlocale = GrampsLocale(lang=glocale.calendar)
|
||||
|
||||
|
||||
# Initialize global parser
|
||||
try:
|
||||
if LANG in LANG_TO_PARSER:
|
||||
parser = LANG_TO_PARSER[LANG](plocale=dlocale)
|
||||
parser = LANG_TO_PARSER[LANG](plocale=glocale)
|
||||
else:
|
||||
parser = LANG_TO_PARSER[LANG_SHORT](plocale=dlocale)
|
||||
parser = LANG_TO_PARSER[LANG_SHORT](plocale=glocale)
|
||||
except:
|
||||
logging.warning(
|
||||
_("Date parser for '%s' not available, using default") % LANG)
|
||||
parser = LANG_TO_PARSER["C"](plocale=dlocale)
|
||||
parser = LANG_TO_PARSER["C"](plocale=glocale)
|
||||
|
||||
# Initialize global displayer
|
||||
try:
|
||||
@ -97,13 +92,13 @@ except:
|
||||
|
||||
try:
|
||||
if LANG in LANG_TO_DISPLAY:
|
||||
displayer = LANG_TO_DISPLAY[LANG](val, blocale=dlocale)
|
||||
displayer = LANG_TO_DISPLAY[LANG](val, blocale=glocale)
|
||||
else:
|
||||
displayer = LANG_TO_DISPLAY[LANG_SHORT](val, blocale=dlocale)
|
||||
displayer = LANG_TO_DISPLAY[LANG_SHORT](val, blocale=glocale)
|
||||
except:
|
||||
logging.warning(
|
||||
_("Date displayer for '%s' not available, using default") % LANG)
|
||||
displayer = LANG_TO_DISPLAY["C"](val, blocale=dlocale)
|
||||
displayer = LANG_TO_DISPLAY["C"](val, blocale=glocale)
|
||||
|
||||
|
||||
# Import utility functions
|
||||
|
||||
@ -50,15 +50,6 @@ class DateParserCZ(DateParser):
|
||||
Converts a text string into a Date object
|
||||
"""
|
||||
|
||||
quality_to_int = {
|
||||
'přibližně' : Date.QUAL_ESTIMATED,
|
||||
'odhadem' : Date.QUAL_ESTIMATED,
|
||||
'odh.' : Date.QUAL_ESTIMATED,
|
||||
'vypočteno' : Date.QUAL_CALCULATED,
|
||||
'vypočtené' : Date.QUAL_CALCULATED,
|
||||
'vyp.' : Date.QUAL_CALCULATED,
|
||||
}
|
||||
|
||||
bce = ["před naším letopočtem", "před Kristem",
|
||||
"př. n. l.", "př. Kr."] + DateParser.bce
|
||||
|
||||
@ -67,17 +58,6 @@ class DateParserCZ(DateParser):
|
||||
# bug 9739 grampslocale.py gets '%-d.%-m.%Y' -- makes it be '%/d.%/m.%Y'
|
||||
self.dhformat = self.dhformat.replace('/', '') # so counteract that
|
||||
|
||||
def init_strings(self):
|
||||
DateParser.init_strings(self)
|
||||
self._text2 = re.compile(r'(\d+)?\.?\s+?%s\.?\s*((\d+)(/\d+)?)?\s*$'
|
||||
% self._mon_str, re.IGNORECASE)
|
||||
self._span = re.compile(
|
||||
r"(od)\s+(?P<start>.+)\s+(do)\s+(?P<stop>.+)",
|
||||
re.IGNORECASE)
|
||||
self._range = re.compile(
|
||||
r"(mezi)\s+(?P<start>.+)\s+(a)\s+(?P<stop>.+)",
|
||||
re.IGNORECASE)
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Czech display
|
||||
|
||||
@ -52,8 +52,8 @@ from ..utils.grampslocale import GrampsLocale
|
||||
from ._datestrings import DateStrings
|
||||
|
||||
# _T_ is a gramps-defined keyword -- see po/update_po.py and po/genpot.sh
|
||||
def _T_(value, context=''): # enable deferred translations
|
||||
return "%s\x04%s" % (context, value) if context else value
|
||||
def _T_(value): # enable deferred translations (see Python docs 22.1.3.4)
|
||||
return value
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@ -67,27 +67,25 @@ class DateDisplay:
|
||||
|
||||
formats = (
|
||||
# format 0 - must always be ISO
|
||||
# Translators: Numeric year, month, day
|
||||
_T_("YYYY-MM-DD (ISO)"),
|
||||
|
||||
# format # 1 - must always be locale-preferred numerical format
|
||||
# such as YY.MM.DD, MM-DD-YY, or whatever your locale prefers.
|
||||
# This should be the format that is used under the locale by
|
||||
# strftime() for '%x'.
|
||||
# Translators: You may translate this as "Numerical",
|
||||
# "System preferred", or similar.
|
||||
_T_("Numerical", "date format"),
|
||||
# You may translate this as "Numerical", "System preferred", or similar.
|
||||
_T_("date format|Numerical"),
|
||||
|
||||
# Translators: Full month name, day, year
|
||||
# Full month name, day, year
|
||||
_T_("Month Day, Year"),
|
||||
|
||||
# Translators: Abbreviated month name, day, year
|
||||
# Abbreviated month name, day, year
|
||||
_T_("MON DAY, YEAR"),
|
||||
|
||||
# Translators: Day, full month name, year
|
||||
# Day, full month name, year
|
||||
_T_("Day Month Year"),
|
||||
|
||||
# Translators: Day, abbreviated month name, year
|
||||
# Day, abbreviated month name, year
|
||||
_T_("DAY MON YEAR")
|
||||
)
|
||||
"""
|
||||
@ -184,70 +182,70 @@ class DateDisplay:
|
||||
|
||||
"from"
|
||||
# first date in a span
|
||||
# Translators: If "from <Month>" needs a special inflection
|
||||
# in your language, translate to "{long_month.f[X]} {year}"
|
||||
# If "from <Month>" needs a special inflection in your
|
||||
# language, translate this to "{long_month.f[X]} {year}"
|
||||
# (where X is one of the month-name inflections you defined)
|
||||
# else leave it untranslated
|
||||
: _("{long_month} {year}", "from"),
|
||||
: _("from|{long_month} {year}"),
|
||||
|
||||
"to"
|
||||
# second date in a span
|
||||
# Translators: If "to <Month>" needs a special inflection
|
||||
# in your language, translate to "{long_month.f[X]} {year}"
|
||||
# If "to <Month>" needs a special inflection in your
|
||||
# language, translate this to "{long_month.f[X]} {year}"
|
||||
# (where X is one of the month-name inflections you defined)
|
||||
# else leave it untranslated
|
||||
: _("{long_month} {year}", "to"),
|
||||
: _("to|{long_month} {year}"),
|
||||
|
||||
"between"
|
||||
# first date in a range
|
||||
# Translators: If "between <Month>" needs a special inflection
|
||||
# in your language, translate to "{long_month.f[X]} {year}"
|
||||
# If "between <Month>" needs a special inflection in your
|
||||
# language, translate this to "{long_month.f[X]} {year}"
|
||||
# (where X is one of the month-name inflections you defined)
|
||||
# else leave it untranslated
|
||||
: _("{long_month} {year}", "between"),
|
||||
: _("between|{long_month} {year}"),
|
||||
|
||||
"and"
|
||||
# second date in a range
|
||||
# Translators: If "and <Month>" needs a special inflection
|
||||
# in your language, translate to "{long_month.f[X]} {year}"
|
||||
# If "and <Month>" needs a special inflection in your
|
||||
# language, translate this to "{long_month.f[X]} {year}"
|
||||
# (where X is one of the month-name inflections you defined)
|
||||
# else leave it untranslated
|
||||
: _("{long_month} {year}", "and"),
|
||||
: _("and|{long_month} {year}"),
|
||||
|
||||
"before"
|
||||
# Translators: If "before <Month>" needs a special inflection
|
||||
# in your language, translate to "{long_month.f[X]} {year}"
|
||||
# If "before <Month>" needs a special inflection in your
|
||||
# language, translate this to "{long_month.f[X]} {year}"
|
||||
# (where X is one of the month-name inflections you defined)
|
||||
# else leave it untranslated
|
||||
: _("{long_month} {year}", "before"),
|
||||
: _("before|{long_month} {year}"),
|
||||
|
||||
"after"
|
||||
# Translators: If "after <Month>" needs a special inflection
|
||||
# in your language, translate to "{long_month.f[X]} {year}"
|
||||
# If "after <Month>" needs a special inflection in your
|
||||
# language, translate this to "{long_month.f[X]} {year}"
|
||||
# (where X is one of the month-name inflections you defined)
|
||||
# else leave it untranslated
|
||||
: _("{long_month} {year}", "after"),
|
||||
: _("after|{long_month} {year}"),
|
||||
|
||||
"about"
|
||||
# Translators: If "about <Month>" needs a special inflection
|
||||
# in your language, translate to "{long_month.f[X]} {year}"
|
||||
# If "about <Month>" needs a special inflection in your
|
||||
# language, translate this to "{long_month.f[X]} {year}"
|
||||
# (where X is one of the month-name inflections you defined)
|
||||
# else leave it untranslated
|
||||
: _("{long_month} {year}", "about"),
|
||||
: _("about|{long_month} {year}"),
|
||||
|
||||
"estimated"
|
||||
# Translators: If "estimated <Month>" needs a special inflection
|
||||
# in your language, translate to "{long_month.f[X]} {year}"
|
||||
# If "estimated <Month>" needs a special inflection in your
|
||||
# language, translate this to "{long_month.f[X]} {year}"
|
||||
# (where X is one of the month-name inflections you defined)
|
||||
# else leave it untranslated
|
||||
: _("{long_month} {year}", "estimated"),
|
||||
: _("estimated|{long_month} {year}"),
|
||||
|
||||
"calculated"
|
||||
# Translators: If "calculated <Month>" needs a special inflection
|
||||
# in your language, translate to "{long_month.f[X]} {year}"
|
||||
# If "calculated <Month>" needs a special inflection in your
|
||||
# language, translate this to "{long_month.f[X]} {year}"
|
||||
# (where X is one of the month-name inflections you defined)
|
||||
# else leave it untranslated
|
||||
: _("{long_month} {year}", "calculated"),
|
||||
: _("calculated|{long_month} {year}"),
|
||||
}
|
||||
|
||||
self.FORMATS_short_month_year = {
|
||||
@ -256,70 +254,70 @@ class DateDisplay:
|
||||
|
||||
"from"
|
||||
# first date in a span
|
||||
# Translators: If "from <Month>" needs a special inflection
|
||||
# in your language, translate to "{short_month.f[X]} {year}"
|
||||
# If "from <Month>" needs a special inflection in your
|
||||
# language, translate this to "{short_month.f[X]} {year}"
|
||||
# (where X is one of the month-name inflections you defined)
|
||||
# else leave it untranslated
|
||||
: _("{short_month} {year}", "from"),
|
||||
: _("from|{short_month} {year}"),
|
||||
|
||||
"to"
|
||||
# second date in a span
|
||||
# Translators: If "to <Month>" needs a special inflection
|
||||
# in your language, translate to "{short_month.f[X]} {year}"
|
||||
# If "to <Month>" needs a special inflection in your
|
||||
# language, translate this to "{short_month.f[X]} {year}"
|
||||
# (where X is one of the month-name inflections you defined)
|
||||
# else leave it untranslated
|
||||
: _("{short_month} {year}", "to"),
|
||||
: _("to|{short_month} {year}"),
|
||||
|
||||
"between"
|
||||
# first date in a range
|
||||
# Translators: If "between <Month>" needs a special inflection
|
||||
# in your language, translate to "{short_month.f[X]} {year}"
|
||||
# If "between <Month>" needs a special inflection in your
|
||||
# language, translate this to "{short_month.f[X]} {year}"
|
||||
# (where X is one of the month-name inflections you defined)
|
||||
# else leave it untranslated
|
||||
: _("{short_month} {year}", "between"),
|
||||
: _("between|{short_month} {year}"),
|
||||
|
||||
"and"
|
||||
# second date in a range
|
||||
# Translators: If "and <Month>" needs a special inflection
|
||||
# in your language, translate to "{short_month.f[X]} {year}"
|
||||
# If "and <Month>" needs a special inflection in your
|
||||
# language, translate this to "{short_month.f[X]} {year}"
|
||||
# (where X is one of the month-name inflections you defined)
|
||||
# else leave it untranslated
|
||||
: _("{short_month} {year}", "and"),
|
||||
: _("and|{short_month} {year}"),
|
||||
|
||||
"before"
|
||||
# Translators: If "before <Month>" needs a special inflection
|
||||
# in your language, translate to "{short_month.f[X]} {year}"
|
||||
# If "before <Month>" needs a special inflection in your
|
||||
# language, translate this to "{short_month.f[X]} {year}"
|
||||
# (where X is one of the month-name inflections you defined)
|
||||
# else leave it untranslated
|
||||
: _("{short_month} {year}", "before"),
|
||||
: _("before|{short_month} {year}"),
|
||||
|
||||
"after"
|
||||
# Translators: If "after <Month>" needs a special inflection
|
||||
# in your language, translate to "{short_month.f[X]} {year}"
|
||||
# If "after <Month>" needs a special inflection in your
|
||||
# language, translate this to "{short_month.f[X]} {year}"
|
||||
# (where X is one of the month-name inflections you defined)
|
||||
# else leave it untranslated
|
||||
: _("{short_month} {year}", "after"),
|
||||
: _("after|{short_month} {year}"),
|
||||
|
||||
"about"
|
||||
# Translators: If "about <Month>" needs a special inflection
|
||||
# in your language, translate to "{short_month.f[X]} {year}"
|
||||
# If "about <Month>" needs a special inflection in your
|
||||
# language, translate this to "{short_month.f[X]} {year}"
|
||||
# (where X is one of the month-name inflections you defined)
|
||||
# else leave it untranslated
|
||||
: _("{short_month} {year}", "about"),
|
||||
: _("about|{short_month} {year}"),
|
||||
|
||||
"estimated"
|
||||
# Translators: If "estimated <Month>" needs a special inflection
|
||||
# in your language, translate to "{short_month.f[X]} {year}"
|
||||
# If "estimated <Month>" needs a special inflection in your
|
||||
# language, translate this to "{short_month.f[X]} {year}"
|
||||
# (where X is one of the month-name inflections you defined)
|
||||
# else leave it untranslated
|
||||
: _("{short_month} {year}", "estimated"),
|
||||
: _("estimated|{short_month} {year}"),
|
||||
|
||||
"calculated"
|
||||
# Translators: If "calculated <Month>" needs a special inflection
|
||||
# in your language, translate to "{short_month.f[X]} {year}"
|
||||
# If "calculated <Month>" needs a special inflection in your
|
||||
# language, translate this to "{short_month.f[X]} {year}"
|
||||
# (where X is one of the month-name inflections you defined)
|
||||
# else leave it untranslated
|
||||
: _("{short_month} {year}", "calculated"),
|
||||
: _("calculated|{short_month} {year}"),
|
||||
}
|
||||
|
||||
def formats_changed(self):
|
||||
@ -423,15 +421,15 @@ class DateDisplay:
|
||||
qual_str = self._qual_str[date.get_quality()]
|
||||
scal = self.format_extras(cal, date.get_new_year())
|
||||
d1 = self.display_cal[cal](date.get_start_date(),
|
||||
# Translators: If there is no special inflection for
|
||||
# "from <Month>" in your language, DON'T translate this.
|
||||
# Otherwise, translate to "from" in ENGLISH!!! ENGLISH!!!
|
||||
inflect=self._("", "from-date"))
|
||||
# If there is no special inflection for "from <Month>"
|
||||
# in your language, DON'T translate this string. Otherwise,
|
||||
# "translate" this to "from" in ENGLISH!!! ENGLISH!!!
|
||||
inflect=self._("from-date|"))
|
||||
d2 = self.display_cal[cal](date.get_stop_date(),
|
||||
# Translators: If there is no special inflection for
|
||||
# "to <Month>" in your language, DON'T translate this.
|
||||
# Otherwise, translate to "to" in ENGLISH!!! ENGLISH!!!
|
||||
inflect=self._("", "to-date"))
|
||||
# If there is no special inflection for "to <Month>"
|
||||
# in your language, DON'T translate this string. Otherwise,
|
||||
# "translate" this to "to" in ENGLISH!!! ENGLISH!!!
|
||||
inflect=self._("to-date|"))
|
||||
return self._("{date_quality}from {date_start} to {date_stop}"
|
||||
"{nonstd_calendar_and_ny}").format(
|
||||
date_quality=qual_str,
|
||||
@ -448,15 +446,15 @@ class DateDisplay:
|
||||
qual_str = self._qual_str[date.get_quality()]
|
||||
scal = self.format_extras(cal, date.get_new_year())
|
||||
d1 = self.display_cal[cal](date.get_start_date(),
|
||||
# Translators: If there is no special inflection for
|
||||
# "between <Month>" in your language, DON'T translate this.
|
||||
# Otherwise, translate to "between" in ENGLISH!!! ENGLISH!!!
|
||||
inflect=self._("", "between-date"))
|
||||
# If there is no special inflection for "between <Month>"
|
||||
# in your language, DON'T translate this string. Otherwise,
|
||||
# "translate" this to "between" in ENGLISH!!! ENGLISH!!!
|
||||
inflect=self._("between-date|"))
|
||||
d2 = self.display_cal[cal](date.get_stop_date(),
|
||||
# Translators: If there is no special inflection for
|
||||
# "and <Month>" in your language, DON'T translate this.
|
||||
# Otherwise, translate to "and" in ENGLISH!!! ENGLISH!!!
|
||||
inflect=self._("", "and-date"))
|
||||
# If there is no special inflection for "and <Month>"
|
||||
# in your language, DON'T translate this string. Otherwise,
|
||||
# "translate" this to "and" in ENGLISH!!! ENGLISH!!!
|
||||
inflect=self._("and-date|"))
|
||||
return self._("{date_quality}between {date_start} and {date_stop}"
|
||||
"{nonstd_calendar_and_ny}").format(
|
||||
date_quality=qual_str,
|
||||
@ -487,30 +485,30 @@ class DateDisplay:
|
||||
return self.dd_range(date)
|
||||
else:
|
||||
if mod == Date.MOD_BEFORE:
|
||||
# Translators: If there is no special inflection for
|
||||
# "before <Month>" in your language, DON'T translate this.
|
||||
# Otherwise, translate to "before" in ENGLISH!!! ENGLISH!!!
|
||||
date_type = _("", "before-date")
|
||||
# If there is no special inflection for "before <Month>"
|
||||
# in your language, DON'T translate this string. Otherwise,
|
||||
# "translate" this to "before" in ENGLISH!!! ENGLISH!!!
|
||||
date_type = _("before-date|")
|
||||
elif mod == Date.MOD_AFTER:
|
||||
# Translators: If there is no special inflection for
|
||||
# "after <Month>" in your language, DON'T translate this.
|
||||
# Otherwise, translate to "after" in ENGLISH!!! ENGLISH!!!
|
||||
date_type = _("", "after-date")
|
||||
# If there is no special inflection for "after <Month>"
|
||||
# in your language, DON'T translate this string. Otherwise,
|
||||
# "translate" this to "after" in ENGLISH!!! ENGLISH!!!
|
||||
date_type = _("after-date|")
|
||||
elif mod == Date.MOD_ABOUT:
|
||||
# Translators: If there is no special inflection for
|
||||
# "about <Month>" in your language, DON'T translate this.
|
||||
# Otherwise, translate to "about" in ENGLISH!!! ENGLISH!!!
|
||||
date_type = _("", "about-date")
|
||||
# If there is no special inflection for "about <Month>"
|
||||
# in your language, DON'T translate this string. Otherwise,
|
||||
# "translate" this to "about" in ENGLISH!!! ENGLISH!!!
|
||||
date_type = _("about-date|")
|
||||
elif qual == Date.QUAL_ESTIMATED:
|
||||
# Translators: If there is no special inflection for
|
||||
# "estimated <Month>" in your language, DON'T translate this.
|
||||
# Otherwise, translate to "estimated" in ENGLISH!!! ENGLISH!!!
|
||||
date_type = _("", "estimated-date")
|
||||
# If there is no special inflection for "estimated <Month>"
|
||||
# in your language, DON'T translate this string. Otherwise,
|
||||
# "translate" this to "estimated" in ENGLISH!!! ENGLISH!!!
|
||||
date_type = _("estimated-date|")
|
||||
elif qual == Date.QUAL_CALCULATED:
|
||||
# Translators: If there is no special inflection for
|
||||
# "calculated <Month>" in your language, DON'T translate this.
|
||||
# Otherwise, translate to "calculated" in ENGLISH!!! ENGLISH!!!
|
||||
date_type = _("", "calculated-date")
|
||||
# If there is no special inflection for "calculated <Month>"
|
||||
# in your language, DON'T translate this string. Otherwise,
|
||||
# "translate" this to "calculated" in ENGLISH!!! ENGLISH!!!
|
||||
date_type = _("calculated-date|")
|
||||
else:
|
||||
date_type = ""
|
||||
# TODO -- do "estimated" and "calculated" need their own "if"?
|
||||
@ -647,7 +645,7 @@ class DateDisplay:
|
||||
elif date_val[1] == 0: # month is zero but day is not (see 8477)
|
||||
return self.display_iso(date_val)
|
||||
else:
|
||||
# Translators: this month is ALREADY inflected: ignore it
|
||||
# TRANSLATORS: this month is ALREADY inflected: ignore it
|
||||
return _("{long_month} {day:d}, {year}").format(
|
||||
long_month = self.format_long_month(date_val[1],
|
||||
inflect,
|
||||
@ -673,7 +671,7 @@ class DateDisplay:
|
||||
elif date_val[1] == 0: # month is zero but day is not (see 8477)
|
||||
return self.display_iso(date_val)
|
||||
else:
|
||||
# Translators: this month is ALREADY inflected: ignore it
|
||||
# TRANSLATORS: this month is ALREADY inflected: ignore it
|
||||
return _("{short_month} {day:d}, {year}").format(
|
||||
short_month = self.format_short_month(date_val[1],
|
||||
inflect,
|
||||
@ -699,7 +697,7 @@ class DateDisplay:
|
||||
elif date_val[1] == 0: # month is zero but day is not (see 8477)
|
||||
return self.display_iso(date_val)
|
||||
else:
|
||||
# Translators: this month is ALREADY inflected: ignore it
|
||||
# TRANSLATORS: this month is ALREADY inflected: ignore it
|
||||
return _("{day:d} {long_month} {year}").format(
|
||||
day = date_val[0],
|
||||
long_month = self.format_long_month(date_val[1],
|
||||
@ -725,7 +723,7 @@ class DateDisplay:
|
||||
elif date_val[1] == 0: # month is zero but day is not (see 8477)
|
||||
return self.display_iso(date_val)
|
||||
else:
|
||||
# Translators: this month is ALREADY inflected: ignore it
|
||||
# TRANSLATORS: this month is ALREADY inflected: ignore it
|
||||
return _("{day:d} {short_month} {year}").format(
|
||||
day = date_val[0],
|
||||
short_month = self.format_short_month(date_val[1],
|
||||
@ -763,8 +761,7 @@ class DateDisplay:
|
||||
# day month_abbreviation year
|
||||
value = self.dd_dformat05(date_val, inflect, short_months)
|
||||
if date_val[2] < 0:
|
||||
# TODO fix BUG 7064: non-Gregorian calendars wrongly use BCE notation
|
||||
# for negative dates
|
||||
# TODO fix BUG 7064: non-Gregorian calendars wrongly use BCE notation for negative dates
|
||||
return self._bce_str % value
|
||||
else:
|
||||
return value
|
||||
|
||||
@ -72,168 +72,168 @@ class DateStrings:
|
||||
_ = locale.translation.lexgettext
|
||||
|
||||
self.long_months = ( "",
|
||||
# Translators: see
|
||||
# TRANSLATORS: see
|
||||
# http://gramps-project.org/wiki/index.php?title=Translating_Gramps#Translating_dates
|
||||
# to learn how to select proper inflection to be used in your localized
|
||||
# DateDisplayer code!
|
||||
_("|January", "localized lexeme inflections"),
|
||||
_("|February", "localized lexeme inflections"),
|
||||
_("|March", "localized lexeme inflections"),
|
||||
_("|April", "localized lexeme inflections"),
|
||||
_("|May", "localized lexeme inflections"),
|
||||
_("|June", "localized lexeme inflections"),
|
||||
_("|July", "localized lexeme inflections"),
|
||||
_("|August", "localized lexeme inflections"),
|
||||
_("|September", "localized lexeme inflections"),
|
||||
_("|October", "localized lexeme inflections"),
|
||||
_("|November", "localized lexeme inflections"),
|
||||
_("|December", "localized lexeme inflections") )
|
||||
_("localized lexeme inflections||January"),
|
||||
_("localized lexeme inflections||February"),
|
||||
_("localized lexeme inflections||March"),
|
||||
_("localized lexeme inflections||April"),
|
||||
_("localized lexeme inflections||May"),
|
||||
_("localized lexeme inflections||June"),
|
||||
_("localized lexeme inflections||July"),
|
||||
_("localized lexeme inflections||August"),
|
||||
_("localized lexeme inflections||September"),
|
||||
_("localized lexeme inflections||October"),
|
||||
_("localized lexeme inflections||November"),
|
||||
_("localized lexeme inflections||December") )
|
||||
|
||||
self.short_months = ( "",
|
||||
# Translators: see
|
||||
# TRANSLATORS: see
|
||||
# http://gramps-project.org/wiki/index.php?title=Translating_Gramps#Translating_dates
|
||||
# to learn how to select proper inflection to be used in your localized
|
||||
# DateDisplayer code!
|
||||
_("|Jan", "localized lexeme inflections - short month form"),
|
||||
_("|Feb", "localized lexeme inflections - short month form"),
|
||||
_("|Mar", "localized lexeme inflections - short month form"),
|
||||
_("|Apr", "localized lexeme inflections - short month form"),
|
||||
_("|May", "localized lexeme inflections - short month form"),
|
||||
_("|Jun", "localized lexeme inflections - short month form"),
|
||||
_("|Jul", "localized lexeme inflections - short month form"),
|
||||
_("|Aug", "localized lexeme inflections - short month form"),
|
||||
_("|Sep", "localized lexeme inflections - short month form"),
|
||||
_("|Oct", "localized lexeme inflections - short month form"),
|
||||
_("|Nov", "localized lexeme inflections - short month form"),
|
||||
_("|Dec", "localized lexeme inflections - short month form") )
|
||||
_("localized lexeme inflections - short month form||Jan"),
|
||||
_("localized lexeme inflections - short month form||Feb"),
|
||||
_("localized lexeme inflections - short month form||Mar"),
|
||||
_("localized lexeme inflections - short month form||Apr"),
|
||||
_("localized lexeme inflections - short month form||May"),
|
||||
_("localized lexeme inflections - short month form||Jun"),
|
||||
_("localized lexeme inflections - short month form||Jul"),
|
||||
_("localized lexeme inflections - short month form||Aug"),
|
||||
_("localized lexeme inflections - short month form||Sep"),
|
||||
_("localized lexeme inflections - short month form||Oct"),
|
||||
_("localized lexeme inflections - short month form||Nov"),
|
||||
_("localized lexeme inflections - short month form||Dec") )
|
||||
|
||||
_ = locale.translation.sgettext
|
||||
self.alt_long_months = ( "",
|
||||
# Translators: see
|
||||
# TRANSLATORS: see
|
||||
# http://gramps-project.org/wiki/index.php?title=Translating_Gramps#Translating_dates
|
||||
# to learn how to add proper alternatives to be recognized in your localized
|
||||
# DateParser code!
|
||||
_("|", "alternative month names for January"),
|
||||
_("|", "alternative month names for February"),
|
||||
_("|", "alternative month names for March"),
|
||||
_("|", "alternative month names for April"),
|
||||
_("|", "alternative month names for May"),
|
||||
_("|", "alternative month names for June"),
|
||||
_("|", "alternative month names for July"),
|
||||
_("|", "alternative month names for August"),
|
||||
_("|", "alternative month names for September"),
|
||||
_("|", "alternative month names for October"),
|
||||
_("|", "alternative month names for November"),
|
||||
_("|", "alternative month names for December") )
|
||||
_("alternative month names for January||"),
|
||||
_("alternative month names for February||"),
|
||||
_("alternative month names for March||"),
|
||||
_("alternative month names for April||"),
|
||||
_("alternative month names for May||"),
|
||||
_("alternative month names for June||"),
|
||||
_("alternative month names for July||"),
|
||||
_("alternative month names for August||"),
|
||||
_("alternative month names for September||"),
|
||||
_("alternative month names for October||"),
|
||||
_("alternative month names for November||"),
|
||||
_("alternative month names for December||") )
|
||||
|
||||
self.calendar = (
|
||||
# Must appear in the order indexed by Date.CAL_... numeric constants
|
||||
_("Gregorian", "calendar"),
|
||||
_("Julian", "calendar"),
|
||||
_("Hebrew", "calendar"),
|
||||
_("French Republican", "calendar"),
|
||||
_("Persian", "calendar"),
|
||||
_("Islamic", "calendar"),
|
||||
_("Swedish", "calendar") )
|
||||
_("calendar|Gregorian"),
|
||||
_("calendar|Julian"),
|
||||
_("calendar|Hebrew"),
|
||||
_("calendar|French Republican"),
|
||||
_("calendar|Persian"),
|
||||
_("calendar|Islamic"),
|
||||
_("calendar|Swedish") )
|
||||
_ = locale.translation.lexgettext
|
||||
|
||||
self.hebrew = (
|
||||
"",
|
||||
# Translators: see
|
||||
# TRANSLATORS: see
|
||||
# http://gramps-project.org/wiki/index.php?title=Translating_Gramps#Translating_dates
|
||||
# to learn how to select proper inflection to be used in your localized
|
||||
# DateDisplayer code!
|
||||
_("Tishri", "Hebrew month lexeme"),
|
||||
_("Heshvan", "Hebrew month lexeme"),
|
||||
_("Kislev", "Hebrew month lexeme"),
|
||||
_("Tevet", "Hebrew month lexeme"),
|
||||
_("Shevat", "Hebrew month lexeme"),
|
||||
_("AdarI", "Hebrew month lexeme"),
|
||||
_("AdarII", "Hebrew month lexeme"),
|
||||
_("Nisan", "Hebrew month lexeme"),
|
||||
_("Iyyar", "Hebrew month lexeme"),
|
||||
_("Sivan", "Hebrew month lexeme"),
|
||||
_("Tammuz", "Hebrew month lexeme"),
|
||||
_("Av", "Hebrew month lexeme"),
|
||||
_("Elul", "Hebrew month lexeme")
|
||||
_("Hebrew month lexeme|Tishri"),
|
||||
_("Hebrew month lexeme|Heshvan"),
|
||||
_("Hebrew month lexeme|Kislev"),
|
||||
_("Hebrew month lexeme|Tevet"),
|
||||
_("Hebrew month lexeme|Shevat"),
|
||||
_("Hebrew month lexeme|AdarI"),
|
||||
_("Hebrew month lexeme|AdarII"),
|
||||
_("Hebrew month lexeme|Nisan"),
|
||||
_("Hebrew month lexeme|Iyyar"),
|
||||
_("Hebrew month lexeme|Sivan"),
|
||||
_("Hebrew month lexeme|Tammuz"),
|
||||
_("Hebrew month lexeme|Av"),
|
||||
_("Hebrew month lexeme|Elul")
|
||||
)
|
||||
|
||||
self.french = (
|
||||
"",
|
||||
# Translators: see
|
||||
# TRANSLATORS: see
|
||||
# http://gramps-project.org/wiki/index.php?title=Translating_Gramps#Translating_dates
|
||||
# to learn how to select proper inflection to be used in your localized
|
||||
# DateDisplayer code!
|
||||
_("Vendémiaire", "French month lexeme"),
|
||||
_("Brumaire", "French month lexeme"),
|
||||
_("Frimaire", "French month lexeme"),
|
||||
_("Nivôse", "French month lexeme"),
|
||||
_("Pluviôse", "French month lexeme"),
|
||||
_("Ventôse", "French month lexeme"),
|
||||
_("Germinal", "French month lexeme"),
|
||||
_("Floréal", "French month lexeme"),
|
||||
_("Prairial", "French month lexeme"),
|
||||
_("Messidor", "French month lexeme"),
|
||||
_("Thermidor", "French month lexeme"),
|
||||
_("Fructidor", "French month lexeme"),
|
||||
_("Extra", "French month lexeme"),
|
||||
_("French month lexeme|Vendémiaire"),
|
||||
_("French month lexeme|Brumaire"),
|
||||
_("French month lexeme|Frimaire"),
|
||||
_("French month lexeme|Nivôse"),
|
||||
_("French month lexeme|Pluviôse"),
|
||||
_("French month lexeme|Ventôse"),
|
||||
_("French month lexeme|Germinal"),
|
||||
_("French month lexeme|Floréal"),
|
||||
_("French month lexeme|Prairial"),
|
||||
_("French month lexeme|Messidor"),
|
||||
_("French month lexeme|Thermidor"),
|
||||
_("French month lexeme|Fructidor"),
|
||||
_("French month lexeme|Extra"),
|
||||
)
|
||||
|
||||
self.islamic = (
|
||||
"",
|
||||
# Translators: see
|
||||
# TRANSLATORS: see
|
||||
# http://gramps-project.org/wiki/index.php?title=Translating_Gramps#Translating_dates
|
||||
# to learn how to select proper inflection to be used in your localized
|
||||
# DateDisplayer code!
|
||||
_("Muharram", "Islamic month lexeme"),
|
||||
_("Safar", "Islamic month lexeme"),
|
||||
_("Rabi`al-Awwal", "Islamic month lexeme"),
|
||||
_("Rabi`ath-Thani", "Islamic month lexeme"),
|
||||
_("Jumada l-Ula", "Islamic month lexeme"),
|
||||
_("Jumada t-Tania", "Islamic month lexeme"),
|
||||
_("Rajab", "Islamic month lexeme"),
|
||||
_("Sha`ban", "Islamic month lexeme"),
|
||||
_("Ramadan", "Islamic month lexeme"),
|
||||
_("Shawwal", "Islamic month lexeme"),
|
||||
_("Dhu l-Qa`da", "Islamic month lexeme"),
|
||||
_("Dhu l-Hijja", "Islamic month lexeme"),
|
||||
_("Islamic month lexeme|Muharram"),
|
||||
_("Islamic month lexeme|Safar"),
|
||||
_("Islamic month lexeme|Rabi`al-Awwal"),
|
||||
_("Islamic month lexeme|Rabi`ath-Thani"),
|
||||
_("Islamic month lexeme|Jumada l-Ula"),
|
||||
_("Islamic month lexeme|Jumada t-Tania"),
|
||||
_("Islamic month lexeme|Rajab"),
|
||||
_("Islamic month lexeme|Sha`ban"),
|
||||
_("Islamic month lexeme|Ramadan"),
|
||||
_("Islamic month lexeme|Shawwal"),
|
||||
_("Islamic month lexeme|Dhu l-Qa`da"),
|
||||
_("Islamic month lexeme|Dhu l-Hijja"),
|
||||
)
|
||||
|
||||
self.persian = (
|
||||
"",
|
||||
# Translators: see
|
||||
# TRANSLATORS: see
|
||||
# http://gramps-project.org/wiki/index.php?title=Translating_Gramps#Translating_dates
|
||||
# to learn how to select proper inflection to be used in your localized
|
||||
# DateDisplayer code!
|
||||
_("Farvardin", "Persian month lexeme"),
|
||||
_("Ordibehesht", "Persian month lexeme"),
|
||||
_("Khordad", "Persian month lexeme"),
|
||||
_("Tir", "Persian month lexeme"),
|
||||
_("Mordad", "Persian month lexeme"),
|
||||
_("Shahrivar", "Persian month lexeme"),
|
||||
_("Mehr", "Persian month lexeme"),
|
||||
_("Aban", "Persian month lexeme"),
|
||||
_("Azar", "Persian month lexeme"),
|
||||
_("Dey", "Persian month lexeme"),
|
||||
_("Bahman", "Persian month lexeme"),
|
||||
_("Esfand", "Persian month lexeme"),
|
||||
_("Persian month lexeme|Farvardin"),
|
||||
_("Persian month lexeme|Ordibehesht"),
|
||||
_("Persian month lexeme|Khordad"),
|
||||
_("Persian month lexeme|Tir"),
|
||||
_("Persian month lexeme|Mordad"),
|
||||
_("Persian month lexeme|Shahrivar"),
|
||||
_("Persian month lexeme|Mehr"),
|
||||
_("Persian month lexeme|Aban"),
|
||||
_("Persian month lexeme|Azar"),
|
||||
_("Persian month lexeme|Dey"),
|
||||
_("Persian month lexeme|Bahman"),
|
||||
_("Persian month lexeme|Esfand"),
|
||||
)
|
||||
|
||||
self.modifiers = ("",
|
||||
# Translators: if the modifier is after the date
|
||||
# TRANSLATORS: if the modifier is after the date
|
||||
# put the space ahead of the word instead of after it
|
||||
_("before ", "date modifier"),
|
||||
# Translators: if the modifier is after the date
|
||||
_("date modifier|before "),
|
||||
# TRANSLATORS: if the modifier is after the date
|
||||
# put the space ahead of the word instead of after it
|
||||
_("after ", "date modifier"),
|
||||
# Translators: if the modifier is after the date
|
||||
_("date modifier|after "),
|
||||
# TRANSLATORS: if the modifier is after the date
|
||||
# put the space ahead of the word instead of after it
|
||||
_("about ", "date modifier"),
|
||||
_("date modifier|about "),
|
||||
"", "", "")
|
||||
|
||||
self.qualifiers = ("",
|
||||
_("estimated ", "date quality"),
|
||||
_("calculated ", "date quality"),
|
||||
_("date quality|estimated "),
|
||||
_("date quality|calculated "),
|
||||
)
|
||||
|
||||
# 6753: localized day names. Eventually should sprout into
|
||||
|
||||
@ -122,6 +122,121 @@ class DbPythonError(Exception):
|
||||
'min_vers': self.min_vers,
|
||||
'max_vers': self.max_vers}
|
||||
|
||||
class BsddbDowngradeError(Exception):
|
||||
"""
|
||||
Error used to report that the Berkeley database used to create the family
|
||||
tree is of a version that is too new to be supported by the current version.
|
||||
"""
|
||||
def __init__(self, env_version, bdb_version):
|
||||
Exception.__init__(self)
|
||||
self.env_version = str(env_version)
|
||||
self.bdb_version = str(bdb_version)
|
||||
|
||||
def __str__(self):
|
||||
return _('The Family Tree you are trying to load is in the Bsddb '
|
||||
'version %(env_version)s format. This version of Gramps uses '
|
||||
'Bsddb version %(bdb_version)s. So you are trying to load '
|
||||
'data created in a newer format into an older program, and '
|
||||
'this is bound to fail.\n\n'
|
||||
'You should start your '
|
||||
'%(bold_start)snewer%(bold_end)s version of Gramps and '
|
||||
'%(wiki_backup_html_start)smake a backup%(html_end)s '
|
||||
'of your Family Tree. You can then import '
|
||||
'this backup into this version of Gramps.') % {
|
||||
'wiki_backup_html_start' : URL_BACKUP1_START ,
|
||||
'html_end' : '</a>' ,
|
||||
'bold_start' : '<b>' ,
|
||||
'bold_end' : '</b>' ,
|
||||
'env_version' : self.env_version,
|
||||
'bdb_version' : self.bdb_version }
|
||||
|
||||
class BsddbDowngradeRequiredError(Exception):
|
||||
"""
|
||||
Error used to report that the Berkeley database used to create the family
|
||||
tree is of a version that is newer than the current version, but it may be
|
||||
possible to open the tree, because the difference is only a point upgrade
|
||||
(i.e. a difference in the last digit of the version tuple).
|
||||
"""
|
||||
def __init__(self, env_version, bdb_version):
|
||||
Exception.__init__(self)
|
||||
self.env_version = str(env_version)
|
||||
self.bdb_version = str(bdb_version)
|
||||
|
||||
def __str__(self):
|
||||
return _('The Family Tree you are trying to load is in the Bsddb '
|
||||
'version %(env_version)s format. This version of Gramps uses '
|
||||
'Bsddb version %(bdb_version)s. So you are trying to load '
|
||||
'data created in a newer format into an older program. In '
|
||||
'this particular case, the difference is very small, so it '
|
||||
'may work.\n\n'
|
||||
'If you have not already made a backup of your Family Tree, '
|
||||
'then you should start your '
|
||||
'%(bold_start)snewer%(bold_end)s version of Gramps and '
|
||||
'%(wiki_backup_html_start)smake a backup%(html_end)s '
|
||||
'of your Family Tree.') % {
|
||||
'wiki_backup_html_start' : URL_BACKUP1_START ,
|
||||
'html_end' : '</a>' ,
|
||||
'bold_start' : '<b>' ,
|
||||
'bold_end' : '</b>' ,
|
||||
'env_version' : self.env_version,
|
||||
'bdb_version' : self.bdb_version }
|
||||
|
||||
class BsddbUpgradeRequiredError(Exception):
|
||||
"""
|
||||
Error used to report that the Berkeley database used to create the family
|
||||
tree is of a version that is too new to be supported by the current version.
|
||||
"""
|
||||
def __init__(self, env_version, bsddb_version):
|
||||
Exception.__init__(self)
|
||||
self.env_version = str(env_version)
|
||||
self.bsddb_version = str(bsddb_version)
|
||||
|
||||
def __str__(self):
|
||||
return _('The Family Tree you are trying to load is in the Bsddb '
|
||||
'version %(env_version)s format. This version of Gramps uses '
|
||||
'Bsddb version %(bdb_version)s. Therefore you cannot load '
|
||||
'this Family Tree without upgrading the Bsddb version of the '
|
||||
'Family Tree.\n\n'
|
||||
'Opening the Family Tree with this version of Gramps might '
|
||||
'irretrievably corrupt your Family Tree. You are strongly '
|
||||
'advised to backup your Family Tree.\n\n'
|
||||
'If you have not already made a backup of your Family Tree, '
|
||||
'then you should start your %(bold_start)sold%(bold_end)s '
|
||||
'version of Gramps and '
|
||||
'%(wiki_backup_html_start)smake a backup%(html_end)s '
|
||||
'of your Family Tree.') % {
|
||||
'wiki_backup_html_start' : URL_BACKUP1_START ,
|
||||
'html_end' : '</a>' ,
|
||||
'bold_start' : '<b>' ,
|
||||
'bold_end' : '</b>' ,
|
||||
'env_version' : self.env_version,
|
||||
'bdb_version' : self.bsddb_version }
|
||||
|
||||
class DbEnvironmentError(Exception):
|
||||
"""
|
||||
Error used to report that the database 'environment' could not be opened.
|
||||
Most likely, the database was created by a different version of the underlying database engine.
|
||||
"""
|
||||
def __init__(self, msg):
|
||||
Exception.__init__(self)
|
||||
self.msg = msg
|
||||
|
||||
def __str__(self):
|
||||
return (_("Gramps has detected a problem in opening the 'environment' "
|
||||
"of the underlying Berkeley database used to store this "
|
||||
"Family Tree. The most likely cause "
|
||||
"is that the database was created with an old version "
|
||||
"of the Berkeley database program, "
|
||||
"and you are now using a new version. "
|
||||
"It is quite likely that your database has not been "
|
||||
"changed by Gramps.\nIf possible, you should revert to your "
|
||||
"old version of Gramps and its support software; export "
|
||||
"your database to XML; close the database; "
|
||||
"then upgrade again "
|
||||
"to this version of Gramps and import the XML file "
|
||||
"in an empty Family Tree. Alternatively, it may be possible "
|
||||
"to use the Berkeley database recovery tools.")
|
||||
+ '\n\n' + str(self.msg))
|
||||
|
||||
class DbUpgradeRequiredError(Exception):
|
||||
"""
|
||||
@ -160,6 +275,73 @@ class DbUpgradeRequiredError(Exception):
|
||||
'oldschema' : self.oldschema,
|
||||
'newschema' : self.newschema }
|
||||
|
||||
class PythonDowngradeError(Exception):
|
||||
"""
|
||||
Error used to report that the Python version used to create the family tree
|
||||
(i.e. Python3) is a version that is newer than the current version
|
||||
(i.e. Python2), so the Family Tree cannot be opened
|
||||
"""
|
||||
def __init__(self, db_python_version, current_python_version):
|
||||
Exception.__init__(self)
|
||||
self.db_python_version = str(db_python_version)
|
||||
self.current_python_version = str(current_python_version)
|
||||
|
||||
def __str__(self):
|
||||
return _('The Family Tree you are trying to load was created with '
|
||||
'Python version %(db_python_version)s. This version of Gramps '
|
||||
'uses Python version %(current_python_version)s. So you are '
|
||||
'trying to load '
|
||||
'data created in a newer format into an older program, and '
|
||||
'this is bound to fail.\n\n'
|
||||
'You should start your '
|
||||
'%(bold_start)snewer%(bold_end)s version of Gramps and '
|
||||
'%(wiki_backup_html_start)smake a backup%(html_end)s '
|
||||
'of your Family Tree. You can then import '
|
||||
'this backup into this version of Gramps.') % {
|
||||
'wiki_backup_html_start' : URL_BACKUP1_START ,
|
||||
'html_end' : '</a>' ,
|
||||
'bold_start' : '<b>' ,
|
||||
'bold_end' : '</b>' ,
|
||||
'db_python_version': self.db_python_version,
|
||||
'current_python_version': self.current_python_version }
|
||||
|
||||
class PythonUpgradeRequiredError(Exception):
|
||||
"""
|
||||
Error used to report that the Python version used to create the family tree
|
||||
(i.e. Python2) is earlier than the current Python version (i.e. Python3), so
|
||||
the Family Tree needs to be upgraded.
|
||||
"""
|
||||
def __init__(self, db_python_version, current_python_version):
|
||||
Exception.__init__(self)
|
||||
self.db_python_version = str(db_python_version)
|
||||
self.current_python_version = str(current_python_version)
|
||||
|
||||
def __str__(self):
|
||||
return _('The Family Tree you are trying to load is in the Python '
|
||||
'version %(db_python_version)s format. This version of Gramps '
|
||||
'uses Python version %(current_python_version)s. Therefore '
|
||||
'you cannot load this Family Tree without upgrading the '
|
||||
'Python version of the Family Tree.\n\n'
|
||||
'If you upgrade then you won\'t be able to use the previous '
|
||||
'version of Gramps, even if you subsequently '
|
||||
'%(wiki_manual_backup_html_start)sbackup%(html_end)s or '
|
||||
'%(wiki_manual_export_html_start)sexport%(html_end)s '
|
||||
'your upgraded Family Tree.\n\n'
|
||||
'Upgrading is a difficult task which could irretrievably '
|
||||
'corrupt your Family Tree if it is interrupted or fails.\n\n'
|
||||
'If you have not already made a backup of your Family Tree, '
|
||||
'then you should start your %(bold_start)sold%(bold_end)s '
|
||||
'version of Gramps and '
|
||||
'%(wiki_backup_html_start)smake a backup%(html_end)s '
|
||||
'of your Family Tree.') % {
|
||||
'wiki_backup_html_start' : URL_BACKUP1_START ,
|
||||
'wiki_manual_backup_html_start' : URL_BACKUP2_START ,
|
||||
'wiki_manual_export_html_start' : URL_EXPORT_START ,
|
||||
'html_end' : '</a>' ,
|
||||
'bold_start' : '<b>' ,
|
||||
'bold_end' : '</b>' ,
|
||||
'db_python_version': self.db_python_version,
|
||||
'current_python_version': self.current_python_version }
|
||||
|
||||
class DbConnectionError(Exception):
|
||||
"""
|
||||
@ -178,35 +360,6 @@ class DbConnectionError(Exception):
|
||||
'message': self.msg,
|
||||
'settings_file': self.settings_file}
|
||||
|
||||
|
||||
class DbSupportedError(Exception):
|
||||
"""
|
||||
Error used to report that a database is no longer supported.
|
||||
"""
|
||||
def __init__(self, msg):
|
||||
Exception.__init__(self)
|
||||
self.msg = msg
|
||||
|
||||
def __str__(self):
|
||||
return _('The Family Tree you are trying to load is in the %(dbtype)s '
|
||||
'database, which is no longer supported.\nTherefore you '
|
||||
'cannot load this Family Tree without upgrading.\n\n'
|
||||
'If you upgrade then you won\'t be able to use the previous '
|
||||
'version of Gramps, even if you subsequently '
|
||||
'%(wiki_manual_backup_html_start)sbackup%(html_end)s or '
|
||||
'%(wiki_manual_export_html_start)sexport%(html_end)s '
|
||||
'your upgraded Family Tree.\n\n'
|
||||
'You are strongly advised to backup your Family Tree.\n\n'
|
||||
'If you have not already made a backup of your Family Tree, '
|
||||
'then you should start your previous version of Gramps and '
|
||||
'%(wiki_backup_html_start)smake a backup%(html_end)s '
|
||||
'of your Family Tree.') % {
|
||||
'dbtype' : self.msg,
|
||||
'wiki_manual_backup_html_start' : URL_BACKUP2_START ,
|
||||
'wiki_manual_export_html_start' : URL_EXPORT_START ,
|
||||
'wiki_backup_html_start' : URL_BACKUP1_START ,
|
||||
'html_end' : '</a>'}
|
||||
|
||||
if __name__ == "__main__":
|
||||
"""
|
||||
Call this from the CLI (in order to find the imported modules):
|
||||
@ -217,8 +370,20 @@ if __name__ == "__main__":
|
||||
|
||||
print("\nDbVersionError:\n",
|
||||
DbVersionError('1.6.0', '1.5.0', '1.5.1'))
|
||||
print("\nBsddbDowngradeError:\n",
|
||||
BsddbDowngradeError('4.8.30', '4.8.29'))
|
||||
print("\nBsddbDowngradeRequiredError:\n",
|
||||
BsddbDowngradeRequiredError('4.8.30', '4.8.29'))
|
||||
print("\nBsddbUpgradeRequiredError:\n",
|
||||
BsddbUpgradeRequiredError('4.8.29', '4.8.30'))
|
||||
print("\nDbEnvironmentError:\n",
|
||||
DbEnvironmentError('test message'))
|
||||
print("\nDbUpgradeRequiredError:\n",
|
||||
DbUpgradeRequiredError('1.5.1', '1.6.0'))
|
||||
print("\nPythonDowngradeError:\n",
|
||||
PythonDowngradeError('3', '2'))
|
||||
print("\nPythonUpgradeRequiredError:\n",
|
||||
PythonUpgradeRequiredError('2', '3'))
|
||||
sys.exit(0)
|
||||
|
||||
print("\nxxx:\n",
|
||||
|
||||
@ -35,7 +35,6 @@ import ast
|
||||
import sys
|
||||
import datetime
|
||||
import glob
|
||||
from pathlib import Path
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
#
|
||||
@ -48,7 +47,6 @@ from . import (DbReadBase, DbWriteBase, DbUndo, DBLOGNAME, DBUNDOFN,
|
||||
REPOSITORY_KEY, NOTE_KEY, TAG_KEY, TXNADD, TXNUPD, TXNDEL,
|
||||
KEY_TO_NAME_MAP, DBMODE_R, DBMODE_W)
|
||||
from .utils import write_lock_file, clear_lock_file
|
||||
from .exceptions import DbVersionError, DbUpgradeRequiredError
|
||||
from ..errors import HandleError
|
||||
from ..utils.callback import Callback
|
||||
from ..updatecallback import UpdateCallback
|
||||
@ -68,6 +66,17 @@ LOG = logging.getLogger(DBLOGNAME)
|
||||
SIGBASE = ('person', 'family', 'source', 'event', 'media',
|
||||
'place', 'repository', 'reference', 'note', 'tag', 'citation')
|
||||
|
||||
def touch(fname, mode=0o666, dir_fd=None, **kwargs):
|
||||
## After http://stackoverflow.com/questions/1158076/implement-touch-using-python
|
||||
if sys.version_info < (3, 3, 0):
|
||||
with open(fname, 'a'):
|
||||
os.utime(fname, None) # set to now
|
||||
else:
|
||||
flags = os.O_CREAT | os.O_APPEND
|
||||
with os.fdopen(os.open(fname, flags=flags, mode=mode, dir_fd=dir_fd)) as f:
|
||||
os.utime(f.fileno() if os.utime in os.supports_fd else fname,
|
||||
dir_fd=None if os.supports_fd else dir_fd, **kwargs)
|
||||
|
||||
class DbGenericUndo(DbUndo):
|
||||
def __init__(self, grampsdb, path):
|
||||
super(DbGenericUndo, self).__init__(grampsdb)
|
||||
@ -302,7 +311,7 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback):
|
||||
|
||||
__callback_map = {}
|
||||
|
||||
VERSION = (20, 0, 0)
|
||||
VERSION = (18, 0, 0)
|
||||
|
||||
def __init__(self, directory=None):
|
||||
DbReadBase.__init__(self)
|
||||
@ -525,9 +534,9 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback):
|
||||
self.undo_history_callback = None
|
||||
self.modified = 0
|
||||
self.transaction = None
|
||||
self.abort_possible = True
|
||||
self.abort_possible = False
|
||||
self._bm_changes = 0
|
||||
self.has_changed = 0 # Also gives commits since startup
|
||||
self.has_changed = False
|
||||
self.surname_list = []
|
||||
self.genderStats = GenderStats() # can pass in loaded stats as dict
|
||||
self.owner = Researcher()
|
||||
@ -650,21 +659,6 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback):
|
||||
|
||||
self.db_is_open = True
|
||||
|
||||
# Check on db version to see if we need upgrade or too new
|
||||
dbversion = int(self._get_metadata('version', default='0'))
|
||||
if dbversion > self.VERSION[0]:
|
||||
self.close()
|
||||
raise DbVersionError(dbversion, 18, self.VERSION[0])
|
||||
|
||||
if not self.readonly and dbversion < self.VERSION[0]:
|
||||
LOG.debug("Schema upgrade required from %s to %s",
|
||||
dbversion, self.VERSION[0])
|
||||
if force_schema_upgrade:
|
||||
self._gramps_upgrade(dbversion, directory, callback)
|
||||
else:
|
||||
self.close()
|
||||
raise DbUpgradeRequiredError(dbversion, self.VERSION[0])
|
||||
|
||||
def _close(self):
|
||||
"""
|
||||
Close database backend.
|
||||
@ -681,7 +675,7 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback):
|
||||
# This is just a dummy file to indicate last modified time of
|
||||
# the database for gramps.cli.clidbman:
|
||||
filename = os.path.join(self._directory, "meta_data.db")
|
||||
Path(filename).touch()
|
||||
touch(filename)
|
||||
|
||||
# Save metadata
|
||||
self._set_metadata('name_formats', self.name_formats)
|
||||
@ -2469,47 +2463,3 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback):
|
||||
enclosed_by = placeref.ref
|
||||
break
|
||||
return enclosed_by
|
||||
|
||||
def _gramps_upgrade(self, version, directory, callback=None):
|
||||
"""
|
||||
Here we do the calls for stepwise schema upgrades.
|
||||
We assume that we need to rebuild secondary and reference maps.
|
||||
"""
|
||||
UpdateCallback.__init__(self, callback)
|
||||
|
||||
start = time.time()
|
||||
|
||||
from gramps.gen.db.upgrade import (
|
||||
gramps_upgrade_14, gramps_upgrade_15, gramps_upgrade_16,
|
||||
gramps_upgrade_17, gramps_upgrade_18, gramps_upgrade_19,
|
||||
gramps_upgrade_20)
|
||||
|
||||
if version < 14:
|
||||
gramps_upgrade_14(self)
|
||||
if version < 15:
|
||||
gramps_upgrade_15(self)
|
||||
if version < 16:
|
||||
gramps_upgrade_16(self)
|
||||
if version < 17:
|
||||
gramps_upgrade_17(self)
|
||||
if version < 18:
|
||||
gramps_upgrade_18(self)
|
||||
if version < 19:
|
||||
gramps_upgrade_19(self)
|
||||
if version < 20:
|
||||
gramps_upgrade_20(self)
|
||||
|
||||
self.rebuild_secondary(callback)
|
||||
self.reindex_reference_map(callback)
|
||||
self.reset()
|
||||
|
||||
self.set_schema_version(self.VERSION[0])
|
||||
LOG.debug("Upgrade time: %d seconds" % int(time.time() - start))
|
||||
|
||||
def get_schema_version(self):
|
||||
""" Return current schema version as an int """
|
||||
return int(self._get_metadata('version', default='0'))
|
||||
|
||||
def set_schema_version(self, value):
|
||||
""" set the current schema version """
|
||||
self._set_metadata('version', str(value))
|
||||
|
||||
@ -345,7 +345,7 @@ class NameDisplay:
|
||||
global WITH_GRAMPS_CONFIG
|
||||
global PAT_AS_SURN
|
||||
|
||||
# Translators: needed for Arabic, ignore otherwise
|
||||
# translators: needed for Arabic, ignore otherwise
|
||||
COMMAGLYPH = xlocale.translation.gettext(',')
|
||||
|
||||
self.STANDARD_FORMATS = [
|
||||
@ -358,7 +358,7 @@ class NameDisplay:
|
||||
(Name.FNLN, _("Given Surname Suffix"),
|
||||
'%f %l %s', _ACT),
|
||||
# primary name primconnector other, given pa/matronynic suffix, primprefix
|
||||
# Translators: long string, have a look at Preferences dialog
|
||||
# translators: long string, have a look at Preferences dialog
|
||||
(Name.LNFNP, _("Main Surnames, Given Patronymic Suffix Prefix"),
|
||||
'%1m %2m %o' + COMMAGLYPH + ' %f %1y %s %0m', _ACT),
|
||||
# DEPRECATED FORMATS
|
||||
@ -599,7 +599,7 @@ class NameDisplay:
|
||||
# called to fill in each format flag.
|
||||
# Dictionary is "code": ("expression", "keyword", "i18n-keyword")
|
||||
d = {"t": ("raw_data[_TITLE]", "title",
|
||||
_("title", "Person")),
|
||||
_("Person|title")),
|
||||
"f": ("raw_data[_FIRSTNAME]", "given",
|
||||
_("given")),
|
||||
"l": ("_raw_full_surname(raw_data[_SURNAME_LIST])", "surname",
|
||||
@ -607,17 +607,17 @@ class NameDisplay:
|
||||
"s": ("raw_data[_SUFFIX]", "suffix",
|
||||
_("suffix")),
|
||||
"c": ("raw_data[_CALL]", "call",
|
||||
_("call", "Name")),
|
||||
_("Name|call")),
|
||||
"x": ("(raw_data[_NICK] or raw_data[_CALL] or raw_data[_FIRSTNAME].split(' ')[0])",
|
||||
"common",
|
||||
_("common", "Name")),
|
||||
_("Name|common")),
|
||||
"i": ("''.join([word[0] +'.' for word in ('. ' +" +
|
||||
" raw_data[_FIRSTNAME]).split()][1:])",
|
||||
"initials",
|
||||
_("initials")),
|
||||
"m": ("_raw_primary_surname(raw_data[_SURNAME_LIST])",
|
||||
"primary",
|
||||
_("primary", "Name")),
|
||||
_("Name|primary")),
|
||||
"0m": ("_raw_primary_prefix_only(raw_data[_SURNAME_LIST])",
|
||||
"primary[pre]",
|
||||
_("primary[pre]")),
|
||||
@ -639,7 +639,7 @@ class NameDisplay:
|
||||
_("notpatronymic")),
|
||||
"r": ("_raw_nonprimary_surname(raw_data[_SURNAME_LIST])",
|
||||
"rest",
|
||||
_("rest", "Remaining names")),
|
||||
_("Remaining names|rest")),
|
||||
"p": ("_raw_prefix_surname(raw_data[_SURNAME_LIST])",
|
||||
"prefix",
|
||||
_("prefix")),
|
||||
@ -699,7 +699,7 @@ class NameDisplay:
|
||||
# called to fill in each format flag.
|
||||
# Dictionary is "code": ("expression", "keyword", "i18n-keyword")
|
||||
d = {"t": ("title", "title",
|
||||
_("title", "Person")),
|
||||
_("Person|title")),
|
||||
"f": ("first", "given",
|
||||
_("given")),
|
||||
"l": ("_raw_full_surname(raw_surname_list)", "surname",
|
||||
@ -707,14 +707,14 @@ class NameDisplay:
|
||||
"s": ("suffix", "suffix",
|
||||
_("suffix")),
|
||||
"c": ("call", "call",
|
||||
_("call", "Name")),
|
||||
_("Name|call")),
|
||||
"x": ("(nick or call or first.split(' ')[0])", "common",
|
||||
_("common", "Name")),
|
||||
_("Name|common")),
|
||||
"i": ("''.join([word[0] +'.' for word in ('. ' + first).split()][1:])",
|
||||
"initials",
|
||||
_("initials")),
|
||||
"m": ("_raw_primary_surname(raw_surname_list)", "primary",
|
||||
_("primary", "Name")),
|
||||
_("Name|primary")),
|
||||
"0m":("_raw_primary_prefix_only(raw_surname_list)",
|
||||
"primary[pre]", _("primary[pre]")),
|
||||
"1m":("_raw_primary_surname_only(raw_surname_list)",
|
||||
@ -732,7 +732,7 @@ class NameDisplay:
|
||||
"o": ("_raw_nonpatro_surname(raw_surname_list)", "notpatronymic",
|
||||
_("notpatronymic")),
|
||||
"r": ("_raw_nonprimary_surname(raw_surname_list)", "rest",
|
||||
_("rest", "Remaining names")),
|
||||
_("Remaining names|rest")),
|
||||
"p": ("_raw_prefix_surname(raw_surname_list)", "prefix",
|
||||
_("prefix")),
|
||||
"q": ("_raw_single_surname(raw_surname_list)", "rawsurnames",
|
||||
|
||||
@ -45,7 +45,7 @@ class HasNameOf(Rule):
|
||||
|
||||
labels = [_('Given name:'),
|
||||
_('Full Family name:'),
|
||||
_('Title:', 'person'),
|
||||
_('person|Title:'),
|
||||
_('Suffix:'),
|
||||
_('Call Name:'),
|
||||
_('Nick Name:'),
|
||||
|
||||
@ -41,9 +41,9 @@ from .. import Rule
|
||||
class IsDefaultPerson(Rule):
|
||||
"""Rule that checks for a default person in the database"""
|
||||
|
||||
name = _('Home Person')
|
||||
name = _('Default person')
|
||||
category = _('General filters')
|
||||
description = _("Matches the Home Person")
|
||||
description = _("Matches the default person")
|
||||
|
||||
def prepare(self, db, user):
|
||||
p = db.get_default_person()
|
||||
|
||||
@ -44,10 +44,10 @@ class IsLessThanNthGenerationAncestorOfDefaultPerson(Rule):
|
||||
not more than N generations away"""
|
||||
|
||||
labels = [ _('Number of generations:') ]
|
||||
name = _('Ancestors of the Home Person '
|
||||
name = _('Ancestors of the default person '
|
||||
'not more than <N> generations away')
|
||||
category = _('Ancestral filters')
|
||||
description = _("Matches ancestors of the Home Person "
|
||||
description = _("Matches ancestors of the default person "
|
||||
"not more than N generations away")
|
||||
|
||||
def prepare(self, db, user):
|
||||
|
||||
@ -43,7 +43,7 @@ class HasRepo(Rule):
|
||||
"""Rule that checks for a repo with a particular value"""
|
||||
|
||||
|
||||
labels = [ _('Name:', 'repo'),
|
||||
labels = [ _('repo|Name:'),
|
||||
_('Type:'),
|
||||
_('Address:'),
|
||||
_('URL:'),
|
||||
|
||||
@ -33,8 +33,8 @@ from ..const import GRAMPS_LOCALE as glocale
|
||||
_ = glocale.translation.gettext
|
||||
|
||||
# _T_ is a gramps-defined keyword -- see po/update_po.py and po/genpot.sh
|
||||
def _T_(value, context=''): # enable deferred translations
|
||||
return "%s\x04%s" % (context, value) if context else value
|
||||
def _T_(value): # enable deferred translations (see Python docs 22.1.3.4)
|
||||
return value
|
||||
|
||||
class AttributeType(GrampsType):
|
||||
|
||||
|
||||
@ -287,7 +287,7 @@ class Span:
|
||||
elif self.date2.get_modifier() == Date.MOD_AFTER:
|
||||
_repr = trans_text("less than") + " " + fdate12
|
||||
elif self.date2.get_modifier() == Date.MOD_ABOUT:
|
||||
_repr = trans_text("about", "age") + " " + fdate12p1
|
||||
_repr = trans_text("age|about") + " " + fdate12p1
|
||||
elif self.date2.is_compound():
|
||||
start, stop = self.date2.get_start_stop_range()
|
||||
start = Date(*start)
|
||||
@ -322,15 +322,15 @@ class Span:
|
||||
_repr = trans_text("more than") + " " + fdate12
|
||||
elif self.date1.get_modifier() == Date.MOD_ABOUT:
|
||||
if self.date2.get_modifier() == Date.MOD_NONE:
|
||||
_repr = trans_text("about", "age") + " " + fdate12p1
|
||||
_repr = trans_text("age|about") + " " + fdate12p1
|
||||
elif self.date2.get_modifier() == Date.MOD_BEFORE:
|
||||
_repr = trans_text("more than about") + " " + fdate12p1
|
||||
elif self.date2.get_modifier() == Date.MOD_AFTER:
|
||||
_repr = trans_text("less than about") + " " + fdate12p1
|
||||
elif self.date2.get_modifier() == Date.MOD_ABOUT:
|
||||
_repr = trans_text("about", "age") + " " + fdate12p1
|
||||
_repr = trans_text("age|about") + " " + fdate12p1
|
||||
elif self.date2.is_compound():
|
||||
_repr = trans_text("about", "age") + " " + fdate12p1
|
||||
_repr = trans_text("age|about") + " " + fdate12p1
|
||||
elif self.date1.is_compound():
|
||||
if self.date2.get_modifier() == Date.MOD_NONE:
|
||||
start, stop = self.date1.get_start_stop_range()
|
||||
@ -347,7 +347,7 @@ class Span:
|
||||
elif self.date2.get_modifier() == Date.MOD_AFTER:
|
||||
_repr = trans_text("less than") + " " + fdate12
|
||||
elif self.date2.get_modifier() == Date.MOD_ABOUT:
|
||||
_repr = trans_text("about", "age") + " " + fdate12p1
|
||||
_repr = trans_text("age|about") + " " + fdate12p1
|
||||
elif self.date2.is_compound():
|
||||
start1, stop1 = self.date1.get_start_stop_range()
|
||||
start2, stop2 = self.date2.get_start_stop_range()
|
||||
@ -423,23 +423,23 @@ class Span:
|
||||
retval = ""
|
||||
detail = 0
|
||||
if diff_tuple[0] != 0:
|
||||
# Translators: leave all/any {...} untranslated
|
||||
# translators: leave all/any {...} untranslated
|
||||
retval += ngettext("{number_of} year", "{number_of} years",
|
||||
diff_tuple[0]
|
||||
).format(number_of=diff_tuple[0])
|
||||
detail += 1
|
||||
if self.precision == detail:
|
||||
if diff_tuple[1] >= 6: # round up years
|
||||
# Translators: leave all/any {...} untranslated
|
||||
# translators: leave all/any {...} untranslated
|
||||
retval = ngettext("{number_of} year", "{number_of} years",
|
||||
diff_tuple[0] + 1
|
||||
).format(number_of=diff_tuple[0] + 1)
|
||||
return retval
|
||||
if diff_tuple[1] != 0:
|
||||
if retval != "":
|
||||
# Translators: needed for Arabic, ignore otherwise
|
||||
# translators: needed for Arabic, ignore otherwise
|
||||
retval += trans_text(", ")
|
||||
# Translators: leave all/any {...} untranslated
|
||||
# translators: leave all/any {...} untranslated
|
||||
retval += ngettext("{number_of} month", "{number_of} months",
|
||||
diff_tuple[1]
|
||||
).format(number_of=diff_tuple[1])
|
||||
@ -448,9 +448,9 @@ class Span:
|
||||
return retval
|
||||
if diff_tuple[2] != 0:
|
||||
if retval != "":
|
||||
# Translators: needed for Arabic, ignore otherwise
|
||||
# translators: needed for Arabic, ignore otherwise
|
||||
retval += trans_text(", ")
|
||||
# Translators: leave all/any {...} untranslated
|
||||
# translators: leave all/any {...} untranslated
|
||||
retval += ngettext("{number_of} day", "{number_of} days",
|
||||
diff_tuple[2]
|
||||
).format(number_of=diff_tuple[2])
|
||||
@ -606,13 +606,13 @@ class Date:
|
||||
"Swedish"]
|
||||
|
||||
|
||||
ui_calendar_names = [_("Gregorian", "calendar"),
|
||||
_("Julian", "calendar"),
|
||||
_("Hebrew", "calendar"),
|
||||
_("French Republican", "calendar"),
|
||||
_("Persian", "calendar"),
|
||||
_("Islamic", "calendar"),
|
||||
_("Swedish", "calendar")]
|
||||
ui_calendar_names = [_("calendar|Gregorian"),
|
||||
_("calendar|Julian"),
|
||||
_("calendar|Hebrew"),
|
||||
_("calendar|French Republican"),
|
||||
_("calendar|Persian"),
|
||||
_("calendar|Islamic"),
|
||||
_("calendar|Swedish")]
|
||||
|
||||
def __init__(self, *source):
|
||||
"""
|
||||
@ -1853,7 +1853,7 @@ class Date:
|
||||
Lookup date quality keyword, even if translated.
|
||||
"""
|
||||
qualities = ["none", "estimated", "calculated"]
|
||||
ui_qualities = [_("none", "date-quality"),
|
||||
ui_qualities = [_("date-quality|none"),
|
||||
_("estimated"), _("calculated")]
|
||||
if quality.lower() in qualities:
|
||||
return qualities.index(quality.lower())
|
||||
@ -1868,7 +1868,7 @@ class Date:
|
||||
"""
|
||||
mods = ["none", "before", "after", "about",
|
||||
"range", "span", "textonly"]
|
||||
ui_mods = [_("none", "date-modifier"),
|
||||
ui_mods = [_("date-modifier|none"),
|
||||
_("before"), _("after"), _("about"),
|
||||
_("range"), _("span"), _("textonly")]
|
||||
if modifier.lower() in mods:
|
||||
|
||||
@ -51,14 +51,14 @@ class EventRoleType(GrampsType):
|
||||
_DATAMAP = [
|
||||
(UNKNOWN, _("Unknown"), "Unknown"),
|
||||
(CUSTOM, _("Custom"), "Custom"),
|
||||
(PRIMARY, _("Primary", "Role"), "Primary"),
|
||||
(PRIMARY, _("Role|Primary"), "Primary"),
|
||||
(CLERGY, _("Clergy"), "Clergy"),
|
||||
(CELEBRANT, _("Celebrant"), "Celebrant"),
|
||||
(AIDE, _("Aide"), "Aide"),
|
||||
(BRIDE, _("Bride"), "Bride"),
|
||||
(GROOM, _("Groom"), "Groom"),
|
||||
(WITNESS, _("Witness"), "Witness"),
|
||||
(FAMILY, _("Family", "Role"), "Family"),
|
||||
(FAMILY, _("Role|Family"), "Family"),
|
||||
(INFORMANT, _("Informant"), "Informant"),
|
||||
]
|
||||
|
||||
|
||||
@ -131,8 +131,8 @@ class EventType(GrampsType):
|
||||
WILL = 44
|
||||
|
||||
# _T_ is a gramps-defined keyword -- see po/update_po.py and po/genpot.sh
|
||||
def _T_(value, context=''): # enable deferred translations
|
||||
return "%s\x04%s" % (context, value) if context else value
|
||||
def _T_(value): # enable deferred translations (see Python docs 22.1.3.4)
|
||||
return value
|
||||
|
||||
_MENU = [[_T_('Life Events'),
|
||||
[BIRTH, BAPTISM, DEATH, BURIAL, CREMATION, ADOPT]],
|
||||
@ -208,52 +208,52 @@ class EventType(GrampsType):
|
||||
]
|
||||
|
||||
_ABBREVIATIONS = {
|
||||
BIRTH: _T_("b.", "birth abbreviation"),
|
||||
DEATH: _T_("d.", "death abbreviation"),
|
||||
MARRIAGE: _T_("m.", "marriage abbreviation"),
|
||||
UNKNOWN: _T_("unkn.", "Unknown abbreviation"),
|
||||
CUSTOM: _T_("cust.", "Custom abbreviation"),
|
||||
ADOPT: _T_("adop.", "Adopted abbreviation"),
|
||||
ADULT_CHRISTEN : _T_("a.chr.", "Adult Christening abbreviation"),
|
||||
BAPTISM: _T_("bap.", "Baptism abbreviation"),
|
||||
BAR_MITZVAH : _T_("bar.", "Bar Mitzvah abbreviation"),
|
||||
BAS_MITZVAH : _T_("bat.", "Bat Mitzvah abbreviation"),
|
||||
BLESS: _T_("bles.", "Blessing abbreviation"),
|
||||
BURIAL: _T_("bur.", "Burial abbreviation"),
|
||||
CAUSE_DEATH : _T_("d.cau.", "Cause Of Death abbreviation"),
|
||||
CENSUS: _T_("cens.", "Census abbreviation"),
|
||||
CHRISTEN: _T_("chr.", "Christening abbreviation"),
|
||||
CONFIRMATION: _T_("conf.", "Confirmation abbreviation"),
|
||||
CREMATION: _T_("crem.", "Cremation abbreviation"),
|
||||
DEGREE: _T_("deg.", "Degree abbreviation"),
|
||||
EDUCATION: _T_("edu.", "Education abbreviation"),
|
||||
ELECTED: _T_("elec.", "Elected abbreviation"),
|
||||
EMIGRATION: _T_("em.", "Emigration abbreviation"),
|
||||
FIRST_COMMUN: _T_("f.comm.", "First Communion abbreviation"),
|
||||
IMMIGRATION: _T_("im.", "Immigration abbreviation"),
|
||||
GRADUATION: _T_("grad.", "Graduation abbreviation"),
|
||||
MED_INFO: _T_("medinf.", "Medical Information abbreviation"),
|
||||
MILITARY_SERV: _T_("milser.", "Military Service abbreviation"),
|
||||
NATURALIZATION: _T_("nat.", "Naturalization abbreviation"),
|
||||
NOB_TITLE: _T_("nob.", "Nobility Title abbreviation"),
|
||||
NUM_MARRIAGES: _T_("n.o.mar.", "Number of Marriages abbreviation"),
|
||||
OCCUPATION: _T_("occ.", "Occupation abbreviation"),
|
||||
ORDINATION: _T_("ord.", "Ordination abbreviation"),
|
||||
PROBATE: _T_("prob.", "Probate abbreviation"),
|
||||
PROPERTY: _T_("prop.", "Property abbreviation"),
|
||||
RELIGION: _T_("rel.", "Religion abbreviation"),
|
||||
RESIDENCE: _T_("res.", "Residence abbreviation"),
|
||||
RETIREMENT: _T_("ret.", "Retirement abbreviation"),
|
||||
WILL: _T_("will.", "Will abbreviation"),
|
||||
MARR_SETTL: _T_("m.set.", "Marriage Settlement abbreviation"),
|
||||
MARR_LIC: _T_("m.lic.", "Marriage License abbreviation"),
|
||||
MARR_CONTR: _T_("m.con.", "Marriage Contract abbreviation"),
|
||||
MARR_BANNS: _T_("m.ban.", "Marriage Banns abbreviation"),
|
||||
MARR_ALT: _T_("alt.mar.", "Alternate Marriage abbreviation"),
|
||||
ENGAGEMENT: _T_("engd.", "Engagement abbreviation"),
|
||||
DIVORCE: _T_("div.", "Divorce abbreviation"),
|
||||
DIV_FILING: _T_("div.f.", "Divorce Filing abbreviation"),
|
||||
ANNULMENT: _T_("annul.", "Annulment abbreviation")
|
||||
BIRTH: _T_("birth abbreviation|b."),
|
||||
DEATH: _T_("death abbreviation|d."),
|
||||
MARRIAGE: _T_("marriage abbreviation|m."),
|
||||
UNKNOWN: _T_("Unknown abbreviation|unkn."),
|
||||
CUSTOM: _T_("Custom abbreviation|cust."),
|
||||
ADOPT: _T_("Adopted abbreviation|adop."),
|
||||
ADULT_CHRISTEN : _T_("Adult Christening abbreviation|a.chr."),
|
||||
BAPTISM: _T_("Baptism abbreviation|bap."),
|
||||
BAR_MITZVAH : _T_("Bar Mitzvah abbreviation|bar."),
|
||||
BAS_MITZVAH : _T_("Bat Mitzvah abbreviation|bat."),
|
||||
BLESS: _T_("Blessing abbreviation|bles."),
|
||||
BURIAL: _T_("Burial abbreviation|bur."),
|
||||
CAUSE_DEATH : _T_("Cause Of Death abbreviation|d.cau."),
|
||||
CENSUS: _T_("Census abbreviation|cens."),
|
||||
CHRISTEN: _T_("Christening abbreviation|chr."),
|
||||
CONFIRMATION: _T_("Confirmation abbreviation|conf."),
|
||||
CREMATION: _T_("Cremation abbreviation|crem."),
|
||||
DEGREE: _T_("Degree abbreviation|deg."),
|
||||
EDUCATION: _T_("Education abbreviation|edu."),
|
||||
ELECTED: _T_("Elected abbreviation|elec."),
|
||||
EMIGRATION: _T_("Emigration abbreviation|em."),
|
||||
FIRST_COMMUN: _T_("First Communion abbreviation|f.comm."),
|
||||
IMMIGRATION: _T_("Immigration abbreviation|im."),
|
||||
GRADUATION: _T_("Graduation abbreviation|grad."),
|
||||
MED_INFO: _T_("Medical Information abbreviation|medinf."),
|
||||
MILITARY_SERV: _T_("Military Service abbreviation|milser."),
|
||||
NATURALIZATION: _T_("Naturalization abbreviation|nat."),
|
||||
NOB_TITLE: _T_("Nobility Title abbreviation|nob."),
|
||||
NUM_MARRIAGES: _T_("Number of Marriages abbreviation|n.o.mar."),
|
||||
OCCUPATION: _T_("Occupation abbreviation|occ."),
|
||||
ORDINATION: _T_("Ordination abbreviation|ord."),
|
||||
PROBATE: _T_("Probate abbreviation|prob."),
|
||||
PROPERTY: _T_("Property abbreviation|prop."),
|
||||
RELIGION: _T_("Religion abbreviation|rel."),
|
||||
RESIDENCE: _T_("Residence abbreviation|res."),
|
||||
RETIREMENT: _T_("Retirement abbreviation|ret."),
|
||||
WILL: _T_("Will abbreviation|will."),
|
||||
MARR_SETTL: _T_("Marriage Settlement abbreviation|m.set."),
|
||||
MARR_LIC: _T_("Marriage License abbreviation|m.lic."),
|
||||
MARR_CONTR: _T_("Marriage Contract abbreviation|m.con."),
|
||||
MARR_BANNS: _T_("Marriage Banns abbreviation|m.ban."),
|
||||
MARR_ALT: _T_("Alternate Marriage abbreviation|alt.mar."),
|
||||
ENGAGEMENT: _T_("Engagement abbreviation|engd."),
|
||||
DIVORCE: _T_("Divorce abbreviation|div."),
|
||||
DIV_FILING: _T_("Divorce Filing abbreviation|div.f."),
|
||||
ANNULMENT: _T_("Annulment abbreviation|annul.")
|
||||
}
|
||||
|
||||
def __init__(self, value=None):
|
||||
|
||||
@ -288,12 +288,10 @@ class GrampsType(object, metaclass=GrampsTypeMeta):
|
||||
else:
|
||||
return self.__value == value[0]
|
||||
else:
|
||||
if value.value == self._CUSTOM and self.__value == self._CUSTOM:
|
||||
if value.value == self._CUSTOM:
|
||||
return self.__string == value.string
|
||||
elif value.value != self._CUSTOM and self.__value != self._CUSTOM:
|
||||
return self.__value == value.value
|
||||
else:
|
||||
return False
|
||||
return self.__value == value.value
|
||||
|
||||
def __ne__(self, value):
|
||||
return not self.__eq__(value)
|
||||
|
||||
@ -457,11 +457,11 @@ class Name(SecondaryObject, PrivacyBase, SurnameBase, CitationBase, NoteBase,
|
||||
first = self.first_name
|
||||
surname = self.get_surname()
|
||||
if self.suffix:
|
||||
# Translators: needed for Arabic, ignore otherwise
|
||||
# translators: needed for Arabic, ignore otherwise
|
||||
return _("%(surname)s, %(first)s %(suffix)s"
|
||||
) % {'surname':surname, 'first':first, 'suffix':self.suffix}
|
||||
else:
|
||||
# Translators: needed for Arabic, ignore otherwise
|
||||
# translators: needed for Arabic, ignore otherwise
|
||||
return _("%(str1)s, %(str2)s") % {'str1':surname, 'str2':first}
|
||||
|
||||
def get_upper_name(self):
|
||||
@ -472,11 +472,11 @@ class Name(SecondaryObject, PrivacyBase, SurnameBase, CitationBase, NoteBase,
|
||||
first = self.first_name
|
||||
surname = self.get_surname().upper()
|
||||
if self.suffix:
|
||||
# Translators: needed for Arabic, ignore otherwise
|
||||
# translators: needed for Arabic, ignore otherwise
|
||||
return _("%(surname)s, %(first)s %(suffix)s"
|
||||
) % {'surname':surname, 'first':first, 'suffix':self.suffix}
|
||||
else:
|
||||
# Translators: needed for Arabic, ignore otherwise
|
||||
# translators: needed for Arabic, ignore otherwise
|
||||
return _("%(str1)s, %(str2)s") % {'str1':surname, 'str2':first}
|
||||
|
||||
def get_regular_name(self):
|
||||
@ -489,7 +489,7 @@ class Name(SecondaryObject, PrivacyBase, SurnameBase, CitationBase, NoteBase,
|
||||
if self.suffix == "":
|
||||
return "%s %s" % (first, surname)
|
||||
else:
|
||||
# Translators: needed for Arabic, ignore otherwise
|
||||
# translators: needed for Arabic, ignore otherwise
|
||||
return _("%(first)s %(surname)s, %(suffix)s"
|
||||
) % {'surname':surname, 'first':first, 'suffix':self.suffix}
|
||||
|
||||
|
||||
@ -73,12 +73,12 @@ class NameOriginType(GrampsType):
|
||||
(UNKNOWN, _("Unknown"), "Unknown "),
|
||||
(CUSTOM, _("Custom"), "Custom"),
|
||||
(NONE, "", ""),
|
||||
(INHERITED, _("Inherited", "Surname"), "Inherited"),
|
||||
(GIVEN, _("Given", "Surname"), "Given"),
|
||||
(TAKEN, _("Taken", "Surname"), "Taken"),
|
||||
(INHERITED, _("Surname|Inherited"), "Inherited"),
|
||||
(GIVEN, _("Surname|Given"), "Given"),
|
||||
(TAKEN, _("Surname|Taken"), "Taken"),
|
||||
(PATRONYMIC, _("Patronymic"), "Patronymic"),
|
||||
(MATRONYMIC, _("Matronymic"), "Matronymic"),
|
||||
(FEUDAL, _("Feudal", "Surname"), "Feudal"),
|
||||
(FEUDAL, _("Surname|Feudal"), "Feudal"),
|
||||
(PSEUDONYM, _("Pseudonym"), "Pseudonym"),
|
||||
(PATRILINEAL, _("Patrilineal"), "Patrilineal"),
|
||||
(MATRILINEAL, _("Matrilineal"), "Matrilineal"),
|
||||
|
||||
@ -79,8 +79,8 @@ class NoteType(GrampsType):
|
||||
(CITATION, _('Citation'), "Citation"),
|
||||
(REPORT_TEXT, _("Report"), "Report"),
|
||||
(HTML_CODE, _("Html code"), "Html code"),
|
||||
(TODO, _("To Do", "notetype"), "To Do"),
|
||||
(LINK, _("Link", "notetype"), "Link"),
|
||||
(TODO, _("notetype|To Do"), "To Do"),
|
||||
(LINK, _("notetype|Link"), "Link"),
|
||||
]
|
||||
|
||||
_DATAMAPIGNORE = [
|
||||
|
||||
@ -299,7 +299,6 @@ class StyledText:
|
||||
"""
|
||||
if self._tags:
|
||||
the_tags = [tag.serialize() for tag in self._tags]
|
||||
the_tags.sort()
|
||||
else:
|
||||
the_tags = []
|
||||
|
||||
|
||||
@ -64,11 +64,11 @@ class Test1(unittest.TestCase):
|
||||
C = self.C.join([self.A, self.S, deepcopy(self.B)])
|
||||
C = C.replace('X', StyledText('_', [self.T3]))
|
||||
_C = ('123_456\ncleartext\nabc_def',
|
||||
[((0, ''), 'v3', [(3, 4)]),
|
||||
((0, ''), 'v3', [(21, 22)]),
|
||||
((1, ''), 'v1', [(0, 2), (2, 3)]),
|
||||
[((1, ''), 'v1', [(0, 2), (2, 3)]),
|
||||
((0, ''), 'v3', [(3, 4)]),
|
||||
((1, ''), 'v1', [(4, 6)]),
|
||||
((2, ''), 'v2', [(19, 21), (18, 21)]),
|
||||
((0, ''), 'v3', [(21, 22)]),
|
||||
((2, ''), 'v2', [(22, 23), (22, 25)])])
|
||||
self.assertEqual(C.serialize(), _C)
|
||||
|
||||
|
||||
@ -29,8 +29,6 @@ _type_map = {
|
||||
'application/x-gedcom' : 'GEDCOM database',
|
||||
'application/x-gramps-package': 'Gramps package',
|
||||
'image/jpeg' : 'JPEG image',
|
||||
'image/tiff' : 'TIFF image',
|
||||
'image/png' : 'PNG image',
|
||||
'application/pdf' : 'PDF document',
|
||||
'text/rtf' : 'Rich Text File',
|
||||
}
|
||||
|
||||
@ -83,7 +83,7 @@ class BasePluginManager:
|
||||
|
||||
def __init__(self):
|
||||
""" This function should only be run once by get_instance() """
|
||||
if BasePluginManager.__instance != 1:
|
||||
if BasePluginManager.__instance is not 1:
|
||||
raise Exception("This class is a singleton. "
|
||||
"Use the get_instance() method")
|
||||
|
||||
|
||||
@ -1135,7 +1135,7 @@ class PluginRegister:
|
||||
|
||||
def __init__(self):
|
||||
""" This function should only be run once by get_instance() """
|
||||
if PluginRegister.__instance != 1:
|
||||
if PluginRegister.__instance is not 1:
|
||||
raise Exception("This class is a singleton. "
|
||||
"Use the get_instance() method")
|
||||
self.stable_only = True
|
||||
|
||||
@ -75,9 +75,9 @@ class PaperSize:
|
||||
self.height = height
|
||||
self.width = width
|
||||
if self.name == 'Letter':
|
||||
self.trans_pname = _('Letter', 'paper size')
|
||||
self.trans_pname = _('paper size|Letter')
|
||||
elif self.name == 'Legal':
|
||||
self.trans_pname = _('Legal', 'paper size')
|
||||
self.trans_pname = _('paper size|Legal')
|
||||
elif self.name == 'Custom Size':
|
||||
self.trans_pname = _('Custom Size')
|
||||
else:
|
||||
|
||||
@ -69,6 +69,12 @@ _MARRIAGE = [{'name': _("Default"), 'value': ""},
|
||||
{'name': _("Below"), 'value': "marriage below"},
|
||||
{'name': _("Not shown"), 'value': "no marriage"}]
|
||||
|
||||
_OCCUPATION = [{'name': _("Do not include"), 'value': "no"},
|
||||
{'name': _("Only description"), 'value': "basic"},
|
||||
{'name': _("Use date"), 'value': "date"},
|
||||
{'name': _("Use place"), 'value': "place"},
|
||||
{'name': _("Use date and place"), 'value': "date place"}]
|
||||
|
||||
_COLOR = [{'name': _("None"), 'value': "none"},
|
||||
{'name': _("Default"), 'value': "default"},
|
||||
{'name': _("Preferences"), 'value': "preferences"}]
|
||||
@ -153,6 +159,12 @@ class TreeOptions:
|
||||
marriage.set_help(_("Position of marriage information."))
|
||||
menu.add_option(category, "marriage", marriage)
|
||||
|
||||
occupation = EnumeratedListOption(_("Occupation"), "")
|
||||
for item in _OCCUPATION:
|
||||
occupation.add_item(item["value"], item["name"])
|
||||
occupation.set_help(_("Details of occupation information."))
|
||||
menu.add_option(category, "occupation", occupation)
|
||||
|
||||
nodesize = NumberOption(_("Node size"), 25, 5, 100, 5)
|
||||
nodesize.set_help(_("One dimension of a node, in mm. If the timeflow "
|
||||
"is up or down then this is the width, otherwise "
|
||||
@ -282,6 +294,7 @@ class TreeDocBase(BaseDoc, TreeDoc):
|
||||
|
||||
self.detail = get_option('detail').get_value()
|
||||
self.marriage = get_option('marriage').get_value()
|
||||
self.occupation = get_option('occupation').get_value()
|
||||
self.nodesize = get_option('nodesize').get_value()
|
||||
self.levelsize = get_option('levelsize').get_value()
|
||||
self.nodecolor = get_option('nodecolor').get_value()
|
||||
@ -302,7 +315,7 @@ class TreeDocBase(BaseDoc, TreeDoc):
|
||||
name = paper_size.get_name().lower()
|
||||
if name == 'custom size':
|
||||
width = str(paper_size.get_width())
|
||||
height = str(paper_size.get_height())
|
||||
height = str(paper_size.get_width())
|
||||
paper = 'papersize={%scm,%scm}' % (width, height)
|
||||
elif name in ('a', 'b', 'c', 'd', 'e'):
|
||||
paper = 'ansi' + name + 'paper'
|
||||
@ -449,8 +462,9 @@ class TreeDocBase(BaseDoc, TreeDoc):
|
||||
# Comparison with 'Occupation' for backwards compatibility with Gramps 5.0
|
||||
attr_type = str(attr.get_type())
|
||||
if attr_type in ('Occupation', _('Occupation')):
|
||||
self.write(level+1, 'profession = {%s},\n' %
|
||||
escape(attr.get_value()))
|
||||
if self.occupation != "no":
|
||||
self.write(level+1, 'profession = {%s},\n' %
|
||||
escape(attr.get_value()))
|
||||
if attr_type == 'Comment':
|
||||
self.write(level+1, 'comment = {%s},\n' %
|
||||
escape(attr.get_value()))
|
||||
@ -494,6 +508,8 @@ class TreeDocBase(BaseDoc, TreeDoc):
|
||||
elif event.type == EventType.CREMATION:
|
||||
event_type = 'burial'
|
||||
modifier = 'cremated'
|
||||
elif event.type == EventType.OCCUPATION:
|
||||
event_type = 'occupation'
|
||||
else:
|
||||
return
|
||||
|
||||
@ -519,7 +535,17 @@ class TreeDocBase(BaseDoc, TreeDoc):
|
||||
date_str = date_str + '/' + stop_date
|
||||
|
||||
place = escape(_pd.display_event(db, event))
|
||||
place = place.replace("-", "\--")
|
||||
|
||||
if event_type == 'occupation' and self.occupation != "no":
|
||||
description = escape(event.description)
|
||||
self.write(level, 'profession = {%s}' % description)
|
||||
if self.occupation == "date":
|
||||
self.write(level+1, '{%s}' % date_str)
|
||||
if self.occupation == "place":
|
||||
self.write(level+1, '{%s}' % place)
|
||||
if self.occupation == "date place":
|
||||
self.write(level+1, '{%s}\, {%s}' % (date_str, place))
|
||||
self.write(level, ',\n')
|
||||
|
||||
if modifier:
|
||||
event_type += '+'
|
||||
|
||||
@ -62,7 +62,6 @@ class EnumeratedListOption(Option):
|
||||
:type value: int
|
||||
:return: nothing
|
||||
"""
|
||||
self.ini_value = value
|
||||
Option.__init__(self, label, value)
|
||||
self.__items = []
|
||||
self.__xml_items = []
|
||||
@ -139,8 +138,6 @@ class EnumeratedListOption(Option):
|
||||
"""
|
||||
if value in (v for v, d in self.__items):
|
||||
Option.set_value(self, value)
|
||||
elif value == self.ini_value:
|
||||
return
|
||||
else:
|
||||
logging.warning(_("Value '%(val)s' not found for option '%(opt)s'") %
|
||||
{'val' : str(value), 'opt' : self.get_label()})
|
||||
|
||||
@ -114,7 +114,7 @@ def cite_source(bibliography, database, obj, elocale=glocale):
|
||||
first = True
|
||||
for ref in slist:
|
||||
if not first:
|
||||
# Translators: needed for Arabic, ignore otherwise
|
||||
# translators: needed for Arabic, ignore otherwise
|
||||
txt += trans_text(', ')
|
||||
first = False
|
||||
citation = database.get_citation_from_handle(ref)
|
||||
@ -171,7 +171,7 @@ def write_endnotes(bibliography, database, doc, printnotes=False, links=False,
|
||||
'Endnotes-Source-Notes', links)
|
||||
|
||||
for key, ref in citation.get_ref_list():
|
||||
# Translators: needed for French, ignore otherwise
|
||||
# translators: needed for French, ignore otherwise
|
||||
doc.start_paragraph('Endnotes-Ref', trans_text('%s:') % key)
|
||||
doc.write_text(_format_ref_text(ref, key, elocale), links=links)
|
||||
doc.end_paragraph()
|
||||
@ -193,20 +193,20 @@ def _format_source_text(source, elocale):
|
||||
|
||||
if source.get_title():
|
||||
if src_txt:
|
||||
# Translators: needed for Arabic, ignore otherwise
|
||||
# translators: needed for Arabic, ignore otherwise
|
||||
src_txt += trans_text(', ')
|
||||
# Translators: used in French+Russian, ignore otherwise
|
||||
# translators: used in French+Russian, ignore otherwise
|
||||
src_txt += trans_text('"%s"') % source.get_title()
|
||||
|
||||
if source.get_publication_info():
|
||||
if src_txt:
|
||||
# Translators: needed for Arabic, ignore otherwise
|
||||
# translators: needed for Arabic, ignore otherwise
|
||||
src_txt += trans_text(', ')
|
||||
src_txt += source.get_publication_info()
|
||||
|
||||
if source.get_abbreviation():
|
||||
if src_txt:
|
||||
# Translators: needed for Arabic, ignore otherwise
|
||||
# translators: needed for Arabic, ignore otherwise
|
||||
src_txt += trans_text(', ')
|
||||
src_txt += "(%s)" % source.get_abbreviation()
|
||||
|
||||
|
||||
@ -40,8 +40,8 @@ from ...const import GRAMPS_LOCALE as glocale
|
||||
_ = glocale.translation.sgettext
|
||||
|
||||
# _T_ is a gramps-defined keyword -- see po/update_po.py and po/genpot.sh
|
||||
def _T_(value, context=''): # enable deferred translations
|
||||
return "%s\x04%s" % (context, value) if context else value
|
||||
def _T_(value): # enable deferred translations (see Python docs 22.1.3.4)
|
||||
return value
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@ -65,22 +65,6 @@ def add_localization_option(menu, category):
|
||||
menu.add_option(category, "trans", trans)
|
||||
return trans
|
||||
|
||||
def add_extra_localization_option(menu, category, name, optname):
|
||||
"""
|
||||
Insert an option for localizing the report into a different locale
|
||||
than the default one
|
||||
"""
|
||||
|
||||
trans = EnumeratedListOption(_(name),
|
||||
glocale.DEFAULT_TRANSLATION_STR)
|
||||
trans.add_item(glocale.DEFAULT_TRANSLATION_STR, _("Default"))
|
||||
languages = glocale.get_language_dict()
|
||||
for language in sorted(languages, key=glocale.sort_key):
|
||||
trans.add_item(languages[language], language)
|
||||
trans.set_help(_("The additional translation to be used for the report."))
|
||||
menu.add_option(category, optname, trans)
|
||||
return trans
|
||||
|
||||
def add_name_format_option(menu, category):
|
||||
"""
|
||||
Insert an option for changing the report's name format to a
|
||||
@ -187,18 +171,17 @@ def add_living_people_option(menu, category,
|
||||
|
||||
living_people = EnumeratedListOption(_("Living People"), mode)
|
||||
items = [(LivingProxyDb.MODE_INCLUDE_ALL,
|
||||
_T_("Included, and all data", "'living people'"))]
|
||||
_T_("'living people'|Included, and all data"))]
|
||||
if process_names:
|
||||
items += [
|
||||
(LivingProxyDb.MODE_INCLUDE_FULL_NAME_ONLY,
|
||||
_T_("Full names, but data removed", "'living people'")),
|
||||
_T_("'living people'|Full names, but data removed")),
|
||||
(LivingProxyDb.MODE_INCLUDE_LAST_NAME_ONLY,
|
||||
_T_("Given names replaced, and data removed", "'living people'")),
|
||||
_T_("'living people'|Given names replaced, and data removed")),
|
||||
(LivingProxyDb.MODE_REPLACE_COMPLETE_NAME,
|
||||
_T_("Complete names replaced, and data removed",
|
||||
"'living people'"))]
|
||||
_T_("'living people'|Complete names replaced, and data removed"))]
|
||||
items += [(LivingProxyDb.MODE_EXCLUDE_ALL,
|
||||
_T_("Not included", "'living people'"))]
|
||||
_T_("'living people'|Not included"))]
|
||||
living_people.set_items(items, xml_items=True) # for deferred translation
|
||||
living_people.set_help(_("How to handle living people"))
|
||||
menu.add_option(category, "living_people", living_people)
|
||||
@ -317,24 +300,6 @@ def run_date_format_option(report, menu):
|
||||
format_to_be = 0 # ISO always exists
|
||||
report._ldd.set_format(format_to_be)
|
||||
|
||||
def add_tags_option(menu, category):
|
||||
"""
|
||||
Insert an option for deciding whether to include tags
|
||||
in the report
|
||||
|
||||
:param menu: The menu the options should be added to.
|
||||
:type menu: :class:`.Menu`
|
||||
:param category: A label that describes the category that the option
|
||||
belongs to, e.g. "Report Options"
|
||||
:type category: string
|
||||
"""
|
||||
|
||||
include_tags = EnumeratedListOption(_('Tags'), 0)
|
||||
include_tags.add_item(0, _('Do not include'))
|
||||
include_tags.add_item(1, _('Include'))
|
||||
include_tags.set_help(_("Whether to include tags"))
|
||||
menu.add_option(category, 'inc_tags', include_tags)
|
||||
|
||||
def add_gramps_id_option(menu, category, ownline=False):
|
||||
"""
|
||||
Insert an option for deciding whether to include Gramps IDs
|
||||
|
||||
@ -46,8 +46,9 @@ from ...utils.file import media_path_full
|
||||
from ..docgen import IndexMark, INDEX_TYPE_ALP
|
||||
|
||||
# _T_ is a gramps-defined keyword -- see po/update_po.py and po/genpot.sh
|
||||
def _T_(value, context=''): # enable deferred translations
|
||||
return "%s\x04%s" % (context, value) if context else value
|
||||
def _T_(value):
|
||||
""" enable deferred translations (see Python docs 22.1.3.4) """
|
||||
return value
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@ -252,7 +253,7 @@ def get_address_str(addr):
|
||||
if addr_str == "":
|
||||
addr_str = info
|
||||
else:
|
||||
# Translators: needed for Arabic, ignore otherwise
|
||||
# translators: needed for Arabic, ignore otherwise
|
||||
addr_str = _("%(str1)s, %(str2)s"
|
||||
) % {'str1' : addr_str, 'str2' : info}
|
||||
return addr_str
|
||||
|
||||
@ -116,8 +116,9 @@ class Zipfile:
|
||||
os.mkdir(fullname)
|
||||
for name in self.get_files(names):
|
||||
fullname = os.path.join(path, name)
|
||||
with open(fullname, 'wb') as outfile:
|
||||
outfile.write(self.zip_obj.read(name))
|
||||
outfile = file(fullname, 'wb')
|
||||
outfile.write(self.zip_obj.read(name))
|
||||
outfile.close()
|
||||
|
||||
def extractfile(self, name):
|
||||
"""
|
||||
@ -258,7 +259,7 @@ def available_updates():
|
||||
if "new" in whattypes:
|
||||
if (not config.get('behavior.do-not-show-previously-seen-addon-updates') or
|
||||
plugin_dict["i"] not in config.get('behavior.previously-seen-addon-updates')):
|
||||
addon_update_list.append((_("New", "updates"),
|
||||
addon_update_list.append((_("updates|New"),
|
||||
"%s/download/%s" %
|
||||
(config.get("behavior.addons-url"),
|
||||
plugin_dict["z"]),
|
||||
|
||||
@ -769,7 +769,6 @@ def sanitize_citation(db, citation):
|
||||
new_citation.set_gramps_id(citation.get_gramps_id())
|
||||
new_citation.set_handle(citation.get_handle())
|
||||
new_citation.set_change_time(citation.get_change_time())
|
||||
new_citation.set_tag_list(citation.get_tag_list())
|
||||
copy_srcattributes(db, citation, new_citation)
|
||||
copy_notes(db, citation, new_citation)
|
||||
copy_media_ref_list(db, citation, new_citation)
|
||||
@ -915,7 +914,6 @@ def sanitize_source(db, source):
|
||||
new_source.set_gramps_id(source.get_gramps_id())
|
||||
new_source.set_handle(source.get_handle())
|
||||
new_source.set_change_time(source.get_change_time())
|
||||
new_source.set_tag_list(source.get_tag_list())
|
||||
|
||||
for repo_ref in source.get_reporef_list():
|
||||
if repo_ref and not repo_ref.get_privacy():
|
||||
@ -989,7 +987,6 @@ def sanitize_place(db, place):
|
||||
new_place.set_type(place.get_type())
|
||||
new_place.set_code(place.get_code())
|
||||
new_place.set_placeref_list(place.get_placeref_list())
|
||||
new_place.set_tag_list(place.get_tag_list())
|
||||
|
||||
copy_citation_ref_list(db, place, new_place)
|
||||
copy_notes(db, place, new_place)
|
||||
@ -1020,7 +1017,6 @@ def sanitize_event(db, event):
|
||||
new_event.set_handle(event.get_handle())
|
||||
new_event.set_date_object(event.get_date_object())
|
||||
new_event.set_change_time(event.get_change_time())
|
||||
new_event.set_tag_list(event.get_tag_list())
|
||||
|
||||
copy_citation_ref_list(db, event, new_event)
|
||||
copy_notes(db, event, new_event)
|
||||
@ -1124,7 +1120,6 @@ def sanitize_repository(db, repository):
|
||||
new_repository.set_gramps_id(repository.get_gramps_id())
|
||||
new_repository.set_handle(repository.get_handle())
|
||||
new_repository.set_change_time(repository.get_change_time())
|
||||
new_repository.set_tag_list(repository.get_tag_list())
|
||||
|
||||
copy_notes(db, repository, new_repository)
|
||||
copy_addresses(db, repository, new_repository)
|
||||
|
||||
@ -2171,58 +2171,58 @@ class RelationshipCalculator:
|
||||
elif gender == FEMALE:
|
||||
return trans_text("wife")
|
||||
else:
|
||||
return trans_text("spouse", "gender unknown")
|
||||
return trans_text("gender unknown|spouse")
|
||||
elif spouse_type == self.PARTNER_EX_MARRIED:
|
||||
if gender == MALE:
|
||||
return trans_text("ex-husband")
|
||||
elif gender == FEMALE:
|
||||
return trans_text("ex-wife")
|
||||
else:
|
||||
return trans_text("ex-spouse", "gender unknown")
|
||||
return trans_text("gender unknown|ex-spouse")
|
||||
elif spouse_type == self.PARTNER_UNMARRIED:
|
||||
if gender == MALE:
|
||||
return trans_text("partner", "male,unmarried")
|
||||
return trans_text("male,unmarried|partner")
|
||||
elif gender == FEMALE:
|
||||
return trans_text("partner", "female,unmarried")
|
||||
return trans_text("female,unmarried|partner")
|
||||
else:
|
||||
return trans_text("partner", "gender unknown,unmarried")
|
||||
return trans_text("gender unknown,unmarried|partner")
|
||||
elif spouse_type == self.PARTNER_EX_UNMARRIED:
|
||||
if gender == MALE:
|
||||
return trans_text("ex-partner", "male,unmarried")
|
||||
return trans_text("male,unmarried|ex-partner")
|
||||
elif gender == FEMALE:
|
||||
return trans_text("ex-partner", "female,unmarried")
|
||||
return trans_text("female,unmarried|ex-partner")
|
||||
else:
|
||||
return trans_text("ex-partner", "gender unknown,unmarried")
|
||||
return trans_text("gender unknown,unmarried|ex-partner")
|
||||
elif spouse_type == self.PARTNER_CIVIL_UNION:
|
||||
if gender == MALE:
|
||||
return trans_text("partner", "male,civil union")
|
||||
return trans_text("male,civil union|partner")
|
||||
elif gender == FEMALE:
|
||||
return trans_text("partner", "female,civil union")
|
||||
return trans_text("female,civil union|partner")
|
||||
else:
|
||||
return trans_text("partner", "gender unknown,civil union")
|
||||
return trans_text("gender unknown,civil union|partner")
|
||||
elif spouse_type == self.PARTNER_EX_CIVIL_UNION:
|
||||
if gender == MALE:
|
||||
return trans_text("former partner", "male,civil union")
|
||||
return trans_text("male,civil union|former partner")
|
||||
elif gender == FEMALE:
|
||||
return trans_text("former partner", "female,civil union")
|
||||
return trans_text("female,civil union|former partner")
|
||||
else:
|
||||
return trans_text("former partner", "gender unknown,civil union")
|
||||
return trans_text("gender unknown,civil union|former partner")
|
||||
elif spouse_type == self.PARTNER_UNKNOWN_REL:
|
||||
if gender == MALE:
|
||||
return trans_text("partner", "male,unknown relation")
|
||||
return trans_text("male,unknown relation|partner")
|
||||
elif gender == FEMALE:
|
||||
return trans_text("partner", "female,unknown relation")
|
||||
return trans_text("female,unknown relation|partner")
|
||||
else:
|
||||
return trans_text("partner", "gender unknown,unknown relation")
|
||||
return trans_text("gender unknown,unknown relation|partner")
|
||||
else:
|
||||
# here we have spouse_type == self.PARTNER_EX_UNKNOWN_REL
|
||||
# or other not catched types
|
||||
if gender == MALE:
|
||||
return trans_text("former partner", "male,unknown relation")
|
||||
return trans_text("male,unknown relation|former partner")
|
||||
elif gender == FEMALE:
|
||||
return trans_text("former partner", "female,unknown relation")
|
||||
return trans_text("female,unknown relation|former partner")
|
||||
else:
|
||||
return trans_text("former partner", "gender unknown,unknown relation")
|
||||
return trans_text("gender unknown,unknown relation|former partner")
|
||||
|
||||
def connect_db_signals(self, dbstate):
|
||||
"""
|
||||
|
||||
@ -75,7 +75,6 @@ _LOCALE_NAMES = {
|
||||
'cs': ('Czech_Czech Republic', '1250', _("Czech")),
|
||||
'da': ('Danish_Denmark', '1252', _("Danish")),
|
||||
'de': ('German_Germany', '1252', _("German")),
|
||||
'de_AT': ('German_Austria', '1252', _("German (Austria)")),
|
||||
'el': ('Greek_Greece', '1253', _("Greek")),
|
||||
'en': ('English_United States', '1252', _("English (USA)")),
|
||||
'en_GB': ('English_United Kingdom', '1252', _("English")),
|
||||
@ -118,7 +117,7 @@ _LOCALE_NAMES = {
|
||||
_RTL_LOCALES = ('ar', 'he')
|
||||
|
||||
# locales with less than 70% currently translated
|
||||
INCOMPLETE_TRANSLATIONS = ('ar', 'bg', 'he', 'sq', 'ta', 'tr')
|
||||
INCOMPLETE_TRANSLATIONS = ('ar', 'bg', 'he', 'ja', 'sq', 'ta', 'tr')
|
||||
|
||||
def _check_mswin_locale(locale):
|
||||
msloc = None
|
||||
@ -1028,8 +1027,8 @@ class Lexeme(str):
|
||||
Python code::
|
||||
|
||||
_ = lexgettext
|
||||
dec = _("|December", "localized lexeme inflections")
|
||||
xmas = _("|Christmas", "lexeme")
|
||||
dec = _("localized lexeme inflections||December")
|
||||
xmas = _("lexeme||Christmas")
|
||||
text = _("{holiday} is celebrated in {month}".format(
|
||||
holiday=xmas, month=dec))
|
||||
greeting = _("Merry {holiday}!").format(holiday=xmas)
|
||||
@ -1038,12 +1037,10 @@ class Lexeme(str):
|
||||
|
||||
Translation database (Russian example)::
|
||||
|
||||
msgctxt "localized lexeme inflections"
|
||||
msgid "|December"
|
||||
msgid "lexeme||December"
|
||||
msgstr "NOMINATIVE=декабрь|GENITIVE=декабря|ABLATIVE=декабрём|LOCATIVE=декабре"
|
||||
|
||||
msgctxt "lexeme"
|
||||
msgid "|Christmas"
|
||||
msgid "lexeme||Christmas"
|
||||
msgstr "NOMINATIVE=рождество|GENITIVE=рождества|ABLATIVE=рождеством"
|
||||
|
||||
msgid "{holiday} is celebrated in {month}"
|
||||
@ -1145,33 +1142,26 @@ class GrampsTranslations(gettext.GNUTranslations):
|
||||
Overrides and extends gettext.GNUTranslations. See the Python gettext
|
||||
"Class API" documentation for how to use this.
|
||||
"""
|
||||
CONTEXT = "%s\x04%s"
|
||||
|
||||
def language(self):
|
||||
"""
|
||||
Return the target languge of this translations object.
|
||||
"""
|
||||
return self._language
|
||||
|
||||
def gettext(self, msgid, context=''):
|
||||
def gettext(self, msgid):
|
||||
"""
|
||||
Obtain translation of gettext, return a unicode object
|
||||
|
||||
:param msgid: The string to translated.
|
||||
:type msgid: unicode
|
||||
:param context: The message context.
|
||||
:type context: unicode
|
||||
:returns: Translation or the original.
|
||||
:rtype: unicode
|
||||
"""
|
||||
# If context=="" and msgid =="" then gettext will return po file header
|
||||
# If msgid =="" then gettext will return po file header
|
||||
# and that's not what we want.
|
||||
if len((context + msgid).strip()) == 0:
|
||||
if len(msgid.strip()) == 0:
|
||||
return msgid
|
||||
if context:
|
||||
return self.pgettext(context, msgid)
|
||||
else:
|
||||
return gettext.GNUTranslations.gettext(self, msgid)
|
||||
return gettext.GNUTranslations.gettext(self, msgid)
|
||||
|
||||
def ngettext(self, singular, plural, num):
|
||||
"""
|
||||
@ -1191,7 +1181,7 @@ class GrampsTranslations(gettext.GNUTranslations):
|
||||
"""
|
||||
return gettext.GNUTranslations.ngettext(self, singular, plural, num)
|
||||
|
||||
def sgettext(self, msgid, context='', sep='|'):
|
||||
def sgettext(self, msgid, sep='|'):
|
||||
"""
|
||||
Strip the context used for resolving translation ambiguities.
|
||||
|
||||
@ -1202,22 +1192,18 @@ class GrampsTranslations(gettext.GNUTranslations):
|
||||
|
||||
:param msgid: The string to translated.
|
||||
:type msgid: unicode
|
||||
:param context: The message context.
|
||||
:type context: unicode
|
||||
:param sep: The separator marking the context.
|
||||
:type sep: unicode
|
||||
:returns: Translation or the original with context stripped.
|
||||
:rtype: unicode
|
||||
"""
|
||||
if '\x04' in msgid: # Deferred translation
|
||||
context, msgid = msgid.split('\x04')
|
||||
msgval = self.gettext(msgid, context)
|
||||
msgval = self.gettext(msgid)
|
||||
if msgval == msgid:
|
||||
sep_idx = msgid.rfind(sep)
|
||||
msgval = msgid[sep_idx+1:]
|
||||
return msgval
|
||||
|
||||
def lexgettext(self, msgid, context=''):
|
||||
def lexgettext(self, msgid):
|
||||
"""
|
||||
Extract all inflections of the same lexeme,
|
||||
stripping the '|'-separated context using :meth:`~sgettext`
|
||||
@ -1236,28 +1222,13 @@ class GrampsTranslations(gettext.GNUTranslations):
|
||||
|
||||
:param msgid: The string to translated.
|
||||
:type msgid: unicode
|
||||
:param context: The message context.
|
||||
:type context: unicode
|
||||
:returns: Translation or the original with context stripped.
|
||||
:rtype: unicode (for option (1)) / Lexeme (option (2))
|
||||
"""
|
||||
variants = self.sgettext(msgid, context).split('|')
|
||||
variants = self.sgettext(msgid).split('|')
|
||||
return Lexeme([v.split('=') for v in variants]
|
||||
) if len(variants) > 1 else variants[0]
|
||||
|
||||
def pgettext(self, context, message):
|
||||
"""
|
||||
Copied from python 3.8
|
||||
"""
|
||||
ctxt_msg_id = self.CONTEXT % (context, message)
|
||||
missing = object()
|
||||
tmsg = self._catalog.get(ctxt_msg_id, missing)
|
||||
if tmsg is missing:
|
||||
if self._fallback:
|
||||
return self._fallback.pgettext(context, message)
|
||||
return message
|
||||
return tmsg
|
||||
|
||||
class GrampsNullTranslations(gettext.NullTranslations):
|
||||
"""
|
||||
Extends gettext.NullTranslations to provide the sgettext method.
|
||||
@ -1265,16 +1236,8 @@ class GrampsNullTranslations(gettext.NullTranslations):
|
||||
Note that it's necessary for msgid to be unicode. If it's not,
|
||||
neither will be the returned string.
|
||||
"""
|
||||
def gettext(self, msgid, context=''):
|
||||
if context:
|
||||
return self.pgettext(context, msgid)
|
||||
else:
|
||||
return gettext.NullTranslations.gettext(self, msgid)
|
||||
|
||||
def sgettext(self, msgid, context='', sep='|'):
|
||||
if '\x04' in msgid: # Deferred translation
|
||||
context, msgid = msgid.split('\x04')
|
||||
msgval = self.gettext(msgid, context)
|
||||
def sgettext(self, msgid, sep='|'):
|
||||
msgval = self.gettext(msgid)
|
||||
if msgval == msgid:
|
||||
sep_idx = msgid.rfind(sep)
|
||||
msgval = msgid[sep_idx+1:]
|
||||
@ -1287,11 +1250,3 @@ class GrampsNullTranslations(gettext.NullTranslations):
|
||||
The null translation returns the raw msgids, which are in English
|
||||
"""
|
||||
return "en"
|
||||
|
||||
def pgettext(self, context, message):
|
||||
"""
|
||||
Copied from python 3.8
|
||||
"""
|
||||
if self._fallback:
|
||||
return self._fallback.pgettext(context, message)
|
||||
return message
|
||||
|
||||
@ -163,39 +163,13 @@ def image_size(source):
|
||||
from gi.repository import GdkPixbuf
|
||||
from gi.repository import GLib
|
||||
try:
|
||||
import re
|
||||
import magic
|
||||
# For performance reasons, we'll try to get image size from magic.
|
||||
# This avoid to load the image in memory. This is a real improvement
|
||||
# when we have many big images.
|
||||
# Used in odfdoc, rtfdoc and webreport and tested with png, gif, jpeg,
|
||||
# bmp, tiff
|
||||
#
|
||||
# file size with magic without (Gdk) ratio
|
||||
# example 1 : 256k 0.00080 0.00575 7
|
||||
# example 2 : 21M 0.00171 0.55860 326
|
||||
img = magic.from_file(source)
|
||||
found = img.find("TIFF")
|
||||
if found == 0:
|
||||
width = re.search('width=(\d+)', img).groups()
|
||||
height = re.search('height=(\d+)', img).groups()
|
||||
return (int(width[0]), int(height[0]))
|
||||
found = img.find("precision")
|
||||
if found > 0:
|
||||
img = img[found:]
|
||||
size = re.search('(\d+)\s*x\s*(\d+)', img).groups()
|
||||
return (int(size[0]), int(size[1]))
|
||||
except (ImportError, FileNotFoundError):
|
||||
# python-magic is not installed or the file does not exist.
|
||||
# So Trying to get image size with Gdk.
|
||||
try:
|
||||
img = GdkPixbuf.Pixbuf.new_from_file(source)
|
||||
width = img.get_width()
|
||||
height = img.get_height()
|
||||
except GLib.GError:
|
||||
width = 0
|
||||
height = 0
|
||||
return (width, height)
|
||||
img = GdkPixbuf.Pixbuf.new_from_file(source)
|
||||
width = img.get_width()
|
||||
height = img.get_height()
|
||||
except GLib.GError:
|
||||
width = 0
|
||||
height = 0
|
||||
return (width, height)
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
|
||||
@ -51,14 +51,14 @@ Keyword translation interface
|
||||
from ..const import GRAMPS_LOCALE as glocale
|
||||
_ = glocale.translation.sgettext
|
||||
|
||||
KEYWORDS = [("title", "t", _("Title", "Person"), _("TITLE", "Person")),
|
||||
KEYWORDS = [("title", "t", _("Person|Title"), _("Person|TITLE")),
|
||||
("given", "f", _("Given"), _("GIVEN")),
|
||||
("surname", "l", _("Surname"), _("SURNAME")),
|
||||
("call", "c", _("Call", "Name"), _("CALL", "Name")),
|
||||
("common", "x", _("Common", "Name"), _("COMMON", "Name")),
|
||||
("call", "c", _("Name|Call"), _("Name|CALL")),
|
||||
("common", "x", _("Name|Common"), _("Name|COMMON")),
|
||||
("initials", "i", _("Initials"), _("INITIALS")),
|
||||
("suffix", "s", _("Suffix"), _("SUFFIX")),
|
||||
("primary", "m", _("Primary", "Name"), _("PRIMARY")),
|
||||
("primary", "m", _("Name|Primary"), _("PRIMARY")),
|
||||
("primary[pre]", "0m", _("Primary[pre]"), _("PRIMARY[PRE]")),
|
||||
("primary[sur]", "1m", _("Primary[sur]"), _("PRIMARY[SUR]")),
|
||||
("primary[con]", "2m", _("Primary[con]"), _("PRIMARY[CON]")),
|
||||
|
||||
@ -2,7 +2,6 @@
|
||||
# Gramps - a GTK+/GNOME based genealogy program
|
||||
#
|
||||
# Copyright (C) 2013 John Ralls <jralls@ceridwen.us>
|
||||
# Copyright (C) 2020 Nick Hall <nick-h@gramps-project.org>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
@ -36,25 +35,6 @@ class ResourcePath:
|
||||
|
||||
It should be called only by const.py; other code should retrieve the
|
||||
paths from there.
|
||||
|
||||
Attempt to derive the resource path from the package path assuming that
|
||||
one of the three main installation schemes has been used.
|
||||
|
||||
The package path will be one of the following:
|
||||
|
||||
<prefix>/lib/pythonX.Y/site-packages
|
||||
<prefix>\Lib\site-packages
|
||||
|
||||
<home>/lib/python
|
||||
|
||||
<userbase>/lib/pythonX.Y/site-packages
|
||||
<userbase>\PythonXY\site-packages
|
||||
|
||||
Where <prefix>, <home> and <userbase> are the resource paths used in the
|
||||
Prefix, Home and User installation schemes.
|
||||
|
||||
The use of the command line option "--install-data" in the setup script
|
||||
is no longer supported.
|
||||
"""
|
||||
instance = None
|
||||
def __new__(cls):
|
||||
@ -67,9 +47,9 @@ class ResourcePath:
|
||||
def __init__(self):
|
||||
if self.initialized:
|
||||
return
|
||||
package_path = os.path.abspath(os.path.join(os.path.dirname(
|
||||
__file__), '..', "..", ".."))
|
||||
installed = not os.path.exists(os.path.join(package_path, '.git'))
|
||||
resource_file = os.path.join(os.path.abspath(os.path.dirname(
|
||||
__file__)), 'resource-path')
|
||||
installed = os.path.exists(resource_file)
|
||||
if installed:
|
||||
test_path = os.path.join("gramps", "authors.xml")
|
||||
else:
|
||||
@ -79,30 +59,27 @@ class ResourcePath:
|
||||
if (tmp_path and os.path.exists(os.path.join(tmp_path, test_path))):
|
||||
resource_path = tmp_path
|
||||
elif installed:
|
||||
base_path = None
|
||||
head, tail = os.path.split(package_path)
|
||||
if tail in ('site-packages', 'dist-packages'):
|
||||
# Prefix or User installation scheme
|
||||
head, tail = os.path.split(head)
|
||||
if tail.startswith('python'):
|
||||
base_path, tail = os.path.split(head)
|
||||
elif tail == 'Lib' or tail.startswith('Python'):
|
||||
base_path = head
|
||||
elif tail == 'python':
|
||||
# Home installation scheme
|
||||
base_path, tail = os.path.split(head)
|
||||
if base_path is not None:
|
||||
resource_path = os.path.join(base_path, 'share')
|
||||
else:
|
||||
LOG.error("Unable to determine resource path")
|
||||
try:
|
||||
with open(resource_file, encoding='utf-8',
|
||||
errors='strict') as fp:
|
||||
resource_path = fp.readline()
|
||||
except UnicodeError as err:
|
||||
LOG.exception("Encoding error while parsing resource path", err)
|
||||
sys.exit(1)
|
||||
except IOError as err:
|
||||
LOG.exception("Failed to open resource file", err)
|
||||
sys.exit(1)
|
||||
if not os.path.exists(os.path.join(resource_path, test_path)):
|
||||
LOG.error("Resource Path %s is invalid", resource_path)
|
||||
sys.exit(1)
|
||||
else:
|
||||
# Let's try to run from source without env['GRAMPS_RESOURCES']:
|
||||
resource_path = package_path
|
||||
|
||||
if (not os.path.exists(os.path.join(resource_path, test_path))):
|
||||
LOG.error("Resource Path %s is invalid", resource_path)
|
||||
sys.exit(1)
|
||||
resource_path = os.path.join(os.path.abspath(os.path.dirname(
|
||||
__file__)), '..', "..", "..")
|
||||
test_path = os.path.join("data", "authors.xml")
|
||||
if (not os.path.exists(os.path.join(resource_path, test_path))):
|
||||
LOG.error("Unable to determine resource path")
|
||||
sys.exit(1)
|
||||
|
||||
resource_path = os.path.abspath(resource_path)
|
||||
if installed:
|
||||
|
||||
@ -33,8 +33,8 @@ from ..lib import Person, Citation, FamilyRelType
|
||||
from ..const import GRAMPS_LOCALE as glocale
|
||||
_ = glocale.translation.sgettext
|
||||
|
||||
def _T_(value, context=''): # enable deferred translations
|
||||
return "%s\x04%s" % (context, value) if context else value
|
||||
def _T_(value): # enable deferred translations (see Python docs 22.1.3.4)
|
||||
return value
|
||||
# _T_ is a gramps-defined keyword -- see po/update_po.py and po/genpot.sh
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
@ -45,7 +45,7 @@ def _T_(value, context=''): # enable deferred translations
|
||||
gender = {
|
||||
Person.MALE : _("male"),
|
||||
Person.FEMALE : _("female"),
|
||||
Person.UNKNOWN : _("unknown", "gender"),
|
||||
Person.UNKNOWN : _("gender|unknown"),
|
||||
}
|
||||
|
||||
def format_gender(type):
|
||||
|
||||
@ -58,7 +58,7 @@ class FileTest(unittest.TestCase):
|
||||
"""
|
||||
|
||||
# Create database
|
||||
db = make_database("sqlite")
|
||||
db = make_database("bsddb")
|
||||
path = get_empty_tempdir("utils_file_test")
|
||||
db.load(path)
|
||||
|
||||
|
||||
@ -20,12 +20,23 @@
|
||||
#
|
||||
|
||||
import unittest
|
||||
from unittest.mock import Mock
|
||||
import sys
|
||||
|
||||
try:
|
||||
if sys.version_info < (3,3):
|
||||
from mock import Mock
|
||||
else:
|
||||
from unittest.mock import Mock
|
||||
|
||||
MOCKING = True
|
||||
|
||||
except:
|
||||
MOCKING = False
|
||||
print ("Mocking disabled, some testing skipped", sys.exc_info()[0:2])
|
||||
|
||||
class LexGettextTest(unittest.TestCase):
|
||||
SRC_WORD = "Inflect-me"
|
||||
CONTEXT = "how-to-use-lexgettext"
|
||||
MSGID = "|" + SRC_WORD
|
||||
MSGID = "how-to-use-lexgettext||" + SRC_WORD
|
||||
|
||||
def setUp(self):
|
||||
from ..grampslocale import GrampsTranslations
|
||||
@ -33,32 +44,36 @@ class LexGettextTest(unittest.TestCase):
|
||||
self.trans = GrampsTranslations()
|
||||
|
||||
def setup_sgettext_mock(self, msgval_expected):
|
||||
mock = Mock(return_value=msgval_expected)
|
||||
if MOCKING:
|
||||
mock = Mock(return_value=msgval_expected)
|
||||
else:
|
||||
mock = lambda msgid: msgval_expected
|
||||
self.trans.sgettext = mock
|
||||
|
||||
def tearDown(self):
|
||||
try:
|
||||
self.trans.sgettext.assert_called_once_with(
|
||||
self.MSGID, self.CONTEXT)
|
||||
except AttributeError as e:
|
||||
print ("Apparently the test has never set up the mock: ", e)
|
||||
if MOCKING:
|
||||
try:
|
||||
self.trans.sgettext.assert_called_once_with(
|
||||
self.MSGID)
|
||||
except AttributeError as e:
|
||||
print ("Apparently the test has never set up the mock: ", e)
|
||||
|
||||
def testSrcWordOnlyIfNoTranslation(self):
|
||||
self.setup_sgettext_mock(self.SRC_WORD)
|
||||
result = self.trans.lexgettext(self.MSGID, self.CONTEXT)
|
||||
result = self.trans.lexgettext(self.MSGID)
|
||||
self.assertEqual(result, self.SRC_WORD)
|
||||
|
||||
def test3InflectionsExtractableByNameThroughForm(self):
|
||||
translated = "n=TargetNom|g=TargetGen|d=TargetDat"
|
||||
self.setup_sgettext_mock(translated)
|
||||
lex = self.trans.lexgettext(self.MSGID, self.CONTEXT)
|
||||
lex = self.trans.lexgettext(self.MSGID)
|
||||
formatted = "{lex.f[n]},{lex.f[g]},{lex.f[d]}".format(lex=lex)
|
||||
self.assertEqual(formatted, "TargetNom,TargetGen,TargetDat")
|
||||
|
||||
def testFirstLexemeFormExtractableAsDefaultString(self):
|
||||
translated = "def=Default|v1=Option1|a=AnotherOption"
|
||||
self.setup_sgettext_mock(translated)
|
||||
lex = self.trans.lexgettext(self.MSGID, self.CONTEXT)
|
||||
lex = self.trans.lexgettext(self.MSGID)
|
||||
formatted = "{}".format(lex)
|
||||
self.assertEqual(formatted, "Default")
|
||||
|
||||
|
||||
@ -76,7 +76,7 @@ _ = glocale.translation.gettext
|
||||
|
||||
try:
|
||||
# On Darwin sys.getdefaultencoding() is correct, on Win32 it's
|
||||
# sys.stdout.encoding, and on Linux they're both right.
|
||||
# sys.stdout.enoding, and on Linux they're both right.
|
||||
if mac():
|
||||
_encoding = sys.getdefaultencoding()
|
||||
else:
|
||||
@ -102,7 +102,7 @@ except:
|
||||
# code. That unfortunately initializes GrampsLocale, so it has its own
|
||||
# logging setup during initialization.
|
||||
#-------------------------------------------------------------------------
|
||||
"""Set up basic logging support."""
|
||||
"""Setup basic logging support."""
|
||||
|
||||
# Setup a formatter
|
||||
form = logging.Formatter(fmt="%(asctime)s.%(msecs).03d: %(levelname)s: "
|
||||
@ -126,7 +126,7 @@ if win():
|
||||
pass # ok
|
||||
elif not os.path.isdir(HOME_DIR):
|
||||
os.makedirs(HOME_DIR)
|
||||
sys.stdout = sys.stderr = open(logfile, "w", encoding='utf-8')
|
||||
sys.stdout = sys.stderr = open(logfile, "w")
|
||||
stderrh = logging.StreamHandler(sys.stderr)
|
||||
stderrh.setFormatter(form)
|
||||
stderrh.setLevel(logging.DEBUG)
|
||||
@ -167,10 +167,10 @@ from .gen.mime import mime_type_is_defined
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
|
||||
MIN_PYTHON_VERSION = (3, 5, 0, '', 0)
|
||||
MIN_PYTHON_VERSION = (3, 3, 0, '', 0)
|
||||
if not sys.version_info >= MIN_PYTHON_VERSION:
|
||||
logging.warning(_("Your Python version does not meet the "
|
||||
"requirements. At least Python %(v1)d.%(v2)d.%(v3)d is needed to"
|
||||
"requirements. At least python %(v1)d.%(v2)d.%(v3)d is needed to"
|
||||
" start Gramps.\n\n"
|
||||
"Gramps will terminate now.") % {
|
||||
'v1': MIN_PYTHON_VERSION[0],
|
||||
@ -397,7 +397,7 @@ def show_settings():
|
||||
for folder in sys.path:
|
||||
print(" ", folder)
|
||||
print('')
|
||||
print("Non-Python dependencies:")
|
||||
print("Non-python dependencies:")
|
||||
print("------------------------")
|
||||
print(' Graphviz : %s' % dotversion_str)
|
||||
print(' Ghostscr. : %s' % gsversion_str)
|
||||
@ -428,15 +428,15 @@ def run():
|
||||
error += [(_("Configuration error:"), str(msg))]
|
||||
return error
|
||||
except msg:
|
||||
LOG.error("Could not read configuration.", exc_info=True)
|
||||
return [(_("Could not read configuration"), str(msg))]
|
||||
LOG.error("Error reading configuration.", exc_info=True)
|
||||
return [(_("Error reading configuration"), str(msg))]
|
||||
|
||||
if not mime_type_is_defined(APP_GRAMPS):
|
||||
error += [(_("Configuration error:"),
|
||||
_("A definition for the media type %s could not "
|
||||
_("A definition for the MIME-type %s could not "
|
||||
"be found \n\n Possibly the installation of Gramps "
|
||||
"was incomplete. Make sure something to handle the "
|
||||
"media types of Gramps is installed.")
|
||||
"was incomplete. Make sure the MIME-types "
|
||||
"of Gramps are properly installed.")
|
||||
% APP_GRAMPS)]
|
||||
|
||||
# we start with parsing the arguments to determine if we have a cli or a
|
||||
@ -480,10 +480,10 @@ def run():
|
||||
LOG.debug('environment: LANGUAGE is not defined')
|
||||
|
||||
if argpars.need_gui():
|
||||
LOG.debug("A GUI is needed. Set one up.")
|
||||
LOG.debug("A GUI is needed, set it up")
|
||||
try:
|
||||
from .gui.grampsgui import startgramps
|
||||
# no DISPLAY is a RuntimeError in an older pygtk (e.g. 2.17 in Fedora 14)
|
||||
# no DISPLAY is a RuntimeError in an older pygtk (e.g. F14's 2.17)
|
||||
except RuntimeError as msg:
|
||||
error += [(_("Configuration error:"), str(msg))]
|
||||
return error
|
||||
|
||||
@ -116,7 +116,7 @@ class GrampsAboutDialog(Gtk.AboutDialog):
|
||||
if len(contributors) > 0:
|
||||
self.add_credit_section(_('Contributions by'), contributors)
|
||||
|
||||
# Translators: Translate this to your name in your native language
|
||||
# TRANSLATORS: Translate this to your name in your native language
|
||||
self.set_translator_credits(_("translator-credits"))
|
||||
|
||||
self.set_documenters(DOCUMENTERS)
|
||||
|
||||
@ -67,7 +67,7 @@ _ = glocale.translation.sgettext
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
WIKI_HELP_PAGE = '%s_-_Navigation' % URL_MANUAL_PAGE
|
||||
WIKI_HELP_SEC = _('Using_the_Clipboard', 'manual')
|
||||
WIKI_HELP_SEC = _('manual|Using_the_Clipboard')
|
||||
clipdb = None # current db to avoid different transient dbs during db change
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
@ -480,7 +480,7 @@ class ClipCitation(ClipHandleWrapper):
|
||||
if note.get_type() == NoteType.SOURCE_TEXT]
|
||||
page = citation.get_page()
|
||||
if not page:
|
||||
page = _('NA', 'not available')
|
||||
page = _('not available|NA')
|
||||
text = ""
|
||||
if srctxtlist:
|
||||
text = " ".join(srctxtlist[0].get().split())
|
||||
@ -1490,7 +1490,7 @@ class MultiTreeView(Gtk.TreeView):
|
||||
if obj2class(objclass):
|
||||
if self.dbstate.db.method('has_%s_handle', objclass)(handle):
|
||||
menu_item = Gtk.MenuItem(
|
||||
label=_("See %s details", "the object") %
|
||||
label=_("the object|See %s details") %
|
||||
glocale.trans_objclass(objclass))
|
||||
menu_item.connect(
|
||||
"activate",
|
||||
@ -1499,7 +1499,7 @@ class MultiTreeView(Gtk.TreeView):
|
||||
menu_item.show()
|
||||
# ---------------------------
|
||||
menu_item = Gtk.MenuItem(
|
||||
label=_("Make %s active", "the object") %
|
||||
label=_("the object|Make %s active") %
|
||||
glocale.trans_objclass(objclass))
|
||||
menu_item.connect(
|
||||
"activate", lambda widget:
|
||||
@ -1521,8 +1521,8 @@ class MultiTreeView(Gtk.TreeView):
|
||||
gids.add(obj.gramps_id)
|
||||
if gids:
|
||||
menu_item = Gtk.MenuItem(
|
||||
label=_("Create Filter from %s selected...",
|
||||
"the object") %
|
||||
label=_("the object|Create Filter from %s "
|
||||
"selected...") %
|
||||
glocale.trans_objclass(objclass))
|
||||
menu_item.connect("activate", lambda widget: make_filter(
|
||||
self.dbstate, self.uistate,
|
||||
|
||||
@ -410,7 +410,7 @@ class ConfigureDialog(ManagedWindow):
|
||||
if not callback:
|
||||
callback = self.update_entry
|
||||
if label:
|
||||
lwidget = BasicLabel(_("%s: ") % label) # Translators: for French
|
||||
lwidget = BasicLabel(_("%s: ") % label) # translators: for French
|
||||
entry = Gtk.Entry()
|
||||
if localized_config:
|
||||
entry.set_text(config.get(constant))
|
||||
@ -845,19 +845,19 @@ class GrampsPreferences(ConfigureDialog):
|
||||
_("Common")),
|
||||
"%s, %s %s (%s)" % (_("Surname"), _("Given"), _("Suffix"),
|
||||
_("Nickname")),
|
||||
"%s, %s %s (%s)" % (_("Surname"), _("Common", "Name"), _("Suffix"),
|
||||
"%s, %s %s (%s)" % (_("Surname"), _("Name|Common"), _("Suffix"),
|
||||
_("Nickname")),
|
||||
"%s, %s %s" % (_("Surname"), _("Common", "Name"), _("Suffix")),
|
||||
"%s, %s %s" % (_("Surname"), _("Name|Common"), _("Suffix")),
|
||||
"%s, %s %s (%s)" % (_("SURNAME"), _("Given"), _("Suffix"),
|
||||
_("Call")),
|
||||
"%s, %s (%s)" % (_("Surname"), _("Given"), _("Common", "Name")),
|
||||
"%s, %s (%s)" % (_("Surname"), _("Common", "Name"), _("Nickname")),
|
||||
"%s, %s (%s)" % (_("Surname"), _("Given"), _("Name|Common")),
|
||||
"%s, %s (%s)" % (_("Surname"), _("Name|Common"), _("Nickname")),
|
||||
"%s %s" % (_("Given"), _("Surname")),
|
||||
"%s %s, %s" % (_("Given"), _("Surname"), _("Suffix")),
|
||||
"%s %s %s" % (_("Given"), _("NotPatronymic"), _("Patronymic")),
|
||||
"%s, %s %s (%s)" % (_("SURNAME"), _("Given"), _("Suffix"),
|
||||
_("Common")),
|
||||
"%s, %s (%s)" % (_("SURNAME"), _("Given"), _("Common", "Name")),
|
||||
"%s, %s (%s)" % (_("SURNAME"), _("Given"), _("Name|Common")),
|
||||
"%s, %s (%s)" % (_("SURNAME"), _("Given"), _("Nickname")),
|
||||
"%s %s" % (_("Given"), _("SURNAME")),
|
||||
"%s %s, %s" % (_("Given"), _("SURNAME"), _("Suffix")),
|
||||
@ -1241,7 +1241,7 @@ class GrampsPreferences(ConfigureDialog):
|
||||
row, 'preferences.place-auto', start=0, stop=1,
|
||||
extra_callback=self.auto_title_changed,
|
||||
tooltip=_("Enables automatic place title generation "
|
||||
"using specified format."))
|
||||
"using specifed format."))
|
||||
self.auto_title_changed(cb_widget)
|
||||
hbox.pack_start(self.pformat, True, True, 0)
|
||||
hbox.pack_start(self.fmt_btn, False, False, 0)
|
||||
@ -1573,7 +1573,7 @@ class GrampsPreferences(ConfigureDialog):
|
||||
self.add_checkbox(grid, _('Add tag on import'), current_line,
|
||||
cb_const, stop=2,
|
||||
extra_callback=self.toggle_tag_on_import,
|
||||
tooltip=_("Specified tag will be added on import.\n"
|
||||
tooltip=_("Specifed tag will be added on import.\n"
|
||||
"Clear to set default value."))
|
||||
grid.attach(self.tag_format_entry, 2, current_line, 1, 1)
|
||||
|
||||
@ -1779,9 +1779,7 @@ class GrampsPreferences(ConfigureDialog):
|
||||
formats = [_("Never"),
|
||||
_("Every 15 minutes"),
|
||||
_("Every 30 minutes"),
|
||||
_("Every hour"),
|
||||
_("Every 12 hours"),
|
||||
_("Every day")]
|
||||
_("Every hour")]
|
||||
list(map(obox.append_text, formats))
|
||||
active = config.get('database.autobackup')
|
||||
obox.set_active(active)
|
||||
@ -1811,8 +1809,6 @@ class GrampsPreferences(ConfigureDialog):
|
||||
for plugin in sorted(backend_plugins, key=lambda plugin: plugin.name):
|
||||
if plugin.id == default:
|
||||
active = count
|
||||
if plugin.id == 'bsddb':
|
||||
continue # bsddb is deprecated, so don't allow setting
|
||||
model.append(row=[count, plugin.name, plugin.id])
|
||||
count += 1
|
||||
obox.set_model(model)
|
||||
|
||||
@ -54,14 +54,18 @@ from gi.repository import GObject
|
||||
from gramps.gen.const import GRAMPS_LOCALE as glocale
|
||||
from gramps.gen.db.dbconst import DBBACKEND
|
||||
from gramps.gen.db.utils import make_database
|
||||
from gramps.gen.db.upgrade import make_zip_backup
|
||||
_ = glocale.translation.gettext
|
||||
from gramps.cli.grampscli import CLIDbLoader
|
||||
from gramps.gen.config import config
|
||||
from gramps.gen.db.exceptions import (DbUpgradeRequiredError,
|
||||
BsddbDowngradeError,
|
||||
DbVersionError,
|
||||
DbPythonError,
|
||||
DbSupportedError,
|
||||
DbEnvironmentError,
|
||||
BsddbUpgradeRequiredError,
|
||||
BsddbDowngradeRequiredError,
|
||||
PythonUpgradeRequiredError,
|
||||
PythonDowngradeError,
|
||||
DbConnectionError)
|
||||
from .pluginmanager import GuiPluginManager
|
||||
from .dialog import (DBErrorDialog, ErrorDialog, QuestionDialog2,
|
||||
@ -159,70 +163,130 @@ class DbLoader(CLIDbLoader):
|
||||
if not os.access(filename, os.W_OK):
|
||||
mode = "r"
|
||||
self._warn(_('Read only database'),
|
||||
_('You do not have write access '
|
||||
'to the selected file.'))
|
||||
_('You do not have write access '
|
||||
'to the selected file.'))
|
||||
else:
|
||||
mode = "w"
|
||||
else:
|
||||
mode = 'w'
|
||||
|
||||
dbid_path = os.path.join(filename, DBBACKEND)
|
||||
if os.path.isfile(dbid_path):
|
||||
with open(dbid_path) as fp:
|
||||
dbid = fp.read().strip()
|
||||
else:
|
||||
dbid = "bsddb"
|
||||
|
||||
db = make_database(dbid)
|
||||
db.disable_signals()
|
||||
self.dbstate.no_database()
|
||||
|
||||
self.uistate.progress.show()
|
||||
self.uistate.pulse_progressbar(0)
|
||||
if db.requires_login() and username is None:
|
||||
login = GrampsLoginDialog(self.uistate)
|
||||
credentials = login.run()
|
||||
if credentials is None:
|
||||
return
|
||||
username, password = credentials
|
||||
|
||||
self._begin_progress()
|
||||
|
||||
force_schema_upgrade = False
|
||||
force_bsddb_upgrade = False
|
||||
force_bsddb_downgrade = False
|
||||
force_python_upgrade = False
|
||||
try:
|
||||
while True:
|
||||
dbid_path = os.path.join(filename, DBBACKEND)
|
||||
if os.path.isfile(dbid_path):
|
||||
with open(dbid_path) as fp:
|
||||
dbid = fp.read().strip()
|
||||
else:
|
||||
dbid = "bsddb"
|
||||
|
||||
db = make_database(dbid)
|
||||
db.disable_signals()
|
||||
if db.requires_login() and username is None:
|
||||
login = GrampsLoginDialog(self.uistate)
|
||||
credentials = login.run()
|
||||
if credentials is None:
|
||||
return
|
||||
username, password = credentials
|
||||
|
||||
try:
|
||||
db.load(filename, self.uistate.pulse_progressbar,
|
||||
db.load(filename, self._pulse_progress,
|
||||
mode, force_schema_upgrade,
|
||||
force_bsddb_upgrade,
|
||||
force_bsddb_downgrade,
|
||||
force_python_upgrade,
|
||||
username=username,
|
||||
password=password)
|
||||
if self.dbstate.is_open():
|
||||
self.dbstate.db.close(
|
||||
user=User(callback=self.uistate.pulse_progressbar,
|
||||
user=User(callback=self._pulse_progress,
|
||||
uistate=self.uistate,
|
||||
dbstate=self.dbstate))
|
||||
self.dbstate.change_database(db)
|
||||
break
|
||||
except (DbSupportedError, DbUpgradeRequiredError) as msg:
|
||||
if(force_schema_upgrade or
|
||||
QuestionDialog2(_("Are you sure you want "
|
||||
except DbUpgradeRequiredError as msg:
|
||||
if QuestionDialog2(_("Are you sure you want "
|
||||
"to upgrade this Family Tree?"),
|
||||
str(msg),
|
||||
_("I have made a backup,\n"
|
||||
"please upgrade my Family Tree"),
|
||||
_("Cancel"),
|
||||
parent=self.uistate.window).run()):
|
||||
parent=self.uistate.window).run():
|
||||
force_schema_upgrade = True
|
||||
make_zip_backup(filename)
|
||||
force_bsddb_upgrade = False
|
||||
force_bsddb_downgrade = False
|
||||
force_python_upgrade = False
|
||||
else:
|
||||
self.dbstate.no_database()
|
||||
break
|
||||
except BsddbUpgradeRequiredError as msg:
|
||||
if QuestionDialog2(_("Are you sure you want "
|
||||
"to upgrade this Family Tree?"),
|
||||
str(msg),
|
||||
_("I have made a backup,\n"
|
||||
"please upgrade my Family Tree"),
|
||||
_("Cancel"),
|
||||
parent=self.uistate.window).run():
|
||||
force_schema_upgrade = False
|
||||
force_bsddb_upgrade = True
|
||||
force_bsddb_downgrade = False
|
||||
force_python_upgrade = False
|
||||
else:
|
||||
self.dbstate.no_database()
|
||||
break
|
||||
except BsddbDowngradeRequiredError as msg:
|
||||
if QuestionDialog2(_("Are you sure you want "
|
||||
"to downgrade this Family Tree?"),
|
||||
str(msg),
|
||||
_("I have made a backup,\n"
|
||||
"please downgrade my Family Tree"),
|
||||
_("Cancel"),
|
||||
parent=self.uistate.window).run():
|
||||
force_schema_upgrade = False
|
||||
force_bsddb_upgrade = False
|
||||
force_bsddb_downgrade = True
|
||||
force_python_upgrade = False
|
||||
else:
|
||||
self.dbstate.no_database()
|
||||
break
|
||||
except PythonUpgradeRequiredError as msg:
|
||||
if QuestionDialog2(_("Are you sure you want "
|
||||
"to upgrade this Family Tree?"),
|
||||
str(msg),
|
||||
_("I have made a backup,\n"
|
||||
"please upgrade my Family Tree"),
|
||||
_("Cancel"),
|
||||
parent=self.uistate.window).run():
|
||||
force_schema_upgrade = False
|
||||
force_bsddb_upgrade = False
|
||||
force_bsddb_downgrade = False
|
||||
force_python_upgrade = True
|
||||
else:
|
||||
self.dbstate.no_database()
|
||||
break
|
||||
# Get here is there is an exception the while loop does not handle
|
||||
except BsddbDowngradeError as msg:
|
||||
self.dbstate.no_database()
|
||||
self._warn( _("Cannot open database"), str(msg))
|
||||
except DbVersionError as msg:
|
||||
self.dbstate.no_database()
|
||||
self._errordialog( _("Cannot open database"), str(msg))
|
||||
except DbPythonError as msg:
|
||||
self.dbstate.no_database()
|
||||
self._errordialog( _("Cannot open database"), str(msg))
|
||||
except DbEnvironmentError as msg:
|
||||
self.dbstate.no_database()
|
||||
self._errordialog( _("Cannot open database"), str(msg))
|
||||
except PythonDowngradeError as msg:
|
||||
self.dbstate.no_database()
|
||||
self._warn( _("Cannot open database"), str(msg))
|
||||
except DbConnectionError as msg:
|
||||
self.dbstate.no_database()
|
||||
self._warn(_("Cannot open database"), str(msg))
|
||||
@ -236,8 +300,7 @@ class DbLoader(CLIDbLoader):
|
||||
except Exception as newerror:
|
||||
self.dbstate.no_database()
|
||||
self._dberrordialog(str(newerror))
|
||||
|
||||
self.uistate.progress.hide()
|
||||
self._end_progress()
|
||||
return True
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
@ -254,13 +317,6 @@ def add_all_files_filter(chooser):
|
||||
mime_filter.add_pattern('*')
|
||||
chooser.add_filter(mime_filter)
|
||||
|
||||
|
||||
def icase(ext):
|
||||
"""
|
||||
Return a glob reresenting a case insensitive file extension.
|
||||
"""
|
||||
return ''.join(['[{}{}]'.format(s.lower(), s.upper()) for s in ext])
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Format selectors: explictly set the format of the file
|
||||
@ -390,7 +446,8 @@ class GrampsImportFileDialog(ManagedWindow):
|
||||
file_filter = Gtk.FileFilter()
|
||||
name = "%s (.%s)" % (plugin.get_name(), plugin.get_extension())
|
||||
file_filter.set_name(name)
|
||||
file_filter.add_pattern("*.%s" % icase(plugin.get_extension()))
|
||||
file_filter.add_pattern("*.%s" % plugin.get_extension())
|
||||
file_filter.add_pattern(plugin.get_extension().capitalize())
|
||||
import_dialog.add_filter(file_filter)
|
||||
|
||||
(box, type_selector) = format_maker()
|
||||
@ -469,7 +526,7 @@ class GrampsImportFileDialog(ManagedWindow):
|
||||
return True
|
||||
else:
|
||||
try:
|
||||
f = open(filename,'w')
|
||||
f = file(filename,'w')
|
||||
f.close()
|
||||
os.remove(filename)
|
||||
except IOError:
|
||||
|
||||
@ -367,7 +367,7 @@ class DbManager(CLIDbManager, ManagedWindow):
|
||||
dbid = config.get('database.backend')
|
||||
backend_type = self.get_backend_name_from_dbid(dbid)
|
||||
if backend_type == UNAVAILABLE:
|
||||
dbid = 'sqlite'
|
||||
dbid = 'bsddb'
|
||||
config.set('database.backend', dbid)
|
||||
backend_type = self.get_backend_name_from_dbid(dbid)
|
||||
self.new_btn.set_tooltip_text(backend_type)
|
||||
@ -938,7 +938,7 @@ class DbManager(CLIDbManager, ManagedWindow):
|
||||
fname = os.path.join(dirname, filename)
|
||||
os.unlink(fname)
|
||||
|
||||
dbase = make_database("sqlite")
|
||||
dbase = make_database("bsddb")
|
||||
dbase.load(dirname, None)
|
||||
|
||||
self.__start_cursor(_("Rebuilding database from backup files"))
|
||||
|
||||
@ -294,7 +294,7 @@ class DBErrorDialog(ErrorDialog):
|
||||
self,
|
||||
_("Low level database corruption detected"),
|
||||
_("Gramps has detected a problem in the underlying "
|
||||
"database. This can sometimes be repaired from "
|
||||
"Berkeley database. This can be repaired from "
|
||||
"the Family Tree Manager. Select the database and "
|
||||
'click on the Repair button') + '\n\n' + msg, parent)
|
||||
|
||||
@ -440,7 +440,7 @@ class MissingMediaDialog:
|
||||
class MultiSelectDialog:
|
||||
def __init__(self, msg1_func, msg2_func, items, lookup,
|
||||
cancel_func=None, no_func=None, yes_func=None,
|
||||
multi_yes_func=None, parent=None):
|
||||
parent=None):
|
||||
"""
|
||||
"""
|
||||
self.xml = Glade(toplevel='multiselectdialog')
|
||||
@ -489,10 +489,6 @@ class MultiSelectDialog:
|
||||
response = self.top.run()
|
||||
|
||||
if check_button.get_active():
|
||||
# run the multiple yes if 'do remainder' is checked
|
||||
if multi_yes_func and response == 3:
|
||||
multi_yes_func(items)
|
||||
break
|
||||
default_action = response
|
||||
else:
|
||||
response = default_action
|
||||
|
||||
@ -75,4 +75,9 @@ def display_url(link, uistate=None):
|
||||
"""
|
||||
Open the specified URL in a browser.
|
||||
"""
|
||||
webbrowser.open_new_tab(link)
|
||||
if (mac() and sys.version_info.major == 3 and sys.version_info.minor < 5):
|
||||
import subprocess
|
||||
proc = subprocess.call(['/usr/bin/open', link],
|
||||
stderr=subprocess.STDOUT)
|
||||
else:
|
||||
webbrowser.open_new_tab(link)
|
||||
|
||||
@ -64,12 +64,9 @@ from .managedwindow import GrampsWindowManager
|
||||
from gramps.gen.relationship import get_relationship_calculator
|
||||
from .glade import Glade
|
||||
from gramps.gen.utils.db import navigation_label
|
||||
from gramps.gen.errors import HandleError
|
||||
from .widgets.progressdialog import ProgressMonitor, GtkProgressDialog
|
||||
from .dialog import ErrorDialog, WarningDialog
|
||||
from .dialog import ErrorDialog
|
||||
from .uimanager import ActionGroup
|
||||
from ..version import VERSION_QUALIFIER, DEV_VERSION
|
||||
from gramps.gen.const import VERSION
|
||||
|
||||
DISABLED = -1
|
||||
|
||||
@ -423,7 +420,6 @@ class DisplayState(Callback):
|
||||
self.status = status
|
||||
self.status_id = status.get_context_id('GRAMPS')
|
||||
self.progress = status.get_progress_bar()
|
||||
self.status_ver = status.get_version_btn()
|
||||
self.history_lookup = {}
|
||||
self.gwm = GrampsWindowManager(uimanager)
|
||||
self.widget = None
|
||||
@ -447,16 +443,6 @@ class DisplayState(Callback):
|
||||
# but this connection is still made!
|
||||
# self.dbstate.connect('database-changed', self.db_changed)
|
||||
|
||||
if DEV_VERSION or VERSION_QUALIFIER:
|
||||
ver_btn = status.get_version_btn()
|
||||
ver_btn.set_label(VERSION)
|
||||
if DEV_VERSION:
|
||||
msg = 'master'
|
||||
else:
|
||||
msg = VERSION_QUALIFIER[1:]
|
||||
ver_btn.connect('clicked', self.__develop_warn, msg)
|
||||
ver_btn.show()
|
||||
|
||||
def set_backup_timer(self):
|
||||
"""
|
||||
Set the backup timer.
|
||||
@ -471,10 +457,6 @@ class DisplayState(Callback):
|
||||
minutes = 30
|
||||
elif interval == 3:
|
||||
minutes = 60
|
||||
elif interval == 4:
|
||||
minutes = 720
|
||||
elif interval == 5:
|
||||
minutes = 1440
|
||||
if interval > 0:
|
||||
self.backup_timer = GLib.timeout_add_seconds(
|
||||
minutes*60, self.__emit_autobackup)
|
||||
@ -641,44 +623,32 @@ class DisplayState(Callback):
|
||||
self.status.clear_filter()
|
||||
|
||||
def modify_statusbar(self, dbstate, active=None):
|
||||
""" Update the status bar with current object info.
|
||||
|
||||
Since this is called via GLib.timeout_add it can happen at any time
|
||||
Gtk is idle or processing pending events. Even in the midst of a
|
||||
multiple delete, before the GUI has been updated for missing objects.
|
||||
So it is susceptible to HandleErrors for missing data, thus the 'try'.
|
||||
"""
|
||||
try:
|
||||
view = self.viewmanager.active_page
|
||||
if not isinstance(view, NavigationView) or dbstate is None:
|
||||
return
|
||||
|
||||
nav_type = view.navigation_type()
|
||||
active_handle = self.get_active(nav_type, view.navigation_group())
|
||||
|
||||
self.status.pop(self.status_id)
|
||||
|
||||
if active_handle and dbstate.is_open():
|
||||
name, _obj = navigation_label(dbstate.db, nav_type,
|
||||
active_handle)
|
||||
# Append relationship to default person if enabled.
|
||||
if(nav_type == 'Person' and
|
||||
config.get('interface.statusbar') > 1):
|
||||
if active_handle != dbstate.db.get_default_handle():
|
||||
msg = self.display_relationship(dbstate, active_handle)
|
||||
if msg:
|
||||
name = '%s (%s)' % (name, msg.strip())
|
||||
else:
|
||||
name = _('No active object')
|
||||
|
||||
if not name:
|
||||
name = self.NAV2MES[nav_type]
|
||||
|
||||
self.status.push(self.status_id, name)
|
||||
process_pending_events()
|
||||
except HandleError:
|
||||
view = self.viewmanager.active_page
|
||||
if not isinstance(view, NavigationView) or dbstate is None:
|
||||
return
|
||||
|
||||
nav_type = view.navigation_type()
|
||||
active_handle = self.get_active(nav_type, view.navigation_group())
|
||||
|
||||
self.status.pop(self.status_id)
|
||||
|
||||
if active_handle and dbstate.is_open():
|
||||
name, obj = navigation_label(dbstate.db, nav_type, active_handle)
|
||||
# Append relationship to default person if funtionality is enabled.
|
||||
if nav_type == 'Person' and config.get('interface.statusbar') > 1:
|
||||
if active_handle != dbstate.db.get_default_handle():
|
||||
msg = self.display_relationship(dbstate, active_handle)
|
||||
if msg:
|
||||
name = '%s (%s)' % (name, msg.strip())
|
||||
else:
|
||||
name = _('No active object')
|
||||
|
||||
if not name:
|
||||
name = self.NAV2MES[nav_type]
|
||||
|
||||
self.status.push(self.status_id, name)
|
||||
process_pending_events()
|
||||
|
||||
def pulse_progressbar(self, value, text=None):
|
||||
self.progress.set_fraction(min(value/100.0, 1.0))
|
||||
if text:
|
||||
@ -695,34 +665,3 @@ class DisplayState(Callback):
|
||||
def reload_symbols(self):
|
||||
self.symbols = config.get('utf8.in-use')
|
||||
self.death_symbol = config.get('utf8.death-symbol')
|
||||
|
||||
def __develop_warn(self, button, warning_type):
|
||||
"""
|
||||
Display a development warning message to the user, with the
|
||||
warning_type in it.
|
||||
|
||||
:param warning_type: the general name of the warning, e.g. "master"
|
||||
:type warning_type: str
|
||||
"""
|
||||
WarningDialog(
|
||||
_('Danger: This is unstable code!'),
|
||||
_("This Gramps ('%s') is a development release.\n"
|
||||
) % warning_type +
|
||||
_("This version is not meant for normal usage. Use "
|
||||
"at your own risk.\n"
|
||||
"\n"
|
||||
"This version may:\n"
|
||||
"1) Work differently than you expect.\n"
|
||||
"2) Fail to run at all.\n"
|
||||
"3) Crash often.\n"
|
||||
"4) Corrupt your data.\n"
|
||||
"5) Save data in a format that is incompatible with the "
|
||||
"official release.\n"
|
||||
"\n"
|
||||
"%(bold_start)sBACKUP%(bold_end)s "
|
||||
"your existing databases before opening "
|
||||
"them with this version, and make sure to export your "
|
||||
"data to XML every now and then."
|
||||
) % {'bold_start' : '<b>',
|
||||
'bold_end' : '</b>'},
|
||||
parent=self.window)
|
||||
|
||||
@ -67,7 +67,7 @@ from gramps.gen.const import URL_MANUAL_SECT2
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
WIKI_HELP_PAGE = URL_MANUAL_SECT2
|
||||
WIKI_HELP_SEC = _('Select_a_media_selector', 'manual')
|
||||
WIKI_HELP_SEC = _('manual|Select_a_media_selector')
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
|
||||
@ -25,13 +25,14 @@
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
import logging
|
||||
LOG = logging.getLogger(".citation")
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# GTK/Gnome modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
from gi.repository import GLib
|
||||
from gi.repository import GObject, GLib
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@ -39,6 +40,7 @@ from gi.repository import GLib
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
from gramps.gen.const import GRAMPS_LOCALE as glocale
|
||||
_ = glocale.translation.gettext
|
||||
from gramps.gen.errors import WindowActiveError
|
||||
from gramps.gen.lib import Citation, Source
|
||||
from ...dbguielement import DbGUIElement
|
||||
@ -47,8 +49,6 @@ from .citationrefmodel import CitationRefModel
|
||||
from .embeddedlist import EmbeddedList, TEXT_COL, MARKUP_COL, ICON_COL
|
||||
from ...ddtargets import DdTargets
|
||||
|
||||
LOG = logging.getLogger(".citation")
|
||||
_ = glocale.translation.gettext
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# CitationEmbedList
|
||||
@ -61,7 +61,7 @@ class CitationEmbedList(EmbeddedList, DbGUIElement):
|
||||
Derives from the EmbeddedList class.
|
||||
"""
|
||||
|
||||
_HANDLE_COL = 9 # Column number from CitationRefModel
|
||||
_HANDLE_COL = 5 # Column number from CitationRefModel
|
||||
_DND_TYPE = DdTargets.CITATION_LINK
|
||||
_DND_EXTRA = DdTargets.SOURCE_LINK
|
||||
|
||||
@ -77,15 +77,11 @@ class CitationEmbedList(EmbeddedList, DbGUIElement):
|
||||
#index = column in model. Value =
|
||||
# (name, sortcol in model, width, markup/text, weigth_col
|
||||
_column_names = [
|
||||
(_('Title'), 0, 350, TEXT_COL, -1, None),
|
||||
(_('Author'), 1, 200, TEXT_COL, -1, None),
|
||||
(_('Date'), 8, 180, MARKUP_COL, -1, None),
|
||||
(_('Publisher'), 3, 200, TEXT_COL, -1, None),
|
||||
(_('Confidence Level'), 4, 120, TEXT_COL, -1, None),
|
||||
(_('Page'), 5, 100, TEXT_COL, -1, None),
|
||||
(_('ID'), 6, 80, TEXT_COL, -1, None),
|
||||
(_('Private'), 7, 30, ICON_COL, -1, 'gramps-lock'),
|
||||
(_('Sorted date'), 8, 80, TEXT_COL, -1, None)
|
||||
(_('Title'), 0, 200, TEXT_COL, -1, None),
|
||||
(_('Author'), 1, 125, TEXT_COL, -1, None),
|
||||
(_('Page'), 2, 100, TEXT_COL, -1, None),
|
||||
(_('ID'), 3, 75, TEXT_COL, -1, None),
|
||||
(_('Private'), 4, 30, ICON_COL, -1, 'gramps-lock')
|
||||
]
|
||||
|
||||
def __init__(self, dbstate, uistate, track, data, callertitle=None):
|
||||
@ -104,9 +100,9 @@ class CitationEmbedList(EmbeddedList, DbGUIElement):
|
||||
#citation: citation-rebuild closes the editors, so no need to connect
|
||||
# to it
|
||||
self.callman.register_callbacks(
|
||||
{'citation-delete': self.citation_delete,
|
||||
'citation-update': self.citation_update,
|
||||
})
|
||||
{'citation-delete': self.citation_delete,
|
||||
'citation-update': self.citation_update,
|
||||
})
|
||||
self.callman.connect_all(keys=['citation'])
|
||||
|
||||
def get_icon_name(self):
|
||||
@ -125,7 +121,7 @@ class CitationEmbedList(EmbeddedList, DbGUIElement):
|
||||
"""
|
||||
Return the column order of the columns in the display tab.
|
||||
"""
|
||||
return ((1, 0), (1, 1), (1, 5), (1, 2), (1, 3), (1, 6), (1, 4), (1, 7))
|
||||
return ((1, 4), (1, 0), (1, 1), (1, 2), (1, 3))
|
||||
|
||||
def add_button_clicked(self, obj):
|
||||
"""
|
||||
@ -159,15 +155,15 @@ class CitationEmbedList(EmbeddedList, DbGUIElement):
|
||||
SelectCitation = SelectorFactory('Citation')
|
||||
|
||||
sel = SelectCitation(self.dbstate, self.uistate, self.track)
|
||||
objct = sel.run()
|
||||
LOG.debug("selected object: %s" % objct)
|
||||
object = sel.run()
|
||||
LOG.debug("selected object: %s" % object)
|
||||
# the object returned should either be a Source or a Citation
|
||||
if objct:
|
||||
if isinstance(objct, Source):
|
||||
if object:
|
||||
if isinstance(object, Source):
|
||||
try:
|
||||
from .. import EditCitation
|
||||
EditCitation(self.dbstate, self.uistate, self.track,
|
||||
Citation(), objct,
|
||||
Citation(), object,
|
||||
callback=self.add_callback,
|
||||
callertitle=self.callertitle)
|
||||
except WindowActiveError:
|
||||
@ -175,11 +171,11 @@ class CitationEmbedList(EmbeddedList, DbGUIElement):
|
||||
WarningDialog(_("Cannot share this reference"),
|
||||
self.__blocked_text(),
|
||||
parent=self.uistate.window)
|
||||
elif isinstance(objct, Citation):
|
||||
elif isinstance(object, Citation):
|
||||
try:
|
||||
from .. import EditCitation
|
||||
EditCitation(self.dbstate, self.uistate, self.track,
|
||||
objct, callback=self.add_callback,
|
||||
object, callback=self.add_callback,
|
||||
callertitle=self.callertitle)
|
||||
except WindowActiveError:
|
||||
from ...dialog import WarningDialog
|
||||
@ -194,10 +190,10 @@ class CitationEmbedList(EmbeddedList, DbGUIElement):
|
||||
Return the common text used when citation cannot be edited
|
||||
"""
|
||||
return _("This citation cannot be created at this time. "
|
||||
"Either the associated Source object is already being "
|
||||
"edited, or another citation associated with the same "
|
||||
"source is being edited.\n\nTo edit this "
|
||||
"citation, you need to close the object.")
|
||||
"Either the associated Source object is already being "
|
||||
"edited, or another citation associated with the same "
|
||||
"source is being edited.\n\nTo edit this "
|
||||
"citation, you need to close the object.")
|
||||
|
||||
def edit_button_clicked(self, obj):
|
||||
"""
|
||||
@ -214,7 +210,7 @@ class CitationEmbedList(EmbeddedList, DbGUIElement):
|
||||
try:
|
||||
from .. import EditCitation
|
||||
EditCitation(self.dbstate, self.uistate, self.track, citation,
|
||||
callertitle=self.callertitle)
|
||||
callertitle = self.callertitle)
|
||||
except WindowActiveError:
|
||||
pass
|
||||
|
||||
@ -226,7 +222,7 @@ class CitationEmbedList(EmbeddedList, DbGUIElement):
|
||||
so this method need not do this
|
||||
"""
|
||||
rebuild = False
|
||||
for handle in del_citation_handle_list:
|
||||
for handle in del_citation_handle_list :
|
||||
while self.data.count(handle) > 0:
|
||||
self.data.remove(handle)
|
||||
rebuild = True
|
||||
@ -238,7 +234,7 @@ class CitationEmbedList(EmbeddedList, DbGUIElement):
|
||||
Outside of this tab citation objects have been updated. Check if tab
|
||||
and object must be updated.
|
||||
"""
|
||||
for handle in upd_citation_handle_list:
|
||||
for handle in upd_citation_handle_list :
|
||||
if handle in self.data:
|
||||
self.rebuild()
|
||||
break
|
||||
@ -248,12 +244,12 @@ class CitationEmbedList(EmbeddedList, DbGUIElement):
|
||||
A CITATION_LINK has been dragged
|
||||
"""
|
||||
if handle:
|
||||
objct = self.dbstate.db.get_citation_from_handle(handle)
|
||||
if isinstance(objct, Citation):
|
||||
object = self.dbstate.db.get_citation_from_handle(handle)
|
||||
if isinstance(object, Citation):
|
||||
try:
|
||||
from .. import EditCitation
|
||||
EditCitation(self.dbstate, self.uistate, self.track,
|
||||
objct, callback=self.add_callback,
|
||||
object, callback=self.add_callback,
|
||||
callertitle=self.callertitle)
|
||||
except WindowActiveError:
|
||||
from ...dialog import WarningDialog
|
||||
@ -268,12 +264,12 @@ class CitationEmbedList(EmbeddedList, DbGUIElement):
|
||||
A SOURCE_LINK object has been dragged
|
||||
"""
|
||||
if handle:
|
||||
objct = self.dbstate.db.get_source_from_handle(handle)
|
||||
if isinstance(objct, Source):
|
||||
object = self.dbstate.db.get_source_from_handle(handle)
|
||||
if isinstance(object, Source):
|
||||
try:
|
||||
from .. import EditCitation
|
||||
EditCitation(self.dbstate, self.uistate, self.track,
|
||||
Citation(), objct,
|
||||
Citation(), object,
|
||||
callback=self.add_callback,
|
||||
callertitle=self.callertitle)
|
||||
except WindowActiveError:
|
||||
|
||||
@ -25,10 +25,6 @@
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
from gi.repository import Gtk
|
||||
from gramps.gen.utils.string import conf_strings
|
||||
from gramps.gen.datehandler import (get_date, get_date_valid)
|
||||
from gramps.gen.const import GRAMPS_LOCALE as glocale
|
||||
_ = glocale.translation.gettext
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@ -38,32 +34,11 @@ _ = glocale.translation.gettext
|
||||
class CitationRefModel(Gtk.ListStore):
|
||||
|
||||
def __init__(self, citation_list, db):
|
||||
Gtk.ListStore.__init__(self, str, str, str, str, str, str, str,
|
||||
bool, str, str)
|
||||
Gtk.ListStore.__init__(self, str, str, str, str, bool, str)
|
||||
self.db = db
|
||||
dbgsfh = self.db.get_source_from_handle
|
||||
for handle in citation_list:
|
||||
citation = self.db.get_citation_from_handle(handle)
|
||||
src = dbgsfh(citation.get_reference_handle())
|
||||
confidence = citation.get_confidence_level()
|
||||
self.append(row=[src.title, src.author,
|
||||
self.column_date(citation),
|
||||
src.get_publication_info(),
|
||||
_(conf_strings[confidence]), citation.page,
|
||||
src = self.db.get_source_from_handle(citation.get_reference_handle())
|
||||
self.append(row=[src.title, src.author, citation.page,
|
||||
citation.gramps_id, citation.get_privacy(),
|
||||
self.column_sort_date(citation),
|
||||
handle, ])
|
||||
|
||||
def column_date(self, citation):
|
||||
retval = get_date(citation)
|
||||
if not get_date_valid(citation):
|
||||
return invalid_date_format % escape(retval)
|
||||
else:
|
||||
return retval
|
||||
|
||||
def column_sort_date(self, citation):
|
||||
date = citation.get_date_object()
|
||||
if date:
|
||||
return "%09d" % date.get_sort_value()
|
||||
else:
|
||||
return ""
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user