Narrative web: Some improvements (#931)

* Narrative web: Some improvements

- Event type, Date and place in bold
- Family events shifted one column on the left
- ancestortree css file before narrative-screen to allow modification
- Adaptation for all themes

Fixes #11393

* Narrative web: forgot a comma during last merge

* Allow scrolling if the ancestor tree is too large

* Translation of alternate stylesheets name

* Crash when using the family map

* Translate only the css title, not the file name

* Some minor corrections to css files

* Narrative web: open layers optimizations

* Narrative web: open layers and link in popup

* Narrative web: some events missing in popup

* Narrative web: Reference date column too large.

Allow the place title to use the maximum of width

* NarrativeWeb: shift children from one column

- adapt the css files to the new table
- some inconsistencies between the source and the css

* Make the drop down menu button size usable

* NarrativeWeb: Incorrect rendering when use of

alternate place name

* NarWeb: removing the unused image heigth option

* Click on image link gives a not found URL.

If the image used in home, introduction or contact page
is not already associated by a filtered object, we have a 404 error

* NarWeb: Index images and thumbnails pages optional

* Narweb: Improper Notes subtitle in web pages

* Narweb: List index truncated after 999

* Narweb: NarrativeWeb usage enhancements

* Narweb: avoid duplicate files in archive.

* Narweb: Add an optional news and updates page:

When you have a big database and you make intensive updates, it's
useful to have a list of the last modified objects.
you can select the period to show and how many records to see per object type.

* Narweb: forgot to add the module updates.py

* Narweb: some minor changes (pylint, img index bug)

* Popups don't work with the last openlayers version

It only needs to move the scripts at the end of the html body.
Use addEventListener instead of onload in the html body statement.

* Narweb: some popup problems

* Narweb: better score for pylint
This commit is contained in:
Serge Noiraud 2019-12-14 11:55:16 +01:00 committed by GitHub
parent 5157700da3
commit fd072528d2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
29 changed files with 1775 additions and 557 deletions

View File

@ -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
----------------------------------------------------- */
@ -235,7 +235,7 @@ div#alphanav ul li a:hover {
}
/* Responsive navigation */
a.navIcon {
button.navIcon {
display: none;
}
@ -282,11 +282,14 @@ div#nav::after {
.nav li {display: none;}
.nav ul {display: none;}
a.navIcon {
font-size:1.3em;
button.navIcon {
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;}
@ -393,18 +396,41 @@ 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
----------------------------------------------------- */
@ -420,6 +446,10 @@ table.IndividualList 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,
@ -440,10 +470,33 @@ table.IndividualList 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
----------------------------------------------------- */
@ -495,6 +548,10 @@ table.eventlist tbody tr td.ColumnSources {
div#SourceDetail {
margin: 0 auto;
}
#Sources table.infolist tr:hover,
#Sources table.infolist tr:hover td.ColumnType {
background-color: #DDE;
}
/* Contact
----------------------------------------------------- */
@ -564,18 +621,32 @@ div#SourceDetail {
/* Subsection : Families
----------------------------------------------------- */
#families table.infolist td.ColumnValue.Child table.infolist tr:hover,
table.relationships tr:hover {
background-color: #DDE;
}
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:last-child {
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.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
----------------------------------------------------- */
@ -615,7 +686,6 @@ div#families table.attrlist td.ColumnType {
}
#gallery div.indexno {
float: right;
width: 1.8em;
font-size: large;
text-align: center;
background-color: #CCC;
@ -663,11 +733,15 @@ 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 {
margin-bottom: 0.5em;
padding-bottom: 0.6em;
}
/* Subsection : Family Map
@ -676,6 +750,12 @@ a.familymap {
display: block;
}
/* Subsection : References
----------------------------------------------------- */
#references ol {
margin-left: 2em;
}
/* Subsection : Source References
----------------------------------------------------- */
#sourcerefs ol li ol {
@ -736,6 +816,12 @@ a.familymap {
padding-right: 15px;
}
/* Updates
----------------------------------------------------- */
#Updates table.list td.date {
width: 20%;
}
/* Overwritten
----------------------------------------------------- */
body#FamilyMap {

View File

@ -139,7 +139,6 @@ h1 {
h2 {
font: bold 1em sans-serif;
text-align: center;
float: center;
}
h3 {
font: bold italic 1.6em serif;
@ -349,7 +348,7 @@ div#footer p#copyright img {
}
/* Responsive navigation */
a.navIcon {
button.navIcon {
display: none;
}
@ -359,6 +358,12 @@ div#header::after {
display: table;
}
/* Updates
----------------------------------------------------- */
#Updates table.list td.date {
width: 20%;
}
/* Alphabet Navigation
----------------------------------------------------- */
div#alphanav {
@ -432,11 +437,14 @@ div#nav::after {
.nav li {display: none;}
.nav ul {display: none;}
a.navIcon {
font-size:1.3em;
button.navIcon {
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;}
@ -506,13 +514,12 @@ 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: 40%;
width: 30%;
}
table.infolist tr td.ColumnName {
width: 30%;
@ -661,12 +668,10 @@ 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
------------------------------------------------------ */
div#EventList, div#EventDetail {
@ -676,18 +681,40 @@ 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;
}
@ -863,7 +890,6 @@ 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;
@ -989,6 +1015,9 @@ div#Download table.download td.ColumnModified {
margin: 0;
padding: 0;
}
#Sources table.infolist tr td.ColumnName {
width: 70%;
}
div#SourceDetail {
min-height: 900px
}
@ -1097,8 +1126,14 @@ div#events h4 {
#IndividualDetail div#events table.eventtable {
width: 100%;
}
table.eventlist tbody tr td.ColumnEvent {
width: 12%;
#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%;
}
#IndividualDetail div#events table.infolist tbody tr td {
padding-top: .4em;
@ -1185,6 +1220,10 @@ 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;
@ -1199,6 +1238,22 @@ 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
------------------------------------------------- */
@ -1215,17 +1270,14 @@ 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: 15%;
width: 5%;
}
/* Subsection: Families: LDS Ordinance
------------------------------------------------------ */
div#families table.infolist {
font: normal .8em sans;
font: normal .9em sans;
}
div#families table.infolist tbody tr.BeginOrdinance {
border-top: solid 1px #000;
@ -1366,7 +1418,6 @@ div.Residence table.infolist tr td {
}
#gallery div.indexno {
float: right;
width: 1.8em;
font-size: large;
text-align: center;
background-color: #CCC;
@ -1411,9 +1462,22 @@ 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
----------------------------------------------------- */
@ -1453,6 +1517,9 @@ 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;
}
@ -1482,7 +1549,7 @@ table.WebLinks tbody tr td.ColumnPath {
width: 50%;
}
table.weblinks tbody tr td.ColumnDescription {
width: 30%;
width: 80%;
}
/* Subsections : Pedigree

View File

@ -1,14 +1,15 @@
/*
**************************************************************************************************
*******************************************************************************
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,
@ -16,7 +17,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 +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
slate dark #454
@ -47,14 +48,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
----------------------------------------------------- */
@ -239,7 +240,7 @@ div#alphanav ul li a:hover {
}
/* Responsive navigation */
a.navIcon {
button.navIcon {
display: none;
}
@ -286,11 +287,14 @@ div#nav::after {
.nav li {display: none;}
.nav ul {display: none;}
a.navIcon {
font-size:1.3em;
button.navIcon {
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;}
@ -373,9 +377,6 @@ 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%;
@ -434,12 +435,31 @@ 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
----------------------------------------------------- */
@ -453,6 +473,10 @@ table.IndividualList 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
----------------------------------------------------- */
@ -468,6 +492,10 @@ table.IndividualList 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,
@ -488,10 +516,49 @@ table.IndividualList 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
----------------------------------------------------- */
@ -546,6 +613,10 @@ table.eventlist tbody tr td.ColumnSources {
div#SourceDetail {
margin: 0 auto;
}
#Sources table.infolist tr:hover,
#Sources table.infolist tr:hover td.ColumnType {
background-color: #9DBF9D;
}
/* Contact
----------------------------------------------------- */
@ -615,6 +686,10 @@ div#SourceDetail {
/* Subsection : Families
----------------------------------------------------- */
#families table.infolist td.ColumnValue.Child table.infolist tr:hover,
table.relationships tr:hover {
background-color: #9DBF9D;
}
div#families table.fixed_subtables table.eventlist {
table-layout: fixed;
}
@ -666,7 +741,6 @@ div#families table.attrlist td.ColumnType {
}
#gallery div.indexno {
float: right;
width: 1.8em;
font-size: large;
text-align: center;
background-color: #CCC;
@ -714,11 +788,21 @@ 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 {
margin-bottom: 0.5em;
padding-bottom: 0.6em;
}
/* Subsection : References
----------------------------------------------------- */
#references ol {
margin-left: 2em;
}
/* Subsection : Family Map
@ -791,6 +875,12 @@ a.familymap {
padding-right: 15px;
}
/* Updates
----------------------------------------------------- */
#Updates table.list td.date {
width: 20%;
}
/* Overwritten
----------------------------------------------------- */
body#FamilyMap {

View File

