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;
  }
}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc