WEBCAL: Trying to have a better web calendar (#917)

* WEBCAL: Have config files for multiple databases.

* WEBCAL: best management for the narrative web link

* WEBCAL: use arrows, compress monthname and arrows

adapt the css files accordingly

* WEBCAL: use arrows in one day within a year

compress monthname and arrows
adapt the css files accordingly

* WEBCAL: index go now to the current month.

before this patch, the default month for the year calendar
was the month found at the web calendar generation.
Now, even if you create this report 8 months ago, the current
index will point to the current month.

* WEBCAL: trailing space.

* WEBCAL: year glance + some pylint improvements

* WEBCAL: incorrect width size with Mainz css.

* WEBCAL: problem with Visually css file

* WEBCAL: The table cell is highlighted when hover.

* WEBCAL: better pylint score.

* WEBCAL: Better rendering for full yer at a glance

* WEBCAL: better rendering on small devices

* WEBCAL: better quality code
This commit is contained in:
Serge Noiraud 2019-12-12 18:10:25 +01:00 committed by GitHub
parent fc9e5c2a4a
commit 5157700da3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 680 additions and 303 deletions

View File

@ -96,6 +96,16 @@ body > div {
.content { .content {
padding: 0em 0.5em; padding: 0em 0.5em;
} }
body#fullyearlinked table.calendar {
float: none;
width: 100%;
}
}
@media only screen and (width > 1080px) {
body#fullyearlinked table.calendar {
float: left;
width: 33.3%;
}
} }
/* General Text /* General Text
@ -251,11 +261,6 @@ div#nav::after {
.nav { .nav {
background: none; /* Works in IE too. */ background: none; /* Works in IE too. */
/*
width: 200px;
position: absolute;
z-index: 10;
*/
} }
/* Undo some of the #nav styles - to enable the class .nav */ /* Undo some of the #nav styles - to enable the class .nav */
@ -292,7 +297,6 @@ div#nav::after {
margin-right: 10px; margin-right: 10px;
} }
.nav.responsive li { .nav.responsive li {
/* float: left; */
display: block; display: block;
text-align: left; text-align: left;
background-color: #EEE; background-color: #EEE;
@ -754,16 +758,12 @@ table.calendar {
background-color: white; background-color: white;
border-bottom-style: none; border-bottom-style: none;
padding-top: 1em; padding-top: 1em;
vertical-align: top;
height: 2em;
} }
.calendar thead th abbr { .calendar thead th abbr {
border-bottom-style: none; border-bottom-style: none;
} }
#CreatorInfo {
float: right;
margin: -1em 15px 0px 0px;
font-weight: bold;
color: #999;
}
.calendar tfoot tr td { .calendar tfoot tr td {
border-top: solid 4px #999; border-top: solid 4px #999;
vertical-align: middle; vertical-align: middle;
@ -772,7 +772,6 @@ table.calendar {
/* Calendar : Date Numeral */ /* Calendar : Date Numeral */
.calendar div.date { .calendar div.date {
float: right; float: right;
width: 1.8em;
font-size: large; font-size: large;
text-align: center; text-align: center;
background-color: #CCC; background-color: #CCC;
@ -781,7 +780,7 @@ table.calendar {
/* Calendar : Date Container */ /* Calendar : Date Container */
.calendar td { .calendar td {
padding: 0px 0px 0px 1ex; padding: 0px 5px 0px 1ex;
border-width: 1px 0px 0px 1px; border-width: 1px 0px 0px 1px;
border-style: solid; border-style: solid;
border-color: #CCC; border-color: #CCC;
@ -789,7 +788,7 @@ table.calendar {
} }
.calendar td:first-child { .calendar td:first-child {
border-left-style: none; border-left-style: none;
padding: 0px 0px 0px 1ex; padding: 0px 5px 0px 1ex;
} }
.calendar tbody tr:first-child td { .calendar tbody tr:first-child td {
border-top-style: none; border-top-style: none;
@ -833,8 +832,6 @@ body#fullyearlinked div.content {
overflow: hidden; overflow: hidden;
} }
body#fullyearlinked table.calendar { body#fullyearlinked table.calendar {
float: left;
width: 33.3%;
height: 18em; height: 18em;
border: solid 1px black; border: solid 1px black;
} }
@ -851,3 +848,48 @@ body#fullyearlinked table.calendar tbody td {
body#OneDay div.content { body#OneDay div.content {
overflow: hidden; overflow: hidden;
} }
body#OneDay h3 {
font-size: xx-large;
vertical-align: top;
height: 2em;
}
#WebCal table.calendar tfoot {
display: none;
}
#WebCal table.calendar tr td {
word-wrap: break-word;
padding: 2px;
}
#WebCal .calendar tr td .empty {
border: 5px solid rgba(255,255,255,.0);
}
#WebCal .calendar tr td .clickable {
border: 5px solid rgba(255,255,255,.0);
}
#WebCal .calendar tr td .clickable:hover {
display: block;
overflow:auto;
word-wrap: break-word;
cursor: text;
border-radius: 10px 0px 10px 10px;
border: 5px solid #555;
padding: 0px;
}
body#fullyearlinked #YearGlance tbody td {
height:48px;
vertical-align: middle;
text-align: center;
padding-left: 6px;
}
body#fullyearlinked #YearGlance tbody td .date {
font-size: 30px;
vertical-align: middle;
text-align: center;
border-radius: 45px;
float: none;
border: 5px solid rgba(0,0,0,.0);
}
body#fullyearlinked #YearGlance tbody td:hover .date {
border-radius: 45px;
border: 5px solid;
}

View File

