From ee99549341e3213dc13ae6e784b7a66795abc13f Mon Sep 17 00:00:00 2001 From: Thomas Gelf Date: Mon, 28 Nov 2016 02:26:12 +0100 Subject: [PATCH] Breadcrumb: cleanup and externalize --- .../Businessprocess/Renderer/Breadcrumb.php | 57 +++++++++++++++++++ library/Businessprocess/Renderer/Renderer.php | 2 +- .../Businessprocess/Renderer/TileRenderer.php | 55 +----------------- 3 files changed, 61 insertions(+), 53 deletions(-) create mode 100644 library/Businessprocess/Renderer/Breadcrumb.php diff --git a/library/Businessprocess/Renderer/Breadcrumb.php b/library/Businessprocess/Renderer/Breadcrumb.php new file mode 100644 index 0000000..ab4d36d --- /dev/null +++ b/library/Businessprocess/Renderer/Breadcrumb.php @@ -0,0 +1,57 @@ + 'breadcrumb', + 'data-base-target' => '_main' + ); + + /** + * @param Renderer $renderer + * @return static + */ + public static function create(Renderer $renderer) + { + $bp = $renderer->getBusinessProcess(); + $breadcrumb = new static; + $breadcrumb->add(Element::create('li')->add( + Link::create($bp->getTitle(), $renderer->getBaseUrl()) + )); + $path = $renderer->getCurrentPath(); + + $parts = array(); + while ($node = array_pop($path)) { + array_unshift( + $parts, + static::renderNode($bp->getNode($node), $path, $renderer) + ); + } + $breadcrumb->addContent($parts); + + return $breadcrumb; + } + + /** + * @param BpNode $parent + * @return NodeTile + */ + protected static function renderNode(BpNode $node, $path, Renderer $renderer) + { + // TODO: something more generic than NodeTile? + $p = new NodeTile($renderer, (string) $node, $node, $path); + $p->attributes()->add('class', $renderer->getNodeClasses($node)); + $p->setTag('li'); + return $p; + } +} diff --git a/library/Businessprocess/Renderer/Renderer.php b/library/Businessprocess/Renderer/Renderer.php index d2f47ed..fd6fb21 100644 --- a/library/Businessprocess/Renderer/Renderer.php +++ b/library/Businessprocess/Renderer/Renderer.php @@ -157,7 +157,7 @@ abstract class Renderer extends Html return $this->path; } - public function getMyPath() + public function getCurrentPath() { $path = $this->getPath(); if ($this->rendersSubNode()) { diff --git a/library/Businessprocess/Renderer/TileRenderer.php b/library/Businessprocess/Renderer/TileRenderer.php index 1ae1b91..5e6123f 100644 --- a/library/Businessprocess/Renderer/TileRenderer.php +++ b/library/Businessprocess/Renderer/TileRenderer.php @@ -37,67 +37,18 @@ class TileRenderer extends Renderer $this->add(new AddNewTile($this)); } + $path = $this->getCurrentPath(); foreach ($nodes as $name => $node) { - $this->add(new NodeTile($this, $name, $node)); + $this->add(new NodeTile($this, $name, $node, $path)); } $nodesDiv->addContent($this->getContent()); - $this->setContent($this->renderBreadCrumb()) + $this->setContent(Breadcrumb::create($this)) ->addContent($nodesDiv); return parent::render(); } - public function renderBreadCrumb() - { - $breadcrumb = Element::create('ul', array( - 'class' => 'breadcrumb', - 'data-base-target' => '_main' - )); - - $breadcrumb->add(Element::create('li')->add( - Link::create($this->bp->getTitle(), $this->getBaseUrl()) - )); - $bp = $this->bp; - $path = $this->getMyPath(); - $max = 20; - $chosen = array(); - for ($i = 1; $i <= $max; $i++) { - if (! empty($path)) { - $chosen[] = array_pop($path); - } - } - $chosen = array_reverse($chosen); - $consumed = array(); - while ($parent = array_shift($chosen)) { - $breadcrumb->add($this->renderParent($bp->getNode($parent), $consumed)); - $consumed[] = $parent; - } - - return $breadcrumb; - } - - /** - * @param BpNode $parent - */ - public function renderParent(BpNode $parent, $path) - { - $p = new NodeTile($this, (string) $parent, $parent, $path); - $p->attributes()->add('class', $this->getNodeClasses($parent)); - $p->setTag('li'); - return $p; - } - - /** - * @return array - */ - public function getDefaultAttributes() - { - return array( - 'class' => 'tiles aaaa' . $this->howMany() - ); - } - /** * A CSS class giving a rough indication of how many nodes we have *