Mercurial > hg > isophonics-drupal-site
diff vendor/consolidation/output-formatters/src/StructuredData/RenderCellCollectionTrait.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | 5fb285c0d0e3 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/consolidation/output-formatters/src/StructuredData/RenderCellCollectionTrait.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,59 @@ +<?php +namespace Consolidation\OutputFormatters\StructuredData; + +use Consolidation\OutputFormatters\Options\FormatterOptions; + +trait RenderCellCollectionTrait +{ + + /** @var RenderCellInterface[] */ + protected $rendererList = [ + RenderCellCollectionInterface::PRIORITY_FIRST => [], + RenderCellCollectionInterface::PRIORITY_NORMAL => [], + RenderCellCollectionInterface::PRIORITY_FALLBACK => [], + ]; + + /** + * Add a renderer + * + * @return $this + */ + public function addRenderer(RenderCellInterface $renderer, $priority = RenderCellCollectionInterface::PRIORITY_NORMAL) + { + $this->rendererList[$priority][] = $renderer; + return $this; + } + + /** + * Add a callable as a renderer + * + * @return $this + */ + public function addRendererFunction(callable $rendererFn, $priority = RenderCellCollectionInterface::PRIORITY_NORMAL) + { + $renderer = new CallableRenderer($rendererFn); + return $this->addRenderer($renderer, $priority); + } + + /** + * {@inheritdoc} + */ + public function renderCell($key, $cellData, FormatterOptions $options, $rowData) + { + $flattenedRendererList = array_reduce( + $this->rendererList, + function ($carry, $item) { + return array_merge($carry, $item); + }, + [] + ); + + foreach ($flattenedRendererList as $renderer) { + $cellData = $renderer->renderCell($key, $cellData, $options, $rowData); + if (is_string($cellData)) { + return $cellData; + } + } + return $cellData; + } +}