@ -119,6 +119,16 @@ img {
.content { .content {
padding: 0em 0.5em; padding: 0em 0.5em;
} }
body#fullyearlinked table.calendar {
float: none;
width: 100%;
}
}
@media only screen and (width > 1080px) {
body#fullyearlinked table.calendar {
float: left;
width: 33.3%;
}
} }
/* General Text /* General Text
@ -401,11 +411,6 @@ div#nav::after {
.nav { .nav {
background: none; /* Works in IE too. */ background: none; /* Works in IE too. */
/*
width: 200px;
position: absolute;
z-index: 10;
*/
} }
/* Undo some of the #nav styles - to enable the class .nav */ /* Undo some of the #nav styles - to enable the class .nav */
@ -436,13 +441,11 @@ div#nav::after {
.nav.responsive {position: absolute; display: block; z-index: 100;} .nav.responsive {position: absolute; display: block; z-index: 100;}
.nav.responsive a.icon { .nav.responsive a.icon {
/* position: absolute; */
right: 0; right: 0;
top: 0; top: 0;
margin-right: 10px; margin-right: 10px;
} }
.nav.responsive li { .nav.responsive li {
/* float: left; */
display: block; display: block;
text-align: left; text-align: left;
background-color: #13A926; background-color: #13A926;
@ -741,7 +744,7 @@ div#EventDetail table.eventlist tbody tr td.ColumnAttribute {
div#EventDetail table.eventlist tbody tr td.ColumnDate { div#EventDetail table.eventlist tbody tr td.ColumnDate {
border-top: solid 1px #000; border-top: solid 1px #000;
} }
/* Events /* Events
----------------------------------------------------- */ ----------------------------------------------------- */
#EventList table.infolist tr td a, #EventList table.infolist tr td a,
@ -1533,7 +1536,7 @@ div#pedigree {
/* Calendar Styles /* Calendar Styles
-------------------------------------------------------------------------------------------- */ -------------------------------------------------------------------------------------------- */
#OneDay, #WebCal, #YearGlance { #OneDay, #WebCal, #YearGlance {
width: 95% width: 100%
} }
/* Calendar : General */ /* Calendar : General */
.calendar { .calendar {
@ -1562,17 +1565,8 @@ div#pedigree {
color: #542; color: #542;
padding:.3em 0 .2em 0; padding:.3em 0 .2em 0;
background-color: #FFF; background-color: #FFF;
} vertical-align: top;
#CreatorInfo { height: 2em;
float:right;
color: #FFF;
margin:-24px 10px 0 0;
}
#CreatorInfo a {
color: #FFF;
}
#CreatorInfo a:hover {
color: #FFF;
} }
.calendar thead tr th.weekend, .calendar thead tr th.weekend,
.calendar thead tr th.weekday { .calendar thead tr th.weekday {
@ -1597,8 +1591,8 @@ div#pedigree {
font-size:1.2em; font-size:1.2em;
line-height:100%; line-height:100%;
text-align:center; text-align:center;
border: 5px solid rgba(0,0,0,.0);
color: #542; color: #542;
margin:0 0 0 .5em;
padding:.2em 0; padding:.2em 0;
background-color: #D8F3D6; background-color: #D8F3D6;
} }
@ -1638,9 +1632,12 @@ div#pedigree {
display:block; display:block;
width:92%; width:92%;
margin:0 4%; margin:0 4%;
padding:.2em 0 .3em 0; padding:.6em 0 .3em 0;
border-top: dashed 1px #000; border-top: dashed 1px #000;
} }
.calendar tbody tr td ul li:first-child {
border-top: 10px;
}
/* Calendar : Birthday, Anniversary, Highlight */ /* Calendar : Birthday, Anniversary, Highlight */
.calendar tbody tr td ul li em { .calendar tbody tr td ul li em {
@ -1671,13 +1668,10 @@ body#fullyearlinked {
background-color: #FFF; background-color: #FFF;
} }
body#fullyearlinked div.content { body#fullyearlinked div.content {
width:963px;
margin:0 auto; margin:0 auto;
padding:15px 0 2px 2px; padding:15px 0 2px 2px;
} }
body#fullyearlinked table.calendar { body#fullyearlinked table.calendar {
float:left;
width:320px;
height:18em; height:18em;
border:solid 1px #000; border:solid 1px #000;
} }
@ -1692,10 +1686,8 @@ body#fullyearlinked table.calendar thead tr th.monthName {
padding:2px 0; padding:2px 0;
border-bottom: solid 1px #000; border-bottom: solid 1px #000;
} }
body#fullyearlinked table.calendar tbody tr td {
height:3em;
}
body#fullyearlinked table.calendar tbody tr td.emptyDays { body#fullyearlinked table.calendar tbody tr td.emptyDays {
height:52px;
background-color: #FFF; background-color: #FFF;
} }
body#fullyearlinked table.calendar tbody tr td.saturday { body#fullyearlinked table.calendar tbody tr td.saturday {
@ -1733,3 +1725,43 @@ table.oneday tbody tr td.ColumnText {
table.oneday tbody tr td.ColumnEvent { table.oneday tbody tr td.ColumnEvent {
width: 10%; width: 10%;
} }
#WebCal table.calendar tfoot {
display: none;
}
#WebCal table.calendar tr td {
word-wrap: break-word;
padding: 2px;
}
#WebCal .calendar tr td .empty {
border: 5px solid rgba(255,255,255,.0);
}
#WebCal .calendar tr td .clickable {
border: 5px solid rgba(255,255,255,.0);
}
#WebCal .calendar tr td .clickable:hover {
display: block;
overflow:auto;
word-wrap: break-word;
cursor: text;
border-radius: 10px 0px 10px 10px;
border: 5px solid #000290;
padding: 0px;
}
body#fullyearlinked #YearGlance tbody td {
height:48px;
vertical-align: middle;
text-align: center;
padding-left: 3px;
}
body#fullyearlinked #YearGlance tbody td .date {
font-size: 30px;
vertical-align: middle;
text-align: center;
border-radius: 45px;
float: none;
border: 5px solid rgba(0,0,0,.0);
}
body#fullyearlinked #YearGlance tbody td:hover .date {
border-radius: 45px;
border: 5px solid;
}

View File

@ -96,6 +96,16 @@ body > div {
.content { .content {
padding: 0em 0.5em; padding: 0em 0.5em;
} }
body#fullyearlinked table.calendar {
float: none;
width: 100%;
}
}
@media only screen and (width > 1080px) {
body#fullyearlinked table.calendar {
float: left;
width: 33.3%;
}
} }
/* General Text /* General Text
@ -255,11 +265,6 @@ div#nav::after {
.nav { .nav {
background: none; /* Works in IE too. */ background: none; /* Works in IE too. */
/*
width: 200px;
position: absolute;
z-index: 10;
*/
} }
/* Undo some of the #nav styles - to enable the class .nav */ /* Undo some of the #nav styles - to enable the class .nav */
@ -296,11 +301,10 @@ div#nav::after {
margin-right: 10px; margin-right: 10px;
} }
.nav.responsive li { .nav.responsive li {
/* float: left; */
display: block; display: block;
text-align: left; text-align: left;
color: #454; color: #454;
background-color: #E0E6E0; background-color: #454;
/* required by IE */ /* required by IE */
float: left; float: left;
clear: both; clear: both;
@ -809,16 +813,12 @@ table.calendar {
background-color: white; background-color: white;
border-bottom-style: none; border-bottom-style: none;
padding-top: 1em; padding-top: 1em;
vertical-align: top;
height: 2em;
} }
.calendar thead th abbr { .calendar thead th abbr {
border-bottom-style: none; border-bottom-style: none;
} }
#CreatorInfo {
float: right;
margin: -1em 15px 0px 0px;
font-weight: bold;
color: #7C8F7C;
}
.calendar tfoot tr td { .calendar tfoot tr td {
border-top: solid 4px #7C8F7C; border-top: solid 4px #7C8F7C;
vertical-align: middle; vertical-align: middle;
@ -836,7 +836,7 @@ table.calendar {
/* Calendar : Date Container */ /* Calendar : Date Container */
.calendar td { .calendar td {
padding: 0px 0px 0px 1ex; padding: 0px 5px 0px 1ex;
border-width: 1px 0px 0px 1px; border-width: 1px 0px 0px 1px;
border-style: solid; border-style: solid;
border-color: #9DBF9D; border-color: #9DBF9D;
@ -844,7 +844,7 @@ table.calendar {
} }
.calendar td:first-child { .calendar td:first-child {
border-left-style: none; border-left-style: none;
padding: 0px 0px 0px 1ex; padding: 0px 5px 0px 1ex;
} }
.calendar tbody tr:first-child td { .calendar tbody tr:first-child td {
border-top-style: none; border-top-style: none;
@ -892,8 +892,6 @@ body#fullyearlinked div.content {
overflow: hidden; overflow: hidden;
} }
body#fullyearlinked table.calendar { body#fullyearlinked table.calendar {
float: left;
width: 33.3%;
height: 18em; height: 18em;
border: solid 1px black; border: solid 1px black;
} }
@ -910,3 +908,47 @@ body#fullyearlinked table.calendar tbody td {
body#OneDay div.content { body#OneDay div.content {
overflow: hidden; overflow: hidden;
} }
body#OneDay h3 {
font-size: xx-large;
vertical-align: top;
height: 2em;
}
#WebCal table.calendar tfoot {
display: none;
}
#WebCal table.calendar tr td {
word-wrap: break-word;
padding: 2px;
}
#WebCal .calendar tr td .empty {
border: 5px solid rgba(255,255,255,.0);
}
#WebCal .calendar tr td .clickable {
border: 5px solid rgba(255,255,255,.0);
}
#WebCal .calendar tr td .clickable:hover {
display: block;
overflow:auto;
word-wrap: break-word;
cursor: text;
border-radius: 10px 0px 10px 10px;
border: 5px solid #454;
}
body#fullyearlinked #YearGlance tbody td {
height:48px;
vertical-align: middle;
text-align: center;
padding-left: 6px;
}
body#fullyearlinked #YearGlance tbody td .date {
font-size: 30px;
vertical-align: middle;
text-align: center;
border-radius: 45px;
float: none;
border: 5px solid rgba(0,0,0,.0);
}
body#fullyearlinked #YearGlance tbody td:hover .date {
border-radius: 45px;
border: 5px solid;
}

View File

