. */ namespace Fisharebest\Webtrees; /** * Defined in session.php * * @global Tree $WT_TREE */ global $WT_TREE; use Fisharebest\Webtrees\Controller\PedigreeController; use Fisharebest\Webtrees\Functions\FunctionsEdit; use Fisharebest\Webtrees\Functions\FunctionsPrint; define('WT_SCRIPT_NAME', 'pedigree.php'); require './includes/session.php'; $controller = new PedigreeController; $controller ->restrictAccess(Module::isActiveChart($WT_TREE, 'pedigree_chart')) ->pageHeader() ->addExternalJavascript(WT_AUTOCOMPLETE_JS_URL) ->addInlineJavascript(' (function() { autocomplete(); jQuery("#childarrow").on("click", ".menuselect", function(e) { e.preventDefault(); jQuery("#childbox").slideToggle("fast"); }); jQuery("#pedigree_chart") .width(' . $controller->chartsize['x'] . ') .height(' . $controller->chartsize['y'] . '); // Set variables var p0, p1, p2, // Holds the ids of the boxes used in the join calculations canvas = jQuery("#pedigree_canvas"), ctx = canvas[0].getContext("2d"), nodes = jQuery(".shadow").length, gen1Start = Math.ceil(nodes / 2), boxWidth = jQuery(".person_box_template").first().outerWidth(), boxHeight = jQuery(".person_box_template").first().outerHeight(), useOffset = true, extraOffsetX = Math.floor(boxWidth / 15), // set offsets to be sensible fractions of the box size extraOffsetY = Math.floor(boxHeight / 10), addOffset; // Draw joining lines on the function drawLines(context, x1, y1, x2, y2) { x1 = Math.floor(x1); y1 = Math.floor(y1); x2 = Math.floor(x2); y2 = Math.floor(y2); if (' . json_encode($controller->orientation < $controller::OLDEST_AT_TOP) . ') { context.moveTo(x1, y1); context.lineTo(x2, y1); context.lineTo(x2, y2); context.lineTo(x1, y2); } else { context.moveTo(x1, y1); context.lineTo(x1, y2); context.lineTo(x2, y2); context.lineTo(x2, y1); } } //Plot the lines switch (' . $controller->orientation . ') { case ' . $controller::PORTRAIT . ': useOffset = false; // Drop through case ' . $controller::LANDSCAPE . ': for (var i = 2; i < nodes; i+=2) { p0 = jQuery("#sosa_" + i); p1 = jQuery("#sosa_" + (i+1)); // change line y position if within 10% of box top/bottom addOffset = boxHeight / (p1.position().top - p0.position().top) > 0.9 ? extraOffsetY: 0; if (' . json_encode(I18N::direction() === "rtl") . ') { drawLines( ctx, p0.position().left + p0.width(), p0.position().top + (boxHeight / 2) + addOffset, p0.position().left + p0.width() + extraOffsetX, p1.position().top + (boxHeight / 2) - addOffset ); } else { drawLines( ctx, p0.position().left, p0.position().top + (boxHeight / 2) + addOffset, p0.position().left - extraOffsetX, p1.position().top + (boxHeight / 2) - addOffset ); } } break; case ' . $controller::OLDEST_AT_TOP . ': useOffset = false; // Drop through case ' . $controller::OLDEST_AT_BOTTOM . ': for (var i = 1; i < gen1Start; i++) { p0 = jQuery("#sosa_" + i); p1 = jQuery("#sosa_" + (i*2)); p2 = jQuery("#sosa_" + (i*2+1)); addOffset = i*2 >= gen1Start ? extraOffsetX : 0; var templateHeight = p0.children(".person_box_template").outerHeight(), // bHeight taks account of offset when root person has a menu icon bHeight = useOffset ? (p0.outerHeight() - templateHeight) + (templateHeight / 2) : templateHeight / 2; drawLines( ctx, p1.position().left + (boxWidth / 2) + addOffset, p1.position().top + boxHeight, p2.position().left + (boxWidth / 2) - addOffset, p0.position().top + bHeight ); } break; } // Set line styles & draw them ctx.strokeStyle = canvas.css("color"); ctx.lineWidth = ' . Theme::theme()->parameter('line-width') . '; ctx.shadowColor = ' . json_encode(Theme::theme()->parameter('shadow-color')) . '; ctx.shadowBlur = ' . Theme::theme()->parameter('shadow-blur') . '; ctx.shadowOffsetX = ' . Theme::theme()->parameter('shadow-offset-x') . '; ctx.shadowOffsetY = ' . Theme::theme()->parameter('shadow-offset-y') . '; ctx.stroke(); })(); '); ?>

getPageTitle(); ?>

generations, 3, $WT_TREE->getPreference('MAX_PEDIGREE_GENERATIONS')); ?> I18N::translate('Portrait'), 1 => I18N::translate('Landscape'), 2 => I18N::translate('Oldest at top'), 3 => I18N::translate('Oldest at bottom')), null, $controller->orientation); ?> showFull()); ?>
error_message) { echo '

', $controller->error_message, '

'; return; } $posn = I18N::direction() === 'rtl' ? 'right' : 'left'; $lastgenStart = (int) floor($controller->treesize / 2); echo '
'; //Output the chart foreach ($controller->nodes as $i => $node) { // -- draw the box printf('
', $i + 1, $posn, $node["x"], $node["y"]); if ($controller->orientation === $controller::OLDEST_AT_TOP) { if ($i >= $lastgenStart) { echo $controller->gotoPreviousGen($i); } } else { if (!$i) { echo $controller->getMenu(); } } FunctionsPrint::printPedigreePerson($controller->nodes[$i]['indi'], $controller->showFull()); if ($controller->orientation === $controller::OLDEST_AT_TOP) { if (!$i) { echo $controller->getMenu(); } } else { if ($i >= $lastgenStart) { echo $controller->gotoPreviousGen($i); } } echo '
'; } echo '

No lines between boxes? Unfortunately your browser does not support the HTML5 canvas feature.

'; echo '
'; //close #pedigree_chart echo '
'; //close #pedigree-page