You are here

public function EditorButtonLinkFilter::process in Editor Button Link 8

Performs the filter processing.

Parameters

string $text: The text string to be filtered.

string $langcode: The language code of the text to be filtered.

Return value

\Drupal\filter\FilterProcessResult The filtered text, wrapped in a FilterProcessResult object, and possibly with associated assets, cacheability metadata and placeholders.

Overrides FilterInterface::process

See also

\Drupal\filter\FilterProcessResult

File

src/Plugin/Filter/EditorButtonLinkFilter.php, line 57

Class

EditorButtonLinkFilter
Convert data-drupal-button-link to classes for each link.

Namespace

Drupal\editor_button_link\Plugin\Filter

Code

public function process($text, $langcode) {
  $result = new FilterProcessResult($text);
  if (stristr($text, 'data-drupal-button-link') !== FALSE) {
    $dom = Html::load($text);
    $xpath = new \DOMXPath($dom);
    $button_link_elements = $xpath
      ->query('//a[@data-drupal-button-link]');
    if (!is_null($button_link_elements)) {
      foreach ($button_link_elements as $element) {
        $setting_classes = [];
        if ($element
          ->getAttribute('data-drupal-button-link')) {
          $setting_classes = array_merge($setting_classes, explode(' ', $element
            ->getAttribute('data-drupal-button-link')));
        }
        if ($element
          ->getAttribute('data-drupal-button-link-size')) {
          $setting_classes = array_merge($setting_classes, explode(' ', $element
            ->getAttribute('data-drupal-button-link-size')));
        }
        if ($element
          ->getAttribute('data-drupal-button-link-style')) {
          $setting_classes = array_merge($setting_classes, explode(' ', $element
            ->getAttribute('data-drupal-button-link-style')));
        }
        if ($element
          ->getAttribute('class')) {
          $setting_classes = array_filter(array_merge($setting_classes, explode(' ', $element
            ->getAttribute('class'))));
        }

        // Sanitize all class names.
        $all_classes = array_map('Drupal\\Component\\Utility\\Html::getClass', $setting_classes);

        // Remove any duplicate classes.
        $all_classes = array_unique($all_classes);

        // Convert array of classes to a string.
        $all_classes = implode(' ', $all_classes);
        $element
          ->setAttribute('class', $all_classes);
      }
    }
    $result
      ->setProcessedText(Html::serialize($dom));
  }
  return $result;
}