insert-8.x-2.x-dev/modules/insert_responsive_image/insert_responsive_image.module
modules/insert_responsive_image/insert_responsive_image.module
<?php
/**
* @file
*/
use Drupal\image\Entity\ImageStyle;
use Drupal\insert\Utility\InsertUtility;
use Drupal\responsive_image\Entity\ResponsiveImageStyle;
/**
* Implements hook_insert_styles().
*/
function insert_responsive_image_insert_styles($insertType) {
if ($insertType !== INSERT_TYPE_IMAGE) {
return [];
}
$insertStyles = [];
/* @var ResponsiveImageStyle $style */
foreach (ResponsiveImageStyle::loadMultiple() as $i => $style) {
$insertStyles['responsive_image__' . $style->id()] = [
'label' => t('Responsive') . ': ' . $style->id(),
];
}
return $insertStyles;
}
/**
* Implements hook_insert_variables().
*/
function insert_responsive_image_insert_variables($insertType, array &$element, $styleName, array &$vars) {
$insertStyleNameSegments = explode('__', $styleName, 2);
$moduleName = $insertStyleNameSegments[0];
if ($moduleName !== 'responsive_image' || count($insertStyleNameSegments) === 1) {
return;
}
/** @var \Drupal\file\Entity\File $file */
$file = $element['#insert'][$insertType]['file'];
$styleName = $insertStyleNameSegments[1];
$responsiveStyle = ResponsiveImageStyle::load($styleName);
if ($responsiveStyle === NULL) {
return;
}
$image = \Drupal::service('image.factory')->get($file->getFileUri());
if (!$image->isValid()) {
return;
}
$responsiveImageVars = [
'height' => $image->getHeight(),
'item' => NULL,
'item_attributes' => NULL,
'responsive_image_style_id' => $styleName,
'uri' => $file->getFileUri(),
'width' => $image->getWidth(),
];
$style = ImageStyle::load($responsiveStyle->getFallbackImageStyle());
$vars['url'] = $style === NULL
? \Drupal::service('file_url_generator')->generateAbsoluteString($file->getFileUri())
: $style->buildUrl($file->getFileUri());
if (!\Drupal::config('insert.config')->get('absolute')) {
$vars['url'] = \Drupal::service('file_url_generator')->transformRelative($vars['url']);
}
// Have Responsive Image module generate the srcset and sizes attributes:
template_preprocess_responsive_image($responsiveImageVars);
$vars['attributes'] = array_merge(
isset($vars['attributes']) ? $vars['attributes'] : [],
isset($responsiveImageVars['attributes']) ? $responsiveImageVars['attributes'] : []
);
}
/**
* Implements hook_module_implements_alter().
*/
function insert_responsive_image_module_implements_alter(array &$implementations, $hook) {
if ($hook === 'insert_variables') {
// Move hook_insert_variables() implementation to the end of the execution
// list to have it processed after insert_insert_variables().
$group = $implementations['insert_responsive_image'];
unset($implementations['insert_responsive_image']);
$implementations['insert_responsive_image'] = $group;
}
}