<?php
/**
* This example exports the directory structure of the installation folder of this package to HTML, with some interactive components.
*
* Just direct your browser to this file.
*/
use Utils\Autoload\Autoloader;
use ReingoldTilford\Algorithms\ReingoldTilfordAlgorithm;
use ReingoldTilford\Models\FSTreeModel;
use ReingoldTilford\Plotters\Plotter;
use ReingoldTilford\Styles\TreeStyle;
use Utils\Graphics2D\DrawingPanes\HtmlDrawingPane;
use Utils\Graphics2D\Shapes\Styles\TextStyle;
use Utils\Geom\Dimension;
use Utils\File\Directory;
use Utils\Font\FontManager;
use Utils\Font\FontMetricServices\FontMetricServiceFactory;
use Utils\URL\Url;
require_once __DIR__.'/../app/bootstrap.inc';
// get the directory information
$rootDirectory = new Directory(new SplFileInfo(INSTALLATION_FOLDER));
$rootDirectory->expand();
// get the default style for a tree
$style = new TreeStyle();
$style->shapeStyle->setWidth(8);
$style->shapeStyle->setHeight(5);
$style->shapeStyle->setColor(new \Utils\Color\RgbColor(251, 247, 180));
$style->shapeStyle->border->setColor(new \Utils\Color\RgbColor(228, 212, 128));
$style->edgeStyle->setColor(new \Utils\Color\RgbColor(200, 200, 200));
// get a new instance of the algorithm
$algorithm = new ReingoldTilfordAlgorithm();
// get the model for the root directory, so that the algorithm can traverse it
$model = new FSTreeModel($rootDirectory);
// get the layout of the tree
$layout = $algorithm->getLayout($model, $style->orientation)->normalize();
// pass it to the plotter
$plotter = new Plotter($model, $layout, null, null, null);
// create a new document
$document = new HtmlDrawingPane($layout->getDimension($style));
// plot it onto the document
$plotter->plot($style, $document);
// print the html head
printHtmlHead($style);
// print the document
echo $document->save();
/**
* This helper method prints the html head, e.g. the CSS styles in use.
*/
function printHtmlHead(TreeStyle $treeStyle)
{
echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"'.PHP_EOL.
'"http://www.w3.org/TR/html4/loose.dtd">'.PHP_EOL.
'<style>'.PHP_EOL.
'.rt_node'.PHP_EOL.
'{'.PHP_EOL.
'position: absolute;'.PHP_EOL.
'}'.PHP_EOL.
'.sty0:hover'.PHP_EOL.
'{'.PHP_EOL.
'width: 240px;'.PHP_EOL.
'height: 100px;'.PHP_EOL.
'opacity: 0.5;'.PHP_EOL.
'z-index: 10;'.PHP_EOL.
'border: solid 2px black;'.PHP_EOL.
'}'.PHP_EOL.
'.rt_edge'.PHP_EOL.
'{'.
'position: absolute;'.PHP_EOL.
'}'.PHP_EOL.
'.text'.PHP_EOL.
'{'.
'width: 0px;'.PHP_EOL.
'overflow: hidden;'.PHP_EOL.
'}'.PHP_EOL.
'.sty0:hover + .text'.PHP_EOL.
'{'.
'width: 240px;'.PHP_EOL.
'overflow: visible;'.PHP_EOL.
'z-index: 1;'.PHP_EOL.
'text-align: center;'.PHP_EOL.
'}'.PHP_EOL.
'</style>';
}
|