You are here

public function LayoutStyleguide::items in Style Guide 2.x

Same name and namespace in other branches
  1. 8 src/Plugin/Styleguide/LayoutStyleguide.php \Drupal\styleguide\Plugin\Styleguide\LayoutStyleguide::items()

Styleguide elements implementation.

Return value

array An array of Styleguide elements.

Overrides StyleguideInterface::items

File

src/Plugin/Styleguide/LayoutStyleguide.php, line 83

Class

LayoutStyleguide
Renders all found layouts from core Layout Discovery module.

Namespace

Drupal\styleguide\Plugin\Styleguide

Code

public function items() {
  if (!$this->layoutPluginManager) {
    return [];
  }
  $items = [];
  foreach ($this->layoutPluginManager
    ->getGroupedDefinitions() as $group => $layouts) {
    $items[$group] = [
      'title' => $group,
      'content' => [],
      'group' => $this
        ->t('Layouts'),
    ];

    /** @var \Drupal\Core\Layout\LayoutDefinition $definition */
    foreach ($layouts as $layout => $definition) {
      $details = [];
      if ($property = $definition
        ->id()) {
        $details[] = $this
          ->t('ID: %property', [
          '%property' => $property,
        ]);
      }
      if ($property = $definition
        ->getDescription()) {
        $details[] = $this
          ->t('Description: %property', [
          '%property' => $property,
        ]);
      }
      if ($property = $definition
        ->getProvider()) {
        $details[] = $this
          ->t('Provider: %property', [
          '%property' => $property,
        ]);
      }
      if ($property = $definition
        ->getDefaultRegion()) {
        $details[] = $this
          ->t('Default region: %property', [
          '%property' => $property,
        ]);
      }
      if ($property = $definition
        ->getLibrary()) {
        $details[] = $this
          ->t('Library: %property', [
          '%property' => $property,
        ]);
      }
      $build = [];
      if ($region_labels = $definition
        ->getRegionLabels()) {
        $regions = [];
        foreach ($region_labels as $id => $label) {
          $regions[$id] = [
            '#type' => 'inline_template',
            '#template' => '<span class="block-region demo-block">{{ label }} ({{ id }})</span>',
            '#context' => [
              'id' => $id,
              'label' => $label,
            ],
          ];
        }
        $layoutInstance = $this->layoutPluginManager
          ->createInstance($definition
          ->id());
        $build = $layoutInstance
          ->build($regions);
      }
      $items[$group]['content'][$layout] = [
        '#type' => 'details',
        '#title' => $definition
          ->getLabel(),
        '#open' => FALSE,
        '#description' => [
          'info' => [
            '#type' => 'container',
            '#attributes' => [
              'class' => 'styleguide__layout-info',
            ],
            'icon' => $definition
              ->getIcon(60, 80, 1, 3),
            'details' => [
              '#theme' => 'item_list',
              '#items' => $details,
            ],
          ],
          'body' => [
            'build' => $build,
          ],
        ],
      ];
    }
  }
  return $items;
}