diff --git a/src/data/Web_Print-Default.css b/src/data/Web_Print-Default.css
index 48748c5de..b036bbfb7 100644
--- a/src/data/Web_Print-Default.css
+++ b/src/data/Web_Print-Default.css
@@ -1,52 +1,54 @@
/*
-**************************************************************************************************
+ **************************************************************************************************
Copyright Holder and License
**************************************************************************************************
GRAMPS Cascading Style Sheet
-Style Name: Print Style Sheet
+Style Name: Web_Print-Default
Style Author: Jason M. Simanek (2008)
-Modified by Rob G. Healey, July 2008
-
**************************************************************************************************
-This website was created with GRAMPS
+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.
+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 to learn more!
+Go to http://gramps-project.org to learn more!
--------------------------------------------------------------------------------------------------
-Copyright 2008 Rob G. Healey
+Copyright 2009 Stephane Charette
This file is part of the GRAMPS program.
-GRAMPS 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, version 2 of the License.
+GRAMPS 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, version 2 of the License.
-GRAMPS 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.
+GRAMPS 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
-GRAMPS. If not, see .
+You should have received a copy of the GNU General Public License along with GRAMPS. If not,
+see .
--------------------------------------------------------------------------------------------------
-
Color Palette
--------------------------------------------------------------------------------------------------
-gray #A7A7A7
-red #520
-black #000
-white #FFF
----------------------------------------------------------------------------------------------------
+White #FFF
+black #000
+
+===== Ancestor Graph Color Scheme =====
+Males #E5F2FE
+Females #FFC0CB
+Unknown #000
+
+===== Web Graphics =====
+Males Web_Gender_Male.png
+Females Web_Gender_Female.png
# $Id$
NarrativeWeb Styles
--------------------------------------------------------------------------------------------
- General Elements
+ General Elements
----------------------------------------------------- */
body {
@@ -59,28 +61,43 @@ div {
margin:0;
padding:0;
}
+table {
+ border:none;
+ border-collapse:collapse;
+}
+th {
+ font-weight:bold;
+ text-align:left;
+ padding:1px 3em 1px 0.5em;
+}
+td {
+ vertical-align:top;
+ padding:0;
+}
img {
border:none;
margin:0;
}
-.content { }
+.content {
+ width:965px;
+ margin:0 auto;
+ padding-bottom:.5em;
+ background-color:#FFF;
+ color:#000;
+}
.content div.snapshot {
- float:right;
- margin:1.6em;
+ margin:0;
padding:0;
background:none;
}
.content div.snapshot div.thumbnail {
margin:0;
- padding:0;
+ padding:2em 0 0 0;
background:none;
}
-.content .thumbnail a:link:after, .content .thumbnail a:visited:after {
- content:"";
-}
.fullclear {
width:100%;
- height:1pt;
+ height:1px;
margin:0;
padding:0;
clear:both;
@@ -89,57 +106,35 @@ img {
/* General Text
----------------------------------------------------- */
h1 {
- font:normal 16pt/18pt serif;
- margin:0;
- padding:0;
+ font:normal 2em/1.2em serif;
}
h2 {
- font:normal 18pt/23pt serif;
- display:inline;
- margin:0;
- padding:0;
+ display:none;
}
h3 {
- font:normal 18pt/23pt serif;
- text-align:left;
- display:inline;
- margin:0 0 0 8pt;
- padding:0;
+ font:normal 2em/1.2em serif;
+ text-align:center;
+ margin:0;
+ padding:.5em 20px .2em 20px;
+ border-bottom:double 4px #000;
}
h4 {
- display:block;
- clear:both;
- font:normal 14pt/16pt serif;
- margin:8pt 0 0 0;
- padding:8pt 0 1pt 0;
- border-top:solid .5pt #A7A7A7
+ font:normal 1.2em/1.2em serif;
+ color:#000;
+ margin:0;
+ padding:.2em 0 .2em 20px;
+ border-bottom:solid 2px #000;
}
h5, h6 {
- font:normal 14pt/16pt serif;
+ font:normal 1em/1.2em serif;
font-style:italic;
- margin:0;
- padding:0;
-}
-p {
- font:normal 11pt/14pt serif;
+ margin:1.3em 0 .5em 1em;
}
+
p#description {
- margin:0 0 14pt 0;
-}
-a:link, a:visited {
- color:#520;
- text-decoration:underline;
-}
-.content a:link:after, content a:visited:after {
- font-size:70%;
- font-family:sans-serif;
- content:" (" attr(href) ") ";
-}
-.content ol li a:link {
- text-decoration:none;
-}
-.content ol li a:link:after, .content ol li a:visited:after {
- content:"";
+ max-width:800px;
+ margin:0;
+ padding:1em 20px;
}
sup {
line-height:0;
@@ -151,149 +146,287 @@ ol {
padding-top:.5em;
padding-bottom:0;
}
+span.preposition {
+ padding-left:1em;
+ padding-right:1em;
+}
+.grampsid {
+ font:normal .8em/1.2em monospace;
+ color:#000;
+}
/* Header
----------------------------------------------------- */
-#Header {
- padding:0 0 8pt 0;
- margin:0 0 8pt 0;
- border-bottom:solid .5pt #000;
+#header {
+ margin:0;
+ height:1.5cm;
+ padding:0 0 .9em 0;
+ border-bottom:solid 2px #000;
}
#SiteTitle {
- text-align:center;
+ margin:0;
+ padding:.5em 0 0 20px;
+ font-style:italic;
+}
+p#user_header {
+ font-size:1.3em;
+ text-align:left;
+ margin:0;
+ padding:.2em 0 .6em 20px;
+}
+
+/* Footer
+----------------------------------------------------- */
+#footer {
+ clear:both;
+ height:1.5cm;
+ width:100%;
+ font-size:12px;
+ line-height:130%;
+ font-family:sans-serif;
+ margin:0;
+ padding:0;
+ border-top:solid 2px #000;
+ background-color:#FFF;
+ color:#000;
+}
+#footer img {
+ border:0;
+ margin:0 auto;
+ vertical-align:middle;
+}
+#footer p#createdate {
+ float:left;
+ width:45%;
+ text-align:left;
+ margin-left:10px;
+}
+#footer p#copyright {
+ float:right;
+ width:40%;
+ text-align:right;
+ color:#000;
+ margin-right:10px;
+}
+#footer p#copyright img {
+ margin-right:10px;
+}
+#user_footer {
+ width:70%;
+ float:left;
+ margin:1em;
+}
+#user_footer p {
+ font:normal 1em/1.2em serif;
margin:0;
padding:0;
}
-#user_header {
- font-style:italic;
- text-align:center;
- margin:0;
- padding:0
-}
-.grampsid {
- font-size:60%;
- font-family:monospace;
- color:#A7A7A7
+
+/* Alphabet Navigation
+----------------------------------------------------- */
+div#alphabet {
+ display:none;
}
/* Navigation
----------------------------------------------------- */
-#alphabet, #navigation, #subnavigation { display:none; }
+#navigation, #subnavigation {
+ display:none;
+}
/* Main Table
----------------------------------------------------- */
-table {
+table.infolist {
width:100%;
margin:0;
padding:0;
- border:none;
- border-collapse:collapse;
- border-bottom:solid .5pt #FFF;
+ background-color:#FFF;
}
-table thead tr th {
- text-align:left;
- font:normal 11pt/13pt serif;
+table.infolist thead tr th {
+ font:normal 1.1em/1.2em serif;
color:#000;
margin:0;
- padding:0;
- padding-bottom:1pt;
- border-bottom:solid .5pt #000;
+ padding:.2em 10px;
+ border-bottom:solid 1px #000;
}
-.content table thead tr th a {
- text-decoration:none;
-}
-.content table thead tr th a:link:after, .content table thead tr th a:visited:after {
- content:"";
-}
-table tbody tr td {
- font:normal 9pt/11pt sans-serif;
+table.infolist tr td {
+ font:normal 1.1em/1.4em serif;
vertical-align:middle;
- padding:2pt 6pt 1pt 0;
- border-bottom:dashed .5pt #A7A7A7;
+ padding:.1em 10px;
}
-.content table tbody tr td a {
- text-decoration:none;
+table.infolist tr.BeginLetter td, table.infolist tr.BeginSurname td {
+ border-top:solid 1px #453619;
}
-.content table tbody tr td a:link:after, .content table tbody tr td a:visited:after {
- content:"";
-}
-table tr.BeginLetter td, table.infolist tr.BeginSurname td {
- border-top:solid .5pt #A7A7A7;
-}
-table tbody tr td.ColumnRowLabel {
- width:2%;
- color:#A7A7A7;
- text-align:center;
-}
-table tr td.ColumnLetter {
+table.infolist tr td.ColumnLetter {
width:3%;
text-align:center;
}
-table tr td.ColumnAttribute {
+table.infolist tbody tr td.ColumnBirth {
+ font-size:.9em;
+ color:#000;
width:10%;
}
-.content table tbody tr td.ColumnName a {
- text-decoration:none;
-}
-table tbody tr td.ColumnBirth {
+table.infolist tbody tr td.ColumnDeath {
+ font-size:.9em;
width:10%;
}
-table tbody tr td.ColumnDeath {
- width:10%;
- text-decoration:underline;
+table.infolist tbody tr td.ColumnRowLabel {
+ width:2%;
+ color:#000;
+ padding-left:20px;
}
-table tbody tr td.ColumnParents {
- font-size:70%;
+table.infolist tbody tr td.ColumnType {
+ width:6%;
+ padding-left:20px;
}
-table tbody tr td.ColumnParents span.mother:before {
+table.infolist tbody tr td.ColumnPartner {
+ font-size:.9em;
+}
+table.infolist tbody tr td.ColumnParents {
+ font-size:.9em;
+}
+table.infolist tbody tr td.ColumnParents span.father,
+table.infolist tbody tr td.ColumnParents span.mother {
+ display:block;
+}
+table.infolist tbody tr td.ColumnParents span.mother:before {
content:"+ ";
}
-/* Home/Welcome
------------------------------------------------------ */
-#Home p {
- margin:0 0 9pt 0;
-}
-#Home img {
- float:right;
- margin:0;
- padding:0 0 9pt 9pt;
-}
-
-/* Introduction
------------------------------------------------------ */
-#Introduction p {
- margin:0 0 9pt 0;
-}
-#Introduction img {
- float:right;
- margin:0;
- padding:0 0 9pt 9pt;
-}
-
/* Surnames
----------------------------------------------------- */
#Surnames { }
-table.surnamelist tr thead th.ColumnSurname, #Surnames table.surnamelist tbody tr td.ColumnSurname {
+#SurnameDetail p#description { padding-top:0; }
+table.surnamelist thead tr th.ColumnSurname, #Surnames table.surnamelist tbody tr td.ColumnSurname {
width:50%;
}
+table.surnamelist thead tr th {
+ padding:0;
+}
+table.surnamelist thead tr th a, table.surnamelist thead tr th a:visited {
+ display:block;
+ text-align:left;
+ text-decoration:none;
+ padding:.2em 10px;
+}
+table.surnamelist tr th:hover {
+ background-color:#C1B398;
+}
+table.surnamelist thead tr th.ColumnLetter {
+ padding-left:20px;
+ padding-right:10px;
+}
+table#SortByName thead tr th.ColumnSurname, table#SortByCount thead tr th.ColumnQuantity {
+ background-color:#C1B398;
+}
table#SortByName thead tr th.ColumnSurname a:after, table#SortByCount thead tr th.ColumnQuantity a:after {
content:" ↓";
}
+table#SortByName tbody tr td.ColumnSurname {
+ padding:0;
+ background-color:#FFF;
+}
+table#SortByCount tbody tr td.ColumnQuantity {
+ background-color:#FFF;
+}
+table.surnamelist tbody tr td.ColumnSurname:hover, table#SortByName tbody tr td.ColumnSurname:hover {
+ background-color:#C1B398;
+}
+table.surname {
+ border-bottom:solid 1px #000;
+}
+table.surname tbody tr td {
+ border-bottom:dashed 1px #000;
+}
+table.surname thead tr th.ColumnName {
+ width:20%;
+ padding-left:20px;
+}
+table.surname tbody tr td.ColumnName {
+ width:20%;
+ padding:0;
+}
table.surname thead tr th.ColumnParents, table.surname tbody tr td.ColumnParents {
- width:35%;
+ width:25%;
}
/* Individuals
----------------------------------------------------- */
+#Individuals { }
+#Individuals table.individuallist {
+ border-bottom:solid 1px #000;
+}
+#Individuals table.individuallist tbody tr td {
+ border-bottom:dashed 1px #000;
+}
+table.individuallist tbody tr td.ColumnName {
+ padding:0;
+}
+table.individuallist tbody tr td.ColumnPartner {
+ padding:0;
+}
+#Individuals div table.infolist tr td p {
+ font:normal .9em/1.2em sans-serif;
+ vertical-align:top;
+}
+
+/* IndividualDetail
+------------------------------------------------------ */
+#IndividualDetail {
+ background-color:#FFF;
+ color:#000;
+}
+#IndividualDetail div table.infolist tr td {
+ font:normal .9em/1.2em sans-serif;
+ vertical-align:top;
+}
+#IndividualDetail table.infolist tbody tr td.ColumnAttribute {
+ width:10%;
+}
+#IndividualDetail div.subsection table tr td:first-child {
+ padding-left:20px;
+}
+
+/* Sources
+----------------------------------------------------- */
+#Sources { }
+#Sources table.infolist tbody tr td.ColumnRowLabel {
+ padding-bottom:0;
+}
+#Sources table.infolist tbody tr td.ColumnName {
+ padding:0;
+}
+#SourceDetail div#references ol li {
+ padding-bottom:.5em;
+}
+
+/* Places
+----------------------------------------------------- */
+#Places { }
+#Places table.infolist tbody tr td.ColumnName {
+ padding:0;
+}
/* Gallery
----------------------------------------------------- */
-#GalleryDetail h2 {
- display:none;
+#Gallery { }
+#Gallery table.infolist tbody tr td.ColumnRowLabel, #Gallery table.infolist tbody tr td.ColumnDate {
+ padding-bottom:0;
+}
+#Gallery table.infolist tbody tr td.ColumnName {
+ padding:0;
}
#GalleryNav {
- display:none;
+ display:none'
+}
+#GalleryPages {
+ margin:0 1em;
+}
+#GalleryCurrent {
+ font:bold 1.2em/1em sans-serif;
+}
+#GalleryTotal {
+ font-weight:normal;
}
#GalleryDisplay {
margin:0 auto;
@@ -301,126 +434,353 @@ table.surname thead tr th.ColumnParents, table.surname tbody tr td.ColumnParents
position:relative;
overflow:hidden;
text-align:center;
+ border:solid 1px #000;
}
#GalleryDisplay img {
margin:0 auto;
- border:solid 1pt #542;
}
-#GalleryDetail h3 {
- display:block;
+#GalleryDetail div#summaryarea{
+ margin:0;
+ padding:2em 0 0 0;
+}
+#GalleryDetail div#summaryarea h3 {
+ font:normal 1.2em/1.2em serif;
text-align:center;
- margin:2pt 0 8pt 0;
+}
+#GalleryDetail div h4 {
+ margin-top:0;
+}
+#GalleryDetail div#summaryarea table.gallery {
+ padding-bottom:0;
+ margin-top:1.5em;
+ margin-bottom:0;
+ background-color:#FFF;
+ border-style:solid;
+ border-width:8px 0 0 0;
+ border-color:#000;
}
-/* Download
+/* Contact
----------------------------------------------------- */
-#Download p {
- margin:0 0 9pt 0;
+#Contact #summaryarea {
+ width:500px;
+ margin:0 auto;
+ padding:3em;
}
-#Download img {
+#Contact #summaryarea img {
float:right;
margin:0;
- padding:0 0 9pt 9pt;
}
-
-/* Contact
------------------------------------------------------ */
#researcher {
- margin:16pt 0 0 0;
-}
-#Contact img {
- float:right;
- margin:0;
- padding:0 0 9pt 9pt;
+ font:normal 1.5em/1.4em serif;
+ margin-top:.3em;
}
#researcher h3 {
- margin:0;
+ font:normal 1.2em/1.4em serif;
+ padding:0;
+ text-align:left;
}
#researcher span {
- font:normal .9em/1.4em serif;
- display:block;
float:left;
+ display:block;
+ font:normal .9em/1.4em serif;
margin-right:.4em;
}
-#city {
- clear:left;
+#streetaddress {
+ width:100%;
}
#city:after {
content:",";
}
+#country {
+ clear:left;
+}
#email {
clear:left;
}
-/* Subsections
+/* Download
----------------------------------------------------- */
-#Home, #Introduction, #Download, #Contact {
- padding:3em 20px;
+#Download {
+ padding-top:2cm;
+ padding-bottom:2cm;
+ padding-left:.5cm;
+ padding-right:.5cm;
+ height:390px;
+ color:#000;
+}
+table.download {
+ border:solid 2px #000;
+ width:100%;
+}
+table.download img {
+ float:center;
+}
+table.download thead tr th {
+ text-transform:uppercase;
+ padding-left:20px;
+ padding-top:15px;
+ border-style:solid;
+ border-color:#000;
+ border-width:0 2px 2px 2px;
+ text-align:left;
+}
+table.download tbody tr#Row02 {
+ border-bottom:solid 2px #000;
+}
+table.download tbody tr td {
+ padding-left:20px;
+ padding-top:15px;
+ border-style:solid;
+ border-color:#000;
+ border-width:0 2px 2px 2px;
+ text-align:left;
+}
+table.download td.Description {
+ width:45%;
+}
+table.download td.License {
+ width:6%;
+ padding-left:20px;
+}
+table.download td.Filename {
+ width:30%;
+}
+table.download td.Modified {
+ width:17%;
+ font-weight:bold;
}
-/* Subsections : Events
+/* Subsections
----------------------------------------------------- */
-#IndividualDetail .ColumnValue {
- padding:4pt 0;
+#Home, #Introduction, #Contact {
+ padding:2em 0 3em 0;
}
-.ColumnValue p {
- font:normal 9pt/11pt sans-serif;
- margin:1pt 0 0 18pt;
+#Home p, #Introduction p {
+ margin:0 20px 1em 20px;
+}
+#Home img, #Introduction img {
+ float:right;
+ margin:0;
+ padding:0 20px 3em 2em;
+}
+div.subsection{
+ padding-bottom:.5em;
+ background-color:#FFF;
+}
+div.subsection h4 {
+ margin-bottom:.5em;
+}
+div.subsection table, div.subsection ol, div.subsection p {
+ font-size:.9em;
+}
+div.subsection table.infolist {
+ width:100%;
+ margin:0;
}
-/* Subsections : Gallery
+/* Subsections : Events
+----------------------------------------------------- */
+div#events {
+ padding-bottom:0;
+ height:2.5cm;
+ overflow:auto;
+}
+div#events h4 {
+ margin-bottom:0;
+ border:none;
+}
+#IndividualDetail div#events table.infolist thead tr th {
+ font-weight:bold;
+ font-size:12px;
+ line-height:12px;
+ font-family:sans-serif;
+ text-transform:uppercase;
+ color:#000;
+ padding-top:6px;
+ padding-bottom:4px;
+ background-color:#6AF364;
+}
+#IndividualDetail div#events table.eventtable {
+ width:100%;
+ padding-bottom:15px;
+}
+#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;
+}
+#IndividualDetail div#events table.infolist tbody tr td.ColumnAttribute {
+ border-bottom:solid 1px #453619;
+}
+#IndividualDetail div#events table.infolist tbody tr td.ColumnValue {
+ border-bottom:solid 1px #453619;
+}
+table.infolist tbody tr td.ColumnValue p {
+ font-family:sans-serif;
+ color:#696969;
+ margin:.2em 0 0 2em;
+}
+
+/* Subsections : Attributes
+----------------------------------------------------- */
+
+/* Subsections : Parents
+----------------------------------------------------- */
+div#parents table.infolist {
+ margin-top:.5em;
+}
+div#parents table.infolist tbody tr td.ColumnAttribute {
+ width:19%;
+}
+div#parents table.infolist tbody tr td.ColumnValue ol {
+ margin:0;
+ padding-top:0;
+}
+div#parents table.infolist tbody tr td.ColumnValue ol li {
+ padding-bottom:.2em;
+}
+
+/* Subsections : Families
+----------------------------------------------------- */
+div#families table.infolist {
+ margin-top:.5em;
+}
+div#families table.infolist tbody tr td.ColumnValue p {
+ margin-top:0;
+}
+div#families table.infolist tbody tr td.ColumnValue ol {
+ margin:0;
+ padding-top:0;
+}
+div#families table.infolist tbody tr td.ColumnValue ol li {
+ padding-bottom:.2em;
+}
+
+/* Subsections : Addresses
+----------------------------------------------------- */
+div#addresses {
+ padding-bottom:0;
+}
+div#addresses table.infolist tbody tr td {
+ padding-top:.4em;
+ padding-bottom:.4em;
+}
+div#addresses table.infolist tbody tr td.ColumnAttribute {
+ width:30%;
+ border-bottom:solid 1px #453619;
+}
+div#addresses table.infolist tbody tr td.ColumnValue {
+ border-bottom:solid 1px #453619;
+}
+
+/* Subsections : Gallery
----------------------------------------------------- */
#indivgallery h4 {
margin-bottom:1em;
}
-#indivgallery .thumbnail {
+#indivgallery .thumbnail tr {
margin:0;
float:left;
width:130px;
height:150px;
text-align:center;
}
-#indivgallery .thumbnail a {
+#indivgallery .thumbnail tr a {
display:block;
margin:0;
padding:0;
background:none;
}
-#indivgallery .thumbnail a img {
+#indivgallery .thumbnail tr a img {
margin:0;
padding:0;
- border:solid .5pt #000;
+ border:solid 1px #453619;
}
#indivgallery div.thumbnail p {
- font:normal 7pt/9pt sans-serif;
+ font:normal .7em/1.4em sans-serif;
text-align:center;
width:80%;
margin:0 auto;
padding:0;
}
-/* Subsections : Pedigree
+/* Subsections : Narrative
----------------------------------------------------- */
-#pedigree a {
- text-decoration:none;
+div#narrative {
+ padding-bottom:0;
}
-.content #pedigree a:link:after, .content #pedigree a:visited:after {
- content:"";
+#narrative p {
+ font:normal .9em/1.4em sans-serif;
+ margin-top:.5em;
+ margin-bottom:0;
+ padding:0 20px 1em 20px;
+}
+
+/* Subsections : References
+----------------------------------------------------- */
+
+/* Subsections : Source References
+----------------------------------------------------- */
+div#sourcerefs {
+ height:2.5cm;
+ overflow:auto;
+}
+div#sourcerefs ol {
+ list-style-type:decimal;
+}
+div#sourcerefs ol li ol {
+ list-style-type:lower-alpha;
+}
+
+/* Subsections : Summary Area
+----------------------------------------------------- */
+div#summaryarea {
+ background:none;
+}
+div#summaryarea table.infolist {
+ margin:0;
+ padding:0;
+ background:#FFF;
+ border-bottom:solid .7em #FFF;
+}
+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 a, div#summaryarea table.infolist tr td p a {
+ display:inline;
+}
+div#summaryarea table.infolist tbody tr td.ColumnAttribute {
+ width:14%;
+ color:#696969;
+ padding-left:20px;
+}
+
+/* Subsections : Weblinks
+----------------------------------------------------- */
+
+/* Subsections : Pedigree
+----------------------------------------------------- */
+div#pedigree {
+ padding-bottom:1.2em;
}
.pedigreegen {
- font:normal 10pt/12pt sans-serif;
+ font:normal .9em/1.2em sans-serif;
list-style:none;
- margin:8pt 0 0 0;
+ margin:.5em 0 0 0;
padding:0 0 0 20px;
}
.pedigreegen li ol {
list-style:none;
- margin-left:16pt;
+ margin-left:.5em;
}
.pedigreegen li ol li ol {
- font:normal 9pt/11pt sans-serif;
+ font:normal 1em/1.4em sans-serif;
list-style:decimal;
- margin-left:16pt;
+ margin-left:1.6em;
}
.pedigreegen li ol li ol li ol.spouselist {
list-style:none;
@@ -428,11 +788,12 @@ table.surname thead tr th.ColumnParents, table.surname tbody tr td.ColumnParents
}
.spouselist li.spouse ol {
list-style:decimal;
- margin-left:16pt;
+ margin-left:1.6em;
}
.spouse a {
font-weight:normal;
font-style:normal;
+ color:#000;
}
.spouse:before {
content: "+ ";
@@ -441,195 +802,191 @@ table.surname thead tr th.ColumnParents, table.surname tbody tr td.ColumnParents
font-weight:bold;
}
-/* Subsections : Ancestors Tree
+/* Subsections : Ancestors Tree
----------------------------------------------------- */
#tree {
page-break-before:always;
margin:0;
padding:0;
+ background:none;
}
#treeContainer {
position:relative;
z-index:1;
}
-#treeContainer div.boxbg a:link:after, #treeContainer div.boxbg a:visited:after {
- font-size:70%;
- font-family:sans-serif;
- content:"";
-}
-.boxbg {
+#treeContainer div.boxbg {
position:absolute;
margin:0;
padding:0;
background:none;
}
-#treeContainer div.boxbg span.thumbnail {
- display:block;
- margin:0 auto;
-}
-.boxbg a {
+#treeContainer div.boxbg a,
+#treeContainer div.boxbg span.unlinked {
position:relative;
z-index:10;
display:block;
font:normal .7em/1.4em sans-serif;
text-align:center;
text-decoration:none;
- width:50pt;
- padding:5pt 8pt;
- margin:5pt 0 0 0;
+ color:#542;
+ width:118px;
+ padding:5px 20px 7px 20px;
+ margin-top:-25px;
+ margin-left:16px;
background-color:#FFF;
- border:solid 1pt #000;
+ border:solid 1px #453619;
+}
+#treeContainer div.boxbg a.noThumb,
+#treeContainer div.AncCol3 a,
+#treeContainer div.AncCol4 a,
+#treeContainer div.AncCol3 span.unlinked,
+#treeContainer div.AncCol4 span.unlinked {
+ margin-top:10px;
+}
+#treeContainer div.boxbg a.noThumb:hover {
+ margin-top:0;
+}
+#treeContainer div.boxbg span.thumbnail {
+ display:block;
+ height:65px;
+ margin:0 auto;
+ padding:4px 0;
+}
+#treeContainer div.boxbg span.thumbnail img {
+ height:65px;
+ margin:0 auto;
}
#treeContainer div.AncCol3 span.thumbnail, #treeContainer div.AncCol4 span.thumbnail {
display:none;
}
+#treeContainer div.male a,
+#treeContainer div.male span.unlinked {
+ background:url(../images/Web_Gender_Male.png) #BCEAF6 no-repeat top right;
+}
+#treeContainer div.female a,
+#treeContainer div.female span.unlinked {
+ background:url(../images/Web_Gender_Female.png) #FFC0CB no-repeat top right;
+}
+#treeContainer div.unknown a,
+#treeContainer div.unknown span.unlinked {
+ background-color:#000;
+ color:#FAFAFA;
+}
.shadow {
display:none;
}
#tree div div.bvline {
position:absolute;
z-index:2;
- height:1pt;
- margin:0;
+ height:1px;
+ margin:0 0 0 16px;
padding:0;
- background-color:#FFF;
- border-bottom:solid .5pt #A7A7A7
+ background-color:#453619;
}
#tree div div.bhline {
position:absolute;
z-index:2;
- width:1pt;
- margin:0;
+ width:1px;
+ margin:0 0 0 16px;
padding:0;
- background-color:#FFF;
- border-right:solid .5pt #A7A7A7
+ background-color:#453619;
}
.ghline, .gvline {
display:none;
}
-/* Footer
------------------------------------------------------ */
-#footer {
- width:100%;
- margin:0;
- padding:.1in 0 0 0;
- clear:both;
- border-top:solid .5pt #000;
-}
-#user_footer {
- float:left;
- width:70%;
-}
-#user_footer p {
- font-style:italic;
-}
-p#createdate {
- float:left;
- width:3in;
- font:normal 9pt/10pt sans-serif;
- margin:0;
-}
-#copyright {
- float:right;
- width:4in;
- margin:0;
- font:normal 9pt/10pt sans-serif;
- text-align:right;
-}
-p#quality {
- display:none;
-}
-
-/* Calendar Styles
+/* Calendar Styles
-------------------------------------------------------------------------------------------- */
/* Calendar : General */
-body#WebCal h1#SiteTitle {
- float:left;
- font-size:14pt;
- line-height:16pt;
- padding-bottom:.1in;
+body#WebCal {
+ padding:0 14px;
+ background-color:#542;
}
.calendar {
- clear:both;
empty-cells:show;
width:100%;
- font-size:14pt;
+ font-size:1em;
font-weight:normal;
margin:0;
padding:0;
border:none;
border-collapse:collapse;
}
-.calendar thead, .calendar tbody {
- border-style:solid;
- border-width:2pt 2pt 2pt 2pt;
- border-color:#000;
-}
-.calendar tbody {
- border-top:none;
-}
.calendar thead tr th {
- width:12%;
- font-family:sans-serif;
- font-size:10pt;
- font-weight:bold;
+ width:14%;
+ font-weight:normal;
+ font-size:18px;
+ line-height:18px;
text-align:center;
text-transform:uppercase;
- padding:.2em 0 .1em 0;
+ padding:2px 0;
}
.calendar thead tr th.monthName {
width:100%;
- font-size:20pt;
+ font-size:2em;
line-height:100%;
text-transform:none;
- padding:5pt;
- border-width:0;
+ color:#542;
+ padding:.3em 0 .2em 0;
+ background-color:#FFF;
}
#CreatorInfo {
float:right;
- margin:0 10px 0 0;
+ color:#FFF;
+ margin:-24px 10px 0 0;
}
-body#WebCal a {
- text-decoration:none;
+.calendar thead tr th.weekend,
+.calendar thead tr th.weekday {
+ font-style:italic;
color:#000;
-}
-.calendar tfoot {
- border:none;
+ background-color:#6AF364;
+ border:solid 2px #453619;
}
.calendar tfoot tr td {
- font-size:12pt;
- font-style:italic;
padding:.7em 5% 1em 5%;
+ border-top:solid 2px #000;
+ vertical-align:middle;
+ color:#453619;
+ background-color:#D8F3D6;
}
/* Calendar : Date Numeral */
-.calendar td div.date {
+.calendar tbody tr td div.date {
float:right;
display:block;
- font-size:16pt;
+ width:1.8em;
+ font-size:1.2em;
line-height:100%;
- font-weight:bold;
text-align:center;
- color:#000;
+ color:#542;
margin:0 0 0 .5em;
- padding:7pt;
-}
-.calendar td.highlight div.date {
- color:#F00;
+ padding:.2em 0;
+ background-color:#D8F3D6;
}
/* Calendar : Date Container */
.calendar tbody tr td {
vertical-align:top;
- height:4em;
+ height:10em;
padding:0;
border-width:1px 0 0 1px;
border-style:solid;
- border-color:#999;
+ border-color:#453619;
+}
+.calendar tbody tr td.weekday {
+ background-color:#FFF;
+}
+.calendar tbody tr td.weekend {
+ background-color:#D8F3D6;
+}
+.calendar tbody tr td.saturday {
+ border-right:solid 1px #453619;
+ }
+.calendar tbody tr td.sunday {
+ border-left:solid 1px #453619;
}
.calendar tbody tr td:first-child {
- border-left:none;
+ border-left:solid 1px #453619;
}
.calendar tbody tr:first-child td {
border-top:none;
@@ -639,8 +996,8 @@ body#WebCal a {
.calendar tbody tr td ul {
list-style:none;
font-family:sans-serif;
- font-size:8pt;
- margin:30pt 0 5pt 0;
+ font-size:1em;
+ margin:2.3em 0 .3em 0;
padding:0;
}
.calendar tbody tr td ul li {
@@ -648,17 +1005,25 @@ body#WebCal a {
width:92%;
margin:0 4%;
padding:.2em 0 .3em 0;
- border-top:dashed .5pt #999;
+ border-top:dashed 1px #453619;
}
.calendar tbody tr td ul li:first-child {
border:none;
}
+
+/* Calendar : Birthday, Anniversary, Highlight */
.calendar tbody tr td ul li em {
font-style:normal;
- color:#000;
+ color:#0A65B5;
}
.calendar tbody tr td ul li span.yearsmarried em {
- color:#000;
+ color:#453619;
+}
+.calendar tbody tr td.highlight { }
+
+.calendar tbody tr td.highlight div.date {
+ color:#0A65B5;
+ background-color:#C2E1FE;
}
/* Calendar : Previous-Next Month */
@@ -666,10 +1031,10 @@ body#WebCal a {
.calendar tbody tr td.next,
.calendar tbody tr td.previous div.date,
.calendar tbody tr td.next div.date {
- font-weight:normal;
- font-size:12pt;
- color:#999;
+ color:#333;
+ background-color:#D8F3D6;
}
+
/* Calendar : Full Year */
body#fullyearlinked div.content {
width:963px;
@@ -680,7 +1045,7 @@ body#fullyearlinked table.calendar {
float:left;
width:320px;
height:18em;
- border:solid 1px #000;
+ border:solid 1px #453619;
}
body#fullyearlinked table.calendar thead tr th {
height:2em;
@@ -692,3 +1057,9 @@ body#fullyearlinked table.calendar thead tr th.monthName {
body#fullyearlinked table.calendar tbody tr td {
height:3em;
}
+body#fullyearlinked table.calendar tbody tr td.saturday {
+ border-right:solid 2px #000;
+}
+body#fullyearlinked able.calendar tbody tr td.sunday {
+ border:solid 2px #000;
+}
diff --git a/src/plugins/webreport/NarrativeWeb.py b/src/plugins/webreport/NarrativeWeb.py
index 17c7439c3..c84c2c7f8 100644
--- a/src/plugins/webreport/NarrativeWeb.py
+++ b/src/plugins/webreport/NarrativeWeb.py
@@ -24,7 +24,7 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
-# $Id: $
+# $Id:$
"""
Narrative Web Page generator.
@@ -103,6 +103,9 @@ from libhtmlconst import _CHARACTER_SETS, _CC, _COPY_OPTIONS
# import HTML Class
from libhtml import Html
+# import styled notes from
+# src/plugins/lib/libhtmlbackend.py
+from libhtmlbackend import HtmlBackend
#------------------------------------------------------------------------
#
# constants
@@ -191,6 +194,9 @@ class BasePage(object):
gid - Gramps ID
"""
+ # class to do conversion of styled notes to html markup
+ self._backend = HtmlBackend()
+
self.report = report
self.title_str = title
self.gid = gid
@@ -212,6 +218,49 @@ class BasePage(object):
self.linkhome = report.options['linkhome']
self.use_gallery = report.options['gallery']
+#################################################
+#
+# Will produce styled notes for NarrativeWeb by using:
+# src/plugins/lib/libhtmlbackend.py
+#
+#################################################
+
+ def styled_note(self, styledtext, format):
+ """
+ styledtext : assumed a StyledText object to write
+ format : = 0 : Flowed, = 1 : Preformatted
+ style_name : name of the style to use for default presentation
+ """
+ text = str(styledtext)
+
+ if not text:
+ return ''
+
+ s_tags = styledtext.get_tags()
+ #FIXME: following split should be regex to match \n\s*\n instead?
+ markuptext = self._backend.add_markup_from_styled(text, s_tags,
+ split='\n\n')
+ htmllist = Html('div', id='grampsstylednote')
+ if format == 1:
+ #preformatted, retain whitespace.
+ #so use \n\n for paragraph detection
+ #FIXME: following split should be regex to match \n\s*\n instead?
+ htmllist += Html('pre', indent=None, inline=True)
+ for line in markuptext.split('\n\n'):
+ htmllist += Html('p')
+ for realline in line.split('\n'):
+ htmllist += realline
+ htmllist += Html('br')
+
+ elif format == 0:
+ #flowed
+ #FIXME: following split should be regex to match \n\s*\n instead?
+ for line in markuptext.split('\n\n'):
+ htmllist += Html('p')
+ htmllist += line
+
+ return htmllist
+
# ---------------------------------------------------------------------------------------
#
# # Web Page Fortmatter and writer
@@ -289,8 +338,19 @@ class BasePage(object):
footer_note = self.report.options['footernote']
if footer_note:
note = db.get_note_from_gramps_id(footer_note)
- user_footer = Html('div', id='user_footer') + Html('p', note.get())
- footer += user_footer
+ note_text = note.get()
+ if note_text:
+ user_footer = Html('div', id='user_footer')
+
+ # styled notes
+ htmlnotetext = self.styled_note(note.get_styledtext(),
+ note.get_format())
+ if htmlnotetext:
+ text = htmlnotetext
+ else:
+ text = Html('p', note_text)
+ user_footer += text
+ footer += user_footer
value = _dd.display(date.Today())
msg = _('Generated by '
@@ -394,14 +454,25 @@ class BasePage(object):
headerdiv = (Html('div', id='header') +
Html('h1', html_escape(self.title_str), id='SiteTitle', inline=True)
)
-
- header = self.report.options['headernote']
- if header:
- note = db.get_note_from_gramps_id(header)
- p = Html('p', note.get(), id='user_header')
- headerdiv += p
body += headerdiv
+ header_note = self.report.options['headernote']
+ if header_note:
+ note = db.get_note_from_gramps_id(header_note)
+ note_text = note.get()
+ if note_text:
+ user_header = Html('div', id='user_header')
+ headerdiv += user_header
+
+ # styled notes
+ htmlnotetext = self.styled_note(note.get_styledtext(),
+ note.get_format())
+ if htmlnotetext:
+ text = htmlnotetext
+ else:
+ text = Html('p', note_text)
+ user_header += text
+
# Begin Navigation Menu
navigation = self.display_nav_links(title)
body += navigation
@@ -597,23 +668,24 @@ class BasePage(object):
for notehandle in notelist:
note = db.get_note_from_handle(notehandle)
- format = note.get_format()
- text = note.get()
+ note_text = note.get()
try:
- text = unicode(text)
+ note_text = unicode(note_text)
except UnicodeDecodeError:
- text = unicode(str(text), errors='replace')
+ note_text = unicode(str(note_text), errors='replace')
- if text:
- title = Html('h4', _('Narrative'), inline=True)
- section += title
- if format:
- text = u"%s
" % text
+ if note_text:
+ section += Html('h4', _('Narrative'), inline=True)
+
+ # styled notes
+ htmlnotetext = self.styled_note(note.get_styledtext(),
+ note.get_format())
+ if htmlnotetext:
+ section += htmlnotetext
else:
- text = u"
".join(text.split("\n"))
- section += Html('p', text)
+ section += Html('p', note_text)
- # return notes narrative to its callers
+ # return notes to its callers
return section
def display_url_list(self, urllist=None):
@@ -696,7 +768,17 @@ class BasePage(object):
notelist = sref.get_note_list()
for notehandle in notelist:
note = db.get_note_from_handle(notehandle)
- tmp.append("%s: %s" % (_('Text'), note.get()))
+ note_text = note.get()
+ if note_text:
+
+ # styled notes
+ htmlnotetext = self.styled_note(note.get_styledtext(),
+ note.get_format())
+ if htmlnotetext:
+ text = htmlnotetext
+ else:
+ text = Html('p', note_text)
+ tmp.append("%s: %s" % (_('Text'), text))
if len(tmp):
ordered2 += Html('li') + (
Html('a', '; '.join(tmp), name=" #sref%d%s " % (cindex+1, key))
@@ -1884,35 +1966,45 @@ class IntroductionPage(BasePage):
def __init__(self, report, title):
BasePage.__init__(self, report, title)
+ db = report.database
of = self.report.create_file(report.intro_fname)
# Note. In old NarrativeWeb.py the content_divid depended on filename.
- intro, body = self.write_header(_('Introduction'))
+ intropage, body = self.write_header(_('Introduction'))
- sect_intro = Html('div', id='Introduction', class_='content')
+ # begin Introduction division
+ with Html('div', class_='content', id='Introduction') as section:
+ body += section
- introimg = report.add_image('introimg')
- if introimg:
- sect_intro += introimg
+ introimg = report.add_image('introimg')
+ if introimg is not None:
+ section += introimg
- note_id = report.options['intronote']
- if note_id:
- note_obj = report.database.get_note_from_gramps_id(note_id)
- text = note_obj.get()
- if note_obj.get_format():
- text = Html('pre', text)
+ note_id = report.options['intronote']
+ note = db.get_note_from_gramps_id(note_id)
+ if note:
+ note_text = note.get()
+
+ # styled notes
+ htmlnotetext = self.styled_note(note.get_styledtext(),
+ note.get_format())
+ if htmlnotetext:
+ text = htmlnotetext
+ else:
+ text = Html('pre', note_text)
else:
- text = Html('p', '
'.join(text.split('\n')))
- sect_intro += text
+ text = None
+ text = text or ' '
+ section += text
+ # add clearline for proper styling
# create footer section
- # create clear line for proper styling
- # bring all body pieces together
footer = self.write_footer()
- body += (sect_intro, fullclear, footer)
+ body += (fullclear, footer)
# send page out for processing
- self.mywriter(intro, of)
+ # and close the file
+ self.mywriter(intropage, of)
class HomePage(BasePage):
"""
@@ -1933,13 +2025,20 @@ class HomePage(BasePage):
note_id = report.options['homenote']
if note_id:
- note_obj = report.database.get_note_from_gramps_id(note_id)
- text = note_obj.get()
- if note_obj.get_format():
- text = Html('pre', text, inline=True)
- else:
- text = Html('
'.join(text.split('\n')), inline=True)
- sect_home_page += text
+ note = report.database.get_note_from_gramps_id(note_id)
+ note_text = note.get()
+ if note_text:
+ user_footer = Html('div', id='user_footer')
+
+ # styled notes
+ htmlnotetext = self.styled_note(note.get_styledtext(),
+ note.get_format())
+ if htmlnotetext:
+ text = htmlnotetext
+ else:
+ text = Html('p', note_text)
+ user_footer += text
+ sect_home_page += user_footer
# create footer section
# create clear line for proper styling
@@ -2354,13 +2453,18 @@ class ContactPage(BasePage):
note_id = report.options['contactnote']
if note_id:
- note_obj = report.database.get_note_from_gramps_id(note_id)
- text = note_obj.get()
- if note_obj.get_format():
- text = u"\t\t%s
" % text
- else:
- text = u"
".join(text.split("\n"))
- summaryarea += Html('p', text, inline=True)
+ note = report.database.get_note_from_gramps_id(note_id)
+ note_text = note.get()
+ if note_text:
+
+ # styled notes
+ htmlnotetext = self.styled_note(note.get_styledtext(),
+ note.get_format())
+ if htmlnotetext:
+ text = htmlnotetext
+ else:
+ text = Html('p', note_text)
+ summaryarea += text
# add clearline for proper styling
# add footer section
@@ -2764,16 +2868,23 @@ class IndividualPage(BasePage):
# display any notes associated with this name
notelist = name.get_note_list()
- if len(notelist) > 0:
+ if len(notelist):
unordered = Html('ul')
+ tabcol2 += unordered
for notehandle in notelist:
note = db.get_note_from_handle(notehandle)
if note:
note_text = note.get()
if note_text:
- txt = u" ".join(note_text.split("\n"))
- unordered += Html('li', txt, inline=True)
- tabcol2 += unordered
+
+ # styled notes
+ htmlnotetext = self.styled_note(note.get_styledtext(),
+ note.get_format())
+ if htmlnotetext:
+ text = htmlnotetext
+ else:
+ text = Html('pre', note_text)
+ unordered += text
# finished with this name
tabrow += (tabcol1, tabcol2)
@@ -2894,9 +3005,7 @@ class IndividualPage(BasePage):
self.place_list[place_handle] = [lnk]
place = self.place_link(place_handle,
- ReportUtils.place_name(db,
- place_handle),
- up=True)
+ ReportUtils.place_name(db, place_handle), up=True)
else:
place = ''
@@ -2975,15 +3084,16 @@ class IndividualPage(BasePage):
note = db.get_note_from_handle(notehandle)
if note:
note_text = note.get()
- format = note.get_format()
if note_text:
- tabcol += Html('p', class_='EventNote')
- if format:
- tabcol += Html('pre', note_text)
+
+ # styled notes
+ htmlnotetext = self.styled_note(note.get_styledtext(),
+ note.get_format())
+ if htmlnotetext:
+ text = htmlnotetext
else:
- tabcol += '
'.join(note_text.split('\n'))
- else:
- tabcol += ' '
+ text = Html('p', note_text)
+ tabcol += text
tabrow += tabcol
# return events table row to its caller
@@ -3416,21 +3526,24 @@ class IndividualPage(BasePage):
for notehandle in notelist:
note = db.get_note_from_handle(notehandle)
if note:
- text = note.get()
- format = note.get_format()
- if text:
- tabrow = Html('tr')
- tabcol1 = Html('td', ' ', class_='ColumnType', inline=True)
- tabcol2 = Html('td', _('Narrative'), class_='ColumnAttribute', inline=True)
- tabcol3 = Html('td', class_='ColumnValue')
- if format:
- text = u"%s
" % text
+ tabrow = Html('tr')
+ tabcol1 = Html('td', ' ', class_='ColumnType', inline=True)
+ tabcol2 = Html('td', _('Narrative'), class_='ColumnAttribute', inline=True)
+ tabcol3 = Html('td', class_='ColumnValue')
+
+ note_text = note.get()
+ if note_text:
+
+ # styled notes
+ htmlnotetext = self.styled_note(note.get_styledtext(),
+ note.get_format())
+ if htmlnotetext:
+ text = htmlnotetext
else:
- text = u"
".join(text.split("\n"))
- para = Html('p', text)
- tabcol3 += para
- tabrow += (tabcol1, tabcol2, tabcol3)
- relation_table += tabrow
+ text = Html('p', note_text)
+ tabcol3 += text
+ tabrow += (tabcol1, tabcol2, tabcol3)
+ relation_table += tabrow
# return table to its caller
return relation_table