* src/data/main*.css: added stylesheets for web page generator

* src/data/Makefile.am: add stylesheets


svn: r4928
This commit is contained in:
Don Allingham 2005-07-14 04:21:57 +00:00
parent b36133c056
commit 41b9c54f0a
8 changed files with 1213 additions and 91 deletions

View File

@ -2,7 +2,9 @@
* src/Sort.py: don't use upper case, let locale.strcoll figure this * src/Sort.py: don't use upper case, let locale.strcoll figure this
out (correctly) for us out (correctly) for us
* src/plugins/NavWebPage.py: fix sorting. * src/plugins/NavWebPage.py: fix sorting.
* src/data/main*.css: added stylesheets for web page generator
* src/data/Makefile.am: add stylesheets
2005-07-13 Alex Roitman <shura@gramps-project.org> 2005-07-13 Alex Roitman <shura@gramps-project.org>
* src/GenericFilter.py: Proper test for place in event-based * src/GenericFilter.py: Proper test for place in event-based
filters; (Rule.set_list): Add assertion to have the correct number filters; (Rule.set_list): Add assertion to have the correct number

View File

@ -21,7 +21,12 @@ EXTRA_DIST = \
gramps.applications \ gramps.applications \
gramps.keys \ gramps.keys \
gramps.mime \ gramps.mime \
gramps.schemas gramps.schemas \
main1.css\
main2.css\
main3.css\
main4.css\
main5.css
# Conditionally enable/disable gconf schemas or mime types, # Conditionally enable/disable gconf schemas or mime types,
# or disable both in a packager mode # or disable both in a packager mode

224
gramps2/src/data/main1.css Executable file
View File

