- // Is picture element.
- if (!$variables['output_image_tag']) {
- // Prepare all <picture> [data-srcset] attributes on <source> elements.
- _blazy_preprocess_responsive_image_picture_sources($variables);
-
- // Fetches the picture element fallback URI, and empty it later.
- $fallback_uri = $variables['img_element']['#srcset'][0]['uri'];
-
- // Cleans up the no-longer relevant attributes for controlling element.
- unset($variables['attributes']['data-srcset'], $variables['img_element']['#attributes']['data-srcset']);
- $variables['img_element']['#srcset'] = '';
- // Prevents invalid IMG tag when one pixel placeholder is disabled.
- $variables['img_element']['#uri'] = Blazy::PLACEHOLDER;
- }
- else {
- $srcset = $variables['attributes']['srcset'];
- $srcset_values = $srcset->value();
- $fallback_uri = $variables['img_element']['#uri'];
-
- $variables['attributes']['data-srcset'] = $srcset_values;
- $variables['img_element']['#attributes']['data-srcset'] = $srcset_values;
- $variables['img_element']['#attributes']['srcset'] = '';
- }
-
- // Blazy needs controlling element to have a fallback [data-src], else error.
- $variables['img_element']['#attributes']['data-src'] = $fallback_uri;
- $variables['img_element']['#attributes']['class'][] = 'b-lazy b-responsive';
-
- // Only replace fallback image URI with 1px placeholder, if so configured.
- // This will prevent downloading the fallback image.
- if ($config['one_pixel']) {
- $variables['img_element']['#uri'] = Blazy::PLACEHOLDER;
- }
-
- $variables['img_element']['#attached']['drupalSettings']['blazy'] = $config['blazy'];
-}
-
-/**
- * Adds [data-srcset] attribute to picture source element to support lazyload.
- */
-function _blazy_preprocess_responsive_image_picture_sources(&$variables) {
- /** @var \Drupal\Core\Template\Attribute $source */
- foreach ($variables['sources'] as &$source) {
- $srcset = $source['srcset'];
- $srcset_values = $srcset->value();
-
- $source->setAttribute('data-srcset', $srcset_values);
- $source->removeAttribute('srcset');
- }