private function BlazyManager::buildMedia in Blazy 8.2
Same name and namespace in other branches
- 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\blazyCode
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';
}
}
}