+ return is_numeric($width) ? (int) $width : FALSE;
+ }
+
+ /**
+ * Overrides variables for responsive-image.html.twig templates.
+ */
+ public static function preprocessResponsiveImage(&$variables) {
+ $config = self::getConfig();
+
+ // Prepare all <picture> [data-srcset] attributes on <source> elements.
+ if (!$variables['output_image_tag']) {
+ /** @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');
+ }
+
+ // Fetches the picture element fallback URI, and empty it later.
+ // These address both 8.x-2 and 8.x-3 compatibility.
+ if (isset($variables['img_element']['#srcset'])) {
+ $fallback_uri = $variables['img_element']['#srcset'][0]['uri'];
+ }
+ else {
+ $fallback_uri = $variables['img_element']['#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'] = static::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 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 prevents double-downloading the fallback image.
+ if ($config['one_pixel']) {
+ $variables['img_element']['#uri'] = static::PLACEHOLDER;
+ }
+
+ $variables['img_element']['#attached']['drupalSettings']['blazy'] = $config['blazy'];