@ -1,14 +1,15 @@
/*
**************************************************************************************************
*******************************************************************************
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,
@ -16,7 +17,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 +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
lilac dark #2E2E61
@ -47,14 +48,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
----------------------------------------------------- */
@ -237,7 +238,7 @@ div#alphanav ul li a:hover {
}
/* Responsive navigation */
a.navIcon {
button.navIcon {
display: none;
}
@ -284,11 +285,14 @@ div#nav::after {
.nav li {display: none;}
.nav ul {display: none;}
a.navIcon {
font-size:1.3em;
button.navIcon {
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;}
@ -419,12 +423,31 @@ 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
----------------------------------------------------- */
@ -441,6 +464,10 @@ table.IndividualList 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
----------------------------------------------------- */
@ -456,6 +483,10 @@ table.IndividualList 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,
@ -476,9 +507,54 @@ table.IndividualList td.ColumnSurname {
#EventDetail td.ColumnPerson span.mother:last-child:after {
content: "";
}
table.eventlist tbody tr td.ColumnSources {
#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
@ -534,6 +610,10 @@ table.eventlist tbody tr td.ColumnSources {
div#SourceDetail {
margin: 0 auto;
}
#Sources table.infolist tr:hover,
#Sources table.infolist tr:hover td.ColumnType {
background-color: #B4B4CB;
}
/* Contact
----------------------------------------------------- */
@ -603,6 +683,10 @@ div#SourceDetail {
/* Subsection : Families
----------------------------------------------------- */
#families table.infolist td.ColumnValue.Child table.infolist tr:hover,
table.relationships tr:hover {
background-color: #B4B4CB;
}
div#families table.fixed_subtables table.eventlist {
table-layout: fixed;
}
@ -654,7 +738,6 @@ div#families table.attrlist td.ColumnType {
}
#gallery div.indexno {
float: right;
width: 1.8em;
font-size: large;
text-align: center;
background-color: #CCC;
@ -702,11 +785,21 @@ 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 {
margin-bottom: 0.5em;
padding-bottom: 0.6em;
}
/* Subsection : References
----------------------------------------------------- */
#references ol {
margin-left: 2em;
}
/* Subsection : Family Map
@ -778,6 +871,12 @@ a.familymap {
background-color: #B4B4CB;
}
/* Updates
----------------------------------------------------- */
#Updates table.list td.date {
width: 20%;
}
/* Overwritten
----------------------------------------------------- */
body#FamilyMap {

View File

@ -1,14 +1,15 @@
/*
**************************************************************************************************
*******************************************************************************
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,
@ -16,7 +17,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 +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 #36220B
brown #8C581C
@ -47,14 +48,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
----------------------------------------------------- */
@ -237,7 +238,7 @@ div#alphanav ul li a:hover {
}
/* Responsive navigation */
a.navIcon {
button.navIcon {
display: none;
}
@ -284,11 +285,14 @@ div#nav::after {
.nav li {display: none;}
.nav ul {display: none;}
a.navIcon {
font-size:1.3em;
button.navIcon {
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;}
@ -419,12 +423,31 @@ 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
----------------------------------------------------- */
@ -441,6 +464,10 @@ table.IndividualList 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
----------------------------------------------------- */
@ -456,6 +483,10 @@ table.IndividualList 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,
@ -476,10 +507,57 @@ table.IndividualList 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
----------------------------------------------------- */
@ -533,6 +611,10 @@ table.eventlist tbody tr td.ColumnSources {
div#SourceDetail {
margin: 0 auto;
}
#Sources table.infolist tr:hover,
#Sources table.infolist tr:hover td.ColumnType {
background-color: #FFC35E;
}
/* Contact
----------------------------------------------------- */
@ -602,6 +684,10 @@ div#SourceDetail {
/* Subsection : Families
----------------------------------------------------- */
#families table.infolist td.ColumnValue.Child table.infolist tr:hover,
table.relationships tr:hover {
background-color: #FFC35E;
}
div#families table.fixed_subtables table.eventlist {
table-layout: fixed;
}
@ -653,7 +739,6 @@ div#families table.attrlist td.ColumnType {
}
#gallery div.indexno {
float: right;
width: 1.8em;
font-size: large;
text-align: center;
background-color: #CCC;
@ -701,11 +786,21 @@ 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 {
margin-bottom: 0.5em;
padding-bottom: 0.6em;
}
/* Subsection : References
----------------------------------------------------- */
#references ol {
margin-left: 2em;
}
/* Subsection : Family Map
@ -777,6 +872,12 @@ a.familymap {
background-color: #FFC35E;
}
/* Updates
----------------------------------------------------- */
#Updates table.list td.date {
width: 20%;
}
/* Overwritten
----------------------------------------------------- */
button#drop {

View File

@ -1,14 +1,15 @@
/*
**************************************************************************************************
*******************************************************************************
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,
@ -16,7 +17,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 +38,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
@ -48,14 +49,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
----------------------------------------------------- */
@ -238,7 +239,7 @@ div#alphanav ul li a:hover {
}
/* Responsive navigation */
a.navIcon {
button.navIcon {
display: none;
}
@ -285,11 +286,14 @@ div#nav::after {
.nav li {display: none;}
.nav ul {display: none;}
a.navIcon {
font-size:1.3em;
button.navIcon {
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;}
@ -420,12 +424,31 @@ 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
----------------------------------------------------- */
@ -442,6 +465,10 @@ table.IndividualList 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
----------------------------------------------------- */
@ -457,6 +484,10 @@ table.IndividualList 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,
@ -477,10 +508,57 @@ table.IndividualList 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
----------------------------------------------------- */
@ -534,6 +612,10 @@ table.eventlist tbody tr td.ColumnSources {
div#SourceDetail {
margin: 0 auto;
}
#Sources table.infolist tr:hover,
#Sources table.infolist tr:hover td.ColumnType {
background-color: #BFD0EA;
}
/* Contact
----------------------------------------------------- */
@ -603,6 +685,10 @@ div#SourceDetail {
/* Subsection : Families
----------------------------------------------------- */
#families table.infolist td.ColumnValue.Child table.infolist tr:hover,
table.relationships tr:hover {
background-color: #BFD0EA;
}
div#families table.fixed_subtables table.eventlist {
table-layout: fixed;
}
@ -654,7 +740,6 @@ div#families table.attrlist td.ColumnType {
}
#gallery div.indexno {
float: right;
width: 1.8em;
font-size: large;
text-align: center;
background-color: #CCC;
@ -702,11 +787,21 @@ 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 {
margin-bottom: 0.5em;
padding-bottom: 0.6em;
}
/* Subsection : References
----------------------------------------------------- */
#references ol {
margin-left: 2em;
}
/* Subsection : Family Map
@ -778,6 +873,12 @@ a.familymap {
background-color: #BFD0EA;
}
/* Updates
----------------------------------------------------- */
#Updates table.list td.date {
width: 20%;
}
/* Overwritten
----------------------------------------------------- */
body#FamilyMap {

View File

@ -77,8 +77,7 @@ 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 {
@ -129,13 +128,11 @@ 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;
}

View File

@ -58,7 +58,7 @@ Middle Light images/Web_Mainz_MidLight.png
NarrativeWeb Styles
--------------------------------------------------------------------------------------------
----------------------------------------------------------------------------
General Elements
-----------------------------------------------------------------*/
@ -150,7 +150,8 @@ a {
word-wrap: break-word;
}
a[href]:hover, a[href]:active {
background-color: #FFFFE7;
background-color: #D8C19F;
font-style: italic;
}
.grampsid {
font-family: monospace;
@ -167,7 +168,7 @@ a[href]:hover, a[href]:active {
/* Navigation
-----------------------------------------------------------------*/
div#nav, #subnavigation {
background: url(../images/Web_Mainz_MidLight.png) #FFF2C6 repeat;
background: url(../images/Web_Mainz_Mid.png) repeat-x top left;
}
div#nav ul, #subnavigation ul {
list-style-type: none;
@ -233,7 +234,7 @@ div#alphanav ul li a:hover {
}
/* Responsive navigation */
a.navIcon {
button.navIcon {
display: none;
}
@ -280,11 +281,14 @@ div#nav::after {
.nav li {display: none;}
.nav ul {display: none;}
a.navIcon {
font-size:1.3em;
button.navIcon {
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: absolute; display: block; z-index: 100;}
@ -380,12 +384,40 @@ 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 {
@ -399,6 +431,10 @@ table#SortByCount thead th.ColumnQuantity a:after {
#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,
@ -422,9 +458,57 @@ table#SortByCount thead th.ColumnQuantity a:after {
#EventDetail td.ColumnPerson span.mother:last-child:after {
content: "";
}
table.eventlist tbody tr td.ColumnSources {
#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: 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
@ -485,6 +569,10 @@ table.eventlist tbody tr td.ColumnSources {
div#SourceDetail {
margin: 0 auto;
}
#Sources table.infolist tbody tr:hover,
#Sources table.infolist tr:hover td.ColumnType {
background-color: #D8C19F;
}
/* Contact
-----------------------------------------------------------------*/
@ -551,6 +639,10 @@ div#SourceDetail {
/* SubSection : Families
-----------------------------------------------------------------*/
#families table.infolist td.ColumnValue.Child table.infolist tbody tr:hover,
table.relationships tr:hover td {
background-color: #D8C19F;
}
div#families table.fixed_subtables table.eventlist {
table-layout: fixed;
}
@ -569,9 +661,6 @@ div#families .infolist h4 {
#gallery {
background-color: green;
}
#indivgallery {
background-color: white;
}
#gallery .gallerycell {
float: left;
width: 130px;
@ -596,7 +685,6 @@ div#families .infolist h4 {
font-size: smaller;
text-align: center;
margin: 0.5em;
background-color: white;
}
#indivgallery img {
border: solid 1px #7D5925;
@ -607,7 +695,6 @@ div#families .infolist h4 {
}
#gallery div.indexno {
float: right;
width: 1.8em;
font-size: large;
text-align: center;
background-color: #CCC;
@ -649,11 +736,21 @@ h4 + div.grampsstylednote, a.familymap {
margin-left: 10px;
margin-right: 10px;
}
i.NoteType {
font-weight: bold;
font-size: .8em;
}
i + div.grampsstylednote p {
margin: 0 0 0.3em 0;
}
div.grampsstylednote p {
margin-bottom: 0.5em;
padding-bottom: 0.6em;
}
/* Subsection : References
----------------------------------------------------- */
#references ol {
margin-left: 2em;
}
/* SubSection : Source References
@ -721,6 +818,12 @@ div.grampsstylednote p {
background: url(../images/Web_Mainz_MidLight.png) #FFF2C6;
}
/* Updates
----------------------------------------------------- */
#Updates table.list td.date {
width: 20%;
}
/* Overwritten
-----------------------------------------------------------------*/
button#drop {

