pageHeader() ->addInlineJavascript('var pastefield; function paste_id(value) { pastefield.value=value; }') // For the 'find indi' link ->addExternalJavascript(WT_STATIC_URL.'js/autocomplete.js'); if (WT_USE_LIGHTBOX) { $album = new lightbox_WT_Module(); $album->getPreLoadContent(); } echo '

'. $controller->getPageTitle(). '

'. WT_I18N::translate('Individual'). ' '. WT_I18N::translate('Generations'). ' '. WT_I18N::translate('Layout'). ' '. WT_I18N::translate('Show Details'). '
'. print_findindi_link('rootid'). ' '. select_edit_control('talloffset', array(0=>WT_I18N::translate('Portrait'), 1=>WT_I18N::translate('Landscape'), 2=>WT_I18N::translate('Oldest at top'), 3=>WT_I18N::translate('Oldest at bottom')), null, $talloffset). '
'; if ($controller->error_message) { echo '

', $controller->error_message, '

'; exit; } echo '
'; //-- echo the boxes $curgen = 1; $xoffset = 0; $yoffset = 0; // -- used to offset the position of each box as it is generated $prevxoffset = 0; // -- used to track the horizontal x position of the previous box $prevyoffset = 0; // -- used to track the vertical y position of the previous box $maxyoffset = 0; $lineDrawx = array(); // -- used to position joining lines on $lineDrawy = array(); // -- used to position joining lines on for ($i=($controller->treesize-1); $i>=0; $i--) { // set positions for joining lines $lineDrawx[$i] = $xoffset; $lineDrawy[$i] = $yoffset-200; //200 adjustment necessary to move canvas below menus and options. Matched to similar amount on canvas style. // -- check to see if we have moved to the next generation if ($i < (int)($controller->treesize / (pow(2, $curgen)))) { $curgen++; } $prevxoffset = $xoffset; $prevyoffset = $yoffset; if ($talloffset < 2) { // Portrate 0 Landscape 1 top 2 bottom 3 $xoffset = $controller->offsetarray[$i]["x"]; $yoffset = $controller->offsetarray[$i]["y"]; } else { $xoffset = $controller->offsetarray[$i]["y"]; $yoffset = $controller->offsetarray[$i]["x"]; } // -- draw the box if ($yoffset>$maxyoffset) { $maxyoffset=$yoffset; } if ($i==0) { $iref = rand(); } else { $iref = $i; } // Can we go back to an earlier generation? $can_go_back=$curgen==1 && WT_Person::getInstance($controller->treeid[$i]) && WT_Person::getInstance($controller->treeid[$i])->getChildFamilies(); if ($talloffset == 2) { // oldest at top echo '
'; if ($can_go_back) { $did = 1; if ($i > (int)($controller->treesize/2) + (int)($controller->treesize/4)) { $did++; } echo 'PEDIGREE_GENERATIONS, '&rootid=', $controller->treeid[$did], '&show_full=', $controller->show_full, '&talloffset=', $controller->talloffset, ' class="icon-uarrow noprint">'; } echo '
'; } // beginning of box setup and display echo '
treeid[$i]; } echo '.1'.$iref; if ($TEXT_DIRECTION=="rtl") {echo '" style="right:';} else {echo '" style="left:';} //Correct box spacing for different layouts if ($talloffset == 2) {$zindex = $PEDIGREE_GENERATIONS-$curgen;} else {$zindex = 0;} if (($talloffset == 3) && ($curgen ==1)) {$yoffset +=25;} if (($talloffset == 3) && ($curgen ==2)) {$yoffset +=10;} echo $xoffset, "px; top:", $yoffset, "px; width:", ($controller->pbwidth), "px; height:", $controller->pbheight, "px; z-index:", $zindex, ";\">"; if (!isset($controller->treeid[$i])) {$controller->treeid[$i] = false;} print_pedigree_person(WT_Person::getInstance($controller->treeid[$i]), 1, $iref, 1); if ($can_go_back) { $did = 1; if ($i > (int)($controller->treesize/2) + (int)($controller->treesize/4)) { $did++; } if ($TEXT_DIRECTION=="rtl") {$posn = 'right'; $arrow = 'icon-larrow';} else {$posn = 'left'; $arrow = 'icon-rarrow'; } if ($talloffset==3) { echo '
'; echo ''; echo '
'; } elseif ($talloffset < 2) { echo '
'; echo ''; echo '
'; } } echo '
'; } // -- echo left arrow for decendants so that we can move down the tree $yoffset += ($controller->pbheight / 2)-10; $famids = $controller->root->getSpouseFamilies(); //-- make sure there is more than 1 child in the family with parents $cfamids = $controller->root->getChildFamilies(); if (count($famids)>0) { echo '
'; echo ''; break; case 1: if ($PEDIGREE_GENERATIONS<4) $basexoffset += 60; echo $basexoffset, 'px; top:', $yoffset, 'px;">'; echo ''; break; case 2: echo ($xoffset-10+$controller->pbwidth/2), 'px; top:', ($yoffset+$controller->pbheight/2+10), 'px;">'; echo ''; break; case 3: echo ($xoffset-10+$controller->pbwidth/2), 'px; top:', ($yoffset-$controller->pbheight/2-10), 'px;">'; echo ''; break; } echo '
'; $yoffset += ($controller->pbheight / 2)+10; echo '
'; foreach ($famids as $family) { $spouse=$family->getSpouse($controller->root); if ($spouse) { echo "PEDIGREE_GENERATIONS}&rootid=".$spouse->getXref()."&show_full={$controller->show_full}&talloffset={$talloffset}\">getFullName(); echo 'class="name1">'; echo $name; echo '
'; } $children = $family->getChildren(); foreach ($children as $child) { echo "  PEDIGREE_GENERATIONS}&rootid=".$child->getXref()."&show_full={$controller->show_full}&talloffset={$talloffset}\">getFullName(); echo "class=\"name1\">< "; echo $name; echo '
'; } } //-- echo the siblings foreach ($cfamids as $family) { if ($family!=null) { $children = $family->getChildren(); if (count($children)>2) { echo '
', WT_I18N::translate('Siblings'), '
'; } if (count($children)==2) { echo '
', WT_I18N::translate('Sibling'), '
'; } foreach ($children as $child) { if (!$controller->root->equals($child) && !is_null($child)) { echo "  PEDIGREE_GENERATIONS}&rootid=".$child->getXref()."&show_full={$controller->show_full}&talloffset={$talloffset}\">getFullName(); echo 'class="name1"> '; echo $name; echo '
'; } } } } echo '
'; } // calculate canvas width if ($talloffset < 2) { $canvaswidth = $PEDIGREE_GENERATIONS*($controller->pbwidth+20); } else { $canvaswidth = pow(2,$PEDIGREE_GENERATIONS-1)*($controller->pbwidth+20); } echo '

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