@ -96,6 +96,16 @@ body > div {
.content { .content {
padding: 0em 0.5em; padding: 0em 0.5em;
} }
body#fullyearlinked table.calendar {
float: none;
width: 100%;
}
}
@media only screen and (width > 1080px) {
body#fullyearlinked table.calendar {
float: left;
width: 33.3%;
}
} }
/* General Text /* General Text
@ -253,11 +263,6 @@ div#nav::after {
.nav { .nav {
background: none; /* Works in IE too. */ background: none; /* Works in IE too. */
/*
width: 200px;
position: absolute;
z-index: 10;
*/
} }
/* Undo some of the #nav styles - to enable the class .nav */ /* Undo some of the #nav styles - to enable the class .nav */
@ -294,7 +299,6 @@ div#nav::after {
margin-right: 10px; margin-right: 10px;
} }
.nav.responsive li { .nav.responsive li {
/* float: left; */
display: block; display: block;
text-align: left; text-align: left;
background-color: #669; background-color: #669;
@ -796,19 +800,12 @@ table.calendar {
background-color: #FAFAFF; background-color: #FAFAFF;
border-bottom-style: none; border-bottom-style: none;
padding-top: 1em; padding-top: 1em;
vertical-align: top;
height: 2em;
} }
.calendar thead th abbr { .calendar thead th abbr {
border-bottom-style: none; border-bottom-style: none;
} }
#CreatorInfo {
float: right;
margin: -1em 15px 0px 0px;
font-weight: bold;
color: #669;
}
#CreatorInfo a[href]:hover {
background-color: #B4B4CB;
}
.calendar tfoot tr td { .calendar tfoot tr td {
border-top: solid 4px #669; border-top: solid 4px #669;
vertical-align: middle; vertical-align: middle;
@ -826,7 +823,7 @@ table.calendar {
/* Calendar : Date Container */ /* Calendar : Date Container */
.calendar td { .calendar td {
padding: 0px 0px 0px 1ex; padding: 0px 5px 0px 1ex;
border-width: 1px 0px 0px 1px; border-width: 1px 0px 0px 1px;
border-style: solid; border-style: solid;
border-color: #B4B4CB; border-color: #B4B4CB;
@ -834,7 +831,7 @@ table.calendar {
} }
.calendar td:first-child { .calendar td:first-child {
border-left-style: none; border-left-style: none;
padding: 0px 0px 0px 1ex; padding: 0px 5px 0px 1ex;
} }
.calendar tbody tr:first-child td { .calendar tbody tr:first-child td {
border-top-style: none; border-top-style: none;
@ -885,8 +882,6 @@ body#fullyearlinked div.content {
overflow: hidden; overflow: hidden;
} }
body#fullyearlinked table.calendar { body#fullyearlinked table.calendar {
float: left;
width: 33.3%;
height: 18em; height: 18em;
border: solid 1px black; border: solid 1px black;
} }
@ -903,3 +898,48 @@ body#fullyearlinked table.calendar tbody td {
body#OneDay div.content { body#OneDay div.content {
overflow: hidden; overflow: hidden;
} }
body#OneDay h3 {
font-size: xx-large;
vertical-align: top;
height: 2em;
}
#WebCal table.calendar tfoot {
display: none;
}
#WebCal table.calendar tr td {
word-wrap: break-word;
padding: 2px;
}
#WebCal .calendar tr td .empty {
border: 5px solid rgba(255,255,255,.0);
}
#WebCal .calendar tr td .clickable {
border: 5px solid rgba(255,255,255,.0);
}
#WebCal .calendar tr td .clickable:hover {
display: block;
overflow:auto;
word-wrap: break-word;
cursor: text;
border-radius: 10px 0px 10px 10px;
border: 5px solid #2E2E61;
padding: 0px;
}
body#fullyearlinked #YearGlance tbody td {
height:48px;
vertical-align: middle;
text-align: center;
padding-left: 6px;
}
body#fullyearlinked #YearGlance tbody td .date {
font-size: 30px;
vertical-align: middle;
text-align: center;
border-radius: 45px;
float: none;
border: 5px solid rgba(0,0,0,.0);
}
body#fullyearlinked #YearGlance tbody td:hover .date {
border-radius: 45px;
border: 5px solid;
}

View File

@ -96,6 +96,16 @@ body > div {
.content { .content {
padding: 0em 0.5em; padding: 0em 0.5em;
} }
body#fullyearlinked table.calendar {
float: none;
width: 100%;
}
}
@media only screen and (width > 1080px) {
body#fullyearlinked table.calendar {
float: left;
width: 33.3%;
}
} }
/* General Text /* General Text
@ -253,11 +263,6 @@ div#nav::after {
.nav { .nav {
background: none; /* Works in IE too. */ background: none; /* Works in IE too. */
/*
width: 200px;
position: absolute;
z-index: 10;
*/
} }
/* Undo some of the #nav styles - to enable the class .nav */ /* Undo some of the #nav styles - to enable the class .nav */
@ -294,7 +299,6 @@ div#nav::after {
margin-right: 10px; margin-right: 10px;
} }
.nav.responsive li { .nav.responsive li {
/* float: left; */
display: block; display: block;
text-align: left; text-align: left;
background-color: #FFC35E; background-color: #FFC35E;
@ -805,19 +809,12 @@ table.calendar {
background-color: #FFFBE7; background-color: #FFFBE7;
border-bottom-style: none; border-bottom-style: none;
padding-top: 1em; padding-top: 1em;
vertical-align: top;
height: 2em;
} }
.calendar thead th abbr { .calendar thead th abbr {
border-bottom-style: none; border-bottom-style: none;
} }
#CreatorInfo {
float: right;
margin: -1em 15px 0px 0px;
font-weight: bold;
color: #8C581C;
}
#CreatorInfo a[href]:hover {
background-color: #FFC35E;
}
.calendar tfoot tr td { .calendar tfoot tr td {
border-top: solid 4px #8C581C; border-top: solid 4px #8C581C;
vertical-align: middle; vertical-align: middle;
@ -826,7 +823,6 @@ table.calendar {
/* Calendar : Date Numeral */ /* Calendar : Date Numeral */
.calendar div.date { .calendar div.date {
float: right; float: right;
width: 1.8em;
font-size: large; font-size: large;
text-align: center; text-align: center;
background-color: #FFC35E; background-color: #FFC35E;
@ -835,7 +831,7 @@ table.calendar {
/* Calendar : Date Container */ /* Calendar : Date Container */
.calendar td { .calendar td {
padding: 0px 0px 0px 1ex; padding: 0px 5px 0px 1ex;
border-width: 1px 0px 0px 1px; border-width: 1px 0px 0px 1px;
border-style: solid; border-style: solid;
border-color: #FFC35E; border-color: #FFC35E;
@ -843,7 +839,7 @@ table.calendar {
} }
.calendar td:first-child { .calendar td:first-child {
border-left-style: none; border-left-style: none;
padding: 0px 0px 0px 1ex; padding: 0px 5px 0px 1ex;
} }
.calendar tbody tr:first-child td { .calendar tbody tr:first-child td {
border-top-style: none; border-top-style: none;
@ -878,6 +874,7 @@ table.calendar {
.calendar td.highlight div.date { .calendar td.highlight div.date {
color: #36220B; color: #36220B;
background-color: #FFC35E; background-color: #FFC35E;
vertical-align: middle;
} }
/* Calendar : Previous-Next Month */ /* Calendar : Previous-Next Month */
@ -887,6 +884,7 @@ table.calendar {
.calendar td.next div.date { .calendar td.next div.date {
color: #FFC35E; color: #FFC35E;
background-color: #FFFBE7; background-color: #FFFBE7;
vertical-align: middle;
} }
/* Calendar : Full Year */ /* Calendar : Full Year */
@ -894,8 +892,6 @@ body#fullyearlinked div.content {
overflow: hidden; overflow: hidden;
} }
body#fullyearlinked table.calendar { body#fullyearlinked table.calendar {
float: left;
width: 33.3%;
height: 18em; height: 18em;
border: solid 1px #36220B; border: solid 1px #36220B;
} }
@ -912,3 +908,48 @@ body#fullyearlinked table.calendar tbody td {
body#OneDay div.content { body#OneDay div.content {
overflow: hidden; overflow: hidden;
} }
body#OneDay h3 {
font-size: xx-large;
vertical-align: top;
height: 2em;
}
#WebCal table.calendar tfoot {
display: none;
}
#WebCal table.calendar tr td {
word-wrap: break-word;
padding: 2px;
}
#WebCal .calendar tr td .empty {
border: 5px solid rgba(255,255,255,.0);
}
#WebCal .calendar tr td .clickable {
border: 5px solid rgba(255,255,255,.0);
}
#WebCal .calendar tr td .clickable:hover {
display: block;
overflow:auto;
word-wrap: break-word;
cursor: text;
border-radius: 10px 0px 10px 10px;
border: 5px solid #EA8414;
padding: 0px;
}
body#fullyearlinked #YearGlance tbody td {
height:48px;
vertical-align: middle;
text-align: center;
padding-left: 6px;
}
body#fullyearlinked #YearGlance tbody td .date {
font-size: 30px;
vertical-align: middle;
text-align: center;
border-radius: 45px;
float: none;
border: 5px solid rgba(0,0,0,.0);
}
body#fullyearlinked #YearGlance tbody td:hover .date {
border-radius: 45px;
border: 5px solid;
}