View File

@ -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;
@ -172,7 +172,7 @@ p#description {
background-color:#FFF;
}
p a {
color:#FFF;
color:#542;
text-decoration:underline;
}
sup {
@ -284,7 +284,7 @@ div#subnavigation ul li.CurrentSection a {
}
/* Responsive navigation */
a.navIcon {
button.navIcon {
display: none;
color: #FFF;
}
@ -332,11 +332,13 @@ div#nav::after {
.nav li {display: none;}
.nav ul {display: none;}
a.navIcon {
font-size:1.3em;
button.navIcon {
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;
}
@ -456,6 +458,20 @@ 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;
@ -511,6 +527,11 @@ 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;
@ -554,6 +575,7 @@ 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;
@ -566,6 +588,7 @@ 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 {
@ -603,6 +626,10 @@ 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;
@ -651,6 +678,10 @@ 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;
}
@ -670,6 +701,10 @@ 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.mother,
#EventDetail table.infolist tr td span.father,
@ -692,10 +727,27 @@ table.relationships tbody tr td.ColumnPartner a:hover {
#EventDetail table.infolist tr td span.mother:last-child:after {
content: "";
}
table.eventlist tbody tr td.ColumnSources {
#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;
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
----------------------------------------------------- */
@ -972,9 +1024,6 @@ 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;
@ -990,6 +1039,51 @@ 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
----------------------------------------------------- */
@ -1012,10 +1106,15 @@ 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#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 {
@ -1063,9 +1162,6 @@ 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;
@ -1088,11 +1184,10 @@ div#Addresses table.infolist tr td a, div#Addresses table.infolist tr td p a {
float:left;
width:130px;
text-align:center;
background-color: white;
background-color: #F6F2EE;
}
#gallery div.indexno {
float: right;
width: 1.8em;
font-size: large;
text-align: center;
background-color: #CCC;
@ -1155,16 +1250,26 @@ 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;
}
.narrative p {
margin: 0.1em 0 0.2em 0;
font:normal .9em/1.4em sans-serif;
}
/* Subsections : References
/* Subsection : References
----------------------------------------------------- */
#references ol {
margin-left: 3em;
}
/* Subsections : Source References
----------------------------------------------------- */
@ -1306,6 +1411,12 @@ div#pedigree {
padding: 0;
}
/* Updates
----------------------------------------------------- */
#Updates table.list td.date {
width: 20%;
}
/* Calendar Styles
-------------------------------------------------------------------------------------------- */
/* Calendar : General */

View File

@ -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,19 +31,19 @@ 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
----------------------------------------------------- */

View File

@ -20,17 +20,18 @@
# 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;
}

View File

@ -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,8 +96,6 @@ img {
background:none;
}
.content {
overflow: auto;
width:965px;
margin:0 auto;
padding-bottom: .2em;
}
@ -731,6 +729,20 @@ 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
----------------------------------------------------- */
@ -1197,6 +1209,7 @@ 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;

View File

@ -33,13 +33,14 @@ 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;
}
#treeContainer {
position:relative;

View File

@ -64,13 +64,13 @@ div#FamilyMapDetail div#references table.infolist {
width: 100%;
}
div#FamilyMapDetail div#references table.infolist tbody tr td.ColumnPlace {
width: 40%;
width: 70%;
}
/* Subsection: popup
------------------------------------------------------ */
.ol-popup {
#map_canvas .ol-popup {
position: absolute;
background-color: white;
-webkit-filter: drop-shadow(0 1px 4px rgba(0,0,0,0.2));
@ -82,7 +82,7 @@ div#FamilyMapDetail div#references table.infolist tbody tr td.ColumnPlace {
left: -50px;
min-width: 450px;
}
.ol-popup:after, .ol-popup:before {
#map_canvas .ol-popup:after, #map_canvas .ol-popup:before {
top: 100%;
border: solid transparent;
height: 0;
@ -90,24 +90,64 @@ div#FamilyMapDetail div#references table.infolist tbody tr td.ColumnPlace {
position: absolute;
pointer-events: none;
}
.ol-popup:after {
#map_canvas .ol-popup:after {
border-top-color: white;
border-width: 10px;
left: 48px;
margin-left: -10px;
}
.ol-popup:before {
#map_canvas .ol-popup:before {
border-top-color: #cccccc;
border-width: 11px;
left: 48px;
margin-left: -11px;
}
.ol-popup-closer {
#map_canvas .ol-popup-closer {
text-decoration: none;
position: absolute;
top: 2px;
right: 8px;
}
.ol-popup-closer:after {
#map_canvas .ol-popup-closer:after {
content: "✖";
}
#popup-content {
max-height: 250px;
overflow-y: auto;
}
#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;
}

View File