'; echo '
'; //close #pedigree_chart echo '
'; //close #pedigree-page // Expand
to include the absolutely-positioned elements. $controller->addInlineJavascript(' content_div = document.getElementById("content"); if (content_div) { content_div.style.height="'.($maxyoffset+30).'px"; } // Draw joining lines in // need to be able to read styles from style.css files function getStyle(oElm, strCssRule){ var strValue = ""; if(document.defaultView && document.defaultView.getComputedStyle){ strValue = document.defaultView.getComputedStyle(oElm, "").getPropertyValue(strCssRule); } else if(oElm.currentStyle){ strCssRule = strCssRule.replace(/\-(\w)/g, function (strMatch, p1){ return p1.toUpperCase(); }); strValue = oElm.currentStyle[strCssRule]; } return strValue; } // Set variables var c=document.getElementById("pedigree_canvas"); var ctx=c.getContext("2d"); var textdirection = "'.$TEXT_DIRECTION.'"; var talloffset = '.$talloffset.'; var canvaswidth = '.($canvaswidth).'; var offset_x = 20; var offset_y = '.$controller->pbheight.'/2+'.$controller->linewidth.'; var lineDrawx = new Array("'. join(array_reverse ($lineDrawx),'","'). '"); var lineDrawy = new Array("'. join(array_reverse ($lineDrawy),'","'). '"); var offset_x2 = '.$controller->pbwidth.'/2+'.$controller->linewidth.'; var offset_y2 = '.$controller->pbheight.'*2; var lineDrawx2 = new Array("'. join($lineDrawx,'","'). '"); var lineDrawy2 = new Array("'. join($lineDrawy,'","'). '"); var maxjoins = Math.pow(2,'.$PEDIGREE_GENERATIONS.'); //Draw the lines if (talloffset < 2) { // landscape and portrait styles for (var i = 0; i <= maxjoins-3; i++) { if(i%2==0){ if (textdirection == "rtl") { ctx.moveTo(canvaswidth-lineDrawx[i],lineDrawy[i]-0+offset_y+offset_x/2); ctx.lineTo(canvaswidth-lineDrawx[i]+offset_x,lineDrawy[i]-0+offset_y+offset_x/2); ctx.lineTo(canvaswidth-lineDrawx[i+1]+offset_x,lineDrawy[i+1]-0+offset_y-offset_x/2); ctx.lineTo(canvaswidth-lineDrawx[i+1],lineDrawy[i+1]-0+offset_y-offset_x/2); } else { ctx.moveTo(lineDrawx[i],lineDrawy[i]-0+offset_y+offset_x/2); ctx.lineTo(lineDrawx[i]-offset_x,lineDrawy[i]-0+offset_y+offset_x/2); ctx.lineTo(lineDrawx[i+1]-offset_x,lineDrawy[i+1]-0+offset_y-offset_x/2); ctx.lineTo(lineDrawx[i+1],lineDrawy[i+1]-0+offset_y-offset_x/2); } } } } if (talloffset == 2) { // oldest at top for (var i = 0; i <= maxjoins; i++) { if(i%2!=0){ if (textdirection == "rtl") { ctx.moveTo(lineDrawx2[i]-0+offset_x2-offset_x,lineDrawy2[i]); ctx.lineTo(lineDrawx2[i]-0+offset_x2-offset_x,lineDrawy2[i]-0+offset_y2); ctx.lineTo(lineDrawx2[i+1]-0+offset_x2+offset_x/2,lineDrawy2[i]-0+offset_y2); ctx.lineTo(lineDrawx2[i+1]-0+offset_x2+offset_x/2,lineDrawy2[i]); } else { ctx.moveTo(lineDrawx2[i]-0+offset_x2-offset_x/2,lineDrawy2[i]); ctx.lineTo(lineDrawx2[i]-0+offset_x2-offset_x/2,lineDrawy2[i]-0+offset_y2); ctx.lineTo(lineDrawx2[i+1]-0+offset_x2+offset_x/2,lineDrawy2[i]-0+offset_y2); ctx.lineTo(lineDrawx2[i+1]-0+offset_x2+offset_x/2,lineDrawy2[i]); } } } } if (talloffset == 3) { // oldest at bottom for (var i = 0; i <= maxjoins; i++) { if(i%2!=0){ ctx.moveTo(lineDrawx2[i]-0+offset_x2-offset_x,lineDrawy2[i]); ctx.lineTo(lineDrawx2[i]-0+offset_x2-offset_x,lineDrawy2[i]-offset_y2/2); ctx.lineTo(lineDrawx2[i+1]-0+offset_x2+offset_x/2,lineDrawy2[i]-offset_y2/2); ctx.lineTo(lineDrawx2[i+1]-0+offset_x2+offset_x/2,lineDrawy2[i]); } } } // Set line styles ctx.strokeStyle = getStyle(document.getElementById("pedigree_canvas"), "color"); ctx.lineWidth = '.$controller->linewidth.'; ctx.shadowColor = "'.$controller->shadowcolor.'"; ctx.shadowBlur = '.$controller->shadowblur.'; ctx.shadowOffsetX = '.$controller->shadowoffsetX.'; ctx.shadowOffsetY = '.$controller->shadowoffsetY.'; ctx.stroke(); ');