You are here

private function BlazyManager::buildMedia in Blazy 8.2

Same name and namespace in other branches
  1. 7 src/BlazyManager.php \Drupal\blazy\BlazyManager::buildMedia()

Build out (Responsive) image.

1 call to BlazyManager::buildMedia()
BlazyManager::prepareBlazy in src/BlazyManager.php
Prepares the Blazy output as a structured array ready for ::renderer().

File

src/BlazyManager.php, line 208

Class

BlazyManager
Implements a public facing blazy manager.

Namespace

Drupal\blazy

Code

private function buildMedia(array &$element, array &$build) {
  $item = $build['item'];
  $settings =& $build['settings'];
  $attributes =& $build['attributes'];

  // (Responsive) image with item attributes, might be RDF.
  $item_attributes = empty($build['item_attributes']) ? [] : BlazyUtil::sanitize($build['item_attributes']);

  // Extract field item attributes for the theme function, and unset them
  // from the $item so that the field template does not re-render them.
  if ($item && isset($item->_attributes)) {
    $item_attributes += $item->_attributes;
    unset($item->_attributes);
  }

  // Responsive image integration, with/o CSS background so to work with.
  if (!empty($settings['resimage']) && empty($settings['unstyled'])) {
    $this
      ->buildResponsiveImage($element, $attributes, $settings);
  }

  // Regular image, with/o CSS background so to work with.
  if (empty($settings['responsive_image_style_id'])) {
    $this
      ->buildImage($element, $attributes, $item_attributes, $settings);
  }

  // Pass non-rich-media elements to theme_blazy().
  $element['#item_attributes'] = $item_attributes;

  // The settings.urls is output specific for CSS background purposes with BC.
  if (!empty($settings['urls'])) {

    // @todo remove .media--background for .b-bg as more relevant for BG.
    $attributes['class'][] = 'b-bg media--background';
    $attributes['data-backgrounds'] = Json::encode($settings['urls']);
    if (!empty($settings['is_preview'])) {
      Blazy::inlineStyle($attributes, 'background-image: url(' . $settings['image_url'] . ');');
    }
  }
  if (!empty($settings['fx']) && empty($settings['unstyled'])) {
    $blur = [
      '#theme' => 'image',
      '#uri' => $settings['placeholder_ui'] ?: $settings['placeholder'],
      '#attributes' => [
        'class' => [
          'b-lazy',
          'b-blur',
          'b-blur--tmp',
        ],
        'data-src' => $settings['placeholder_fx'],
        'loading' => 'lazy',
      ],
    ];
    if (!empty($settings['decode'])) {
      $blur['#attributes']['decoding'] = 'async';
    }

    // Reset as already stored.
    unset($settings['placeholder_fx']);
    $element['#preface']['blur'] = $blur;
    if (isset($settings['width']) && $settings['width'] > 980) {
      $attributes['class'][] = 'media--fx-lg';
    }
  }
}