InlineResponsiveImage.php in Inline responsive images 8
File
src/Plugin/Filter/InlineResponsiveImage.php
View source
<?php
namespace Drupal\inline_responsive_image\Plugin\Filter;
use Drupal\filter\FilterProcessResult;
use Drupal\filter\Plugin\FilterBase;
use Drupal\Component\Utility\Html;
class InlineResponsiveImage extends FilterBase {
public function process($text, $langcode) {
$result = new FilterProcessResult($text);
if (stristr($text, 'data-style') !== FALSE) {
$dom = Html::load($text);
$xpath = new \DOMXPath($dom);
foreach ($xpath
->query('//*[@data-style]') as $node) {
$style = $node
->getAttribute('data-style');
$caption = $node
->getAttribute('data-caption');
$align = $node
->getAttribute('data-align');
$entityUuid = $node
->getAttribute('data-entity-uuid');
list($type, $style_name) = explode(':', $style);
$file = \Drupal::entityManager()
->loadEntityByUuid('file', $entityUuid);
if ($file) {
$responsiveImage = [];
if ($type === 'responsive') {
$responsiveImage = [
'#theme' => 'inline_responsive_image',
'#image' => [
'#type' => 'responsive_image',
'#responsive_image_style_id' => $style_name,
'#uri' => $file
->getFileUri(),
],
'#attributes' => [
'class' => [],
],
'#caption' => !empty($caption) ? $caption : '',
];
}
elseif ($type === 'imagestyle') {
$responsiveImage = [
'#theme' => 'inline_responsive_image',
'#image' => [
'#theme' => 'image_style',
'#style_name' => $style_name,
'#uri' => $file
->getFileUri(),
],
'#attributes' => [
'class' => [],
],
'#caption' => !empty($caption) ? $caption : '',
];
}
if (count($responsiveImage) > 0) {
$responsiveImage['#attributes']['class'][] = $style;
if (!empty($align)) {
$responsiveImage['#attributes']['class'][] = $align;
}
$responsiveImageHtml = \Drupal::service('renderer')
->render($responsiveImage);
$fragment = $dom
->createDocumentFragment();
if ($fragment
->appendXML($responsiveImageHtml)) {
$node->parentNode
->replaceChild($fragment, $node);
}
}
}
}
$result
->setProcessedText(Html::serialize($dom));
}
return $result;
}
}
Classes
Name |
Description |
InlineResponsiveImage |
Plugin annotation
@Filter(
id = "inline_responsive_image",
title = @Translation("Inline responsive images"),
description = @Translation("Filter for inline responsive images"),
type =… |