View File

@ -97,6 +97,16 @@ body > div {
.content { .content {
padding: 0em 0.5em; padding: 0em 0.5em;
} }
body#fullyearlinked table.calendar {
float: none;
width: 100%;
}
}
@media only screen and (width > 1080px) {
body#fullyearlinked table.calendar {
float: left;
width: 33.3%;
}
} }
/* General Text /* General Text
@ -254,11 +264,6 @@ div#nav::after {
.nav { .nav {
background: none; /* Works in IE too. */ background: none; /* Works in IE too. */
/*
width: 200px;
position: absolute;
z-index: 10;
*/
} }
/* Undo some of the #nav styles - to enable the class .nav */ /* Undo some of the #nav styles - to enable the class .nav */
@ -295,7 +300,6 @@ div#nav::after {
margin-right: 10px; margin-right: 10px;
} }
.nav.responsive li { .nav.responsive li {
/* float: left; */
display: block; display: block;
text-align: left; text-align: left;
background-color: #EEE; background-color: #EEE;
@ -796,19 +800,12 @@ table.calendar {
background-color: #FFF; background-color: #FFF;
border-bottom-style: none; border-bottom-style: none;
padding-top: 1em; padding-top: 1em;
vertical-align: top;
height: 2em;
} }
.calendar thead th abbr { .calendar thead th abbr {
border-bottom-style: none; border-bottom-style: none;
} }
#CreatorInfo {
float: right;
margin: -1em 15px 0px 0px;
font-weight: bold;
color: #7CA3DD;
}
#CreatorInfo a[href]:hover {
background-color: #BFD0EA;
}
.calendar tfoot tr td { .calendar tfoot tr td {
border-top: solid 4px #7CA3DD; border-top: solid 4px #7CA3DD;
vertical-align: middle; vertical-align: middle;
@ -826,7 +823,7 @@ table.calendar {
/* Calendar : Date Container */ /* Calendar : Date Container */
.calendar td { .calendar td {
padding: 0px 0px 0px 1ex; padding: 0px 5px 0px 1ex;
border-width: 1px 0px 0px 1px; border-width: 1px 0px 0px 1px;
border-style: solid; border-style: solid;
border-color: #BFD0EA; border-color: #BFD0EA;
@ -834,7 +831,7 @@ table.calendar {
} }
.calendar td:first-child { .calendar td:first-child {
border-left-style: none; border-left-style: none;
padding: 0px 0px 0px 1ex; padding: 0px 5px 0px 1ex;
} }
.calendar tbody tr:first-child td { .calendar tbody tr:first-child td {
border-top-style: none; border-top-style: none;
@ -885,8 +882,6 @@ body#fullyearlinked div.content {
overflow: hidden; overflow: hidden;
} }
body#fullyearlinked table.calendar { body#fullyearlinked table.calendar {
float: left;
width: 33.3%;
height: 18em; height: 18em;
border: solid 1px black; border: solid 1px black;
} }
@ -903,3 +898,48 @@ body#fullyearlinked table.calendar tbody td {
body#OneDay div.content { body#OneDay div.content {
overflow: hidden; overflow: hidden;
} }
body#OneDay h3 {
font-size: xx-large;
vertical-align: top;
height: 2em;
}
#WebCal table.calendar tfoot {
display: none;
}
#WebCal table.calendar tr td {
word-wrap: break-word;
padding: 2px;
}
#WebCal .calendar tr td .empty {
border: 5px solid rgba(255,255,255,.0);
}
#WebCal .calendar tr td .clickable {
border: 5px solid rgba(255,255,255,.0);
}
#WebCal .calendar tr td .clickable:hover {
display: block;
overflow:auto;
word-wrap: break-word;
cursor: text;
border-radius: 10px 0px 10px 10px;
border: 5px solid #204D91;
padding: 0px;
}
body#fullyearlinked #YearGlance tbody td {
height:48px;
vertical-align: middle;
text-align: center;
padding-left: 6px;
}
body#fullyearlinked #YearGlance tbody td .date {
font-size: 30px;
vertical-align: middle;
text-align: center;
border-radius: 45px;
float: none;
border: 5px solid rgba(0,0,0,.0);
}
body#fullyearlinked #YearGlance tbody td:hover .date {
border-radius: 45px;
border: 5px solid;
}

View File

@ -69,7 +69,6 @@ body {
background: url(../images/Web_Mainz_Bkgd.png) black repeat; background: url(../images/Web_Mainz_Bkgd.png) black repeat;
} }
body > div { body > div {
width: 85%;
margin: 0px auto; margin: 0px auto;
overflow: hidden; overflow: hidden;
} }
@ -100,8 +99,17 @@ div.snapshot a {
.content { .content {
padding: 0em 0.5em; padding: 0em 0.5em;
} }
body#fullyearlinked table.calendar {
float: none;
width: 100%;
}
}
@media only screen and (width > 1080px) {
body#fullyearlinked table.calendar {
float: left;
width: 33.3%;
}
} }
/* General Text /* General Text
-----------------------------------------------------------------*/ -----------------------------------------------------------------*/
@ -251,11 +259,6 @@ div#nav::after {
.nav { .nav {
background: none; /* Works in IE too. */ background: none; /* Works in IE too. */
/*
width: 200px;
position: absolute;
z-index: 10;
*/
} }
/* Undo some of the #nav styles - to enable the class .nav */ /* Undo some of the #nav styles - to enable the class .nav */
@ -292,8 +295,8 @@ div#nav::after {
margin-right: 10px; margin-right: 10px;
} }
.nav.responsive li { .nav.responsive li {
/* float: left; */
display: block; display: block;
height:1.4em;
text-align: left; text-align: left;
background-color: #D8C19F; background-color: #D8C19F;
/* required by IE */ /* required by IE */
@ -747,28 +750,24 @@ table.calendar {
.calendar thead th.monthName { .calendar thead th.monthName {
font-size: xx-large; font-size: xx-large;
color: #767D25; color: #767D25;
border-bottom-color: #7D5925; vertical-align: top;
height: 2em;
border-bottom-style: none;
} }
.calendar thead th abbr { .calendar thead th abbr {
border-bottom-style: none; border-bottom-style: none;
} }
#CreatorInfo {
float: right;
margin: -1em 0px 0px 0px;
font-weight: bold;
font-style: italic;
}
.calendar tfoot td { .calendar tfoot td {
border-top: double 4px #7D5925; border-top: double 4px #7D5925;
} }
/* Calendar : Date Numeral */ /* Calendar : Date Numeral */
.calendar div.date { .calendar div.date {
float: right; width: 1.5em;
width: 1.8em;
font-size: large; font-size: large;
font-style: italic; font-style: italic;
text-align: center; text-align: center;
margin-top: 1px;
background: url(../images/Web_Mainz_MidLight.png) #FFF2C6 repeat; background: url(../images/Web_Mainz_MidLight.png) #FFF2C6 repeat;
} }
@ -812,10 +811,11 @@ table.calendar {
color: #767D25; color: #767D25;
} }
.calendar td ul li span.yearsmarried em { .calendar td ul li span.yearsmarried em {
color: black; color: #767D25;
} }
.calendar td.highlight div.date { .calendar td.highlight div.date {
color: #767D25; color: #767D25;
margin-top: 1px;
background-image: none; background-image: none;
background-color: #FFFFE7; background-color: #FFFFE7;
} }
@ -828,8 +828,6 @@ table.calendar {
/* Calendar : Full Year */ /* Calendar : Full Year */
body#fullyearlinked table.calendar { body#fullyearlinked table.calendar {
float: left;
width: 315px;
height: 18em; height: 18em;
border: solid 1px #7D5925; border: solid 1px #7D5925;
} }
@ -842,3 +840,58 @@ body#fullyearlinked table.calendar thead th.monthName {
body#fullyearlinked table.calendar tbody td { body#fullyearlinked table.calendar tbody td {
height: 3em; height: 3em;
} }
body#OneDay h3 {
font-size: xx-large;
vertical-align: top;
height: 2em;
text-align: center;
}
#WebCal table.calendar tfoot {
display: none;
}
#WebCal table.calendar tr td {
word-wrap: break-word;
padding: 2px;
}
#WebCal .calendar tr td .empty {
border: 5px solid rgba(255,255,255,.0);
}
#WebCal .calendar tr td .clickable {
border: 5px solid rgba(255,255,255,.0);
}
#WebCal .calendar tr td .clickable:hover {
display: block;
overflow:auto;
word-wrap: break-word;
cursor: text;
border-radius: 10px 0px 10px 10px;
border: 5px solid #7D5925;
padding: 0px;
}
body#fullyearlinked #YearGlance tbody td {
vertical-align: middle;
text-align: center;
padding-left: 8px;
}
body#fullyearlinked #YearGlance tbody td .date {
font-size: 30px;
vertical-align: middle;
text-align: center;
border-radius: 45px;
float: none;
border: 5px solid rgba(0,0,0,.0);
}
body#fullyearlinked #YearGlance tbody td.previous .date:hover,
body#fullyearlinked #YearGlance tbody td.next .date:hover {
border-radius: 10px;
border: 5px solid;
}
body#fullyearlinked #YearGlance tbody td div.empty .date:hover {
border-radius: 10px;
border: 5px solid;
}
body#fullyearlinked #YearGlance tbody td.highlight .date:hover {
border-radius: 45px;
border: 5px solid;
background: url(../images/Web_Mainz_Bkgd.png) black repeat;
}

