diff --git a/data/css/ancestortree.css b/data/css/ancestortree.css
index 2556cd2da..3a27b6b17 100644
--- a/data/css/ancestortree.css
+++ b/data/css/ancestortree.css
@@ -9,7 +9,7 @@
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
-# This program is distributed in the hope that it will be useful,
+# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
@@ -20,10 +20,10 @@
#
# $Id: $
#
-**************************************************************************************************
+*******************************************************************************
GRAMPS Cascading Style Sheet
Style Name: Combined Ancestor Tree Style Sheet
-***************************************************************************************************
+*******************************************************************************
#
===== Ancestor Graph Color Scheme =====
Males #BCEAF6
@@ -33,10 +33,8 @@ Unknown #000
===== Web Graphics =====
Males Web_Gender_Male.png
Females Web_Gender_Female.png
-# ------------------------------------------------------------------------------------------------- */
-
-/* Subsections : Ancestors Tree
------------------------------------------------------ */
+# -------------------------------------------------------------------------- #
+/* Subsections : Ancestors Tree -------------------------------------------- */
#tree {
page-break-before:always;
margin:0;
@@ -52,8 +50,8 @@ Females Web_Gender_Female.png
}
#treeContainer div.boxbg {
position:absolute;
- margin:0;
- padding:0;
+ margin:0px;
+ padding:0px;
background:none;
}
#treeContainer div.boxbg a,
@@ -61,41 +59,43 @@ Females Web_Gender_Female.png
position:relative;
z-index:10;
display:block;
- font:normal .7em/1.4em sans-serif;
+ font:normal 1.1em/1.4em sans-serif;
text-align:center;
+ word-break:break-word;
+ word-wrap:break-word;
text-decoration:none;
color: #00029D;
- width:118px;
- padding:5px 20px 7px 20px;
+ width:280px;
+ min-height: 70px;
margin-left:16px;
- background-color: #FFF;
- border: solid 1px #000;
+ border: solid 2px #000;
+ border-radius: 10px;
}
#treeContainer div.boxbg a.noThumb,
-#treeContainer div.AncCol3 a,
-#treeContainer div.AncCol4 a,
-#treeContainer div.AncCol3 span.unlinked,
+#treeContainer div.AncCol4 a,
#treeContainer div.AncCol4 span.unlinked {
margin-top:10px;
+ float: right;
}
#treeContainer div.boxbg a:hover {
position:relative;
z-index:999;
- font-size:1em;
+ font-size:1.3em;
+ word-break:break-word;
+ word-wrap:break-word;
text-decoration:none;
color: #00029D;
- width:190px;
+ width:400px;
margin-left:-20px;
- padding:10px 25px 12px 25px;
- border: solid 2px #000;
+ padding: 0px 0px 0px 40px;
}
-#treeContainer div.boxbg a:hover,
-#treeContainer div.AncCol3 a:hover,
+#treeContainer div.boxbg a:hover,
#treeContainer div.AncCol4 a:hover {
margin-top:-44px;
}
#treeContainer div.boxbg a.noThumb:hover {
margin-top:0;
+ padding-left: 10px;
}
#treeContainer div.AncCol0 a:hover {
margin-left:12px;
@@ -105,48 +105,73 @@ Females Web_Gender_Female.png
}
#treeContainer div.boxbg span.thumbnail {
display:block;
- max-width:80px;
- max-height:65px;
- margin:0 auto;
- padding:4px 0;
+ position: absolute;
+ max-width:85px;
+ max-height:75px;
+ left: 3px;
+ top: 3px;
}
-#treeContainer div.boxbg span.thumbnail img {
- max-width:80px;
- max-height:65px;
- margin:0 auto;
+#treeContainer div.boxbg a.thumbnail table td.img {
+ padding-right: 5px;
}
-#treeContainer div.boxbg a:hover span.thumbnail, #treeContainer div.boxbg a:hover span.thumbnail img {
- height:80px;
+#treeContainer div.boxbg a.thumbnail:hover table td.img {
+ padding-right: 9px;
}
-#treeContainer div.AncCol3 span.thumbnail, #treeContainer div.AncCol4 span.thumbnail {
+#treeContainer div.boxbg a.thumbnail table td.name {
+ padding-top:3px;
+ padding-left: 2px;
+ padding-right: 23px;
+ width: 90%;
+}
+#treeContainer div.boxbg a.thumbnail img {
+ margin-left:0px;
+ padding-left: 0px;
+ border-radius: 5px;
+}
+#treeContainer div.boxbg a.thumbnail:hover img {
+ max-height:90%;
+ margin-left:5px;
+ position: absolute;
+ left: 0px;
+ top: 4px;
+ border-radius: 5px;
+}
+#treeContainer div.boxbg table td:first-child, table th:first-child {
+ padding-left: 5px;
+ padding-top: 5px;
+}
+#IndividualDetail div.subsection table tr td:first-child {
+ padding-left: 5px;
+ padding-top: 5px;
+}
+#treeContainer #treeContainer div.AncCol4 span.thumbnail {
display:none;
}
#treeContainer div.boxbg a:hover span.thumbnail {
display:block;
}
-
#treeContainer div.boxbg span.fullname {
display: none;
}
-
#treeContainer div.boxbg span.shortname {
display: inline;
}
-
#treeContainer div.boxbg a:hover span.fullname {
display: inline;
}
-
#treeContainer div.boxbg a:hover span.shortname {
display: none;
}
-
-
+#treeContainer div.boxbg a:hover {
+ float: right;
+ margin-top: 10px;
+ border: solid 4px #000;
+}
#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 a,
#treeContainer div.female span.unlinked {
background:url(../images/Web_Gender_Female.png) #FFC0CB no-repeat top right;
}
diff --git a/gramps/plugins/webreport/buchheim.py b/gramps/plugins/webreport/buchheim.py
index b9d61d16a..43d704bbe 100644
--- a/gramps/plugins/webreport/buchheim.py
+++ b/gramps/plugins/webreport/buchheim.py
@@ -132,7 +132,6 @@ class DrawTree(object):
"""
return self.tree.handle
-
def buchheim(tree, node_width, h_separation, node_height, v_separation):
"""
Calculate the position of elements of the graph given a minimum
@@ -142,9 +141,30 @@ def buchheim(tree, node_width, h_separation, node_height, v_separation):
min_x = second_walk(draw_tree, 0, node_width+h_separation, 0)
if min_x < 0:
third_walk(draw_tree, 0 - min_x)
+ top = get_min_coord_y(draw_tree)
+ height = get_max_coord_y(draw_tree)
- return draw_tree
+ return (draw_tree, top, height)
+def get_min_coord_y(tree, min_value=100.0):
+ """ Get the minimum coord_y """
+ if tree.coord_y < min_value:
+ min_value = tree.coord_y
+ for child in tree.children:
+ min_v = get_min_coord_y(child, min_value)
+ if min_value > min_v:
+ min_value = min_v
+ return min_value
+
+def get_max_coord_y(tree, max_value=0.0):
+ """ Get the maximum coord_y """
+ if tree.coord_y > max_value:
+ max_value = tree.coord_y
+ for child in tree.children:
+ max_v = get_max_coord_y(child, max_value)
+ if max_value < max_v:
+ max_value = max_v
+ return max_value
def third_walk(tree, adjust):
"""
@@ -156,7 +176,6 @@ def third_walk(tree, adjust):
for child in tree.children:
third_walk(child, adjust)
-
def firstwalk(tree, node_height, v_separation):
"""
Determine horizontal positions.
@@ -189,7 +208,6 @@ def firstwalk(tree, node_height, v_separation):
tree.height = max(tree.height, tree.coord_y)
return tree
-
def apportion(tree, default_ancestor, v_separation):
"""
Figure out relative positions of node in a tree.
@@ -263,7 +281,6 @@ def execute_shifts(tree):
child.height = max(child.height, child.coord_y)
tree.height = max(tree.height, child.height)
-
def ancestor(vil, tree, default_ancestor):
"""
The relevant text is at the bottom of page 7 of
diff --git a/gramps/plugins/webreport/person.py b/gramps/plugins/webreport/person.py
index 4d8ad2746..eb63b74fa 100644
--- a/gramps/plugins/webreport/person.py
+++ b/gramps/plugins/webreport/person.py
@@ -84,8 +84,8 @@ _ = glocale.translation.sgettext
LOG = logging.getLogger(".NarrativeWeb")
getcontext().prec = 8
-_WIDTH = 160
-_HEIGHT = 120
+_WIDTH = 280
+_HEIGHT = 140
_VGAP = 10
_HGAP = 30
_SHADOW = 5
@@ -1020,15 +1020,20 @@ class PersonPages(BasePage):
death = self.rlocale.get_date(dd_event.get_date_object())
if death == "":
death = "..."
- value = person_name + "
*", birth, "
+", death
+ value = person_name + "
*"+ birth+ "
+"+ death
+ tdval = Html("td", value, class_="name")
+ table = Html("table", class_="table")
if thumbnail_url is None:
boxbg += Html("a", href=url, class_="noThumb") + value
else:
- thumb = Html("span", class_="thumbnail") + (
- Html("img", src=thumbnail_url, alt="Image: " + person_name))
- boxbg += Html("a", href=url) + thumb + value
+ trow = Html("tr")
+ img = Html("img", src=thumbnail_url, alt="Img: " + person_name)
+ trow += Html("td", img, class_="img")
+ trow += tdval
+ table += trow
+ boxbg += Html("a", table, href=url, class_="thumbnail")
shadow = Html(
- "div", class_="shadow", inline=True,
+ "div", "", class_="shadow", inline=True,
style="top: %dpx; left: %dpx;" % (top + _SHADOW, xoff + _SHADOW))
return [boxbg, shadow]
@@ -1175,16 +1180,18 @@ class PersonPages(BasePage):
# We now apply the Buchheim algorith to this tree, and it assigns X
# and Y positions to all elements in the tree.
- l_tree = buchheim(layout_tree, _WIDTH, _HGAP, _HEIGHT, _VGAP)
+ l_tree, top, height = buchheim(layout_tree, _WIDTH, _HGAP,
+ _HEIGHT, _VGAP)
+ top = abs(top)
# We know the height in 'pixels' where every Ancestor will sit
# precisely on an integer unit boundary.
with Html("div", id="tree", class_="subsection") as tree:
tree += Html("h4", _('Ancestors'), inline=True)
with Html("div", id="treeContainer",
- style="width:%dpx; height:%dpx;" % (
- l_tree.width + _XOFFSET + _WIDTH,
- l_tree.height + _HEIGHT + _VGAP)
+ style="width:%dpx; height:%dpx; top: %dpx" % (
+ l_tree.width + _XOFFSET* (generations + 1) + _WIDTH,
+ height + top + _HEIGHT + _VGAP, top)
) as container:
tree += container
container += self.draw_tree(l_tree, 1, None)