@ -0,0 +1,224 @@
/* GRAMPS Cascading Style Sheet */
/* Standard Tags {{{1
*/
BODY {
font-family: "Arial", "Helvetica", sans-serif;
background-color: #ffffff;
}
P,BLOCKQUOTE {
font-size: 14px;
}
DIV {
margin: 2px;
padding: 2px;
}
TD {
vertical-align: top;
}
H1 {
font-family: "Verdana", "Bistream Vera Sans", "Arial", "Helvetica", sans-serif;
font-weight: bolder;
font-size: 160%;
margin: 2px;
}
H2 {
font-family: "Verdana", "Bistream Vera Sans", "Arial", "Helvetica", sans-serif;
font-weight: bolder;
font-style: italic;
font-size: 150%;
}
H3 {
font-weight: bold;
margin: 0;
padding-top: 10px;
padding-bottom: 10px;
}
H4 {
margin-top: 1em;
margin-bottom: 0.3em;
padding-left: 4px;
}
H5 {
margin-bottom: 0.5em;
}
H6 {
font-weight: normal;
font-style: italic;
font-size: 100%;
margin-left: 1em;
margin-top: 1.3em;
margin-bottom: 0.8em;
}
HR {
height: 1px;
width: 100%;
margin: 0;
margin-top: 1px;
margin-bottom: 0;
padding: 0;
border-top: 0; /* Hack: Mozilla work-around to eliminate "groove" */
border-color: #000;
}
A:link {
color: #000;
text-decoration: underline;
}
A:visited {
color: #333;
text-decoration: underline;
}
A:hover {
background-color: #eee;
color: #000;
text-decoration: underline;
}
A:active {
background-color: #eee;
color: #000;
text-decoration: none;
}
/* Custom {{{1
*/
.navheader {
padding: 2px;
margin: 2px;
}
.navtitle {
font-size: 130%;
color: #999;
margin: 3px;
}
.navbyline {
float: right;
font-size: 14px;
margin: 2px;
padding: 2px;
padding-right: 10px;
}
.nav {
margin: 0;
margin-bottom: 4px;
padding: 1px;
font-size: 12px;
font-weight: bold;
}
.summaryarea {
min-height: 100px;
/* Hack: IE Dynamic Expression to set the width */
height: expression(document.body.clientHeight < 1 ? "100px" : "100px" );
}
.portrait {
justify: center;
margin: 5px;
margin-right: 20px;
padding: 3px;
border-color: #000;
border-width: 1px;
}
.snapshot {
float: right;
margin: 5px;
margin-right: 20px;
padding: 3px;
}
.thumbnail {
height: 100px;
border-color: #000;
border-width: 1px;
}
.leftwrap {
float: left;
margin: 2px;
margin-right: 10px;
}
.rightwrap {
float: right;
margin: 2px;
margin-left: 10px;
}
TABLE.infolist {
border: 0;
/*width: 100%;*/
font-size: 14px;
}
TD.category {
padding: 1px; /* Defines spacing between rows */
padding-right: 3em;
/*width: 10%;*/
font-weight: bold;
}
TD.field {
padding: 1px; /* Defines spacing between rows */
padding-right: 3em;
/*width: 15%;*/
}
TD.data {
padding: 1px; /* Defines spacing between rows */
padding-right: 3em;
font-weight: bold;
}
.pedigree {
margin: 0;
margin-left: 2em;
padding: 0;
background-color: #eeeeee;
border: 1px;
}
.pedigreeind {
font-size: 14px;
margin: 0;
padding: 2em;
padding-top: 0.25em;
padding-bottom: 0.5em;
}
.footer {
margin: 1em;
font-size: 12px;
float: right;
}
/* 1}}}
vim:foldmethod=marker
/*

211
gramps2/src/data/main2.css Executable file
View File

@ -0,0 +1,211 @@
/* GRAMPS Cascading Style Sheet */
/* Standard Tags {{{1
*/
BODY {
font-family: "Arial", "Helvetica", sans-serif;
background-color: #fafaff;
color: #003;
}
P,BLOCKQUOTE {
font-size: 14px;
}
DIV {
margin: 2px;
padding: 2px;
}
TD {
vertical-align: top;
}
H1 {
font-family: "Verdana", "Bistream Vera Sans", "Arial", "Helvetica", sans-serif;
font-weight: bolder;
font-size: 160%;
margin: 2px;
}
H2 {
font-family: "Verdana", "Bistream Vera Sans", "Arial", "Helvetica", sans-serif;
font-weight: bolder;
font-style: italic;
font-size: 150%;
}
H3 {
font-weight: bold;
margin: 0;
padding-top: 10px;
padding-bottom: 10px;
color: #336;
}
H4 {
margin-top: 1em;
margin-bottom: 0.3em;
padding-left: 4px;
background-color: #667;
color: #fff;
}
H5 {
margin-bottom: 0.5em;
}
H6 {
font-weight: normal;
font-style: italic;
font-size: 100%;
margin-left: 1em;
margin-top: 1.3em;
margin-bottom: 0.8em;
}
HR {
height: 0;
width: 0;
margin: 0;
margin-top: 1px;
margin-bottom: 1px;
padding: 0;
border-top: 0; /* Hack: Mozilla work-around to eliminate "groove" */
border-color: #e0e0e9;
}
A:link {
color: #006;
text-decoration: underline;
}
A:visited {
color: #669;
text-decoration: underline;
}
A:hover {
background-color: #eef;
color: #000;
text-decoration: underline;
}
A:active {
background-color: #eef;
color: #000;
text-decoration: none;
}
/* Custom {{{1
*/
.navheader {
padding: 4px;
background-color: #e0e0e9;
margin: 2px;
}
.navtitle {
font-size: 160%;
color: #669;
margin: 2px;
}
.navbyline {
float: right;
font-size: 14px;
margin: 2px;
padding: 4px;
}
.nav {
margin: 0;
margin-bottom: 4px;
padding: 0;
font-size: 14px;
font-weight: bold;
}
.summaryarea {
min-height: 100px;
/* Hack: IE Dynamic Expression to set the width */
height: expression(document.body.clientHeight < 1 ? "100px" : "100px" );
}
.portrait {
justify: center;
margin: 5px;
margin-right: 20px;
padding: 3px;
border-color: #336;
border-width: 1px;
}
.snapshot {
float: right;
margin: 5px;
margin-right: 20px;
padding: 3px;
}
.thumbnail {
height: 100px;
border-color: #336;
border-width: 1px;
}
.leftwrap {
float: left;
margin: 2px;
margin-right: 10px;
}
.rightwrap {
float: right;
margin: 2px;
margin-left: 10px;
}
TABLE.infolist {
border: 0;
/*width: 100%;*/
font-size: 14px;
}
TD.category {
padding: 3px; /* Defines spacing between rows */
padding-right: 3em;
/*width: 10%;*/
font-weight: bold;
}
TD.field {
padding: 3px; /* Defines spacing between rows */
padding-right: 3em;
/*width: 15%;*/
}
TD.data {
padding: 3px; /* Defines spacing between rows */
padding-right: 3em;
font-weight: bold;
}
.pedigree {
margin: 0;
margin-left: 2em;
padding: 0;
background-color: #e0e0e9;
border: 1px;
}
.pedigreeind {
font-size: 14px;
margin: 0;
padding: 2em;
padding-top: 0.25em;
padding-bottom: 0.5em;
}
.footer {
margin: 1em;
font-size: 12px;
float: right;
}
/* 1}}}
vim:foldmethod=marker
/*

210
gramps2/src/data/main3.css Executable file
View File

@ -0,0 +1,210 @@
/* GRAMPS Cascading Style Sheet */
/* Standard Tags {{{1
*/
BODY {
font-family: "Bitstream Vera Serif", "Times New Roman", "Times", serif;
background-color: #fffffd;
}
P,BLOCKQUOTE {
font-size: 14px;
}
DIV {
margin: 2px;
padding: 2px;
}
TD {
vertical-align: top;
}
H1 {
font-weight: bolder;
font-size: 160%;
margin: 2px;
}
H2 {
font-weight: bolder;
font-style: italic;
font-size: 150%;
}
H3 {
font-weight: bold;
margin: 0;
padding-left: 2em;
padding-bottom: 10px;
}
H4 {
margin-top: 1em;
margin-bottom: 0.3em;
padding-left: 2em;
}
H5 {
margin-bottom: 0.5em;
}
H6 {
font-weight: normal;
font-style: italic;
font-size: 100%;
margin-left: 1em;
margin-top: 1.3em;
margin-bottom: 0.8em;
}
HR {
height: 0;
width: 0;
margin: 0;
margin-top: 1px;
margin-bottom: 1px;
padding: 0;
border-top: 1; /* Hack: Mozilla work-around to eliminate "groove" */
border-color: #ccf;
}
A:link {
color: #110;
text-decoration: underline;
}
A:visited {
color: #665;
text-decoration: underline;
}
A:hover {
background-color: #eed;
color: #110;
text-decoration: underline;
}
A:active {
background-color: #eee;
color: #110;
text-decoration: none;
}
/* Custom {{{1
*/
.navheader {
padding: 4px;
margin: 2px;
}
.navtitle {
font-size: 160%;
color: #998;
margin: 2px;
text-align: center;
}
.navbyline {
float: right;
font-size: 14px;
margin: 2px;
padding: 4px;
}
.nav {
margin: 0;
margin-bottom: 4px;
padding: 0px;
font-size: 14px;
font-weight: bold;
text-align: center;
padding: 4px;
background-color: #ddddcc;
}
.summaryarea {
min-height: 100px;
/* Hack: IE Dynamic Expression to set the width */
height: expression(document.body.clientHeight < 1 ? "100px" : "100px" );
}
.portrait {
justify: center;
margin: 5px;
margin-right: 20px;
padding: 3px;
border-color: #110;
border-width: 1px;
}
.snapshot {
float: right;
margin: 5px;
margin-right: 20px;
padding: 3px;
}
.thumbnail {
height: 100px;
border-color: #110;
border-width: 1px;
}
.leftwrap {
float: left;
margin: 2px;
margin-right: 10px;
}
.rightwrap {
float: right;
margin: 2px;
margin-left: 10px;
}
TABLE.infolist {
border: 0;
/*width: 100%;*/
font-size: 14px;
}
TD.category {
padding: 4px; /* Defines spacing between rows */
padding-right: 3em;
/*width: 10%;*/
font-weight: bold;
}
TD.field {
padding: 4px; /* Defines spacing between rows */
padding-right: 3em;
/*width: 20%;*/
background-color: #f6f6f0;
}
TD.data {
padding: 4px; /* Defines spacing between rows */
padding-right: 3em;
font-weight: bold;
}
.pedigree {
margin: 0;
margin-left: 2em;
padding: 0;
background-color: #f6f6f0;
border: 1px;
}
.pedigreeind {
font-size: 14px;
margin: 0;
padding: 2em;
padding-top: 0.25em;
padding-bottom: 0.5em;
}
.footer {
margin: 1em;
margin-left: 2em;
font-size: 12px;
/*float: right;*/
}
/* 1}}}
vim:foldmethod=marker
/*

230
gramps2/src/data/main4.css Executable file
View File

@ -0,0 +1,230 @@
/* GRAMPS Cascading Style Sheet */
/* Standard Tags {{{1
*/
BODY {
font-family: "Times New Roman", "Times", serif;
background-color: #fff;
color: #320;
font-size: 16px;
}
P,BLOCKQUOTE {
}
DIV {
margin: 2px;
padding: 2px;
}
TD {
vertical-align: top;
}
H1 {
font-family: "Georgia", "Bistream Vera Sans", "Times New Roman", "Times", serif;
font-weight: bolder;
font-size: 160%;
margin: 2px;
}
H2 {
font-family: "Georgia", "Bistream Vera Sans", "Times New Roman", "Times", serif;
font-weight: bolder;
font-style: italic;
font-size: 150%;
}
H3 {
font-weight: bold;
font-size: 130%;
margin: 0;
margin-top: 8px;
/*padding-left: 2em;*/
padding-bottom: 10px;
}
H4 {
margin-top: 1em;
margin-bottom: 0;
padding: 0;
/*padding-left: 2em;*/
font-size: 110%;
}
H5 {
margin-bottom: 0.5em;
}
H6 {
font-weight: normal;
font-style: italic;
font-size: 100%;
margin-left: 1em;
margin-top: 1.3em;
margin-bottom: 0.8em;
}
HR {
height: 6px;
width: 100%;
margin: 0;
color: #a97;
padding: 2px;
/*border-top: 0; |+ Hack: Mozilla work-around to eliminate "groove" +|*/
border-color: #a97;
background-color: #a97;
}
A:link {
color: #430;
text-decoration: underline;
}
A:visited {
color: #654;
text-decoration: underline;
}
A:hover {
background-color: #f6f0ee;
color: #210;
text-decoration: underline;
}
A:active {
background-color: #f6f0ee;
color: #210;
text-decoration: none;
}
/* Custom {{{1
*/
.navheader {
padding: 4px;
margin: 0;
}
.navtitle {
font-size: 160%;
color: #fff;
margin: 0;
padding: 4px;
padding-left: 10px;
background-color: #542;
}
.navbyline {
float: right;
margin: 2px;
padding: 4px;
padding-right: 10px;
color: #fff;
}
.nav {
margin: 0;
margin-bottom: 4px;
padding: 1px;
font-size: 14px;
font-weight: bold;
}
.summaryarea {
min-height: 100px;
/* Hack: IE Dynamic Expression to set the width */
height: expression(document.body.clientHeight < 1 ? "100px" : "100px" );
}
.portrait {
justify: center;
margin: 5px;
margin-right: 20px;
padding: 3px;
border-color: #986;
border-width: 3px;
}
.snapshot {
float: right;
margin: 5px;
margin-right: 20px;
padding: 3px;
}
.thumbnail {
height: 100px;
border-color: #986;
border-width: 3px;
}
.leftwrap {
float: left;
margin: 2px;
margin-right: 10px;
}
.rightwrap {
float: right;
margin: 2px;
margin-left: 10px;
}
TABLE.infolist {
border: 0;
padding; 0;
margin: 0;
margin-left: 2em;
margin-top: 8px;
}
TD.category {
margin: 0;
padding: 4px; /* Defines spacing between rows */
padding-right: 3em;
/*width: 10%;*/
font-weight: bold;
}
TD.field {
margin: 0;
padding: 4px; /* Defines spacing between rows */
padding-right: 3em;
/*width: 20%;*/
}
TD.data {
margin: 0;
padding: 4px; /* Defines spacing between rows */
padding-left: 10px;
padding-right: 3em;
font-weight: bold;
background-color: #f0ece6;
}
.pedigree {
margin: 0;
margin-left: 2em;
padding: 0;
background-color: #f0ece6;
border: 1px;
}
.pedigreeind {
margin: 0;
padding: 2em;
padding-top: 0.25em;
padding-bottom: 0.5em;
}
.footer {
margin: 1em;
font-size: 12px;
float: right;
}
/* 1}}}
vim:foldmethod=marker
/*

231
gramps2/src/data/main5.css Executable file
View File

@ -0,0 +1,231 @@
/* GRAMPS Cascading Style Sheet */
/* Standard Tags {{{1
*/
BODY {
font-family: "Bistream Vera Sans", "Arial", "Arial", "Helvetica", sans-serif;
text-align: justify;
background-color: #fff;
color: #010;
}
P,BLOCKQUOTE {
font-size: 14px;
margin-left: 7em;
margin-right: 7em;
}
DIV {
margin: 2px;
padding: 2px;
}
TD {
vertical-align: top;
}
H1 {
font-family: "Verdana", "Bistream Vera Sans", "Arial", "Helvetica", sans-serif;
font-weight: bolder;
font-size: 160%;
margin: 2px;
}
H2 {
font-family: "Verdana", "Bistream Vera Sans", "Arial", "Helvetica", sans-serif;
font-weight: bolder;
font-style: italic;
font-size: 150%;
}
H3 {
font-weight: bold;
margin: 0;
margin-left: 5em;
margin-right: 5em;
padding-top: 10px;
padding-bottom: 10px;
color: #232;
}
H4 {
margin-top: 2em;
margin-bottom: 0.3em;
padding: 5px;
padding-left: 2em;
background-color: #e0e6e0;
color: #232;
}
H5 {
margin-bottom: 0.5em;
}
H6 {
font-weight: normal;
font-style: italic;
font-size: 100%;
margin-left: 1em;
margin-top: 1.3em;
margin-bottom: 0.8em;
}
HR {
height: 0;
width: 0;
margin: 0;
margin-top: 1px;
margin-bottom: 1px;
padding: 0;
border-top: 0; /* Hack: Mozilla work-around to eliminate "groove" */
border-color: #e0e6e0;
}
A:link {
color: #252;
text-decoration: underline;
}
A:visited {
color: #565;
text-decoration: underline;
}
A:hover {
background-color: #eaf0ea;
color: #000;
text-decoration: underline;
}
A:active {
background-color: #eaf0ea;
color: #000;
text-decoration: none;
}
/* Custom {{{1
*/
.navheader {
padding: 4px;
background-color: #e0e6e0;
margin: 2px;
}
.navtitle {
font-size: 160%;
color: #e0e6e0;
margin: 2px;
background-color: #454;
padding: 4px;
padding-left: 3.5em;
}
.navbyline {
float: right;
font-size: 14px;
margin: 2px;
padding: 0;
padding-top: 1em;
padding-right: 7em;
color: #e0e6e0;
}
.nav {
margin: 0;
margin-bottom: 4px;
padding: 0;
padding-left: 6.5em;
font-size: 14px;
font-weight: bold;
}
.summaryarea {
min-height: 100px;
/* Hack: IE Dynamic Expression to set the width */
height: expression(document.body.clientHeight < 1 ? "100px" : "100px" );
}
.portrait {
justify: center;
margin: 5px;
margin-right: 20px;
padding: 3px;
border-color: #363;
border-width: 1px;
}
.snapshot {
float: right;
margin: 5px;
padding: 3px;
padding-right: 6em;
}
.thumbnail {
height: 100px;
border-color: #363;
border-width: 1px;
}
.leftwrap {
float: left;
margin: 5px;
margin-right: 1em;
margin-left: 6em;
}
.rightwrap {
float: right;
margin: 5px;
margin-left: 1em;
margin-right: 6em;
}
TABLE.infolist {
border: 0;
/*width: 100%;*/
font-size: 14px;
margin-left: 7em;
margin-right: 7em;
}
TD.category {
padding: 3px; /* Defines spacing between rows */
padding-right: 3em;
/*width: 10%;*/
font-weight: bold;
}
TD.field {
padding: 3px; /* Defines spacing between rows */
padding-right: 3em;
/*width: 15%;*/
}
TD.data {
padding: 3px; /* Defines spacing between rows */
padding-right: 3em;
font-weight: bold;
}
.pedigree {
margin: 0;
margin-left: 7em;
padding: 0;
background-color: #e0e6e0;
border: 1px;
}
.pedigreeind {
font-size: 14px;
margin: 0;
padding: 2em;
padding-top: 0.25em;
padding-bottom: 0.5em;
}
.footer {
margin: 1em;
font-size: 12px;
text-align: center;
}
/* 1}}}
vim:foldmethod=marker
/*

View File

@ -32,7 +32,9 @@ import time
import locale import locale
import shutil import shutil
import codecs import codecs
import sets
from gettext import gettext as _ from gettext import gettext as _
from cStringIO import StringIO
#------------------------------------------------------------------------ #------------------------------------------------------------------------
# #
@ -46,7 +48,6 @@ import gtk
# GRAMPS module # GRAMPS module
# #
#------------------------------------------------------------------------ #------------------------------------------------------------------------
import os
import RelLib import RelLib
import const import const
import GrampsKeys import GrampsKeys
@ -55,17 +56,29 @@ import Sort
import Report import Report
import Errors import Errors
import Utils import Utils
from QuestionDialog import ErrorDialog
import ReportOptions import ReportOptions
import BaseDoc import BaseDoc
import ReportUtils
from QuestionDialog import ErrorDialog
from NameDisplay import displayer as _nd from NameDisplay import displayer as _nd
from DateHandler import displayer as _dd from DateHandler import displayer as _dd
import ReportUtils
import sets
#------------------------------------------------------------------------
#
# constants
#
#------------------------------------------------------------------------
_NARRATIVE = "narrative.css" _NARRATIVE = "narrative.css"
_NAME_COL = 3 _NAME_COL = 3
_css_files = [
[_("Style 1"), 'main1.css'],
[_("Style 2"), 'main2.css'],
[_("Style 3"), 'main3.css'],
[_("Style 4"), 'main4.css'],
[_("Style 5"), 'main5.css'],
]
_character_sets = [ _character_sets = [
[_('Unicode (recommended)'), 'utf-8'], [_('Unicode (recommended)'), 'utf-8'],
['ISO-8859-1', 'iso-8859-1' ], ['ISO-8859-1', 'iso-8859-1' ],
@ -84,74 +97,9 @@ _character_sets = [
['koi8_r', 'koi8_r', ], ['koi8_r', 'koi8_r', ],
] ]
_css = [
'BODY {\nfont-family: "Arial", "Helvetica", sans-serif;',
'background-color: #fafaff;',
'color: #003;\n}',
'P,BLOCKQUOTE {\nfont-size: 14px;\n}',
'DIV {\nmargin: 2px;\npadding: 2px;\n}',
'TD {\nvertical-align: top;\n}',
'H1 {',
'font-family: "Verdana", "Bistream Vera Sans", "Arial", "Helvetica", sans-serif;',
'font-weight: bolder;\nfont-size: 160%;\nmargin: 2px;\n}\n',
'H2 {',
'font-family: "Verdana", "Bistream Vera Sans", "Arial", "Helvetica", sans-serif;',
'font-weight: bolder;\nfont-style: italic;\nfont-size: 150%;\n}',
'H3 {\nfont-weight: bold;\nmargin: 0;\npadding-top: 10px;',
'padding-bottom: 10px;\ncolor: #336;\n}',
'H4 {\nmargin-top: 1em;\nmargin-bottom: 0.3em;',
'padding-left: 4px;\nbackground-color: #667;\ncolor: #fff;\n}',
'H5 {\nmargin-bottom: 0.5em;\n}',
'H6 {\nfont-weight: normal;\nfont-style: italic;',
'font-size: 100%;\nmargin-left: 1em;\nmargin-top: 1.3em;',
'margin-bottom: 0.8em;\n}',
'HR {\nheight: 0;\nwidth: 0;\nmargin: 0;\nmargin-top: 1px;',
'margin-bottom: 1px;\npadding: 0;\nborder-top: 0;',
'border-color: #e0e0e9;\n}',
'A:link {\ncolor: #006;\ntext-decoration: underline;\n}',
'A:visited {\ncolor: #669;\ntext-decoration: underline;\n}',
'A:hover {\nbackground-color: #eef;\ncolor: #000;',
'text-decoration: underline;\n}',
'A:active {\nbackground-color: #eef;\ncolor: #000;\ntext-decoration: none;\n}',
'.navheader {\npadding: 4px;\nbackground-color: #e0e0e9;',
'margin: 2px;\n}',
'.navtitle {\nfont-size: 160%;\ncolor: #669;\nmargin: 2px;\n}',
'.navbyline {\nfloat: right;\nfont-size: 14px;\nmargin: 2px;',
'padding: 4px;\n}',
'.nav {\nmargin: 0;\nmargin-bottom: 4px;\npadding: 0;',
'font-size: 14px;\nfont-weight: bold;\n}',
'.summaryarea {',
'min-height: 100px;',
'height: expression(document.body.clientHeight < 1 ? "100px" : "100px" );',
'}',
'.portrait {\njustify: center;\nmargin: 5px;\nmargin-right: 20px;',
'padding: 3px;\nborder-color: #336;\nborder-width: 1px;\n}',
'.snapshot {\nfloat: right;\nmargin: 5px;\nmargin-right: 20px;',
'padding: 3px;\n}',
'.thumbnail {\nheight: 100px;\nborder-color: #336;\nborder-width: 1px;\n}',
'.leftwrap {\nfloat: left;\nmargin: 2px;\nmargin-right: 10px;\n}',
'.rightwrap {\nfloat: right;\nmargin: 2px;\nmargin-left: 10px;\n}',
'TABLE.infolist {\nborder: 0;\nfont-size: 14px;\n}',
'TD.category {\npadding: 3px;\npadding-right: 3em;',
'font-weight: bold;\n}',
'TD.field {\npadding: 3px;\npadding-right: 3em;\n}',
'TD.data {\npadding: 3px;\npadding-right: 3em;',
'font-weight: bold;\n}',
'.pedigree {\nmargin: 0;\nmargin-left: 2em;\npadding: 0;',
'background-color: #e0e0e9;\nborder: 1px;\n}',
'.pedigreeind {\nfont-size: 14px;\nmargin: 0;\npadding: 2em;',
'padding-top: 0.25em;\npadding-bottom: 0.5em;\n}',
'.footer {\nmargin: 1em;\nfont-size: 12px;\nfloat: right;\n}',
]
from cStringIO import StringIO
class BasePage: class BasePage:
def __init__(self, title, options, archive): def __init__(self, title, options, archive):
self.title_str = title self.title_str = title
self.inc_contact = options.handler.options_dict['NWEBcontact']
self.inc_download = options.handler.options_dict['NWEBdownload'] self.inc_download = options.handler.options_dict['NWEBdownload']
self.html_dir = options.handler.options_dict['NWEBod'] self.html_dir = options.handler.options_dict['NWEBod']
self.options = options self.options = options
@ -159,8 +107,10 @@ class BasePage:
self.image_dir = options.handler.options_dict['NWEBimagedir'].strip() self.image_dir = options.handler.options_dict['NWEBimagedir'].strip()
self.ext = options.handler.options_dict['NWEBext'] self.ext = options.handler.options_dict['NWEBext']
self.encoding = options.handler.options_dict['NWEBencoding'] self.encoding = options.handler.options_dict['NWEBencoding']
self.css = options.handler.options_dict['NWEBcss']
self.noid = options.handler.options_dict['NWEBnoid'] self.noid = options.handler.options_dict['NWEBnoid']
self.use_intro = options.handler.options_dict['NWEBintronote'] != u"" self.use_intro = options.handler.options_dict['NWEBintronote'] != u""
self.use_contact = options.handler.options_dict['NWEBcontact'] != u""
def copy_media(self,photo): def copy_media(self,photo):
newpath = photo.gramps_id + os.path.splitext(photo.get_path())[1] newpath = photo.gramps_id + os.path.splitext(photo.get_path())[1]
@ -243,7 +193,7 @@ class BasePage:
of.write(u' <a href="places.%s">%s</a> &nbsp;\n' % (self.ext,_('Places'))) of.write(u' <a href="places.%s">%s</a> &nbsp;\n' % (self.ext,_('Places')))
if self.inc_download: if self.inc_download:
of.write(u' <a href="download.%s">%s</a> &nbsp;\n' % (self.ext,_('Download'))) of.write(u' <a href="download.%s">%s</a> &nbsp;\n' % (self.ext,_('Download')))
if self.inc_contact: if self.use_contact:
of.write(u' <a href="contact.%s">%s</a> &nbsp;\n' % (self.ext,_('Contact'))) of.write(u' <a href="contact.%s">%s</a> &nbsp;\n' % (self.ext,_('Contact')))
of.write(u' </div>\n') of.write(u' </div>\n')
of.write(u' </div>\n') of.write(u' </div>\n')
@ -263,9 +213,8 @@ class IndividualListPage(BasePage):
db.get_researcher().get_name()) db.get_researcher().get_name())
msg = _("This page contains an index of all the individuals in the " msg = _("This page contains an index of all the individuals in the "
"database, sorted by their last names. Selecting the GRAMPS " "database, sorted by their last names. Selecting person's name "
"ID next to a person's name will take you to that person's " "will take you to that person's individual page.")
"individual page.")
of.write(u'<h3>%s</h3>\n' % _('Individuals')) of.write(u'<h3>%s</h3>\n' % _('Individuals'))
of.write(u'<p>%s</p>\n' % msg) of.write(u'<p>%s</p>\n' % msg)
@ -650,8 +599,49 @@ class ContactPage(BasePage):
self.display_header(of,_('Contact'), self.display_header(of,_('Contact'),
db.get_researcher().get_name()) db.get_researcher().get_name())
of.write(u'<div class="summaryarea">\n')
of.write(u'<h3>%s</h3>\n' % _('Contact')) of.write(u'<h3>%s</h3>\n' % _('Contact'))
note_id = options.handler.options_dict['NWEBcontact']
obj = db.get_object_from_handle(note_id)
mime_type = obj.get_mime_type()
if mime_type and mime_type.startswith("image"):
try:
newpath = self.copy_media(obj)
of.write(u'<div class="rightwrap">\n')
of.write(u'<table cellspacing="0" cellpadding="0" border="0"><tr>')
of.write(u'<td height="205">')
of.write(u'<img border="0" height="200" ')
of.write(u'src="%s" />' % newpath)
of.write(u'</td></tr></table>\n')
of.write(u'</div>\n')
except (IOError,OSError),msg:
ErrorDialog(str(msg))
r = db.get_researcher()
of.write(u'<blockquote></td>\n')
of.write(u'%s<br>\n' % r.name)
of.write(u'%s<br>\n' % r.addr)
of.write(u'%s, %s, %s<br>\n' % (r.city,r.state,r.postal))
of.write(u'%s<br>\n' % r.country)
of.write(u'%s<br>\n' % r.email)
of.write(u'</blockquote>\n')
nobj = obj.get_note_object()
if nobj:
format = nobj.get_format()
text = nobj.get()
if format:
text = u"<pre>" + u"<br>".join(text.split("\n"))
else:
text = u"</p><p>".join(text.split("\n"))
of.write(u'<p>%s</p>\n' % text)
else:
of.write(u'<br><br><br><br>\n')
self.display_footer(of) self.display_footer(of)
self.close_file(of) self.close_file(of)
@ -1077,6 +1067,7 @@ class WebReport(Report.Report):
self.target_path = options_class.handler.options_dict['NWEBod'] self.target_path = options_class.handler.options_dict['NWEBod']
self.ext = options_class.handler.options_dict['NWEBext'] self.ext = options_class.handler.options_dict['NWEBext']
self.encoding = options_class.handler.options_dict['NWEBencoding'] self.encoding = options_class.handler.options_dict['NWEBencoding']
self.css = options_class.handler.options_dict['NWEBcss']
self.id_link = options_class.handler.options_dict['NWEBlinktidx'] self.id_link = options_class.handler.options_dict['NWEBlinktidx']
self.photos = options_class.handler.options_dict['NWEBimg'] self.photos = options_class.handler.options_dict['NWEBimg']
self.restrict = options_class.handler.options_dict['NWEBrestrictinfo'] self.restrict = options_class.handler.options_dict['NWEBrestrictinfo']
@ -1151,7 +1142,7 @@ class WebReport(Report.Report):
else: else:
archive = None archive = None
self.write_css(archive) self.write_css(archive,self.target_path,self.css)
HomePage(self.database, self.title, self.options_class, archive) HomePage(self.database, self.title, self.options_class, archive)
if self.inc_contact: if self.inc_contact:
@ -1199,16 +1190,14 @@ class WebReport(Report.Report):
archive.close() archive.close()
self.progress_bar_done() self.progress_bar_done()
def write_css(self,archive): def write_css(self,archive,html_dir,css_file):
if archive: if archive:
f = StringIO() f = open(os.path.join(const.dataDir,css_file),"r")
f.write('\n'.join(_css))
archive.add_file(_NARRATIVE,time.time(),f) archive.add_file(_NARRATIVE,time.time(),f)
f.close() f.close()
else: else:
f = open(os.path.join(self.target_path,_NARRATIVE), "w") shutil.copyfile(os.path.join(const.dataDir,css_file),
f.write('\n'.join(_css)) os.path.join(html_dir,_NARRATIVE))
f.close()
def add_styles(self,doc): def add_styles(self,doc):
pass pass
@ -1240,7 +1229,7 @@ class WebReportOptions(ReportOptions.ReportOptions):
'NWEBcmtxtsi' : 0, 'NWEBcmtxtsi' : 0,
'NWEBlnktoalphabet' : 0, 'NWEBlnktoalphabet' : 0,
'NWEBsplita' : 0, 'NWEBsplita' : 0,
'NWEBcontact' : 0, 'NWEBcontact' : '',
'NWEBdownload' : 0, 'NWEBdownload' : 0,
'NWEBshorttree' : 1, 'NWEBshorttree' : 1,
'NWEBimagedir' : 'images', 'NWEBimagedir' : 'images',
@ -1250,6 +1239,7 @@ class WebReportOptions(ReportOptions.ReportOptions):
'NWEBlinktidx' : 1, 'NWEBlinktidx' : 1,
'NWEBext' : 'html', 'NWEBext' : 'html',
'NWEBencoding' : 'utf-8', 'NWEBencoding' : 'utf-8',
'NWEBcss' : 'main0.css',
'NWEBtreed' : 3, 'NWEBtreed' : 3,
'NWEBidxt' : '', 'NWEBidxt' : '',
'NWEBintronote' : '', 'NWEBintronote' : '',
@ -1310,7 +1300,7 @@ class WebReportOptions(ReportOptions.ReportOptions):
ext_msg = _("File extension") ext_msg = _("File extension")
sep_alpha_msg = _("Split alphabetical sections to separate pages") sep_alpha_msg = _("Split alphabetical sections to separate pages")
tree_msg = _("Include short ancestor tree") tree_msg = _("Include short ancestor tree")
contact_msg = _("Include publisher contact page") contact_msg = _("Publisher contact/Note ID")
download_msg = _("Include download page") download_msg = _("Include download page")
self.no_private = gtk.CheckButton(priv_msg) self.no_private = gtk.CheckButton(priv_msg)
@ -1322,9 +1312,6 @@ class WebReportOptions(ReportOptions.ReportOptions):
self.restrict_living = gtk.CheckButton(restrict_msg) self.restrict_living = gtk.CheckButton(restrict_msg)
self.restrict_living.set_active(self.options_dict['NWEBrestrictinfo']) self.restrict_living.set_active(self.options_dict['NWEBrestrictinfo'])
self.inc_contact = gtk.CheckButton(contact_msg)
self.inc_contact.set_active(self.options_dict['NWEBcontact'])
self.inc_download = gtk.CheckButton(download_msg) self.inc_download = gtk.CheckButton(download_msg)
self.inc_download.set_active(self.options_dict['NWEBdownload']) self.inc_download.set_active(self.options_dict['NWEBdownload'])
@ -1375,10 +1362,21 @@ class WebReportOptions(ReportOptions.ReportOptions):
store.append(row=data) store.append(row=data)
self.encoding = GrampsNoteComboBox(store,cset_node) self.encoding = GrampsNoteComboBox(store,cset_node)
cset_node = None
cset = self.options_dict['NWEBcss']
store = gtk.ListStore(str,str)
for data in _css_files:
if data[1] == cset:
cset_node = store.append(row=data)
else:
store.append(row=data)
self.css = GrampsNoteComboBox(store,cset_node)
dialog.add_option(title_msg,self.title) dialog.add_option(title_msg,self.title)
dialog.add_option(imgdir_msg,self.imgdir) dialog.add_option(imgdir_msg,self.imgdir)
dialog.add_option(ext_msg,self.ext) dialog.add_option(ext_msg,self.ext)
dialog.add_option(_('Character set encoding'),self.encoding) dialog.add_option(_('Character set encoding'),self.encoding)
dialog.add_option(_('Stylesheet'),self.css)
title = _("Page Generation") title = _("Page Generation")
@ -1414,11 +1412,22 @@ class WebReportOptions(ReportOptions.ReportOptions):
store.append(row=data) store.append(row=data)
self.intro_note = GrampsNoteComboBox(store,intro_node) self.intro_note = GrampsNoteComboBox(store,intro_node)
contact_node = None
self.inc_contact = self.options_dict['NWEBcontact']
store = gtk.ListStore(str,str)
for data in media_list:
if data[1] == self.inc_contact:
intro_node = store.append(row=data)
else:
store.append(row=data)
self.contact = GrampsNoteComboBox(store,intro_node)
dialog.add_frame_option(title,_('Home Media/Note ID'), dialog.add_frame_option(title,_('Home Media/Note ID'),
self.home_note) self.home_note)
dialog.add_frame_option(title,_('Introduction Media/Note ID'), dialog.add_frame_option(title,_('Introduction Media/Note ID'),
self.intro_note) self.intro_note)
dialog.add_frame_option(title,None,self.inc_contact) dialog.add_frame_option(title,contact_msg,self.contact)
dialog.add_frame_option(title,None,self.inc_download) dialog.add_frame_option(title,None,self.inc_download)
dialog.add_frame_option(title,None,self.noid) dialog.add_frame_option(title,None,self.noid)
@ -1437,7 +1446,7 @@ class WebReportOptions(ReportOptions.ReportOptions):
self.options_dict['NWEBrestrictinfo'] = int(self.restrict_living.get_active()) self.options_dict['NWEBrestrictinfo'] = int(self.restrict_living.get_active())
self.options_dict['NWEBincpriv'] = int(not self.no_private.get_active()) self.options_dict['NWEBincpriv'] = int(not self.no_private.get_active())
self.options_dict['NWEBnoid'] = int(self.noid.get_active()) self.options_dict['NWEBnoid'] = int(self.noid.get_active())
self.options_dict['NWEBcontact'] = int(self.inc_contact.get_active()) self.options_dict['NWEBcontact'] = unicode(self.contact.get_handle())
self.options_dict['NWEBdownload'] = int(self.inc_download.get_active()) self.options_dict['NWEBdownload'] = int(self.inc_download.get_active())
self.options_dict['NWEBimagedir'] = unicode(self.imgdir.get_text()) self.options_dict['NWEBimagedir'] = unicode(self.imgdir.get_text())
self.options_dict['NWEBtitle'] = unicode(self.title.get_text()) self.options_dict['NWEBtitle'] = unicode(self.title.get_text())
@ -1454,10 +1463,10 @@ class WebReportOptions(ReportOptions.ReportOptions):
self.options_dict['NWEBext'] = html_ext self.options_dict['NWEBext'] = html_ext
self.options_dict['NWEBencoding'] = self.encoding.get_handle() self.options_dict['NWEBencoding'] = self.encoding.get_handle()
self.options_dict['NWEBcss'] = self.css.get_handle()
self.options_dict['NWEBidurl'] = unicode(self.linkpath.get_text().strip()) self.options_dict['NWEBidurl'] = unicode(self.linkpath.get_text().strip())
self.options_dict['NWEBcmtxtsi'] = int(not self.no_comments.get_active()) self.options_dict['NWEBcmtxtsi'] = int(not self.no_comments.get_active())
if self.no_images.get_active(): if self.no_images.get_active():
photos = 0 photos = 0
elif self.no_living_images.get_active(): elif self.no_living_images.get_active():