View File

@ -118,6 +118,16 @@ img {
.content { .content {
padding: 0em 0.5em; padding: 0em 0.5em;
} }
body#fullyearlinked table.calendar {
float: none;
width: 100%;
}
}
@media only screen and (width > 1080px) {
body#fullyearlinked table.calendar {
float: left;
width: 33.3%;
}
} }
.fullclear { .fullclear {
width:100%; width:100%;
@ -301,11 +311,6 @@ div#nav::after {
.nav { .nav {
background: none; /* Works in IE too. */ background: none; /* Works in IE too. */
/*
width: 200px;
position: absolute;
z-index: 10;
*/
} }
/* Undo some of the #nav styles - to enable the class .nav */ /* Undo some of the #nav styles - to enable the class .nav */
@ -348,7 +353,6 @@ div#nav::after {
background-color: #A97; background-color: #A97;
} }
.nav.responsive li { .nav.responsive li {
/* float: left; */
display: block; display: block;
text-align: left; text-align: left;
background-color: #A97; background-color: #A97;
@ -1336,11 +1340,8 @@ body#WebCal {
color:#542; color:#542;
padding:.3em 0 .2em 0; padding:.3em 0 .2em 0;
background-color:#FFF; background-color:#FFF;
} vertical-align: top;
#CreatorInfo { height: 2em;
float:right;
color:#FFF;
margin:-24px 10px 0 0;
} }
.calendar thead tr th.weekend, .calendar thead tr th.weekend,
.calendar thead tr th.weekday { .calendar thead tr th.weekday {
@ -1361,14 +1362,12 @@ body#WebCal {
/* Calendar : Date Numeral */ /* Calendar : Date Numeral */
.calendar tbody tr td div.date { .calendar tbody tr td div.date {
float:right; float:none;
display:block; display:block;
width:1.8em;
font-size:1.2em; font-size:1.2em;
line-height:100%; line-height:100%;
text-align:center; text-align:center;
color:#542; color:#542;
margin:0 0 0 .5em;
padding:.2em 0; padding:.2em 0;
background-color:#F6F2EE; background-color:#F6F2EE;
} }
@ -1431,6 +1430,7 @@ body#WebCal {
.calendar tbody tr td.highlight div.date { .calendar tbody tr td.highlight div.date {
color:#0A65B5; color:#0A65B5;
background-color:#C2E1FE; background-color:#C2E1FE;
border: 5px solid rgba(255,255,255,.0);
} }
/* Calendar : Previous-Next Month */ /* Calendar : Previous-Next Month */
@ -1440,17 +1440,15 @@ body#WebCal {
.calendar tbody tr td.next div.date { .calendar tbody tr td.next div.date {
color:#A97; color:#A97;
background-color:#F6F2EE; background-color:#F6F2EE;
border: 5px solid rgba(255,255,255,.0);
} }
/* Calendar : Full Year */ /* Calendar : Full Year */
body#fullyearlinked div.content { body#fullyearlinked div.content {
width:963px;
margin:0 auto; margin:0 auto;
padding:15px 0 2px 2px; padding:5px 0 2px 2px;
} }
body#fullyearlinked table.calendar { body#fullyearlinked table.calendar {
float:left;
width:320px;
height:18em; height:18em;
border:solid 1px #7D5925; border:solid 1px #7D5925;
} }
@ -1464,3 +1462,59 @@ body#fullyearlinked table.calendar thead tr th.monthName {
body#fullyearlinked table.calendar tbody tr td { body#fullyearlinked table.calendar tbody tr td {
height:3em; height:3em;
} }
body#OneDay h3 {
font-size: xx-large;
vertical-align: top;
height: 2em;
}
#WebCal table.calendar tfoot {
display: none;
}
#WebCal table.calendar tr td {
word-wrap: break-word;
border-bottom:solid 1px #7D5925;
border-right:solid 1px #7D5925;
padding-left: 0px;
}
#WebCal .calendar tr td .empty {
border: 5px solid rgba(255,255,255,.0);
}
#WebCal .calendar tr td .clickable {
border: 5px solid rgba(255,255,255,.0);
}
#WebCal .calendar tr td .clickable:hover {
display: block;
overflow:auto;
word-wrap: break-word;
cursor: text;
border-radius: 10px 0px 10px 10px;
border: 5px solid #453619;
padding: 0px;
}
body#fullyearlinked #YearGlance tbody td {
height:48px;
vertical-align: middle;
text-align: center;
}
body#fullyearlinked #YearGlance tbody td.previous {
border-width:0px 1px 1px 0px;
border-color:#C1B398;
}
body#fullyearlinked #YearGlance tbody td.next {
border-width:1px 0px 0px 1px;
border-color:#C1B398;
}
body#fullyearlinked #YearGlance tbody td .date {
font-size: 30px;
vertical-align: middle;
text-align: center;
border-radius: 45px;
margin-left: 5px;
margin-right: 5px;
float: none;
border: 5px solid rgba(0,0,0,.0);
}
body#fullyearlinked #YearGlance tbody td:hover .date {
border-radius: 45px;
border: 5px solid;
}

View File

@ -719,10 +719,6 @@ body#WebCal h1#SiteTitle {
padding:5pt; padding:5pt;
border-width:0; border-width:0;
} }
#CreatorInfo {
float:right;
margin:0 10px 0 0;
}
body#WebCal a { body#WebCal a {
text-decoration:none; text-decoration:none;
color:#000; color:#000;

View File

