youtube_cookies-2.0.x-dev/src/Plugin/Filter/YoutubeCookiesWysiwygFilter.php

src/Plugin/Filter/YoutubeCookiesWysiwygFilter.php
<?php

namespace Drupal\youtube_cookies\Plugin\Filter;

use Drupal\Component\Utility\Html;
use Drupal\filter\FilterProcessResult;
use Drupal\filter\Plugin\FilterBase;

/**
 * Provides a 'youtube_cookies_filter' filter.
 *
 * @Filter(
 *   id = "youtube_cookies_wysiwyg_filter",
 *   title = @Translation("Youtube cookies filter"),
 *   type = Drupal\filter\Plugin\FilterInterface::TYPE_TRANSFORM_IRREVERSIBLE,
 *   settings = {},
 *    description = @Translation("Prevents youtube iframe from loading and adding cookies until consent is given."),
 *   weight = 100
 * )
 */
class YoutubeCookiesWysiwygFilter extends FilterBase {

  /**
   * {@inheritdoc}
   */
  public function process($text, $langcode) {
    $result = new FilterProcessResult($text);

    $config = \Drupal::config('youtube_cookies.settings');
    if (!$config->get('enabled')) {
      return $result;
    }

    if (stristr($text, '<iframe') === FALSE) {
      return $result;
    }

    $dom = Html::load($text);
    $xpath = new \DOMXPath($dom);

    foreach ($xpath->query('//iframe[contains(@src,"youtube.com") or contains(@src,"youtu.be")]') as $node) {
      /** @var \DOMElement $node */
      $src = $node->getAttribute('src');
      $node->setAttribute('data-src', $src);
      $node->setAttribute('src', '');

      $current_classes = $node->hasAttribute('class') ? $node->getAttribute('class') : '';

      $node->setAttribute('class', $current_classes . ' youtube-cookies__iframe youtube-cookies__iframe--wysiwyg');
    }

    $result->setProcessedText(Html::serialize($dom));

    return $result;
  }

}

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

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