@ -60,6 +60,7 @@ import logging
from gramps.gen.const import GRAMPS_LOCALE as glocale
from gramps.gen.lib import (FamilyRelType, NoteType, NameType, Person,
UrlType, Name, PlaceType, EventRoleType,
Source, Attribute, Media, Repository, Event,
Family, Citation, Place, Date)
from gramps.gen.lib.date import Today
from gramps.gen.const import PROGRAM_NAME, URL_HOMEPAGE
@ -130,6 +131,8 @@ class BasePage: # pylint: disable=C1001
self.create_media = report.options['gallery']
self.create_unused_media = report.options['unused']
self.create_thumbs_only = report.options['create_thumbs_only']
self.create_images_index = report.options['create_images_index']
self.create_thumbs_index = report.options['create_thumbs_index']
self.inc_families = report.options['inc_families']
self.inc_events = report.options['inc_events']
self.usecms = report.options['usecms']
@ -351,10 +354,9 @@ class BasePage: # pylint: disable=C1001
if family_events:
trow = Html("tr") + (
Html("td", "&nbsp;", class_="ColumnType", inline=True),
Html("td", "&nbsp;", class_="ColumnAttribute", inline=True),
Html("td", self.format_family_events(family_events,
place_lat_long),
class_="ColumnValue")
class_="ColumnValue", colspan=2)
)
table = trow
@ -377,13 +379,13 @@ class BasePage: # pylint: disable=C1001
childlist = family.get_child_ref_list()
if childlist:
trow = Html("tr") + (
Html("td", "&nbsp;", class_="ColumnType", inline=True),
Html("td", self._("Children"), class_="ColumnAttribute",
inline=True)
)
table = table + trow if table is not None else trow
tcell = Html("td", class_="ColumnValue", close=False)
tcell = Html("td", class_="ColumnValue Child", close=False,
colspan=2)
trow += tcell
with Html("table", class_="infolist eventlist") as table2:
@ -517,7 +519,8 @@ class BasePage: # pylint: disable=C1001
for (data, colclass) in [
(str(attr.get_type()), "ColumnType"),
(attr.get_value(), "ColumnValue"),
(self.dump_notes(attr.get_note_list()), "ColumnNotes"),
(self.dump_notes(attr.get_note_list(), Attribute),
"ColumnNotes"),
(self.get_citation_links(attr.get_citation_list()),
"ColumnSources")
]
@ -610,7 +613,7 @@ class BasePage: # pylint: disable=C1001
htmllist.extend(Html('p') + linelist)
return htmllist
def dump_notes(self, notelist):
def dump_notes(self, notelist, parent=None):
"""
dump out of list of notes with very little elements of its own
@ -621,11 +624,24 @@ class BasePage: # pylint: disable=C1001
# begin unordered list
notesection = Html("div")
idx = 0
for notehandle in notelist:
this_note = self.r_db.get_note_from_handle(notehandle)
title = self._(this_note.type.xml_str())
if this_note is not None:
notesection.extend(Html("i", self._(this_note.type.xml_str()),
class_="NoteType"))
idx += 1
if len(notelist) > 1:
if self.default_note(parent, int(this_note.type)):
title_text = self._("Note: %s") % str(idx)
else:
title = " (" + title + ")"
title_text = self._("Note: %s") % str(idx) + title
else:
if self.default_note(parent, int(this_note.type)):
title_text = self._("Note")
else:
title_text = title
notesection.extend(Html("i", title_text, class_="NoteType"))
notesection.extend(self.get_note_format(this_note, True))
return notesection
@ -682,7 +698,7 @@ class BasePage: # pylint: disable=C1001
etype,
event_gid,
uplink) if hyperlink else etype
trow += Html("td", event_hyper, class_="ColumnEvent")
trow += Html("td", event_hyper, class_="ColumnEvent", rowspan=2)
# get event data
event_data = self.get_event_data(event, event_ref, uplink)
@ -694,7 +710,6 @@ class BasePage: # pylint: disable=C1001
)
trow2 = Html("tr")
trow2 += Html("td", "", class_="ColumnEvent")
# get event source references
srcrefs = self.get_citation_links(event.get_citation_list()) or "&nbsp;"
trow += Html("td", srcrefs, class_="ColumnSources", rowspan=2)
@ -703,7 +718,7 @@ class BasePage: # pylint: disable=C1001
notelist = event.get_note_list()[:] # we don't want to modify
# cached original
notelist.extend(event_ref.get_note_list())
htmllist = self.dump_notes(notelist)
htmllist = self.dump_notes(notelist, Event)
# if the event or event reference has an attribute attached to it,
# get the text and format it correctly?
@ -720,7 +735,7 @@ class BasePage: # pylint: disable=C1001
#also output notes attached to the attributes
notelist = attr.get_note_list()
if notelist:
htmllist.extend(self.dump_notes(notelist))
htmllist.extend(self.dump_notes(notelist, Event))
trow2 += Html("td", htmllist, class_="ColumnNotes", colspan=3)
@ -1387,9 +1402,9 @@ class BasePage: # pylint: disable=C1001
del page[0]
# Header constants
_meta1 = 'name ="viewport" content="width=device-width; '
_meta1 += 'height=device-height; initial-scale=1.0; '
_meta1 += 'minimum-scale=0.5; maximum-scale=10.0; user-scalable=yes"'
_meta1 = 'name ="viewport" content="width=device-width, '
_meta1 += 'height=device-height, initial-scale=1.0, '
_meta1 += 'minimum-scale=0.5, maximum-scale=10.0, user-scalable=yes"'
_meta2 = 'name ="apple-mobile-web-app-capable" content="yes"'
_meta3 = 'name="generator" content="%s %s %s"' % (
PROGRAM_NAME, VERSION, URL_HOMEPAGE)
@ -1417,13 +1432,21 @@ class BasePage: # pylint: disable=C1001
# create stylesheet and favicon links
links = Html("link", type="image/x-icon",
href=url4, rel="shortcut icon") + (
Html("link", type="text/css", href=url3,
media='print', rel="stylesheet", indent=False),
Html("link", type="text/css", href=url2,
media="screen", title=self._("Default"),
rel="stylesheet", indent=False),
)
href=url4, rel="shortcut icon")
# attach the ancestortree style sheet if ancestor
# graph is being created?
if self.report.options["ancestortree"]:
if self.usecms:
fname = "/".join([self.target_uri, "css", "ancestortree.css"])
else:
fname = "/".join(["css", "ancestortree.css"])
url5 = self.report.build_url_fname(fname, None, self.uplink)
links += Html("link", type="text/css", href=url5,
media="screen", rel="stylesheet", indent=False)
links += Html("link", type="text/css", href=url3,
media='print', rel="stylesheet", indent=False)
links += Html("link", type="text/css", href=url2,
media="screen", rel="stylesheet", indent=False)
# create all alternate stylesheets
# Cannot use it on local files (file://)
for css_f in CSS:
@ -1435,7 +1458,7 @@ class BasePage: # pylint: disable=C1001
urlx = self.report.build_url_fname(fname, None,
self.uplink)
links += Html("link", rel="alternate stylesheet",
title=css_f, indent=False,
title=self._(css_f), indent=False,
media="screen", type="text/css",
href=urlx)
@ -1463,13 +1486,11 @@ class BasePage: # pylint: disable=C1001
body += outerwrapperdiv
# begin header section
#headerdiv = Html("div", id='header') + (
headerdiv = Html("div", id='header') + (
Html("<a href=\"javascript:void(0);\" class=\"navIcon\""
" onclick=\"navFunction()\">&#8801;</a>")) + (
Html("h1", html_escape(self.title_str),
Html("<button href=\"javascript:void(0);\" class=\"navIcon\""
" onclick=\"navFunction()\">&#8801;</button>"))
headerdiv += Html("h1", html_escape(self.title_str),
id="SiteTitle", inline=True)
)
outerwrapperdiv += headerdiv
header_note = self.report.options['headernote']
@ -1544,12 +1565,15 @@ class BasePage: # pylint: disable=C1001
('places', self._("Places"), self.report.inc_places),
('sources', self._("Sources"), self.report.inc_sources),
('repositories', self._("Repositories"), inc_repos),
('media', self._("Media"), _create_media_link),
('thumbnails', self._("Thumbnails"), self.create_media),
('media', self._("Media"), self.create_images_index and
self.report.inc_gallery and not self.report.create_thumbs_only),
('thumbnails', self._("Thumbnails"), self.create_thumbs_index and
self.report.inc_gallery),
('download', self._("Download"), self.report.inc_download),
("addressbook", self._("Address Book"),
self.report.inc_addressbook),
('contact', self._("Contact"), self.report.use_contact),
('updates', self._("Updates"), self.report.inc_updates),
('statistics', self._("Statistics"), self.report.inc_stats),
(self.target_cal_uri, self._("Web Calendar"), self.usecal)
]
@ -2009,7 +2033,9 @@ class BasePage: # pylint: disable=C1001
# Begin hyperlink. Description is given only for
# the purpose of the alt tag in img element
snapshot += self.media_link(photo_handle, newpath,
if self.create_images_index:
snapshot += self.media_link(photo_handle,
newpath,
descr,
uplink=self.uplink,
usedescr=False)
@ -2099,11 +2125,39 @@ class BasePage: # pylint: disable=C1001
# return indivgallery division to its caller
return section
def display_note_list(self, notelist=None):
def default_note(self, parent, notetype):
"""
return true if the notetype is the same as the parent
@param: parent -- The object (Person, Family, Media,...)
@param: notetype -- The type for the current note
"""
if parent == Person and notetype == NoteType.PERSON:
return True
elif parent == Family and notetype == NoteType.FAMILY:
return True
elif parent == Media and notetype == NoteType.MEDIA:
return True
elif parent == Repository and notetype == NoteType.REPO:
return True
elif parent == Source and notetype == NoteType.SOURCE:
return True
elif parent == Event and notetype == NoteType.EVENT:
return True
elif parent == Place and notetype == NoteType.PLACE:
return True
elif parent == Citation and notetype == NoteType.CITATION:
return True
elif parent == Attribute and notetype == NoteType.ATTRIBUTE:
return True
return False
def display_note_list(self, notelist=None, parent=None):
"""
Display note list
@param: notelist -- The list of notes
@param: parent -- The parent associated to these notes
"""
if not notelist:
return None
@ -2111,14 +2165,27 @@ class BasePage: # pylint: disable=C1001
# begin narrative division
with Html("div", class_="subsection narrative") as section:
idx = 0
for notehandle in notelist:
note = self.r_db.get_note_from_handle(notehandle)
title = self._(note.type.xml_str())
if note:
note_text = self.get_note_format(note, True)
idx += 1
if len(notelist) > 1:
if self.default_note(parent, int(note.type)):
title_text = self._("Note: %s") % str(idx)
else:
title = " (" + title + ")"
title_text = self._("Note: %s") % str(idx) + title
else:
if self.default_note(parent, int(note.type)):
title_text = self._("Note")
else:
title_text = title
# add section title
section += Html("h4", self._("Narrative"), inline=True)
section += Html("h4", title_text, inline=True)
# attach note
section += note_text
@ -2681,47 +2748,6 @@ class BasePage: # pylint: disable=C1001
tbody += trow
tbody += Html("tr") + Html("td", "&nbsp;", colspan=2)
# encloses
with Html("div", class_='subsection encloses') as encloses:
tbody += encloses
encloses += Html("h4", self._("Place Encloses"), inline=True)
with Html("table", class_="infolist place") as table:
encloses += table
visited = [place.handle]
for link in self.r_db.find_backlink_handles(
place.handle, include_classes=['Place']):
if link[1] in visited:
continue
visited.append(link[1])
c_place = self.r_db.get_place_from_handle(link[1])
placeref = None
for placeref in c_place.get_placeref_list():
if placeref.ref == place.handle:
gpfh = self.r_db.get_place_from_handle
eplace = gpfh(placeref.ref)
if not eplace:
continue
place_name = c_place.get_name().get_value()
table += Html("tr") + Html("td", place_name)
# enclosed by
with Html("div", class_='subsection encloses') as encloses:
tbody += encloses
encloses += Html("h4", self._("Enclosed By"), inline=True)
with Html("table", class_="infolist place") as table:
encloses += table
visited = [place.handle]
placeref = None
for placeref in place.get_placeref_list():
if placeref.ref in visited:
continue
visited.append(placeref.ref)
pplace = self.r_db.get_place_from_handle(placeref.ref)
if not pplace:
continue
place_name = pplace.get_name().get_value()
table += Html("tr") + Html("td", place_name)
# enclosed by
tbody += Html("tr") + Html("td", "&nbsp;")
trow = Html("tr") + (
@ -2740,7 +2766,7 @@ class BasePage: # pylint: disable=C1001
else:
place_hyper = place_name
trow = Html("tr") + (
Html("td", place_hyper, class_="ColumnValue",
Html("td", place_hyper, class_="ColumnPlace",
inline=True))
tbody += trow
@ -2766,7 +2792,7 @@ class BasePage: # pylint: disable=C1001
place_hyper = place_name
trow = Html("tr") + (
Html("td", place_hyper,
class_="ColumnValue", inline=True))
class_="ColumnPlace", inline=True))
tbody += trow
# return place table to its callers

View File

@ -57,14 +57,14 @@ HTTPS = "https://"
GOOGLE_MAPS = 'https://maps.googleapis.com/maps/'
# javascript code for marker path
MARKER_PATH = """
var marker_png = '%s'
var marker_png = '%s';
"""
# javascript code for Google's FamilyLinks...
FAMILYLINKS = """
var tracelife = %s
var tracelife = %s;
function initialize() {
window.addEventListener("load", function() {
var myLatLng = new google.maps.LatLng(%s, %s);
var mapOptions = {
@ -86,18 +86,19 @@ FAMILYLINKS = """
});
flightPath.setMap(map);
}"""
});
"""
# javascript for Google's Drop Markers...
DROPMASTERS = """
var markers = [];
var iterator = 0;
var tracelife = %s
var tracelife = %s;
var map;
var myLatLng = new google.maps.LatLng(%s, %s);
function initialize() {
window.addEventListener("load", function() {
var mapOptions = {
scaleControl: true,
zoomControl: true,
@ -107,7 +108,7 @@ DROPMASTERS = """
};
map = new google.maps.Map(document.getElementById("map_canvas"),
mapOptions);
};
});
function drop() {
for (var i = 0; i < tracelife.length; i++) {
@ -144,11 +145,11 @@ DROPMASTERS = """
# javascript for Google's Markers...
MARKERS = """
var tracelife = %s
var tracelife = %s;
var map;
var myLatLng = new google.maps.LatLng(%s, %s);
function initialize() {
window.addEventListener("load", function() {
var mapOptions = {
scaleControl: true,
panControl: true,
@ -160,7 +161,7 @@ MARKERS = """
map = new google.maps.Map(document.getElementById("map_canvas"),
mapOptions);
addMarkers();
}
});
function addMarkers() {
var bounds = new google.maps.LatLngBounds();
@ -189,7 +190,6 @@ MARKERS = """
infoWindow.open(map, marker);
});
}
"""
# javascript for OpenStreetMap's markers...
@ -198,9 +198,9 @@ https://openlayers.org/en/latest/examples/
"""
OSM_MARKERS = """
function initialize(){
window.addEventListener("load", function() {
var map;
var tracelife = %s
var tracelife = %s;
var iconStyle = new ol.style.Style({
image: new ol.style.Icon(({
anchor: [0.2, 48],
@ -241,9 +241,9 @@ OSM_MARKERS = """
"""
STAMEN_MARKERS = """
function initialize(){
window.addEventListener("load", function() {
var map;
var tracelife = %s
var tracelife = %s;
var layer = '%s';
var iconStyle = new ol.style.Style({
image: new ol.style.Icon(({
@ -292,23 +292,20 @@ OPENLAYER = """
var closer = document.getElementById('popup-closer');
var tip = document.getElementById('tooltip');
var tipcontent = document.getElementById('tooltip-content');
var tooltip = new ol.Overlay({
element: tip,
positioning: 'bottom-center',
offset: [10, 0],
});
map.addOverlay(tooltip);
var popup = new ol.Overlay({
element: element,
positioning: 'bottom-center',
autoPan: true,
autoPanAnimation: { duration: 500 },
stopEvent: false
stopEvent: true
});
map.addOverlay(popup);
/**
* Add a click handler to hide the popup.
* @return {boolean} Don't follow the href.
@ -318,7 +315,6 @@ OPENLAYER = """
closer.blur();
return false;
};
map.on('pointermove', function(evt) {
evt.preventDefault()
var feature = this.forEachFeatureAtPixel(evt.pixel,
@ -338,10 +334,9 @@ OPENLAYER = """
} else {
tooltip.setPosition(undefined);
}
});
map.on('singleclick', function(evt) {
evt.preventDefault()
evt.preventDefault();
var feature = map.forEachFeatureAtPixel(evt.pixel,
function(feature, layer) {
return feature;
@ -355,8 +350,7 @@ OPENLAYER = """
popup.setPosition(undefined);
}
});
};
});
"""
# variables for alphabet_navigation()

View File

@ -413,7 +413,7 @@ class EventPages(BasePage):
# Narrative subsection
notelist = event.get_note_list()
notelist = self.display_note_list(notelist)
notelist = self.display_note_list(notelist, Event)
if notelist is not None:
eventdetail += notelist

View File

@ -367,7 +367,7 @@ class FamilyPages(BasePage):
# Narrative subsection
notelist = family.get_note_list()
if notelist:
relationshipdetail += self.display_note_list(notelist)
relationshipdetail += self.display_note_list(notelist, Family)
# display family LDS ordinance...
family_lds_ordinance_list = family.get_lds_ord_list()

View File

@ -97,6 +97,7 @@ class MediaPages(BasePage):
self.media_dict = defaultdict(set)
self.unused_media_handles = []
self.cur_fname = None
self.create_images_index = self.report.options['create_images_index']
def display_pages(self, title):
"""
@ -190,6 +191,7 @@ class MediaPages(BasePage):
"""
BasePage.__init__(self, report, title)
if self.create_images_index:
output_file, sio = self.report.create_file("media")
# save the media file name in case we create unused media pages
self.cur_fname = self.report.cur_fname
@ -314,6 +316,7 @@ class MediaPages(BasePage):
# send page out for processing
# and close the file
self.report.cur_fname = self.cur_fname
if self.create_images_index:
self.xhtml_writer(medialistpage, output_file, sio, ldatec)
def media_ref_link(self, handle, name, uplink=False):
@ -577,7 +580,7 @@ class MediaPages(BasePage):
table += trow
# get media notes
notelist = self.display_note_list(media.get_note_list())
notelist = self.display_note_list(media.get_note_list(), Media)
if notelist is not None:
mediadetail += notelist
@ -649,6 +652,8 @@ class MediaPages(BasePage):
try:
mtime = os.stat(fullpath).st_mtime
if self.report.archive:
if str(newpath) not in self.report.archive.getnames():
# The current file not already archived.
self.report.archive.add(fullpath, str(newpath))
else:
to_dir = os.path.join(self.html_dir, to_dir)

View File

@ -97,6 +97,7 @@ from gramps.plugins.webreport.surnamelist import SurnameListPage
from gramps.plugins.webreport.surname import SurnamePage
from gramps.plugins.webreport.thumbnail import ThumbnailPreviewPage
from gramps.plugins.webreport.statistics import StatisticsPage
from gramps.plugins.webreport.updates import UpdatesPage
from gramps.plugins.webreport.home import HomePage
from gramps.plugins.webreport.contact import ContactPage
from gramps.plugins.webreport.download import DownloadPage
@ -163,6 +164,8 @@ class NavWebReport(Report):
self.inc_gallery = self.options['gallery']
self.inc_unused_gallery = self.options['unused']
self.create_thumbs_only = self.options['create_thumbs_only']
self.create_thumbs_index = self.options['create_thumbs_index']
self.create_images_index = self.options['create_images_index']
self.opts = self.options
self.inc_contact = self.opts['contactnote'] or self.opts['contactimg']
@ -202,6 +205,7 @@ class NavWebReport(Report):
self.use_home = self.options['homenote'] or self.options['homeimg']
self.use_contact = self.opts['contactnote'] or self.opts['contactimg']
self.inc_stats = self.opts['inc_stats']
self.inc_updates = self.opts['updates']
self.create_unused_media = self.opts['unused']
# Do we need to include this in a cms ?
@ -218,6 +222,9 @@ class NavWebReport(Report):
self.usecal = self.options['usecal']
self.target_cal_uri = self.options['caluri']
# Do we need to include news and updates page ?
self.inc_updates = self.options['updates']
# either include the gender graphics or not?
self.ancestortree = self.options['ancestortree']
@ -400,6 +407,31 @@ class NavWebReport(Report):
self._build_obj_dict()
#################################################
#
# Add images for home, contact and introduction pages
# if they are not associated to any used objects.
#
#################################################
if self.use_home:
img = self.options['homeimg']
if img:
media = self._db.get_media_from_gramps_id(img)
if media:
self._add_media(media.handle, Media, media.handle)
if self.inc_contact:
img = self.options['contactimg']
if img:
media = self._db.get_media_from_gramps_id(img)
if media:
self._add_media(media.handle, Media, media.handle)
if self.use_intro:
img = self.options['introimg']
if img:
media = self._db.get_media_from_gramps_id(img)
if media:
self._add_media(media.handle, Media, media.handle)
#################################################
#
# Pass 2 Generate the web pages
@ -451,6 +483,10 @@ class NavWebReport(Report):
if self.inc_stats:
self.statistics_preview_page(self.title)
# build classes Updates
if self.inc_updates:
self.updates_preview_page(self.title)
# copy all of the neccessary files
self.copy_narrated_files()
@ -1193,6 +1229,15 @@ class NavWebReport(Report):
1) as step:
StatisticsPage(self, title, step)
def updates_preview_page(self, title):
"""
creates the statistics preview page
"""
with self.user.progress(_("Narrated Web Site Report"),
_("Creating updates page..."),
1):
UpdatesPage(self, title)
def addressbook_pages(self, ind_list):
"""
Create a webpage with a list of address availability for each person
@ -1241,7 +1286,7 @@ class NavWebReport(Report):
def base_pages(self):
"""
creates HomePage, ContactPage, DownloadPage, and IntroductionPage
creates HomePage, ContactPage, DownloadPage and IntroductionPage
if requested by options in plugin
"""
if self.use_home:
@ -1454,6 +1499,8 @@ class NavWebReport(Report):
when we use rsync.
"""
if self.archive:
if self.cur_fname not in self.archive.getnames():
# The current file not already archived.
output_file.flush()
tarinfo = tarfile.TarInfo(self.cur_fname)
tarinfo.size = len(string_io.getvalue())
@ -1513,6 +1560,8 @@ class NavWebReport(Report):
return tarinfo
dest = os.path.join(to_dir, to_fname)
if dest not in self.archive.getnames():
# The current file not already archived.
self.archive.add(from_fname, dest, filter=set_mtime)
else:
dest = os.path.join(self.html_dir, to_dir, to_fname)
@ -1577,13 +1626,15 @@ class NavWebOptions(MenuReportOptions):
self.__usecal = None
self.__calendar_uri = None
self.__create_thumbs_only = None
self.__create_images_index = None
self.__create_thumbs_index = None
self.__mapservice = None
self.__maxinitialimageheight = None
self.__maxinitialimagewidth = None
self.__citationreferents = None
self.__incdownload = None
self.__placemappages = None
self.__familymappages = None
self.__stamenopts = None
self.__googleopts = None
self.__googlemapkey = None
self.__ancestortree = None
@ -1592,6 +1643,9 @@ class NavWebOptions(MenuReportOptions):
self.__dl_descr2 = None
self.__down_fname2 = None
self.__gallery = None
self.__updates = None
self.__maxdays = None
self.__maxupdates = None
self.__unused = None
self.__down_fname1 = None
self.__navigation = None
@ -1885,6 +1939,14 @@ class NavWebOptions(MenuReportOptions):
addopt("gallery", self.__gallery)
self.__gallery.connect('value-changed', self.__gallery_changed)
self.__create_images_index = BooleanOption(
_("Create the images index"), False)
self.__create_images_index.set_help(
_("This option allows you to create the images index"))
addopt("create_images_index", self.__create_images_index)
self.__create_images_index.connect("value-changed",
self.__gallery_changed)
self.__unused = BooleanOption(
_("Include unused images and media objects"), True)
self.__unused.set_help(_('Whether to include unused or unreferenced'
@ -1902,6 +1964,14 @@ class NavWebOptions(MenuReportOptions):
self.__create_thumbs_only.connect("value-changed",
self.__gallery_changed)
self.__create_thumbs_index = BooleanOption(
_("Create the thumbnail index"), False)
self.__create_thumbs_index.set_help(
_("This option allows you to create the thumbnail index"))
addopt("create_thumbs_index", self.__create_thumbs_index)
self.__create_thumbs_index.connect("value-changed",
self.__gallery_changed)
self.__maxinitialimagewidth = NumberOption(
_("Max width of initial image"), _DEFAULT_MAX_IMG_WIDTH, 0, 2000)
self.__maxinitialimagewidth.set_help(
@ -1909,13 +1979,6 @@ class NavWebOptions(MenuReportOptions):
"of the image shown on the media page. Set to 0 for no limit."))
addopt("maxinitialimagewidth", self.__maxinitialimagewidth)
self.__maxinitialimageheight = NumberOption(
_("Max height of initial image"), _DEFAULT_MAX_IMG_HEIGHT, 0, 2000)
self.__maxinitialimageheight.set_help(
_("This allows you to set the maximum height "
"of the image shown on the media page. Set to 0 for no limit."))
addopt("maxinitialimageheight", self.__maxinitialimageheight)
self.__gallery_changed()
def __add_download_options(self, menu):
@ -2164,6 +2227,37 @@ class NavWebOptions(MenuReportOptions):
addopt("caluri", self.__calendar_uri)
self.__calendar_uri_changed()
self.__graph_changed()
self.__updates = BooleanOption(_("Include the news and updates page"),
True)
self.__updates.set_help(_('Whether to include '
'a page with the last updates'))
self.__updates.connect('value-changed', self.__updates_changed)
addopt("updates", self.__updates)
self.__maxdays = NumberOption(_("Max days for updates"), 1, 1, 300)
self.__maxdays.set_help(_("You want to see the last updates on how"
" many days ?"))
addopt("maxdays", self.__maxdays)
self.__maxupdates = NumberOption(_("Max number of updates per object"
" to show"), 1, 1, 100)
self.__maxupdates.set_help(_("How many updates do you want to see max"
))
addopt("maxupdates", self.__maxupdates)
def __updates_changed(self):
"""
Update the change of storage: archive or directory
"""
_updates_option = self.__updates.get_value()
if _updates_option:
self.__maxupdates.set_available(True)
self.__maxdays.set_available(True)
else:
self.__maxupdates.set_available(False)
self.__maxdays.set_available(False)
def __cms_uri_changed(self):
"""
@ -2257,23 +2351,25 @@ class NavWebOptions(MenuReportOptions):
if _gallery_option:
self.__create_thumbs_only.set_available(True)
self.__maxinitialimagewidth.set_available(True)
self.__maxinitialimageheight.set_available(True)
self.__create_images_index.set_available(True)
self.__create_thumbs_index.set_available(True)
self.__unused.set_available(True)
# thumbnail-sized images only...
if _create_thumbs_only_option:
self.__maxinitialimagewidth.set_available(False)
self.__maxinitialimageheight.set_available(False)
# full- sized images and Media Pages will be created...
else:
self.__maxinitialimagewidth.set_available(True)
self.__maxinitialimageheight.set_available(True)
# no images or media objects are to be used...
else:
self.__create_thumbs_only.set_available(False)
self.__maxinitialimagewidth.set_available(False)
self.__maxinitialimageheight.set_available(False)
self.__create_images_index.set_available(False)
self.__create_thumbs_index.set_available(False)
self.__unused.set_available(False)
def __download_changed(self):
"""

View File

@ -52,7 +52,7 @@ import logging
#------------------------------------------------
from gramps.gen.const import GRAMPS_LOCALE as glocale
from gramps.gen.lib import (ChildRefType, Date, Name, Person, EventRoleType,
Event, EventType)
Family, Event, EventType)
from gramps.gen.lib.date import Today
from gramps.gen.plug.report import Bibliography
from gramps.gen.plug.report import utils
@ -469,18 +469,7 @@ class PersonPages(BasePage):
output_file, sio = self.report.create_file(person.get_handle(), "ppl")
self.uplink = True
result = self.write_header(self.sort_name)
indivdetpage, head, dummy_body, outerwrapper = result
# attach the ancestortree style sheet if ancestor
# graph is being created?
if self.report.options["ancestortree"]:
if self.usecms:
fname = "/".join([self.target_uri, "css", "ancestortree.css"])
else:
fname = "/".join(["css", "ancestortree.css"])
url = self.report.build_url_fname(fname, None, self.uplink)
head += Html("link", href=url, type="text/css", media="screen",
rel="stylesheet")
indivdetpage, dummy_head, dummy_body, outerwrapper = result
# begin individualdetail division
with Html("div", class_="content",
@ -496,7 +485,7 @@ class PersonPages(BasePage):
if self.report.options['notes']:
# display Narrative Notes
notelist = person.get_note_list()
sect8 = self.display_note_list(notelist)
sect8 = self.display_note_list(notelist, Person)
if sect8 is not None:
individualdetail += sect8
@ -564,7 +553,7 @@ class PersonPages(BasePage):
if not self.report.options['notes']:
# display Narrative Notes
notelist = person.get_note_list()
sect8 = self.display_note_list(notelist)
sect8 = self.display_note_list(notelist, Person)
if sect8 is not None:
individualdetail += sect8
@ -769,9 +758,9 @@ class PersonPages(BasePage):
seq_ = 0
old_place_title = ""
oldevent = None
links = ""
ln_str = "<a href='%s' title='%s' target='_self'>%s</a>"
ppl_lnk = ""
for index in range(0, number_markers):
(latitude, longitude, placetitle, handle,
event) = place_lat_long[index]
@ -783,19 +772,29 @@ class PersonPages(BasePage):
if bkref_list:
for ref in bkref_list:
(bkref_class, bkref_hdle, role) = ref
if role == "Primary":
if bkref_class == Family and role == "Primary":
url = url_fct(bkref_hdle,
"fam", self.uplink)
fam_fct = self.r_db.get_family_from_handle
fam = fam_fct(bkref_hdle)
fam_name = self.report.get_family_name(fam)
ppl_lnk = ln_str % (url,
fam.get_gramps_id(),
fam_name)
if bkref_class == Person and role == "Primary":
url = url_fct(bkref_hdle,
"ppl", self.uplink)
ppl_fct = self.r_db.get_person_from_handle
person = ppl_fct(bkref_hdle)
pers = ppl_fct(bkref_hdle)
ppl_lnk = ln_str % (url,
person.get_gramps_id(),
self.get_name(person))
pers.get_gramps_id(),
self.get_name(pers))
url = self.report.build_url_fname_html(event.get_handle(),
"evt", self.uplink)
evt_type = self._(str(event.get_type()))
evt_date = self.rlocale.get_date(event.get_date_object())
evt_lnk = ln_str % (url, evt_date, evt_type)
evt_lnk += " (" + evt_date + ")"
links += ' + "</br>%s"' % (ppl_lnk + self._(":") + evt_lnk)
if index == number_markers - 1:
@ -808,8 +807,8 @@ class PersonPages(BasePage):
break
continue
elif old_place_title != "" and index != 0:
(lat, lng, plcetitle, handle_,
event_) = place_lat_long[index-1]
(lat, lng, plcetitle, dummy_handle,
dummy_event) = place_lat_long[index-1]
tracelife = self._create_family_tracelife(tracelife,
plcetitle,
lat,
@ -824,24 +823,33 @@ class PersonPages(BasePage):
if bkref_list:
for ref in bkref_list:
(bkref_class, bkref_hdle, role) = ref
if role == "Primary":
if bkref_class == Family and role == "Primary":
url = url_fct(bkref_hdle,
"fam", self.uplink)
fam_fct = self.r_db.get_family_from_handle
fam = fam_fct(bkref_hdle)
fam_name = self.report.get_family_name(fam)
ppl_lnk = ln_str % (url,
fam.get_gramps_id(),
fam_name)
if bkref_class == Person and role == "Primary":
url = url_fct(bkref_hdle,
"ppl", self.uplink)
ppl_fct = self.r_db.get_person_from_handle
person = ppl_fct(bkref_hdle)
pers = ppl_fct(bkref_hdle)
ppl_lnk = ln_str % (url,
person.get_gramps_id(),
self.get_name(person))
pers.get_gramps_id(),
self.get_name(pers))
url = self.report.build_url_fname_html(event.handle,
"evt",
self.uplink)
evt_type = self._(str(event.get_type()))
evt_date = self.rlocale.get_date(event.get_date_object())
evt_lnk = ln_str % (url, evt_date, evt_type)
date = self.rlocale.get_date(event.get_date_object())
evt_lnk = ln_str % (url, date, evt_type)
evt_lnk += " (" + date + ")"
links = '"</br>%s"' % (ppl_lnk + self._(":") +
evt_lnk)
elif index == number_markers:
links = '"</br>%s"' % (ppl_lnk + self._(":") + evt_lnk)
elif index == number_markers-1:
tracelife = self._create_family_tracelife(tracelife,
placetitle,
latitude,
@ -855,23 +863,45 @@ class PersonPages(BasePage):
if bkref_list:
for ref in bkref_list:
(bkref_class, bkref_hdle, role) = ref
if role == "Primary":
if bkref_class == Family and role == "Primary":
url = url_fct(bkref_hdle,
"fam", self.uplink)
fam_fct = self.r_db.get_family_from_handle
fam = fam_fct(bkref_hdle)
fam_name = self.report.get_family_name(fam)
ppl_lnk = ln_str % (url,
fam.get_gramps_id(),
fam_name)
if bkref_class == Person and role == "Primary":
url = url_fct(bkref_hdle,
"ppl", self.uplink)
ppl_fct = self.r_db.get_person_from_handle
person = ppl_fct(bkref_hdle)
pers = ppl_fct(bkref_hdle)
ppl_lnk = ln_str % (url,
person.get_gramps_id(),
self.get_name(person))
pers.get_gramps_id(),
self.get_name(pers))
url = self.report.build_url_fname_html(event.handle,
"evt",
self.uplink)
evt_type = self._(str(event.get_type()))
date = self.rlocale.get_date(event.get_date_object())
evt_lnk = ln_str % (url, evt_type, evt_type)
evt_lnk += " (" + date + ")"
if "<p>" in links:
links += '"</br>%s"' % (ppl_lnk+self._(":") + evt_lnk)
else:
links = '"<p>%s"' % (ppl_lnk + self._(":") + evt_lnk)
old_place_title = placetitle
seq_ += 1
(lat, lng, plcetitle, dummy_handle,
dummy_event) = place_lat_long[number_markers-1]
tracelife = self._create_family_tracelife(tracelife,
plcetitle,
lat,
lng,
seq_,
links)
tracelife += "];"
# begin MapDetail division...
with Html("div", class_="content", id="FamilyMapDetail") as mapdetail:
@ -899,11 +929,74 @@ class PersonPages(BasePage):
with Html("div", id="map_canvas") as canvas:
mapdetail += canvas
# add div for popups.
if self.mapservice == "Google":
with Html("div", id="popup", inline=True) as popup:
mapdetail += popup
else:
with Html("div", id="popup", class_="ol-popup",
inline=True) as popup:
mapdetail += popup
popup += Html("a", href="#", id="popup-closer",
class_="ol-popup-closer")
popup += Html("div", id="popup-content")
with Html("div", id="tooltip", class_="ol-popup",
inline=True) as tooltip:
mapdetail += tooltip
tooltip += Html("div", id="tooltip-content")
# begin place reference section and its table...
with Html("div", class_="subsection", id="references") as section:
mapdetail += section
section += Html("h4", self._("References"), inline=True)
with Html("table", class_="infolist") as table:
section += table
thead = Html("thead")
table += thead
trow = Html("tr")
thead += trow
trow.extend(
Html("th", label, class_=colclass, inline=True)
for (label, colclass) in [
(_("Date"), "ColumnDate"),
(_("Place Title"), "ColumnPlace"),
(_("Event Type"), "ColumnType")
]
)
tbody = Html("tbody")
table += tbody
# being sorted by date
place_lat_long = sorted(place_lat_long,
key=lambda evt:
evt[4].get_date_object())
for (latitude, longitude, placetitle, handle,
event) in place_lat_long:
trow = Html("tr")
tbody += trow
date = event.get_date_object()
trow.extend(
Html("td", data, class_=colclass, inline=True)
for data, colclass in [
(self.rlocale.get_date(date), "ColumnDate"),
(self.place_link(handle, placetitle,
uplink=True),
"ColumnPlace"),
(self._(str(event.get_type())), "ColumnType")
]
)
# begin javascript inline code...
with Html("script", deter="deter",
style='width =100%; height =100%;',
type="text/javascript", indent=False) as jsc:
head += jsc
mapdetail += jsc
# Link to Gramps marker
fname = "/".join(['images', 'marker.png'])
@ -975,71 +1068,8 @@ class PersonPages(BasePage):
mapdetail += Html("button", _("Drop Markers"),
id="drop", onclick="drop()", inline=True)
# add div for popups.
if self.mapservice == "Google":
with Html("div", id="popup", inline=True) as popup:
mapdetail += popup
else:
with Html("div", id="popup", class_="ol-popup",
inline=True) as popup:
mapdetail += popup
popup += Html("a", href="#", id="popup-closer",
class_="ol-popup-closer")
popup += Html("div", id="popup-content")
with Html("div", id="tooltip", class_="ol-popup",
inline=True) as tooltip:
mapdetail += tooltip
tooltip += Html("div", id="tooltip-content")
# begin place reference section and its table...
with Html("div", class_="subsection", id="references") as section:
mapdetail += section
section += Html("h4", self._("References"), inline=True)
with Html("table", class_="infolist") as table:
section += table
thead = Html("thead")
table += thead
trow = Html("tr")
thead += trow
trow.extend(
Html("th", label, class_=colclass, inline=True)
for (label, colclass) in [
(_("Date"), "ColumnDate"),
(_("Place Title"), "ColumnPlace"),
(_("Event Type"), "ColumnType")
]
)
tbody = Html("tbody")
table += tbody
# being sorted by date
place_lat_long = sorted(place_lat_long,
key=lambda evt:
evt[4].get_date_object())
for (latitude, longitude, placetitle, handle,
event) in place_lat_long:
trow = Html("tr")
tbody += trow
date = event.get_date_object()
trow.extend(
Html("td", data, class_=colclass, inline=True)
for data, colclass in [
(self.rlocale.get_date(date), "ColumnDate"),
(self.place_link(handle, placetitle,
uplink=True),
"ColumnPlace"),
(self._(str(event.get_type())), "ColumnType")
]
)
# add body id for this page...
body.attr = 'id ="FamilyMap" onload ="initialize()"'
body.attr = 'id ="FamilyMap"'
# add clearline for proper styling
# add footer section
@ -1392,7 +1422,7 @@ class PersonPages(BasePage):
for data in [
person_lnk,
person_ref.get_relation(),
self.dump_notes(person_ref.get_note_list()),
self.dump_notes(person_ref.get_note_list(), Person),
self.get_citation_links(
person_ref.get_citation_list()),
]:

View File

@ -101,6 +101,7 @@ class PlacePages(BasePage):
self.person = None
self.familymappages = None
self.googlemapkey = None
self.stamenopts = None
# Place needs to display coordinates?
self.display_coordinates = report.options["coordinates"]
@ -301,7 +302,8 @@ class PlacePages(BasePage):
output_file, sio = self.report.create_file(place_handle, "plc")
self.uplink = True
self.page_title = place_name
placepage, head, body, outerwrapper = self.write_header(_("Places"))
(placepage, head, dummy_body,
outerwrapper) = self.write_header(_("Places"))
self.placemappages = self.report.options['placemappages']
self.mapservice = self.report.options['mapservice']
@ -341,7 +343,7 @@ class PlacePages(BasePage):
placedetail += placegallery
# place notes
notelist = self.display_note_list(place.get_note_list())
notelist = self.display_note_list(place.get_note_list(), Place)
if notelist is not None:
placedetail += notelist
@ -358,9 +360,6 @@ class PlacePages(BasePage):
if self.placemappages:
if place and (place.lat and place.long):
latitude, longitude = conv_lat_lon(place.get_latitude(),
place.get_longitude(),
"D.D8")
placetitle = place_name
# add narrative-maps CSS...
@ -406,49 +405,21 @@ class PlacePages(BasePage):
with Html("div", id="map_canvas", inline=True) as canvas:
placedetail += canvas
# Begin inline javascript code because jsc is a
# docstring, it does NOT have to be properly indented
if self.mapservice == "Google":
with Html("script", type="text/javascript",
indent=False) as jsc:
head += jsc
# Google adds Latitude/ Longitude to its maps...
plce = placetitle.replace("'", "\\'")
jsc += MARKER_PATH % marker_path
jsc += MARKERS % ([[plce,
latitude,
longitude,
1,""]],
latitude, longitude,
10)
elif self.mapservice == "OpenStreetMap":
with Html("script", type="text/javascript") as jsc:
canvas += jsc
jsc += MARKER_PATH % marker_path
jsc += OSM_MARKERS % ([[float(longitude),
float(latitude),
placetitle,""]],
longitude, latitude, 10)
jsc += OPENLAYER
else: # STAMEN
with Html("script", type="text/javascript") as jsc:
canvas += jsc
jsc += MARKER_PATH % marker_path
jsc += STAMEN_MARKERS % ([[float(longitude),
float(latitude),
placetitle,""]],
self.stamenopts,
longitude, latitude, 10)
jsc += OPENLAYER
# add javascript function call to body element
body.attr += ' onload = "initialize();" '
# add div for popups.
if self.mapservice == "Google":
with Html("div", id="popup", inline=True) as popup:
placedetail += popup
else:
with Html("div", id="popup", class_="ol-popup",
inline=True) as popup:
placedetail += popup
popup += Html("a", href="#", id="popup-closer",
class_="ol-popup-closer")
popup += Html("div", id="popup-content")
with Html("div", id="tooltip", class_="ol-popup",
inline=True) as tooltip:
placedetail += tooltip
tooltip += Html("div", id="tooltip-content")
# source references
srcrefs = self.display_ind_sources(place)
@ -460,6 +431,48 @@ class PlacePages(BasePage):
if ref_list is not None:
placedetail += ref_list
# Begin inline javascript code because jsc is a
# docstring, it does NOT have to be properly indented
if self.placemappages:
if place and (place.lat and place.long):
latitude, longitude = conv_lat_lon(place.get_latitude(),
place.get_longitude(),
"D.D8")
scripts = Html()
if self.mapservice == "Google":
with Html("script", type="text/javascript",
indent=False) as jsc:
scripts += jsc
# Google adds Latitude/ Longitude to its maps...
plce = placetitle.replace("'", "\\'")
jsc += MARKER_PATH % marker_path
jsc += MARKERS % ([[plce,
latitude,
longitude,
1, ""]],
latitude, longitude,
10)
elif self.mapservice == "OpenStreetMap":
with Html("script", type="text/javascript") as jsc:
scripts += jsc
jsc += MARKER_PATH % marker_path
jsc += OSM_MARKERS % ([[float(longitude),
float(latitude),
placetitle, ""]],
longitude, latitude, 10)
jsc += OPENLAYER
else: # STAMEN
with Html("script", type="text/javascript") as jsc:
scripts += jsc
jsc += MARKER_PATH % marker_path
jsc += STAMEN_MARKERS % ([[float(longitude),
float(latitude),
placetitle, ""]],
self.stamenopts,
longitude, latitude, 10)
jsc += OPENLAYER
placedetail += scripts
# add clearline for proper styling
# add footer section
footer = self.write_footer(ldatec)

View File

@ -271,7 +271,7 @@ class RepositoryPages(BasePage):
repositorydetail += urllist
# reposity: notelist
notelist = self.display_note_list(repo.get_note_list())
notelist = self.display_note_list(repo.get_note_list(), Repository)
if notelist is not None:
repositorydetail += notelist

View File

@ -273,7 +273,7 @@ class SourcePages(BasePage):
tbody += trow
# Source notes
notelist = self.display_note_list(source.get_note_list())
notelist = self.display_note_list(source.get_note_list(), Source)
if notelist is not None:
sourcedetail += notelist

View File

@ -76,6 +76,7 @@ class ThumbnailPreviewPage(BasePage):
"""
BasePage.__init__(self, report, title)
self.create_thumbs_only = report.options['create_thumbs_only']
self.create_thumbs_index = self.report.options['create_thumbs_index']
# bug 8950 : it seems it's better to sort on desc + gid.
def sort_by_desc_and_gid(obj):
"""
@ -108,6 +109,7 @@ class ThumbnailPreviewPage(BasePage):
media_list.sort(key=lambda x: self.rlocale.sort_key(x[0]))
# Create thumbnail preview page...
if self.create_thumbs_index:
output_file, sio = self.report.create_file("thumbnails")
result = self.write_header(self._("Thumbnails"))
thumbnailpage, dummy_head, body, outerwrapper = result
@ -197,6 +199,7 @@ class ThumbnailPreviewPage(BasePage):
# send page out for processing
# and close the file
if self.create_thumbs_index:
self.xhtml_writer(thumbnailpage, output_file, sio, 0)

View File

@ -0,0 +1,241 @@
# -*- coding: utf-8 -*-
#!/usr/bin/env python
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2000-2007 Donald N. Allingham
# Copyright (C) 2019- Serge Noiraud
#
# 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
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
#
"""
Narrative Web Page generator.
Classe:
UpdatesPage
"""
#------------------------------------------------
# python modules
#------------------------------------------------
from decimal import getcontext
import logging
from time import (strftime, time, localtime)
#------------------------------------------------
# Gramps module
#------------------------------------------------
from gramps.gen.const import GRAMPS_LOCALE as glocale
from gramps.plugins.lib.libhtml import Html
#------------------------------------------------
# specific narrative web import
#------------------------------------------------
from gramps.plugins.webreport.basepage import BasePage
from gramps.gen.display.place import displayer as _pd
from gramps.plugins.webreport.common import (FULLCLEAR, _EVENTMAP)
from gramps.gen.lib import (Person, Family, Event, Place, Source, Repository,
Media)
from gramps.gen.lib.date import Date
_ = glocale.translation.sgettext
LOG = logging.getLogger(".NarrativeWeb")
getcontext().prec = 8
class UpdatesPage(BasePage):
"""
This class is responsible for displaying information about the Home page.
"""
def __init__(self, report, title):
"""
@param: report -- The instance of the main report class for
this report
@param: title -- Is the title of the web page
"""
BasePage.__init__(self, report, title)
ldatec = 0
output_file, sio = self.report.create_file("updates")
result = self.write_header(self._('New and updated objects'))
homepage, dummy_head, dummy_body, outerwrapper = result
self.days = self.report.options['maxdays']
self.nbr = self.report.options['maxupdates']
cur_time = int(time())
self.maxdays = cur_time - (86400 * self.days)
# begin updates division
with Html("div", class_="content", id="Updates") as section:
outerwrapper += section
description = ("This page contains the last updated objects in the"
" database in the last %(days)d days and for a "
"maximum of %(nb)d objects per object type." % {
'days' : self.days,
'nb' : self.nbr
}
)
section += Html("p", description)
header = self._("People")
section += Html("h4", header)
people = self.list_people_changed(Person)
if people is not None:
section += people
if self.report.options['inc_families']:
header = self._("Families")
section += Html("h4", header)
families = self.list_people_changed(Family)
if families is not None:
section += families
if self.report.options['inc_events']:
header = self._("Events")
section += Html("h4", header)
events = self.list_people_changed(Event)
if events is not None:
section += events
if self.report.options['inc_places']:
header = self._("Places")
section += Html("h4", header)
places = self.list_people_changed(Place)
if places is not None:
section += places
if self.report.options['inc_sources']:
header = self._("Sources")
section += Html("h4", header)
sources = self.list_people_changed(Source)
if sources is not None:
section += sources
if self.report.options['inc_repository']:
header = self._("Repositories")
section += Html("h4", header)
repos = self.list_people_changed(Repository)
if repos is not None:
section += repos
if (self.report.options['gallery'] and not
self.report.options['create_thumbs_only']):
header = self._("Media")
section += Html("h4", header)
media = self.list_people_changed(Media)
if media is not None:
section += media
# create clear line for proper styling
# create footer section
footer = self.write_footer(ldatec)
outerwrapper += (FULLCLEAR, footer)
# send page out for processing
# and close the file
self.xhtml_writer(homepage, output_file, sio, ldatec)
def list_people_changed(self, object_type):
"""
List all records with last change date
"""
nb_items = 0
def sort_on_change(handle):
""" sort records based on the last change time """
obj = fct(handle)
timestamp = obj.get_change_time()
return timestamp
if object_type == Person:
fct = self.report.database.get_person_from_handle
fct_link = self.new_person_link
elif object_type == Family:
fct = self.report.database.get_family_from_handle
fct_link = self.family_link
elif object_type == Event:
fct = self.report.database.get_event_from_handle
elif object_type == Place:
fct = self.report.database.get_place_from_handle
fct_link = self.place_link
elif object_type == Source:
fct = self.report.database.get_place_from_handle
fct_link = self.source_link
elif object_type == Repository:
fct = self.report.database.get_place_from_handle
fct_link = self.repository_link
elif object_type == Media:
fct = self.report.database.get_place_from_handle
obj_list = sorted(self.report.obj_dict[object_type],
key=sort_on_change, reverse=True)
with Html("table", class_="list", id="list") as section:
for handle in obj_list:
row = Html("tr")
section += row
date = obj = None
name = ""
obj = fct(handle)
if object_type == Person:
name = fct_link(handle)
elif object_type == Family:
name = self.report.get_family_name(obj)
name = fct_link(handle, name)
elif object_type == Event:
otype = obj.get_type()
date = obj.get_date_object()
if int(otype) in _EVENTMAP:
handle_list = set(
self.report.database.find_backlink_handles(
handle,
include_classes=['Family', 'Person']))
else:
handle_list = set(
self.report.database.find_backlink_handles(
handle,
include_classes=['Person']))
if handle_list:
name = Html("span", self._(otype.xml_str())+" ")
for obj_t, r_handle in handle_list:
if obj_t == 'Person':
name += self.new_person_link(r_handle)
else:
srbd = self.report.database
fam = srbd.get_family_from_handle(r_handle)
srgfn = self.report.get_family_name
name += self.family_link(r_handle, srgfn(fam))
elif object_type == Place:
name = _pd.display(self.report.database, obj)
name = fct_link(handle, name)
elif object_type == Source:
name = obj.get_title()
name = fct_link(handle, name)
elif object_type == Repository:
name = obj.get_name()
name = fct_link(handle, name)
elif object_type == Media:
name = obj.get_description()
url = self.report.build_url_fname_html(handle, "img")
name = Html("a", name, href=url, title=name)
if obj:
timestamp = obj.get_change_time()
if timestamp - self.maxdays > 0:
nb_items += 1
if nb_items > self.nbr:
break
tims = localtime(timestamp)
odat = Date(tims.tm_year, tims.tm_mon, tims.tm_mday)
date = self.rlocale.date_displayer.display(odat)
date += strftime(' %X', tims)
row += Html("td", date, class_="date")
row += Html("td", name)
return section