@ -1486,17 +1486,8 @@ body#WebCal {
color: #542; color: #542;
padding:.3em 0 .2em 0; padding:.3em 0 .2em 0;
background-color: #FFF; background-color: #FFF;
} vertical-align: top;
#CreatorInfo { height: 2em;
float:right;
color: #FFF;
margin:-24px 10px 0 0;
}
#CreatorInfo a {
color: #FFF;
}
#CreatorInfo a:hover {
color: #FFF;
} }
.calendar thead tr th.weekend, .calendar thead tr th.weekend,
.calendar thead tr th.weekday { .calendar thead tr th.weekday {
@ -1658,7 +1649,7 @@ table.oneday tbody tr td.ColumnText {
width: 85%; width: 85%;
} }
table.oneday tbody tr td.ColumnEvent { table.oneday tbody tr td.ColumnEvent {
width; 10%; width: 10%;
} }
/* PlaceMaps /* PlaceMaps

View File

@ -49,7 +49,6 @@ import logging
from gramps.gen.const import GRAMPS_LOCALE as glocale from gramps.gen.const import GRAMPS_LOCALE as glocale
from gramps.gen.lib import Date, Name, NameType, Person from gramps.gen.lib import Date, Name, NameType, Person
from gramps.gen.lib.date import Today from gramps.gen.lib.date import Today
from gramps.plugins.webreport.common import html_escape
from gramps.gen.const import PROGRAM_NAME, URL_HOMEPAGE from gramps.gen.const import PROGRAM_NAME, URL_HOMEPAGE
from gramps.version import VERSION from gramps.version import VERSION
from gramps.gen.constfunc import win from gramps.gen.constfunc import win
@ -72,6 +71,7 @@ import gramps.plugins.lib.libholiday as libholiday
from gramps.plugins.lib.libhtml import Html, xml_lang from gramps.plugins.lib.libhtml import Html, xml_lang
from gramps.plugins.lib.libhtmlconst import _CHARACTER_SETS, _CC, _COPY_OPTIONS from gramps.plugins.lib.libhtmlconst import _CHARACTER_SETS, _CC, _COPY_OPTIONS
from gramps.gui.pluginmanager import GuiPluginManager from gramps.gui.pluginmanager import GuiPluginManager
from gramps.plugins.webreport.common import html_escape
from gramps.gen.lib.date import gregorian from gramps.gen.lib.date import gregorian
@ -152,7 +152,6 @@ class WebCalReport(Report):
self.birthday = mgobn('birthdays') self.birthday = mgobn('birthdays')
self.anniv = mgobn('anniversaries') self.anniv = mgobn('anniversaries')
self.death_anniv = mgobn('death_anniv') self.death_anniv = mgobn('death_anniv')
self.home_link = mgobn('home_link')
self.event_list = [] self.event_list = []
self.month_notes = [mgobn('note_' + month) self.month_notes = [mgobn('note_' + month)
@ -188,6 +187,10 @@ class WebCalReport(Report):
self.holidays = {} self.holidays = {}
calendar.setfirstweekday(DOW_GRAMPS2ISO[self.start_dow]) calendar.setfirstweekday(DOW_GRAMPS2ISO[self.start_dow])
self.head = []
# An optional link to a home page
self.head.append((self.narweb_prefix, self._('NarrativeWeb Home'),
self.link_to_narweb))
def get_note_format(self, note): def get_note_format(self, note):
""" """
@ -455,6 +458,28 @@ class WebCalReport(Report):
self.encoding, self.encoding,
xmllang) xmllang)
# Add the script to control the menu
menuscript = Html("<script>function navFunction() { "
"var x = document.getElementById(\"dropmenu\"); "
"if (x.className === \"nav\") { x.className += \""
" responsive\"; } else { x.className = \"nav\"; }"
" }</script>")
if self.multiyear:
head += menuscript
# begin header section
if self.multiyear:
headerdiv = Html("div", id='header') + (
Html("<a href=\"javascript:void(0);\" class=\"navIcon\""
" onclick=\"navFunction()\">&#8801;</a>")) + (
Html("h1", html_escape(title),
id="SiteTitle", inline=True))
else:
headerdiv = Html("div", id='header') + (
Html("h1", html_escape(title),
id="SiteTitle", inline=True))
body += headerdiv
# add body id tag if not None # add body id tag if not None
if body_id is not None: if body_id is not None:
body.attr = "id = '%(idtag)s'" % {'idtag' : body_id} body.attr = "id = '%(idtag)s'" % {'idtag' : body_id}
@ -505,27 +530,18 @@ class WebCalReport(Report):
head += (meta, links) head += (meta, links)
# start header section and page title... # start header section and page title...
with Html("div", id="header", role="Title-n-Navigation") as header: script = """
header += Html("h1", title, id="SiteTitle", inline=True) <script type="text/javascript">
function currentmonth(y) {
# Created for ? var date = new Date();
msg = None var month = date.getMonth() + 1;
if self.author and self.email: var url = y + "/" + month + "%s";
bemail = '<a href="mailto:' + self.email + '?subject=' window.location.href = url;
eemail = '">' + self.author + '</a>' return false;
msg = self._('the "WebCal" will be the potential-email Subject|' }
'Created for %(html_email_author_start)s' </script>
'WebCal%(html_email_author_end)s') % { """ % self.ext
'html_email_author_start' : bemail, body += script
'html_email_author_end' : eemail}
elif self.author:
msg = self._('Created for %(author)s') % {
'author' : self.author}
if msg:
header += Html("p", msg, id="CreatorInfo")
body += header
return page, body return page, body
def year_navigation(self, nr_up, currentsection): def year_navigation(self, nr_up, currentsection):
@ -543,68 +559,82 @@ class WebCalReport(Report):
self.end_year = (self.start_year + 17) if nyears > 18 else self.end_year self.end_year = (self.start_year + 17) if nyears > 18 else self.end_year
# begin year division and begin unordered list # begin year division and begin unordered list
with Html("div", id="subnavigation", with Html("div", class_="wrappernav",
role="subnavigation") as submenu: id="nav", role="navigation") as navigation:
unordered = Html("ul") with Html("div", class_="container") as container:
for cal_year in range(self.start_year, unordered = Html("ul", class_="nav", id="dropmenu")
(self.start_year + num_years)):
url = ''
# begin subdir level (url, nav_text, disp) = self.head[0]
subdirs = ['..'] * nr_up if disp:
subdirs.append(str(cal_year)) if url[:1] == '/':
url = url + "index" + self.ext
else:
url_up = ['..'] * nr_up
url_up.append(url)
url = '/'.join(url_up) + "index" + self.ext
hyper = Html("a", nav_text, href=url, name=url,
title=nav_text)
unordered.extend(Html("li", hyper, inline=True))
# each year will link to current month. for cal_year in range(self.start_year,
# this will always need an extension added (self.start_year + num_years)):
month = int(self.today.get_month()) url = ''
full_month_name = self.rlocale.date_displayer.long_months[month]
full_month_name = full_month_name.lower()
# Note. We use '/' here because it is a URL, not a OS dependent # begin subdir level
# pathname. subdirs = ['..'] * nr_up
url = '/'.join(subdirs + [full_month_name]) + self.ext subdirs.append(str(cal_year))
hyper = Html("a", self.rlocale.get_date(Date(cal_year)),
href=url, title=str(cal_year))
# Figure out if we need <li class="CurrentSection"> # Note. We use '/' here because it is a URL,
# or just plain <li> # not a OS dependent pathname.
if str(cal_year) == currentsection: url = '/'.join(subdirs)
check_cs = 'class = "CurrentSection"' onclic = "return currentmonth('" + url + "');"
else: hyper = Html("a", self.rlocale.get_date(Date(cal_year)),
check_cs = False href="#", onclick=onclic, title=str(cal_year))
if check_cs:
unordered.extend(
Html("li", hyper, attr=check_cs, inline=True)
)
else:
unordered.extend(
Html("li", hyper, inline=True)
)
submenu += unordered
return submenu
def month_navigation(self, nr_up, year, currentsection, add_home): # Figure out if we need <li class="CurrentSection">
# or just plain <li>
if str(cal_year) == currentsection:
check_cs = 'class = "CurrentSection"'
else:
check_cs = False
if check_cs:
unordered.extend(
Html("li", hyper, attr=check_cs, inline=True)
)
else:
unordered.extend(
Html("li", hyper, inline=True)
)
container += unordered
navigation += container
return navigation
def month_navigation(self, nr_up, year, currentsection):
""" """
Will create and display the navigation menu bar Will create and display the navigation menu bar
nr_up = number of directories up to reach root directory nr_up = number of directories up to reach root directory
year = year being created year = year being created
currentsection = month name being created for proper CSS styling currentsection = month name being created for proper CSS styling
add_home = if creating a link to home
-- a link to root directory of website
""" """
navs = [] navs = []
# An optional link to a home page if not self.multiyear:
if self.home_link: (url, nav_text, disp) = self.head[0]
navs.append((self.home_link, self._('Home'), add_home)) if url[:1] == '/':
navs.extend((self.rlocale.date_displayer.long_months[int(month)], url = url + "index" + self.ext
else:
url = "../" + url + "index" + self.ext
navs.append((url, nav_text, disp))
navs.extend((str(month),
self.rlocale.date_displayer.short_months[int(month)], True) self.rlocale.date_displayer.short_months[int(month)], True)
for month in range(1, 13)) for month in range(1, 13))
# Add a link for year_glance() if requested # Add a link for year_glance() if requested
navs.append(('fullyearlinked', self._('Year Glance'), self.fullyear)) navs.append(('fullyearlinked', self._('Full year at a Glance'),
self.fullyear))
# remove menu items if they are not True # remove menu items if they are not True
navs = [(u, n) for u, n, c in navs if c] navs = [(u, n) for u, n, c in navs if c]
@ -621,7 +651,7 @@ class WebCalReport(Report):
# Note. We use '/' here because it is a URL, not a OS # Note. We use '/' here because it is a URL, not a OS
# dependent pathname need to leave home link alone, # dependent pathname need to leave home link alone,
# so look for it ... # so look for it ...
if nav_text != _("Home"): if nav_text != self._("NarrativeWeb Home"):
url_fname = url_fname.lower() url_fname = url_fname.lower()
url = url_fname url = url_fname
add_subdirs = False add_subdirs = False
@ -645,9 +675,7 @@ class WebCalReport(Report):
else: else:
check_cs = False check_cs = False
if url == self.home_link: if url_fname == 'fullyearlinked':
mytitle = self._("NarrativeWeb Home")
elif url_fname == 'fullyearlinked':
mytitle = self._('Full year at a Glance') mytitle = self._('Full year at a Glance')
else: else:
mytitle = self._(url_fname) mytitle = self._(url_fname)
@ -746,64 +774,64 @@ class WebCalReport(Report):
table += thead table += thead
if clickable: if clickable:
name = th_txt + self.ext name = str(month) + self.ext
url = name.lower() linkable = Html("a", th_txt, href=name, name=name, title=th_txt)
linkable = Html("a", th_txt, href=url, name=url, title=th_txt) trow = Html("tr") + (
Html("th", linkable, class_='monthName',
colspan=7, inline=True)
)
thead += trow
else: else:
linkable = th_txt
if not self.multiyear: if not self.multiyear:
self.end_year = self.start_year self.end_year = self.start_year
if month > 1: if month > 1:
full_month_name = date_displayer.long_months[month-1] full_month_name = str(month-1)
url = full_month_name.lower() + self.ext url = full_month_name.lower() + self.ext
prevm = Date(int(year), int(month-1), 0) prevm = Date(int(year), int(month-1), 0)
my_title = Html("a", html_escape("<"), href=url, my_title = Html("a", "\u276e", href=url, close=True,
title=date_displayer.display(prevm)) title=date_displayer.display(prevm))
elif self.multiyear and year > self.start_year: elif self.multiyear and year > self.start_year:
full_month_name = date_displayer.long_months[12] full_month_name = str(12)
url = full_month_name.lower() + self.ext url = full_month_name.lower() + self.ext
dest = os.path.join("../", str(year-1), url) dest = os.path.join("../", str(year-1), url)
prevm = Date(int(year-1), 12, 0) prevm = Date(int(year-1), 12, 0)
my_title = Html("a", html_escape("<"), href=dest, my_title = Html("a", "\u276e", href=dest, close=True,
title=date_displayer.display(prevm)) title=date_displayer.display(prevm))
else: else:
full_month_name = date_displayer.long_months[12] full_month_name = str(12)
url = full_month_name.lower() + self.ext url = full_month_name.lower() + self.ext
dest = os.path.join("../", str(self.end_year), url) dest = os.path.join("../", str(self.end_year), url)
prevy = Date(self.end_year, 12, 0) prevy = Date(self.end_year, 12, 0)
my_title = Html("a", html_escape("<"), href=dest, my_title = Html("a", "\u276e", href=dest, close=True,
title=date_displayer.display(prevy)) title=date_displayer.display(prevy))
my_title += Html("</a>&nbsp;") my_title += Html("</a>&nbsp;" + month_name + "&nbsp;")
if month < 12: if month < 12:
full_month_name = date_displayer.long_months[month+1] full_month_name = str(month+1)
url = full_month_name.lower() + self.ext url = full_month_name.lower() + self.ext
nextd = Date(int(year), int(month+1), 0) nextd = Date(int(year), int(month+1), 0)
my_title += Html("a", html_escape(">"), href=url, my_title += Html("a", "\u276f", href=url, close=True,
title=date_displayer.display(nextd)) title=date_displayer.display(nextd))
elif self.multiyear and year < self.end_year: elif self.multiyear and year < self.end_year:
full_month_name = date_displayer.long_months[1] full_month_name = str(1)
url = full_month_name.lower() + self.ext url = full_month_name.lower() + self.ext
dest = os.path.join("../", str(year+1), url) dest = os.path.join("../", str(year+1), url)
nextd = Date(int(year+1), 1, 0) nextd = Date(int(year+1), 1, 0)
my_title += Html("a", html_escape(">"), href=dest, my_title += Html("a", "\u276f", href=dest, close=True,
title=date_displayer.display(nextd)) title=date_displayer.display(nextd))
else: else:
full_month_name = date_displayer.long_months[1] full_month_name = str(1)
url = full_month_name.lower() + self.ext url = full_month_name.lower() + self.ext
dest = os.path.join("../", str(self.start_year), url) dest = os.path.join("../", str(self.start_year), url)
nexty = Date(self.start_year, 1, 0) nexty = Date(self.start_year, 1, 0)
my_title += Html("a", html_escape(">"), href=dest, my_title += Html("a", "\u276f", href=dest, close=True,
title=date_displayer.display(nexty)) title=date_displayer.display(nexty))
my_title += Html("</a>")
trow = Html("tr") + ( trow = Html("tr") + (
Html("th", my_title, class_='monthName', Html("th", my_title, class_='monthName',
colspan=7, inline=True) colspan=7, inline=True)
) )
thead += trow thead += trow
trow = Html("tr") + ( trow = Html("tr") + (Html("th", "", colspan=7, inline=True))
Html("th", linkable, class_='monthName', colspan=7, inline=True) thead += trow
)
thead += trow
# Calendar weekday names header # Calendar weekday names header
trow = Html("tr") trow = Html("tr")
@ -846,6 +874,8 @@ class WebCalReport(Report):
# add calendar date division # add calendar date division
datediv = Html("div", day, class_="date", inline=True) datediv = Html("div", day, class_="date", inline=True)
clickable = Html("div", datediv, class_="clickable",
inline=True)
### a day in the previous or next month ### ### a day in the previous or next month ###
if day == 0: if day == 0:
@ -932,11 +962,11 @@ class WebCalReport(Report):
# WebCal # WebCal
else: else:
# add date to table cell # add date to table cell
tcell += datediv tcell += clickable
# list the events # list the events
unordered = Html("ul") unordered = Html("ul")
tcell += unordered clickable += unordered
for (dummy_nyears, dummy_date, text, for (dummy_nyears, dummy_date, text,
event, dummy_notused, event, dummy_notused,
@ -948,11 +978,15 @@ class WebCalReport(Report):
else True) else True)
# no events for this day # no events for this day
else: else:
# adds date division
date = Html("div", day, class_="date",
inline=True)
# create empty day with date # create empty day with date
tcell = Html("td", class_=dayclass, tcell = Html("td", class_=dayclass,
inline=True) + ( inline=True) + (
# adds date division # adds date division
Html("div", day, class_="date", Html("div", date,
class_="empty",
inline=True)) inline=True))
# nothing for this month # nothing for this month
else: else:
@ -1002,8 +1036,7 @@ class WebCalReport(Report):
_('Formatting months ...'), 12) as step: _('Formatting months ...'), 12) as step:
for month in range(1, 13): for month in range(1, 13):
cal_fname = self.rlocale.date_displayer.long_months[int(month)] cal_fname = str(month)
cal_fname = cal_fname.lower()
open_file = self.create_file(cal_fname, str(year)) open_file = self.create_file(cal_fname, str(year))
# Add xml, doctype, meta and stylesheets # Add xml, doctype, meta and stylesheets
@ -1017,7 +1050,7 @@ class WebCalReport(Report):
# Create Month Navigation Menu # Create Month Navigation Menu
# identify currentsection for proper highlighting # identify currentsection for proper highlighting
currentsection = _dd.long_months[month] currentsection = _dd.long_months[month]
body += self.month_navigation(nr_up, year, currentsection, True) body += self.month_navigation(nr_up, year, currentsection)
# build the calendar # build the calendar
content = Html("div", class_="content", id="WebCal") content = Html("div", class_="content", id="WebCal")
@ -1104,7 +1137,7 @@ class WebCalReport(Report):
# Create Month Navigation Menu # Create Month Navigation Menu
# identify currentsection for proper highlighting # identify currentsection for proper highlighting
body += self.month_navigation(nr_up, year, "fullyearlinked", True) body += self.month_navigation(nr_up, year, "fullyearlinked")
msg = (self._('This calendar is meant to give you access ' msg = (self._('This calendar is meant to give you access '
'to all your data at a glance compressed into one ' 'to all your data at a glance compressed into one '
@ -1172,7 +1205,7 @@ class WebCalReport(Report):
# Create Month Navigation Menu # Create Month Navigation Menu
# identify currentsection for proper highlighting # identify currentsection for proper highlighting
currentsection = _dd.long_months[month] currentsection = _dd.long_months[month]
body += self.month_navigation(nr_up, year, currentsection, True) body += self.month_navigation(nr_up, year, currentsection)
# set date display as in user preferences # set date display as in user preferences
content = Html("div", class_="content", id="OneDay") content = Html("div", class_="content", id="OneDay")
@ -1189,24 +1222,22 @@ class WebCalReport(Report):
url = event[1] + self.ext url = event[1] + self.ext
prevd = Date(int(event[1][:4]), int(event[1][4:6]), prevd = Date(int(event[1][:4]), int(event[1][4:6]),
int(event[1][6:])) int(event[1][6:]))
my_title = Html("a", html_escape("<"), href=url, my_title = Html("a", "\u276e", href=url,
title=self.rlocale.get_date(prevd)) title=self.rlocale.get_date(prevd))
else: else:
my_title = Html('<em>&nbsp;&nbsp;</em>') my_title = Html('<em>&nbsp;&nbsp;</em>')
my_title += Html("</a>&nbsp;") my_title += Html("</a>")
my_title += "&nbsp;&nbsp;"
my_title += self.rlocale.date_displayer.display(event_date)
my_title += "&nbsp;&nbsp;"
if found[2] is not None: if found[2] is not None:
url = event[2] + self.ext url = event[2] + self.ext
nextd = Date(int(event[2][:4]), int(event[2][4:6]), nextd = Date(int(event[2][:4]), int(event[2][4:6]),
int(event[2][6:])) int(event[2][6:]))
my_title += Html("a", html_escape(">"), href=url, my_title += Html("a", "\u276f", href=url,
title=self.rlocale.get_date(nextd)) title=self.rlocale.get_date(nextd))
else: else:
my_title += Html('<b>&nbsp;&nbsp;</b>') my_title += Html('<b>&nbsp;&nbsp;</b>')
my_title += Html("</a>")
content += Html("h3", my_title, inline=True)
my_title = Html("span", " ")
my_title += self.rlocale.date_displayer.display(event_date)
my_title += Html("span", " ")
content += Html("h3", my_title, inline=True) content += Html("h3", my_title, inline=True)
# list the events # list the events
@ -1373,7 +1404,10 @@ class WebCalReport(Report):
# add link to NarrativeWeb # add link to NarrativeWeb
if self.link_to_narweb: if self.link_to_narweb:
prfx = self.narweb_prefix if self.narweb_prefix[:1] != '/':
prfx = "../" + self.narweb_prefix
else:
prfx = self.narweb_prefix
text = str(Html("a", short_name, text = str(Html("a", short_name,
href=self.build_url_fname_html( href=self.build_url_fname_html(
person.handle, person.handle,
@ -1407,7 +1441,10 @@ class WebCalReport(Report):
if (self.alive and alive) or not self.alive: if (self.alive and alive) or not self.alive:
# add link to NarrativeWeb # add link to NarrativeWeb
if self.link_to_narweb: if self.link_to_narweb:
prfx = self.narweb_prefix if self.narweb_prefix[:1] != '/':
prfx = "../" + self.narweb_prefix
else:
prfx = self.narweb_prefix
navpfx = self.build_url_fname_html(person.handle, navpfx = self.build_url_fname_html(person.handle,
"ppl", "ppl",
prefix=prfx) prefix=prfx)
@ -1485,7 +1522,10 @@ class WebCalReport(Report):
first_died = d_date first_died = d_date
if self.link_to_narweb: if self.link_to_narweb:
prefx = self.narweb_prefix if self.narweb_prefix[:1] != '/':
prefx = "../" + self.narweb_prefix
else:
prefx = self.narweb_prefix
reference = self.build_url_fname_html( reference = self.build_url_fname_html(
spouse_handle, 'ppl', spouse_handle, 'ppl',
prefix=prefx) prefix=prefx)
@ -1525,6 +1565,20 @@ class WebCalReport(Report):
# begin calendar footer # begin calendar footer
with Html("div", id="footer", role="Footer-End") as footer: with Html("div", id="footer", role="Footer-End") as footer:
amsg = None
if self.author and self.email:
bemail = '<a href="mailto:' + self.email + '?subject='
eemail = '">' + self.author + '</a>'
amsg = self._('the "WebCal" will be the potential-email'
' Subject|'
'%(html_email_author_start)s'
'WebCal%(html_email_author_end)s') % {
'html_email_author_start' : bemail,
'html_email_author_end' : eemail}
elif self.author:
amsg = '%(author)s' % {
'author' : self.author}
# Display date as user set in preferences # Display date as user set in preferences
date = self.rlocale.date_displayer.display(Today()) date = self.rlocale.date_displayer.display(Today())
bhtml = '<a href="' + URL_HOMEPAGE + '">' bhtml = '<a href="' + URL_HOMEPAGE + '">'
@ -1533,21 +1587,20 @@ class WebCalReport(Report):
'gramps_home_html_start' : bhtml, 'gramps_home_html_start' : bhtml,
'html_end' : '</a>', 'html_end' : '</a>',
'date' : date} 'date' : date}
footer += Html("p", msg, id='createdate')
copy_nr = self.copy copy_nr = self.copy
text = ''
if copy_nr == 0: if copy_nr == 0:
if self.author: if self.author:
text = "&copy; %s %s" % (self.today.get_year(), self.author) amsg = "&copy; %s" % amsg
elif 0 < copy_nr < len(_CC): msg += " (%s)" % amsg
footer += Html("p", msg, id='createdate')
text = ''
if 0 < copy_nr < len(_CC):
subdirs = ['..'] * nr_up subdirs = ['..'] * nr_up
# Note. We use '/' here because it is a URL, # Note. We use '/' here because it is a URL,
# not a OS dependent pathname # not a OS dependent pathname
fname = '/'.join(subdirs + ['images'] + ['somerights20.gif']) fname = '/'.join(subdirs + ['images'] + ['somerights20.gif'])
text = _CC[copy_nr] % {'gif_fname' : fname} text = _CC[copy_nr] % {'gif_fname' : fname}
else:
text = "&copy; %s %s" % (self.today.get_year(), self.author)
footer += Html("p", text, id='copyright') footer += Html("p", text, id='copyright')
@ -1602,8 +1655,7 @@ class WebCalReport(Report):
if self.fullyear: if self.fullyear:
self.year_glance(cal_year) self.year_glance(cal_year)
if self.home_link: self.create_page_index()
self.create_page_index()
# a single year # a single year
else: else:
@ -1623,7 +1675,7 @@ class WebCalReport(Report):
if self.fullyear: if self.fullyear:
self.year_glance(cal_year) self.year_glance(cal_year)
if self.home_link: if self.link_to_narweb:
self.create_page_index() self.create_page_index()
def create_page_index(self): def create_page_index(self):
@ -1668,7 +1720,8 @@ class WebCalOptions(MenuReportOptions):
self.__filter = None self.__filter = None
self.__links = None self.__links = None
self.__prefix = None self.__prefix = None
MenuReportOptions.__init__(self, name, dbase) db_options = name + ' ' + dbase.get_dbname()
MenuReportOptions.__init__(self, db_options, dbase)
self.__multiyear = None self.__multiyear = None
self.__start_year = None self.__start_year = None
self.__end_year = None self.__end_year = None
@ -1832,13 +1885,6 @@ class WebCalOptions(MenuReportOptions):
maiden_name.set_help(_("Select married women's displayed surname")) maiden_name.set_help(_("Select married women's displayed surname"))
menu.add_option(category_name, "maiden_name", maiden_name) menu.add_option(category_name, "maiden_name", maiden_name)
dbname = self.__db.get_dbname()
default_link = '../../' + dbname + "_NAVWEB/index.html"
home_link = StringOption(_('Home link'), default_link)
home_link.set_help(_("The link to be included to direct the user to "
"the main page of the web site"))
menu.add_option(category_name, "home_link", home_link)
def __add_notes_options(self, menu): def __add_notes_options(self, menu):
""" """
Options on the "Months Notes" tabs. Options on the "Months Notes" tabs.